From 3763d622fd4d517dc3a3034596ef3d532c84b322 Mon Sep 17 00:00:00 2001 From: beaness Date: Fri, 24 Jun 2022 22:53:07 +0200 Subject: [PATCH] Im done. --- .gitignore | 2 + .../dependencies-accessors.lock | Bin 0 -> 17 bytes .../7.1/dependencies-accessors/gc.properties | 0 .../7.1/executionHistory/executionHistory.bin | Bin 0 -> 5262936 bytes .../executionHistory/executionHistory.lock | Bin 0 -> 17 bytes .gradle/7.1/fileChanges/last-build.bin | Bin 0 -> 1 bytes .gradle/7.1/fileHashes/fileHashes.bin | Bin 0 -> 529141 bytes .gradle/7.1/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .../7.1/fileHashes/resourceHashesCache.bin | Bin 0 -> 72559 bytes .gradle/7.1/gc.properties | 0 .../buildOutputCleanup.lock | Bin 0 -> 17 bytes .gradle/buildOutputCleanup/cache.properties | 2 + .gradle/buildOutputCleanup/outputFiles.bin | Bin 0 -> 22457 bytes .gradle/checksums/checksums.lock | Bin 0 -> 17 bytes .gradle/checksums/md5-checksums.bin | Bin 0 -> 20147 bytes .gradle/checksums/sha1-checksums.bin | Bin 0 -> 27245 bytes .gradle/vcs-1/gc.properties | 0 TacoSpigot-API/pom.xml | 172 -- TacoSpigot-Server/deprecation-mappings.at | 62 - TacoSpigot-Server/deprecation-mappings.csrg | 27 - TacoSpigot-Server/pom.xml | 306 -- .../net/minecraft/server/PacketSplitter.java | 58 - {TacoSpigot-API => eSpigot-API}/.gitignore | 0 eSpigot-API/build.gradle.kts | 80 + .../aikar/timings/FullServerTickHandler.java | 0 .../co/aikar/timings/NullTimingHandler.java | 0 .../co/aikar/timings/TimedEventExecutor.java | 0 .../main/java/co/aikar/timings/Timing.java | 0 .../java/co/aikar/timings/TimingData.java | 0 .../java/co/aikar/timings/TimingHandler.java | 0 .../java/co/aikar/timings/TimingHistory.java | 0 .../co/aikar/timings/TimingHistoryEntry.java | 0 .../co/aikar/timings/TimingIdentifier.java | 0 .../main/java/co/aikar/timings/Timings.java | 0 .../java/co/aikar/timings/TimingsCommand.java | 0 .../java/co/aikar/timings/TimingsExport.java | 0 .../java/co/aikar/timings/TimingsManager.java | 0 .../co/aikar/timings/UnsafeTimingHandler.java | 0 .../src/main/java/co/aikar/util/JSONUtil.java | 0 .../java/co/aikar/util/LoadingIntMap.java | 0 .../main/java/co/aikar/util/LoadingMap.java | 0 .../main/java/co/aikar/util/MRUMapCache.java | 0 .../event/entity/ArrowCollideEvent.java | 0 .../event/entity/ChunkSnapshot.java | 0 .../event/entity/SpawnerPreSpawnEvent.java | 0 .../src/main/java/org/bukkit/Achievement.java | 0 .../src/main/java/org/bukkit/Art.java | 0 .../src/main/java/org/bukkit/BanEntry.java | 0 .../src/main/java/org/bukkit/BanList.java | 0 .../java/org/bukkit/BlockChangeDelegate.java | 0 .../src/main/java/org/bukkit/Bukkit.java | 0 .../src/main/java/org/bukkit/ChatColor.java | 0 .../src/main/java/org/bukkit/Chunk.java | 0 .../main/java/org/bukkit/ChunkSnapshot.java | 0 .../src/main/java/org/bukkit/CoalType.java | 0 .../src/main/java/org/bukkit/Color.java | 0 .../src/main/java/org/bukkit/CropState.java | 0 .../src/main/java/org/bukkit/Difficulty.java | 0 .../src/main/java/org/bukkit/DyeColor.java | 0 .../src/main/java/org/bukkit/Effect.java | 0 .../main/java/org/bukkit/EntityEffect.java | 0 .../main/java/org/bukkit/FireworkEffect.java | 0 .../src/main/java/org/bukkit/GameMode.java | 0 .../main/java/org/bukkit/GrassSpecies.java | 0 .../src/main/java/org/bukkit/Instrument.java | 0 .../src/main/java/org/bukkit/Location.java | 0 .../src/main/java/org/bukkit/Material.java | 17 +- .../java/org/bukkit/NetherWartsState.java | 0 .../src/main/java/org/bukkit/Note.java | 0 .../main/java/org/bukkit/OfflinePlayer.java | 0 .../src/main/java/org/bukkit/PortalType.java | 0 .../src/main/java/org/bukkit/Rotation.java | 0 .../main/java/org/bukkit/SandstoneType.java | 0 .../src/main/java/org/bukkit/Server.java | 0 .../src/main/java/org/bukkit/SkullType.java | 0 .../src/main/java/org/bukkit/Sound.java | 0 .../src/main/java/org/bukkit/Statistic.java | 0 .../src/main/java/org/bukkit/TravelAgent.java | 0 .../src/main/java/org/bukkit/TreeSpecies.java | 0 .../src/main/java/org/bukkit/TreeType.java | 0 .../main/java/org/bukkit/UnsafeValues.java | 0 .../src/main/java/org/bukkit/Utility.java | 0 .../src/main/java/org/bukkit/Warning.java | 0 .../src/main/java/org/bukkit/WeatherType.java | 0 .../src/main/java/org/bukkit/World.java | 0 .../src/main/java/org/bukkit/WorldBorder.java | 0 .../main/java/org/bukkit/WorldCreator.java | 0 .../src/main/java/org/bukkit/WorldType.java | 0 .../main/java/org/bukkit/block/Banner.java | 0 .../main/java/org/bukkit/block/Beacon.java | 0 .../src/main/java/org/bukkit/block/Biome.java | 0 .../src/main/java/org/bukkit/block/Block.java | 0 .../main/java/org/bukkit/block/BlockFace.java | 0 .../java/org/bukkit/block/BlockState.java | 0 .../java/org/bukkit/block/BrewingStand.java | 0 .../src/main/java/org/bukkit/block/Chest.java | 0 .../java/org/bukkit/block/CommandBlock.java | 0 .../java/org/bukkit/block/ContainerBlock.java | 0 .../org/bukkit/block/CreatureSpawner.java | 0 .../main/java/org/bukkit/block/Dispenser.java | 0 .../java/org/bukkit/block/DoubleChest.java | 0 .../main/java/org/bukkit/block/Dropper.java | 0 .../main/java/org/bukkit/block/Furnace.java | 0 .../main/java/org/bukkit/block/Hopper.java | 0 .../main/java/org/bukkit/block/Jukebox.java | 0 .../main/java/org/bukkit/block/NoteBlock.java | 0 .../org/bukkit/block/PistonMoveReaction.java | 0 .../src/main/java/org/bukkit/block/Sign.java | 0 .../src/main/java/org/bukkit/block/Skull.java | 0 .../java/org/bukkit/block/banner/Pattern.java | 0 .../org/bukkit/block/banner/PatternType.java | 0 .../bukkit/command/BlockCommandSender.java | 0 .../main/java/org/bukkit/command/Command.java | 0 .../org/bukkit/command/CommandException.java | 0 .../org/bukkit/command/CommandExecutor.java | 0 .../java/org/bukkit/command/CommandMap.java | 0 .../org/bukkit/command/CommandSender.java | 0 .../bukkit/command/ConsoleCommandSender.java | 0 .../bukkit/command/FormattedCommandAlias.java | 0 .../bukkit/command/MultipleCommandAlias.java | 0 .../org/bukkit/command/PluginCommand.java | 0 .../command/PluginCommandYamlParser.java | 0 .../command/PluginIdentifiableCommand.java | 0 .../bukkit/command/ProxiedCommandSender.java | 0 .../command/RemoteConsoleCommandSender.java | 0 .../org/bukkit/command/SimpleCommandMap.java | 0 .../bukkit/command/TabCommandExecutor.java | 0 .../java/org/bukkit/command/TabCompleter.java | 0 .../java/org/bukkit/command/TabExecutor.java | 0 .../command/defaults/AchievementCommand.java | 0 .../bukkit/command/defaults/BanCommand.java | 0 .../bukkit/command/defaults/BanIpCommand.java | 0 .../command/defaults/BanListCommand.java | 0 .../command/defaults/BukkitCommand.java | 0 .../bukkit/command/defaults/ClearCommand.java | 0 .../defaults/DefaultGameModeCommand.java | 0 .../bukkit/command/defaults/DeopCommand.java | 0 .../command/defaults/DifficultyCommand.java | 0 .../command/defaults/EffectCommand.java | 0 .../command/defaults/EnchantCommand.java | 0 .../bukkit/command/defaults/ExpCommand.java | 0 .../command/defaults/GameModeCommand.java | 0 .../command/defaults/GameRuleCommand.java | 0 .../bukkit/command/defaults/GiveCommand.java | 0 .../bukkit/command/defaults/HelpCommand.java | 0 .../bukkit/command/defaults/KickCommand.java | 0 .../bukkit/command/defaults/KillCommand.java | 0 .../bukkit/command/defaults/ListCommand.java | 0 .../bukkit/command/defaults/MeCommand.java | 0 .../bukkit/command/defaults/OpCommand.java | 0 .../command/defaults/PardonCommand.java | 0 .../command/defaults/PardonIpCommand.java | 0 .../command/defaults/PlaySoundCommand.java | 0 .../command/defaults/PluginsCommand.java | 0 .../command/defaults/ReloadCommand.java | 0 .../bukkit/command/defaults/SaveCommand.java | 0 .../command/defaults/SaveOffCommand.java | 0 .../command/defaults/SaveOnCommand.java | 0 .../bukkit/command/defaults/SayCommand.java | 0 .../command/defaults/ScoreboardCommand.java | 0 .../bukkit/command/defaults/SeedCommand.java | 0 .../defaults/SetIdleTimeoutCommand.java | 0 .../defaults/SetWorldSpawnCommand.java | 0 .../command/defaults/SpawnpointCommand.java | 0 .../defaults/SpreadPlayersCommand.java | 0 .../bukkit/command/defaults/StopCommand.java | 0 .../command/defaults/TeleportCommand.java | 0 .../bukkit/command/defaults/TellCommand.java | 0 .../command/defaults/TestForCommand.java | 0 .../bukkit/command/defaults/TimeCommand.java | 0 .../command/defaults/TimingsCommand.java | 0 .../defaults/ToggleDownfallCommand.java | 0 .../command/defaults/VanillaCommand.java | 0 .../command/defaults/VersionCommand.java | 8 +- .../command/defaults/WeatherCommand.java | 0 .../command/defaults/WhitelistCommand.java | 0 .../bukkit/configuration/Configuration.java | 0 .../configuration/ConfigurationOptions.java | 0 .../configuration/ConfigurationSection.java | 0 .../InvalidConfigurationException.java | 0 .../configuration/MemoryConfiguration.java | 0 .../MemoryConfigurationOptions.java | 0 .../bukkit/configuration/MemorySection.java | 0 .../configuration/file/FileConfiguration.java | 0 .../file/FileConfigurationOptions.java | 0 .../configuration/file/YamlConfiguration.java | 0 .../file/YamlConfigurationOptions.java | 0 .../configuration/file/YamlConstructor.java | 0 .../configuration/file/YamlRepresenter.java | 0 .../ConfigurationSerializable.java | 0 .../ConfigurationSerialization.java | 0 .../DelegateDeserialization.java | 0 .../serialization/SerializableAs.java | 0 .../bukkit/conversations/BooleanPrompt.java | 0 .../org/bukkit/conversations/Conversable.java | 0 .../bukkit/conversations/Conversation.java | 0 .../ConversationAbandonedEvent.java | 0 .../ConversationAbandonedListener.java | 0 .../conversations/ConversationCanceller.java | 0 .../conversations/ConversationContext.java | 0 .../conversations/ConversationFactory.java | 0 .../conversations/ConversationPrefix.java | 0 .../ExactMatchConversationCanceller.java | 0 .../bukkit/conversations/FixedSetPrompt.java | 0 .../InactivityConversationCanceller.java | 0 ...anuallyAbandonedConversationCanceller.java | 0 .../bukkit/conversations/MessagePrompt.java | 0 .../conversations/NullConversationPrefix.java | 0 .../bukkit/conversations/NumericPrompt.java | 0 .../conversations/PlayerNamePrompt.java | 0 .../PluginNameConversationPrefix.java | 0 .../java/org/bukkit/conversations/Prompt.java | 0 .../org/bukkit/conversations/RegexPrompt.java | 0 .../bukkit/conversations/StringPrompt.java | 0 .../conversations/ValidatingPrompt.java | 0 .../org/bukkit/enchantments/Enchantment.java | 0 .../enchantments/EnchantmentTarget.java | 0 .../enchantments/EnchantmentWrapper.java | 0 .../main/java/org/bukkit/entity/Ageable.java | 0 .../main/java/org/bukkit/entity/Ambient.java | 0 .../java/org/bukkit/entity/AnimalTamer.java | 0 .../main/java/org/bukkit/entity/Animals.java | 0 .../java/org/bukkit/entity/ArmorStand.java | 0 .../main/java/org/bukkit/entity/Arrow.java | 0 .../src/main/java/org/bukkit/entity/Bat.java | 0 .../main/java/org/bukkit/entity/Blaze.java | 0 .../src/main/java/org/bukkit/entity/Boat.java | 0 .../java/org/bukkit/entity/CaveSpider.java | 0 .../main/java/org/bukkit/entity/Chicken.java | 0 .../org/bukkit/entity/ComplexEntityPart.java | 0 .../bukkit/entity/ComplexLivingEntity.java | 0 .../src/main/java/org/bukkit/entity/Cow.java | 0 .../main/java/org/bukkit/entity/Creature.java | 0 .../java/org/bukkit/entity/CreatureType.java | 0 .../main/java/org/bukkit/entity/Creeper.java | 0 .../java/org/bukkit/entity/Damageable.java | 0 .../src/main/java/org/bukkit/entity/Egg.java | 0 .../java/org/bukkit/entity/EnderCrystal.java | 0 .../java/org/bukkit/entity/EnderDragon.java | 0 .../org/bukkit/entity/EnderDragonPart.java | 0 .../java/org/bukkit/entity/EnderPearl.java | 0 .../java/org/bukkit/entity/EnderSignal.java | 0 .../main/java/org/bukkit/entity/Enderman.java | 0 .../java/org/bukkit/entity/Endermite.java | 0 .../main/java/org/bukkit/entity/Entity.java | 0 .../java/org/bukkit/entity/EntityType.java | 0 .../java/org/bukkit/entity/ExperienceOrb.java | 0 .../java/org/bukkit/entity/Explosive.java | 0 .../java/org/bukkit/entity/FallingBlock.java | 0 .../java/org/bukkit/entity/FallingSand.java | 0 .../main/java/org/bukkit/entity/Fireball.java | 0 .../main/java/org/bukkit/entity/Firework.java | 0 .../src/main/java/org/bukkit/entity/Fish.java | 0 .../main/java/org/bukkit/entity/FishHook.java | 0 .../main/java/org/bukkit/entity/Flying.java | 0 .../main/java/org/bukkit/entity/Ghast.java | 0 .../main/java/org/bukkit/entity/Giant.java | 0 .../main/java/org/bukkit/entity/Golem.java | 0 .../main/java/org/bukkit/entity/Guardian.java | 0 .../main/java/org/bukkit/entity/Hanging.java | 0 .../main/java/org/bukkit/entity/Horse.java | 0 .../java/org/bukkit/entity/HumanEntity.java | 0 .../java/org/bukkit/entity/IronGolem.java | 0 .../src/main/java/org/bukkit/entity/Item.java | 0 .../java/org/bukkit/entity/ItemFrame.java | 0 .../java/org/bukkit/entity/LargeFireball.java | 0 .../java/org/bukkit/entity/LeashHitch.java | 0 .../org/bukkit/entity/LightningStrike.java | 0 .../java/org/bukkit/entity/LivingEntity.java | 0 .../java/org/bukkit/entity/MagmaCube.java | 0 .../main/java/org/bukkit/entity/Minecart.java | 0 .../main/java/org/bukkit/entity/Monster.java | 0 .../java/org/bukkit/entity/MushroomCow.java | 0 .../src/main/java/org/bukkit/entity/NPC.java | 0 .../main/java/org/bukkit/entity/Ocelot.java | 0 .../main/java/org/bukkit/entity/Painting.java | 0 .../src/main/java/org/bukkit/entity/Pig.java | 0 .../java/org/bukkit/entity/PigZombie.java | 0 .../main/java/org/bukkit/entity/Player.java | 0 .../org/bukkit/entity/PoweredMinecart.java | 0 .../java/org/bukkit/entity/Projectile.java | 0 .../main/java/org/bukkit/entity/Rabbit.java | 0 .../main/java/org/bukkit/entity/Sheep.java | 0 .../java/org/bukkit/entity/Silverfish.java | 0 .../main/java/org/bukkit/entity/Skeleton.java | 0 .../main/java/org/bukkit/entity/Slime.java | 0 .../java/org/bukkit/entity/SmallFireball.java | 0 .../main/java/org/bukkit/entity/Snowball.java | 0 .../main/java/org/bukkit/entity/Snowman.java | 0 .../main/java/org/bukkit/entity/Spider.java | 0 .../main/java/org/bukkit/entity/Squid.java | 0 .../org/bukkit/entity/StorageMinecart.java | 0 .../java/org/bukkit/entity/TNTPrimed.java | 0 .../main/java/org/bukkit/entity/Tameable.java | 0 .../org/bukkit/entity/ThrownExpBottle.java | 0 .../java/org/bukkit/entity/ThrownPotion.java | 0 .../main/java/org/bukkit/entity/Vehicle.java | 0 .../main/java/org/bukkit/entity/Villager.java | 0 .../main/java/org/bukkit/entity/WaterMob.java | 0 .../main/java/org/bukkit/entity/Weather.java | 0 .../main/java/org/bukkit/entity/Witch.java | 0 .../main/java/org/bukkit/entity/Wither.java | 0 .../java/org/bukkit/entity/WitherSkull.java | 0 .../src/main/java/org/bukkit/entity/Wolf.java | 0 .../main/java/org/bukkit/entity/Zombie.java | 0 .../entity/minecart/CommandMinecart.java | 0 .../entity/minecart/ExplosiveMinecart.java | 0 .../entity/minecart/HopperMinecart.java | 0 .../entity/minecart/PoweredMinecart.java | 0 .../entity/minecart/RideableMinecart.java | 0 .../entity/minecart/SpawnerMinecart.java | 0 .../entity/minecart/StorageMinecart.java | 0 .../java/org/bukkit/event/Cancellable.java | 0 .../src/main/java/org/bukkit/event/Event.java | 0 .../java/org/bukkit/event/EventException.java | 0 .../java/org/bukkit/event/EventHandler.java | 0 .../java/org/bukkit/event/EventPriority.java | 0 .../java/org/bukkit/event/HandlerList.java | 0 .../main/java/org/bukkit/event/Listener.java | 0 .../java/org/bukkit/event/block/Action.java | 0 .../bukkit/event/block/BlockBreakEvent.java | 0 .../bukkit/event/block/BlockBurnEvent.java | 0 .../event/block/BlockCanBuildEvent.java | 0 .../bukkit/event/block/BlockDamageEvent.java | 0 .../event/block/BlockDispenseEvent.java | 0 .../org/bukkit/event/block/BlockEvent.java | 0 .../org/bukkit/event/block/BlockExpEvent.java | 0 .../bukkit/event/block/BlockExplodeEvent.java | 0 .../bukkit/event/block/BlockFadeEvent.java | 0 .../bukkit/event/block/BlockFormEvent.java | 0 .../bukkit/event/block/BlockFromToEvent.java | 0 .../bukkit/event/block/BlockGrowEvent.java | 0 .../bukkit/event/block/BlockIgniteEvent.java | 0 .../event/block/BlockMultiPlaceEvent.java | 0 .../bukkit/event/block/BlockPhysicsEvent.java | 0 .../bukkit/event/block/BlockPistonEvent.java | 0 .../event/block/BlockPistonExtendEvent.java | 0 .../event/block/BlockPistonRetractEvent.java | 0 .../bukkit/event/block/BlockPlaceEvent.java | 0 .../event/block/BlockRedstoneEvent.java | 0 .../bukkit/event/block/BlockSpreadEvent.java | 0 .../event/block/EntityBlockFormEvent.java | 0 .../bukkit/event/block/LeavesDecayEvent.java | 0 .../org/bukkit/event/block/NotePlayEvent.java | 0 .../bukkit/event/block/SignChangeEvent.java | 0 .../event/enchantment/EnchantItemEvent.java | 0 .../enchantment/PrepareItemEnchantEvent.java | 0 .../event/entity/CreatureSpawnEvent.java | 0 .../event/entity/CreeperPowerEvent.java | 0 .../event/entity/EntityBreakDoorEvent.java | 0 .../event/entity/EntityChangeBlockEvent.java | 0 .../entity/EntityCombustByBlockEvent.java | 0 .../entity/EntityCombustByEntityEvent.java | 0 .../event/entity/EntityCombustEvent.java | 0 .../event/entity/EntityCreatePortalEvent.java | 0 .../entity/EntityDamageByBlockEvent.java | 0 .../entity/EntityDamageByEntityEvent.java | 0 .../event/entity/EntityDamageEvent.java | 0 .../bukkit/event/entity/EntityDeathEvent.java | 0 .../org/bukkit/event/entity/EntityEvent.java | 0 .../event/entity/EntityExplodeEvent.java | 0 .../event/entity/EntityInteractEvent.java | 0 .../event/entity/EntityPortalEnterEvent.java | 0 .../event/entity/EntityPortalEvent.java | 0 .../event/entity/EntityPortalExitEvent.java | 0 .../event/entity/EntityRegainHealthEvent.java | 0 .../event/entity/EntityShootBowEvent.java | 0 .../bukkit/event/entity/EntitySpawnEvent.java | 0 .../bukkit/event/entity/EntityTameEvent.java | 0 .../event/entity/EntityTargetEvent.java | 0 .../entity/EntityTargetLivingEntityEvent.java | 0 .../event/entity/EntityTeleportEvent.java | 0 .../event/entity/EntityUnleashEvent.java | 0 .../bukkit/event/entity/ExpBottleEvent.java | 0 .../event/entity/ExplosionPrimeEvent.java | 0 .../event/entity/FireworkExplodeEvent.java | 0 .../event/entity/FoodLevelChangeEvent.java | 0 .../bukkit/event/entity/HorseJumpEvent.java | 0 .../bukkit/event/entity/ItemDespawnEvent.java | 0 .../bukkit/event/entity/ItemMergeEvent.java | 0 .../bukkit/event/entity/ItemSpawnEvent.java | 0 .../org/bukkit/event/entity/PigZapEvent.java | 0 .../bukkit/event/entity/PlayerDeathEvent.java | 0 .../event/entity/PlayerLeashEntityEvent.java | 0 .../event/entity/PotionEffectAddEvent.java | 0 .../event/entity/PotionEffectEvent.java | 0 .../event/entity/PotionEffectExpireEvent.java | 0 .../event/entity/PotionEffectExtendEvent.java | 0 .../event/entity/PotionEffectRemoveEvent.java | 0 .../event/entity/PotionSplashEvent.java | 0 .../event/entity/ProjectileHitEvent.java | 0 .../event/entity/ProjectileLaunchEvent.java | 0 .../event/entity/SheepDyeWoolEvent.java | 0 .../event/entity/SheepRegrowWoolEvent.java | 0 .../bukkit/event/entity/SlimeSplitEvent.java | 0 .../event/entity/SpawnerSpawnEvent.java | 0 .../hanging/HangingBreakByEntityEvent.java | 0 .../event/hanging/HangingBreakEvent.java | 0 .../bukkit/event/hanging/HangingEvent.java | 0 .../event/hanging/HangingPlaceEvent.java | 0 .../org/bukkit/event/inventory/BrewEvent.java | 0 .../org/bukkit/event/inventory/ClickType.java | 0 .../event/inventory/CraftItemEvent.java | 0 .../org/bukkit/event/inventory/DragType.java | 0 .../event/inventory/FurnaceBurnEvent.java | 0 .../event/inventory/FurnaceExtractEvent.java | 0 .../event/inventory/FurnaceSmeltEvent.java | 0 .../event/inventory/InventoryAction.java | 0 .../event/inventory/InventoryClickEvent.java | 0 .../event/inventory/InventoryCloseEvent.java | 0 .../inventory/InventoryCreativeEvent.java | 0 .../event/inventory/InventoryDragEvent.java | 0 .../event/inventory/InventoryEvent.java | 0 .../inventory/InventoryInteractEvent.java | 0 .../inventory/InventoryMoveItemEvent.java | 0 .../event/inventory/InventoryOpenEvent.java | 0 .../inventory/InventoryPickupItemEvent.java | 0 .../bukkit/event/inventory/InventoryType.java | 0 .../inventory/PrepareItemCraftEvent.java | 0 .../painting/PaintingBreakByEntityEvent.java | 0 .../event/painting/PaintingBreakEvent.java | 0 .../bukkit/event/painting/PaintingEvent.java | 0 .../event/painting/PaintingPlaceEvent.java | 0 .../event/player/AsyncPlayerChatEvent.java | 0 .../player/AsyncPlayerPreLoginEvent.java | 0 .../player/PlayerAchievementAwardedEvent.java | 0 .../event/player/PlayerAnimationEvent.java | 0 .../event/player/PlayerAnimationType.java | 0 .../PlayerArmorStandManipulateEvent.java | 0 .../event/player/PlayerBedEnterEvent.java | 0 .../event/player/PlayerBedLeaveEvent.java | 0 .../event/player/PlayerBucketEmptyEvent.java | 0 .../event/player/PlayerBucketEvent.java | 0 .../event/player/PlayerBucketFillEvent.java | 0 .../event/player/PlayerChangedWorldEvent.java | 0 .../event/player/PlayerChannelEvent.java | 0 .../bukkit/event/player/PlayerChatEvent.java | 0 .../player/PlayerChatTabCompleteEvent.java | 0 .../player/PlayerCommandPreprocessEvent.java | 0 .../event/player/PlayerDropItemEvent.java | 0 .../event/player/PlayerEditBookEvent.java | 0 .../event/player/PlayerEggThrowEvent.java | 0 .../org/bukkit/event/player/PlayerEvent.java | 0 .../event/player/PlayerExpChangeEvent.java | 0 .../bukkit/event/player/PlayerFishEvent.java | 0 .../player/PlayerGameModeChangeEvent.java | 0 .../event/player/PlayerInitialSpawnEvent.java | 0 .../player/PlayerInteractAtEntityEvent.java | 0 .../player/PlayerInteractEntityEvent.java | 0 .../event/player/PlayerInteractEvent.java | 0 .../event/player/PlayerInventoryEvent.java | 0 .../event/player/PlayerItemBreakEvent.java | 0 .../event/player/PlayerItemConsumeEvent.java | 0 .../event/player/PlayerItemDamageEvent.java | 0 .../event/player/PlayerItemHeldEvent.java | 0 .../bukkit/event/player/PlayerJoinEvent.java | 0 .../bukkit/event/player/PlayerKickEvent.java | 0 .../event/player/PlayerLevelChangeEvent.java | 0 .../event/player/PlayerLocaleChangeEvent.java | 0 .../bukkit/event/player/PlayerLoginEvent.java | 0 .../bukkit/event/player/PlayerMoveEvent.java | 0 .../event/player/PlayerPickupItemEvent.java | 0 .../event/player/PlayerPortalEvent.java | 0 .../event/player/PlayerPreLoginEvent.java | 0 .../bukkit/event/player/PlayerQuitEvent.java | 0 .../player/PlayerRegisterChannelEvent.java | 0 .../player/PlayerResourcePackStatusEvent.java | 0 .../event/player/PlayerRespawnEvent.java | 0 .../event/player/PlayerShearEntityEvent.java | 0 .../player/PlayerStatisticIncrementEvent.java | 0 .../event/player/PlayerTeleportEvent.java | 0 .../event/player/PlayerToggleFlightEvent.java | 0 .../event/player/PlayerToggleSneakEvent.java | 0 .../event/player/PlayerToggleSprintEvent.java | 0 .../player/PlayerUnleashEntityEvent.java | 0 .../player/PlayerUnregisterChannelEvent.java | 0 .../event/player/PlayerVelocityEvent.java | 0 .../event/server/MapInitializeEvent.java | 0 .../event/server/PluginDisableEvent.java | 0 .../event/server/PluginEnableEvent.java | 0 .../org/bukkit/event/server/PluginEvent.java | 0 .../server/RemoteServerCommandEvent.java | 0 .../event/server/ServerCommandEvent.java | 0 .../org/bukkit/event/server/ServerEvent.java | 0 .../event/server/ServerListPingEvent.java | 0 .../org/bukkit/event/server/ServiceEvent.java | 0 .../event/server/ServiceRegisterEvent.java | 0 .../event/server/ServiceUnregisterEvent.java | 0 .../vehicle/VehicleBlockCollisionEvent.java | 0 .../event/vehicle/VehicleCollisionEvent.java | 0 .../event/vehicle/VehicleCreateEvent.java | 0 .../event/vehicle/VehicleDamageEvent.java | 0 .../event/vehicle/VehicleDestroyEvent.java | 0 .../event/vehicle/VehicleEnterEvent.java | 0 .../vehicle/VehicleEntityCollisionEvent.java | 0 .../bukkit/event/vehicle/VehicleEvent.java | 0 .../event/vehicle/VehicleExitEvent.java | 0 .../event/vehicle/VehicleMoveEvent.java | 0 .../event/vehicle/VehicleUpdateEvent.java | 0 .../event/weather/LightningStrikeEvent.java | 0 .../event/weather/ThunderChangeEvent.java | 0 .../event/weather/WeatherChangeEvent.java | 0 .../bukkit/event/weather/WeatherEvent.java | 0 .../org/bukkit/event/world/ChunkEvent.java | 0 .../bukkit/event/world/ChunkLoadEvent.java | 0 .../event/world/ChunkPopulateEvent.java | 0 .../bukkit/event/world/ChunkUnloadEvent.java | 0 .../bukkit/event/world/PortalCreateEvent.java | 0 .../bukkit/event/world/SpawnChangeEvent.java | 0 .../event/world/StructureGrowEvent.java | 0 .../org/bukkit/event/world/WorldEvent.java | 0 .../bukkit/event/world/WorldInitEvent.java | 0 .../bukkit/event/world/WorldLoadEvent.java | 0 .../bukkit/event/world/WorldSaveEvent.java | 0 .../bukkit/event/world/WorldUnloadEvent.java | 0 .../org/bukkit/generator/BlockPopulator.java | 0 .../org/bukkit/generator/ChunkGenerator.java | 0 .../bukkit/help/GenericCommandHelpTopic.java | 0 .../main/java/org/bukkit/help/HelpMap.java | 0 .../main/java/org/bukkit/help/HelpTopic.java | 0 .../org/bukkit/help/HelpTopicComparator.java | 0 .../org/bukkit/help/HelpTopicFactory.java | 0 .../java/org/bukkit/help/IndexHelpTopic.java | 0 .../org/bukkit/inventory/AnvilInventory.java | 0 .../org/bukkit/inventory/BeaconInventory.java | 0 .../org/bukkit/inventory/BrewerInventory.java | 0 .../bukkit/inventory/CraftingInventory.java | 0 .../inventory/DoubleChestInventory.java | 0 .../bukkit/inventory/EnchantingInventory.java | 0 .../org/bukkit/inventory/EntityEquipment.java | 0 .../org/bukkit/inventory/EquipmentSlot.java | 0 .../bukkit/inventory/FurnaceInventory.java | 0 .../org/bukkit/inventory/FurnaceRecipe.java | 0 .../org/bukkit/inventory/HorseInventory.java | 0 .../java/org/bukkit/inventory/Inventory.java | 0 .../org/bukkit/inventory/InventoryHolder.java | 0 .../org/bukkit/inventory/InventoryView.java | 0 .../org/bukkit/inventory/ItemFactory.java | 0 .../java/org/bukkit/inventory/ItemFlag.java | 0 .../java/org/bukkit/inventory/ItemStack.java | 0 .../bukkit/inventory/MerchantInventory.java | 0 .../org/bukkit/inventory/PlayerInventory.java | 0 .../java/org/bukkit/inventory/Recipe.java | 0 .../org/bukkit/inventory/ShapedRecipe.java | 0 .../org/bukkit/inventory/ShapelessRecipe.java | 0 .../org/bukkit/inventory/meta/BannerMeta.java | 0 .../bukkit/inventory/meta/BlockStateMeta.java | 0 .../org/bukkit/inventory/meta/BookMeta.java | 0 .../meta/EnchantmentStorageMeta.java | 0 .../inventory/meta/FireworkEffectMeta.java | 0 .../bukkit/inventory/meta/FireworkMeta.java | 0 .../org/bukkit/inventory/meta/ItemMeta.java | 0 .../inventory/meta/LeatherArmorMeta.java | 0 .../org/bukkit/inventory/meta/MapMeta.java | 0 .../org/bukkit/inventory/meta/PotionMeta.java | 0 .../org/bukkit/inventory/meta/Repairable.java | 0 .../org/bukkit/inventory/meta/SkullMeta.java | 0 .../main/java/org/bukkit/map/MapCanvas.java | 0 .../main/java/org/bukkit/map/MapCursor.java | 0 .../org/bukkit/map/MapCursorCollection.java | 0 .../src/main/java/org/bukkit/map/MapFont.java | 0 .../main/java/org/bukkit/map/MapPalette.java | 0 .../main/java/org/bukkit/map/MapRenderer.java | 0 .../src/main/java/org/bukkit/map/MapView.java | 0 .../java/org/bukkit/map/MinecraftFont.java | 0 .../java/org/bukkit/material/Attachable.java | 0 .../main/java/org/bukkit/material/Banner.java | 0 .../main/java/org/bukkit/material/Bed.java | 0 .../main/java/org/bukkit/material/Button.java | 0 .../main/java/org/bukkit/material/Cake.java | 0 .../java/org/bukkit/material/Cauldron.java | 0 .../main/java/org/bukkit/material/Chest.java | 0 .../main/java/org/bukkit/material/Coal.java | 0 .../java/org/bukkit/material/CocoaPlant.java | 0 .../java/org/bukkit/material/Colorable.java | 0 .../java/org/bukkit/material/Command.java | 0 .../main/java/org/bukkit/material/Crops.java | 0 .../org/bukkit/material/DetectorRail.java | 0 .../main/java/org/bukkit/material/Diode.java | 0 .../java/org/bukkit/material/Directional.java | 0 .../bukkit/material/DirectionalContainer.java | 0 .../java/org/bukkit/material/Dispenser.java | 0 .../main/java/org/bukkit/material/Door.java | 0 .../main/java/org/bukkit/material/Dye.java | 0 .../java/org/bukkit/material/EnderChest.java | 0 .../org/bukkit/material/ExtendedRails.java | 0 .../java/org/bukkit/material/FlowerPot.java | 0 .../java/org/bukkit/material/Furnace.java | 0 .../bukkit/material/FurnaceAndDispenser.java | 0 .../main/java/org/bukkit/material/Gate.java | 0 .../main/java/org/bukkit/material/Ladder.java | 0 .../main/java/org/bukkit/material/Leaves.java | 0 .../main/java/org/bukkit/material/Lever.java | 0 .../java/org/bukkit/material/LongGrass.java | 0 .../org/bukkit/material/MaterialData.java | 0 .../java/org/bukkit/material/MonsterEggs.java | 0 .../java/org/bukkit/material/Mushroom.java | 0 .../java/org/bukkit/material/NetherWarts.java | 0 .../java/org/bukkit/material/Openable.java | 0 .../bukkit/material/PistonBaseMaterial.java | 0 .../material/PistonExtensionMaterial.java | 0 .../java/org/bukkit/material/PoweredRail.java | 0 .../org/bukkit/material/PressurePlate.java | 0 .../org/bukkit/material/PressureSensor.java | 0 .../java/org/bukkit/material/Pumpkin.java | 0 .../main/java/org/bukkit/material/Rails.java | 0 .../java/org/bukkit/material/Redstone.java | 0 .../org/bukkit/material/RedstoneTorch.java | 0 .../org/bukkit/material/RedstoneWire.java | 0 .../java/org/bukkit/material/Sandstone.java | 0 .../main/java/org/bukkit/material/Sign.java | 0 .../SimpleAttachableMaterialData.java | 0 .../main/java/org/bukkit/material/Skull.java | 0 .../java/org/bukkit/material/SmoothBrick.java | 0 .../java/org/bukkit/material/SpawnEgg.java | 0 .../main/java/org/bukkit/material/Stairs.java | 0 .../main/java/org/bukkit/material/Step.java | 0 .../org/bukkit/material/TexturedMaterial.java | 0 .../main/java/org/bukkit/material/Torch.java | 0 .../java/org/bukkit/material/TrapDoor.java | 0 .../main/java/org/bukkit/material/Tree.java | 0 .../java/org/bukkit/material/Tripwire.java | 0 .../org/bukkit/material/TripwireHook.java | 0 .../main/java/org/bukkit/material/Vine.java | 0 .../java/org/bukkit/material/WoodenStep.java | 0 .../main/java/org/bukkit/material/Wool.java | 0 .../bukkit/metadata/FixedMetadataValue.java | 0 .../bukkit/metadata/LazyMetadataValue.java | 0 .../metadata/MetadataConversionException.java | 0 .../metadata/MetadataEvaluationException.java | 0 .../org/bukkit/metadata/MetadataStore.java | 0 .../bukkit/metadata/MetadataStoreBase.java | 0 .../org/bukkit/metadata/MetadataValue.java | 0 .../bukkit/metadata/MetadataValueAdapter.java | 0 .../java/org/bukkit/metadata/Metadatable.java | 0 .../org/bukkit/permissions/Permissible.java | 0 .../bukkit/permissions/PermissibleBase.java | 0 .../org/bukkit/permissions/Permission.java | 0 .../permissions/PermissionAttachment.java | 0 .../permissions/PermissionAttachmentInfo.java | 0 .../bukkit/permissions/PermissionDefault.java | 0 .../PermissionRemovedExecutor.java | 0 .../bukkit/permissions/ServerOperator.java | 0 .../org/bukkit/plugin/AuthorNagException.java | 0 .../java/org/bukkit/plugin/EventExecutor.java | 0 .../plugin/IllegalPluginAccessException.java | 0 .../plugin/InvalidDescriptionException.java | 0 .../bukkit/plugin/InvalidPluginException.java | 0 .../main/java/org/bukkit/plugin/Plugin.java | 0 .../org/bukkit/plugin/PluginAwareness.java | 0 .../java/org/bukkit/plugin/PluginBase.java | 0 .../bukkit/plugin/PluginDescriptionFile.java | 0 .../org/bukkit/plugin/PluginLoadOrder.java | 0 .../java/org/bukkit/plugin/PluginLoader.java | 0 .../java/org/bukkit/plugin/PluginLogger.java | 0 .../java/org/bukkit/plugin/PluginManager.java | 0 .../org/bukkit/plugin/RegisteredListener.java | 0 .../plugin/RegisteredServiceProvider.java | 0 .../org/bukkit/plugin/ServicePriority.java | 0 .../org/bukkit/plugin/ServicesManager.java | 0 .../bukkit/plugin/SimplePluginManager.java | 0 .../bukkit/plugin/SimpleServicesManager.java | 0 .../plugin/TimedRegisteredListener.java | 0 .../plugin/UnknownDependencyException.java | 0 .../org/bukkit/plugin/java/JavaPlugin.java | 0 .../bukkit/plugin/java/JavaPluginLoader.java | 0 .../bukkit/plugin/java/PluginClassLoader.java | 0 .../ChannelNameTooLongException.java | 0 .../ChannelNotRegisteredException.java | 0 .../messaging/MessageTooLargeException.java | 0 .../bukkit/plugin/messaging/Messenger.java | 0 .../messaging/PluginChannelDirection.java | 0 .../messaging/PluginMessageListener.java | 0 .../PluginMessageListenerRegistration.java | 0 .../messaging/PluginMessageRecipient.java | 0 .../messaging/ReservedChannelException.java | 0 .../plugin/messaging/StandardMessenger.java | 0 .../main/java/org/bukkit/potion/Potion.java | 0 .../java/org/bukkit/potion/PotionBrewer.java | 0 .../java/org/bukkit/potion/PotionEffect.java | 0 .../org/bukkit/potion/PotionEffectType.java | 0 .../potion/PotionEffectTypeWrapper.java | 0 .../java/org/bukkit/potion/PotionType.java | 0 .../projectiles/BlockProjectileSource.java | 0 .../bukkit/projectiles/ProjectileSource.java | 0 .../org/bukkit/scheduler/BukkitRunnable.java | 0 .../org/bukkit/scheduler/BukkitScheduler.java | 0 .../java/org/bukkit/scheduler/BukkitTask.java | 0 .../org/bukkit/scheduler/BukkitWorker.java | 0 .../java/org/bukkit/scoreboard/Criterias.java | 0 .../org/bukkit/scoreboard/DisplaySlot.java | 0 .../bukkit/scoreboard/NameTagVisibility.java | 0 .../java/org/bukkit/scoreboard/Objective.java | 0 .../java/org/bukkit/scoreboard/Score.java | 0 .../org/bukkit/scoreboard/Scoreboard.java | 0 .../bukkit/scoreboard/ScoreboardManager.java | 0 .../main/java/org/bukkit/scoreboard/Team.java | 0 .../java/org/bukkit/util/BlockIterator.java | 0 .../java/org/bukkit/util/BlockVector.java | 0 .../org/bukkit/util/CachedServerIcon.java | 0 .../java/org/bukkit/util/ChatPaginator.java | 0 .../main/java/org/bukkit/util/EulerAngle.java | 0 .../main/java/org/bukkit/util/FileUtil.java | 0 .../java/org/bukkit/util/Java15Compat.java | 0 .../org/bukkit/util/NumberConversions.java | 0 .../main/java/org/bukkit/util/StringUtil.java | 0 .../src/main/java/org/bukkit/util/Vector.java | 0 .../util/io/BukkitObjectInputStream.java | 0 .../util/io/BukkitObjectOutputStream.java | 0 .../main/java/org/bukkit/util/io/Wrapper.java | 0 .../org/bukkit/util/noise/NoiseGenerator.java | 0 .../bukkit/util/noise/OctaveGenerator.java | 0 .../util/noise/PerlinNoiseGenerator.java | 0 .../util/noise/PerlinOctaveGenerator.java | 0 .../util/noise/SimplexNoiseGenerator.java | 0 .../util/noise/SimplexOctaveGenerator.java | 0 .../permissions/BroadcastPermissions.java | 0 .../util/permissions/CommandPermissions.java | 0 .../util/permissions/DefaultPermissions.java | 0 .../java/org/github/paperspigot/Title.java | 0 .../event/ServerExceptionEvent.java | 0 .../event/block/BeaconEffectEvent.java | 0 .../exception/ServerCommandException.java | 0 .../exception/ServerEventException.java | 0 .../exception/ServerException.java | 0 .../exception/ServerInternalException.java | 0 .../ServerPluginEnableDisableException.java | 0 .../exception/ServerPluginException.java | 0 .../ServerPluginMessageException.java | 0 .../exception/ServerSchedulerException.java | 0 .../exception/ServerTabCompleteException.java | 0 .../org/spigotmc/CustomTimingsHandler.java | 0 .../event/entity/EntityDismountEvent.java | 0 .../event/entity/EntityMountEvent.java | 0 .../player/PlayerSpawnLocationEvent.java | 0 .../org/bukkit/block/package-info.java | 0 .../bukkit/command/defaults/package-info.java | 0 .../org/bukkit/command/package-info.java | 0 .../configuration/file/package-info.java | 0 .../bukkit/configuration/package-info.java | 0 .../serialization/package-info.java | 0 .../bukkit/conversations/package-info.java | 0 .../org/bukkit/enchantments/package-info.java | 0 .../bukkit/entity/minecart/package-info.java | 0 .../org/bukkit/entity/package-info.java | 0 .../org/bukkit/event/block/package-info.java | 0 .../event/enchantment/package-info.java | 0 .../org/bukkit/event/entity/package-info.java | 0 .../bukkit/event/hanging/package-info.java | 0 .../bukkit/event/inventory/package-info.java | 0 .../org/bukkit/event/package-info.java | 0 .../bukkit/event/painting/package-info.java | 0 .../org/bukkit/event/player/package-info.java | 0 .../org/bukkit/event/server/package-info.java | 0 .../bukkit/event/vehicle/package-info.java | 0 .../bukkit/event/weather/package-info.java | 0 .../org/bukkit/event/world/package-info.java | 0 .../org/bukkit/generator/package-info.java | 0 .../javadoc/org/bukkit/help/package-info.java | 0 .../bukkit/inventory/meta/package-info.java | 0 .../org/bukkit/inventory/package-info.java | 0 .../javadoc/org/bukkit/map/package-info.java | 0 .../org/bukkit/material/package-info.java | 0 .../org/bukkit/metadata/package-info.java | 0 .../main/javadoc/org/bukkit/package-info.java | 0 .../org/bukkit/permissions/package-info.java | 0 .../doc-files/permissions-example_plugin.yml | 0 .../org/bukkit/plugin/java/package-info.java | 0 .../bukkit/plugin/messaging/package-info.java | 0 .../org/bukkit/plugin/package-info.java | 0 .../org/bukkit/potion/package-info.java | 0 .../org/bukkit/projectiles/package-info.java | 0 .../org/bukkit/scheduler/package-info.java | 0 .../org/bukkit/scoreboard/package-info.java | 0 .../org/bukkit/util/io/package-info.java | 0 .../org/bukkit/util/noise/package-info.java | 0 .../javadoc/org/bukkit/util/package-info.java | 0 .../bukkit/util/permissions/package-info.java | 0 .../src/main/javadoc/overview.html | 0 .../src/test/java/org/bukkit/ArtTest.java | 0 .../java/org/bukkit/BukkitMirrorTest.java | 0 .../test/java/org/bukkit/ChatColorTest.java | 0 .../java/org/bukkit/ChatPaginatorTest.java | 0 .../test/java/org/bukkit/CoalTypeTest.java | 0 .../src/test/java/org/bukkit/ColorTest.java | 0 .../test/java/org/bukkit/CropStateTest.java | 0 .../test/java/org/bukkit/DifficultyTest.java | 0 .../test/java/org/bukkit/DyeColorTest.java | 0 .../src/test/java/org/bukkit/EffectTest.java | 0 .../java/org/bukkit/EntityEffectTest.java | 0 .../test/java/org/bukkit/GameModeTest.java | 0 .../java/org/bukkit/GrassSpeciesTest.java | 0 .../test/java/org/bukkit/InstrumentTest.java | 0 .../test/java/org/bukkit/LocationTest.java | 0 .../test/java/org/bukkit/MaterialTest.java | 0 .../src/test/java/org/bukkit/NoteTest.java | 0 .../src/test/java/org/bukkit/TestServer.java | 0 .../test/java/org/bukkit/TreeSpeciesTest.java | 0 .../test/java/org/bukkit/WorldTypeTest.java | 0 .../ConfigurationSectionTest.java | 0 .../configuration/ConfigurationTest.java | 0 .../MemoryConfigurationTest.java | 0 .../configuration/MemorySectionTest.java | 0 .../file/FileConfigurationTest.java | 0 .../file/YamlConfigurationTest.java | 0 .../ConversationContextTest.java | 0 .../conversations/ConversationTest.java | 0 .../bukkit/conversations/FakeConversable.java | 0 .../conversations/ValidatingPromptTest.java | 0 .../event/PlayerChatTabCompleteEventTest.java | 0 .../org/bukkit/event/SyntheticEventTest.java | 0 .../test/java/org/bukkit/event/TestEvent.java | 0 .../bukkit/materials/MaterialDataTest.java | 0 .../metadata/FixedMetadataValueTest.java | 0 .../metadata/LazyMetadataValueTest.java | 0 .../metadata/MetadataConversionTest.java | 0 .../bukkit/metadata/MetadataStoreTest.java | 0 .../metadata/MetadataValueAdapterTest.java | 0 .../org/bukkit/plugin/PluginManagerTest.java | 0 .../java/org/bukkit/plugin/TestPlugin.java | 0 .../plugin/TimedRegisteredListenerTest.java | 0 .../messaging/StandardMessengerTest.java | 0 .../plugin/messaging/TestMessageListener.java | 0 .../bukkit/plugin/messaging/TestPlayer.java | 0 .../java/org/bukkit/potion/PotionTest.java | 0 .../bukkit/util/StringUtilStartsWithTest.java | 0 .../java/org/bukkit/util/StringUtilTest.java | 0 .../util/io/BukkitObjectStreamTest.java | 0 .../.gitignore | 0 eSpigot-Server/build.gradle.kts | 154 + .../java/co/aikar/timings/SpigotTimings.java | 0 .../co/aikar/timings/WorldTimingsHandler.java | 0 .../spigot/chunk/ChunkSectionSnapshot.java | 0 .../spigot/chunk/CraftChunkSnapshot.java | 0 .../spigot/chunk/WeakChunkCache.java | 0 .../spigot/command/KnockbackCommand.java | 0 .../spigot/command/TicksPerSecondCommand.java | 55 +- .../spigot/console/PandaConsole.java | 39 + .../console/PandaConsoleCommandSender.java | 15 + .../spigot/console/PandaConsoleCompleter.java | 56 + .../java/com/elevatemc/spigot/eSpigot.java | 2 +- .../com/elevatemc/spigot/eSpigotFeature.java | 0 .../spigot/event/BlockDropItemsEvent.java | 0 .../spigot/event/PlayerHealthChangeEvent.java | 0 .../spigot/event/PlayerPearlRefundEvent.java | 0 .../spigot/handler/MovementHandler.java | 0 .../spigot/handler/PacketHandler.java | 0 .../spigot/knockback/KnockbackHandler.java | 0 .../spigot/knockback/KnockbackModifier.java | 0 .../spigot/knockback/KnockbackProfile.java | 0 .../impl/AdvancedKnockbackProfile.java | 0 .../spigot/network/VarIntByteDecoder.java | 51 + .../elevatemc/spigot/network/VarIntUtil.java | 114 + .../spigot/pathsearch/AsyncNavigation.java | 0 .../spigot/pathsearch/AsyncPathfinder.java | 0 .../pathsearch/AsyncPathfinderNormal.java | 0 .../pathsearch/PathSearchThrottlerThread.java | 0 .../pathsearch/PositionPathSearchType.java | 0 .../pathsearch/cache/SearchCacheEntry.java | 0 .../cache/SearchCacheEntryEntity.java | 0 .../cache/SearchCacheEntryPosition.java | 0 .../spigot/pathsearch/jobs/PathSearchJob.java | 0 .../pathsearch/jobs/PathSearchJobEntity.java | 0 .../jobs/PathSearchJobNavigationEntity.java | 0 .../jobs/PathSearchJobNavigationPosition.java | 0 .../jobs/PathSearchJobPosition.java | 0 .../jobs/PathSearchQueuingManager.java | 0 .../threading/NamePriorityThreadFactory.java | 0 .../spigot/threading/ThreadingManager.java | 0 .../elevatemc/spigot/util/CryptException.java | 0 .../com/elevatemc/spigot/util/Cuboid.java | 0 .../com/elevatemc/spigot/util/DateUtil.java | 0 .../com/elevatemc/spigot/util/Dictionary.java | 0 .../com/elevatemc/spigot/util/FastRandom.java | 0 .../spigot/util/SynchronizedIntHashMap.java | 0 .../com/elevatemc/spigot/util/YamlConfig.java | 0 .../util/task/AbstractTaskExecutor.java | 0 .../com/elevatemc/spigot/util/task/Task.java | 0 .../spigot/util/task/TaskExecutor.java | 0 .../util/task/impl/ThreadTaskExecutor.java | 0 .../elevatemc/spigot/world/AutoSaveJob.java | 0 .../java/com/google/common/base/Objects.java | 451 +++ .../common/util/concurrent/MoreExecutors.java | 1172 ++++++++ .../net/minecraft/server/Achievement.java | 84 + .../net/minecraft/server/AchievementList.java | 49 + .../net/minecraft/server/AchievementSet.java | 47 + .../net/minecraft/server/AttributeBase.java | 47 + .../minecraft/server/AttributeInstance.java | 27 + .../minecraft/server/AttributeMapBase.java | 80 + .../minecraft/server/AttributeMapServer.java | 89 + .../minecraft/server/AttributeModifiable.java | 156 + .../minecraft/server/AttributeModifier.java | 82 + .../net/minecraft/server/AttributeRanged.java | 0 .../net/minecraft/server/AxisAlignedBB.java | 285 ++ .../minecraft/server/BaseBlockPosition.java | 4 +- .../java/net/minecraft/server/BiomeBase.java | 0 .../net/minecraft/server/BiomeBaseSub.java | 62 + .../java/net/minecraft/server/BiomeBeach.java | 15 + .../net/minecraft/server/BiomeBigHills.java | 87 + .../java/net/minecraft/server/BiomeCache.java | 84 + .../net/minecraft/server/BiomeDecorator.java | 0 .../net/minecraft/server/BiomeDesert.java | 30 + .../net/minecraft/server/BiomeForest.java | 159 + .../java/net/minecraft/server/BiomeHell.java | 15 + .../net/minecraft/server/BiomeIcePlains.java | 54 + .../net/minecraft/server/BiomeJungle.java | 56 + .../java/net/minecraft/server/BiomeMesa.java | 0 .../net/minecraft/server/BiomeMushrooms.java | 18 + .../java/net/minecraft/server/BiomeOcean.java | 19 + .../net/minecraft/server/BiomePlains.java | 93 + .../java/net/minecraft/server/BiomeRiver.java | 9 + .../net/minecraft/server/BiomeSavanna.java | 70 + .../net/minecraft/server/BiomeStoneBeach.java | 15 + .../java/net/minecraft/server/BiomeSwamp.java | 53 + .../java/net/minecraft/server/BiomeTaiga.java | 85 + .../net/minecraft/server/BiomeTheEnd.java | 16 + .../server/BiomeTheEndDecorator.java | 0 .../main/java/net/minecraft/server/Block.java | 0 .../net/minecraft/server/BlockActionData.java | 46 + .../java/net/minecraft/server/BlockAir.java | 30 + .../java/net/minecraft/server/BlockAnvil.java | 0 .../net/minecraft/server/BlockBanner.java | 214 ++ .../net/minecraft/server/BlockBarrier.java | 22 + .../net/minecraft/server/BlockBeacon.java | 0 .../java/net/minecraft/server/BlockBed.java | 233 ++ .../net/minecraft/server/BlockBloodStone.java | 0 .../net/minecraft/server/BlockBookshelf.java | 19 + .../minecraft/server/BlockBrewingStand.java | 0 .../minecraft/server/BlockButtonAbstract.java | 0 .../net/minecraft/server/BlockCactus.java | 2 +- .../java/net/minecraft/server/BlockCake.java | 0 .../net/minecraft/server/BlockCarpet.java | 0 .../net/minecraft/server/BlockCarrots.java | 14 + .../net/minecraft/server/BlockCauldron.java | 185 ++ .../java/net/minecraft/server/BlockChest.java | 0 .../java/net/minecraft/server/BlockClay.java | 19 + .../java/net/minecraft/server/BlockCloth.java | 32 + .../net/minecraft/server/BlockCobbleWall.java | 160 + .../java/net/minecraft/server/BlockCocoa.java | 0 .../net/minecraft/server/BlockCommand.java | 0 .../net/minecraft/server/BlockContainer.java | 37 + .../java/net/minecraft/server/BlockCrops.java | 0 .../minecraft/server/BlockDataAbstract.java | 63 + .../server/BlockDaylightDetector.java | 0 .../net/minecraft/server/BlockDeadBush.java | 39 + .../minecraft/server/BlockDiodeAbstract.java | 0 .../minecraft/server/BlockDirectional.java | 16 + .../java/net/minecraft/server/BlockDirt.java | 117 + .../net/minecraft/server/BlockDispenser.java | 6 +- .../java/net/minecraft/server/BlockDoor.java | 0 .../net/minecraft/server/BlockDoubleStep.java | 10 + .../server/BlockDoubleStepAbstract.java | 140 + .../server/BlockDoubleStoneStep2.java | 10 + .../server/BlockDoubleStoneStepAbstract.java | 138 + .../minecraft/server/BlockDoubleWoodStep.java | 10 + .../net/minecraft/server/BlockDragonEgg.java | 0 .../net/minecraft/server/BlockDropper.java | 0 .../server/BlockEnchantmentTable.java | 53 + .../net/minecraft/server/BlockEnderChest.java | 90 + .../minecraft/server/BlockEnderPortal.java | 0 .../server/BlockEnderPortalFrame.java | 70 + .../net/minecraft/server/BlockFalling.java | 0 .../java/net/minecraft/server/BlockFence.java | 133 + .../net/minecraft/server/BlockFenceGate.java | 126 + .../java/net/minecraft/server/BlockFire.java | 0 .../net/minecraft/server/BlockFloorSign.java | 31 + .../net/minecraft/server/BlockFlowerPot.java | 0 .../net/minecraft/server/BlockFlowers.java | 133 + .../net/minecraft/server/BlockFlowing.java | 0 .../net/minecraft/server/BlockFluids.java | 0 .../net/minecraft/server/BlockFurnace.java | 148 + .../java/net/minecraft/server/BlockGlass.java | 23 + .../java/net/minecraft/server/BlockGrass.java | 0 .../net/minecraft/server/BlockGravel.java | 20 + .../server/BlockHalfTransparent.java | 19 + .../minecraft/server/BlockHardenedClay.java | 13 + .../java/net/minecraft/server/BlockHay.java | 48 + .../net/minecraft/server/BlockHopper.java | 0 .../minecraft/server/BlockHugeMushroom.java | 129 + .../java/net/minecraft/server/BlockIce.java | 0 .../net/minecraft/server/BlockJukeBox.java | 0 .../net/minecraft/server/BlockLadder.java | 144 + .../net/minecraft/server/BlockLeaves.java | 0 .../net/minecraft/server/BlockLeaves1.java | 75 + .../net/minecraft/server/BlockLeaves2.java | 77 + .../java/net/minecraft/server/BlockLever.java | 0 .../net/minecraft/server/BlockLightStone.java | 27 + .../java/net/minecraft/server/BlockLog1.java | 162 + .../java/net/minecraft/server/BlockLog2.java | 144 + .../minecraft/server/BlockLogAbstract.java | 99 + .../net/minecraft/server/BlockLongGrass.java | 127 + .../java/net/minecraft/server/BlockMelon.java | 23 + .../server/BlockMinecartDetector.java | 0 .../minecraft/server/BlockMinecartTrack.java | 34 + .../server/BlockMinecartTrackAbstract.java | 0 .../net/minecraft/server/BlockMobSpawner.java | 0 .../minecraft/server/BlockMonsterEggs.java | 0 .../net/minecraft/server/BlockMushroom.java | 0 .../java/net/minecraft/server/BlockMycel.java | 0 .../net/minecraft/server/BlockNetherWart.java | 0 .../minecraft/server/BlockNetherbrick.java | 13 + .../java/net/minecraft/server/BlockNote.java | 86 + .../net/minecraft/server/BlockObsidian.java | 19 + .../java/net/minecraft/server/BlockOre.java | 0 .../net/minecraft/server/BlockPackedIce.java | 16 + .../net/minecraft/server/BlockPiston.java | 0 .../server/BlockPistonExtension.java | 249 ++ .../minecraft/server/BlockPistonMoving.java | 210 ++ .../java/net/minecraft/server/BlockPlant.java | 2 +- .../net/minecraft/server/BlockPortal.java | 0 .../net/minecraft/server/BlockPosition.java | 0 .../net/minecraft/server/BlockPotatoes.java | 24 + .../net/minecraft/server/BlockPowered.java | 16 + .../minecraft/server/BlockPoweredRail.java | 0 .../net/minecraft/server/BlockPredicate.java | 24 + .../server/BlockPressurePlateAbstract.java | 0 .../server/BlockPressurePlateBinary.java | 0 .../server/BlockPressurePlateWeighted.java | 0 .../net/minecraft/server/BlockPrismarine.java | 91 + .../net/minecraft/server/BlockPumpkin.java | 0 .../net/minecraft/server/BlockQuartz.java | 132 + .../net/minecraft/server/BlockRedFlowers.java | 10 + .../minecraft/server/BlockRedSandstone.java | 80 + .../server/BlockRedstoneComparator.java | 244 ++ .../minecraft/server/BlockRedstoneLamp.java | 0 .../minecraft/server/BlockRedstoneOre.java | 0 .../minecraft/server/BlockRedstoneTorch.java | 0 .../minecraft/server/BlockRedstoneWire.java | 0 .../java/net/minecraft/server/BlockReed.java | 0 .../net/minecraft/server/BlockRepeater.java | 84 + .../net/minecraft/server/BlockRotatable.java | 14 + .../java/net/minecraft/server/BlockSand.java | 88 + .../net/minecraft/server/BlockSandStone.java | 84 + .../net/minecraft/server/BlockSapling.java | 0 .../net/minecraft/server/BlockSeaLantern.java | 31 + .../java/net/minecraft/server/BlockSign.java | 56 + .../java/net/minecraft/server/BlockSkull.java | 0 .../java/net/minecraft/server/BlockSlime.java | 39 + .../net/minecraft/server/BlockSlowSand.java | 20 + .../minecraft/server/BlockSmoothBrick.java | 84 + .../java/net/minecraft/server/BlockSnow.java | 0 .../net/minecraft/server/BlockSnowBlock.java | 0 .../java/net/minecraft/server/BlockSoil.java | 0 .../net/minecraft/server/BlockSponge.java | 100 + .../minecraft/server/BlockStainedGlass.java | 60 + .../server/BlockStainedGlassPane.java | 46 + .../net/minecraft/server/BlockStairs.java | 595 ++++ .../java/net/minecraft/server/BlockState.java | 4 +- .../minecraft/server/BlockStateBoolean.java | 0 .../minecraft/server/BlockStateDirection.java | 26 + .../net/minecraft/server/BlockStateEnum.java | 0 .../minecraft/server/BlockStateInteger.java | 0 .../net/minecraft/server/BlockStateList.java | 4 +- .../minecraft/server/BlockStatePredicate.java | 56 + .../net/minecraft/server/BlockStationary.java | 0 .../java/net/minecraft/server/BlockStem.java | 0 .../java/net/minecraft/server/BlockStep.java | 10 + .../minecraft/server/BlockStepAbstract.java | 104 + .../java/net/minecraft/server/BlockStone.java | 104 + .../minecraft/server/BlockStoneButton.java | 8 + .../net/minecraft/server/BlockStoneStep2.java | 10 + .../java/net/minecraft/server/BlockTNT.java | 0 .../net/minecraft/server/BlockTallPlant.java | 267 ++ .../java/net/minecraft/server/BlockThin.java | 125 + .../java/net/minecraft/server/BlockTorch.java | 261 ++ .../minecraft/server/BlockTransparent.java | 15 + .../net/minecraft/server/BlockTrapdoor.java | 0 .../net/minecraft/server/BlockTripwire.java | 0 .../minecraft/server/BlockTripwireHook.java | 4 +- .../java/net/minecraft/server/BlockVine.java | 0 .../net/minecraft/server/BlockWallSign.java | 101 + .../net/minecraft/server/BlockWaterLily.java | 43 + .../java/net/minecraft/server/BlockWeb.java | 35 + .../java/net/minecraft/server/BlockWood.java | 94 + .../net/minecraft/server/BlockWoodButton.java | 8 + .../net/minecraft/server/BlockWoodStep.java | 10 + .../net/minecraft/server/BlockWoodenStep.java | 69 + .../net/minecraft/server/BlockWorkbench.java | 50 + .../minecraft/server/BlockYellowFlowers.java | 10 + .../java/net/minecraft/server/Blocks.java | 412 +++ .../CancelledPacketHandleException.java | 15 + .../minecraft/server/ChatBaseComponent.java | 0 .../net/minecraft/server/ChatClickable.java | 96 + .../minecraft/server/ChatComponentScore.java | 82 + .../server/ChatComponentSelector.java | 55 + .../minecraft/server/ChatComponentText.java | 55 + .../minecraft/server/ChatComponentUtils.java | 70 + .../minecraft/server/ChatDeserializer.java | 131 + .../net/minecraft/server/ChatHoverable.java | 96 + .../net/minecraft/server/ChatMessage.java | 242 ++ .../server/ChatMessageException.java | 16 + .../net/minecraft/server/ChatModifier.java | 0 .../server/ChatTypeAdapterFactory.java | 60 + .../java/net/minecraft/server/ChestLock.java | 33 + .../main/java/net/minecraft/server/Chunk.java | 5 +- .../java/net/minecraft/server/ChunkCache.java | 75 + .../minecraft/server/ChunkCoordIntPair.java | 71 + .../minecraft/server/ChunkProviderDebug.java | 129 + .../minecraft/server/ChunkProviderFlat.java | 0 .../server/ChunkProviderGenerate.java | 0 .../minecraft/server/ChunkProviderHell.java | 0 .../minecraft/server/ChunkProviderServer.java | 0 .../minecraft/server/ChunkProviderTheEnd.java | 272 ++ .../minecraft/server/ChunkRegionLoader.java | 0 .../net/minecraft/server/ChunkSection.java | 0 .../net/minecraft/server/ChunkSnapshot.java | 41 + .../net/minecraft/server/CombatEntry.java | 44 + .../net/minecraft/server/CombatTracker.java | 195 ++ .../net/minecraft/server/CommandAbstract.java | 552 ++++ .../minecraft/server/CommandAchievement.java | 169 ++ .../java/net/minecraft/server/CommandBan.java | 60 + .../net/minecraft/server/CommandBanIp.java | 79 + .../net/minecraft/server/CommandBanList.java | 39 + .../minecraft/server/CommandBlockData.java | 71 + .../server/CommandBlockListenerAbstract.java | 0 .../net/minecraft/server/CommandClear.java | 72 + .../net/minecraft/server/CommandClone.java | 225 ++ .../net/minecraft/server/CommandDebug.java | 141 + .../net/minecraft/server/CommandDeop.java | 41 + .../minecraft/server/CommandDifficulty.java | 39 + .../minecraft/server/CommandDispatcher.java | 0 .../net/minecraft/server/CommandEffect.java | 107 + .../net/minecraft/server/CommandEnchant.java | 98 + .../minecraft/server/CommandEntityData.java | 57 + .../minecraft/server/CommandException.java | 15 + .../net/minecraft/server/CommandExecute.java | 0 .../net/minecraft/server/CommandFill.java | 168 ++ .../net/minecraft/server/CommandGamemode.java | 0 .../server/CommandGamemodeDefault.java | 42 + .../net/minecraft/server/CommandGamerule.java | 0 .../net/minecraft/server/CommandGive.java | 82 + .../net/minecraft/server/CommandHandler.java | 186 ++ .../net/minecraft/server/CommandHelp.java | 97 + .../minecraft/server/CommandIdleTimeout.java | 29 + .../net/minecraft/server/CommandKick.java | 51 + .../net/minecraft/server/CommandKill.java | 42 + .../net/minecraft/server/CommandList.java | 26 + .../java/net/minecraft/server/CommandMe.java | 34 + .../server/CommandObjectiveExecutor.java | 231 ++ .../java/net/minecraft/server/CommandOp.java | 60 + .../net/minecraft/server/CommandPardon.java | 45 + .../net/minecraft/server/CommandPardonIP.java | 44 + .../net/minecraft/server/CommandParticle.java | 99 + .../minecraft/server/CommandPlaySound.java | 100 + .../net/minecraft/server/CommandPublish.java | 25 + .../minecraft/server/CommandReplaceItem.java | 185 ++ .../net/minecraft/server/CommandSaveAll.java | 60 + .../net/minecraft/server/CommandSaveOff.java | 36 + .../net/minecraft/server/CommandSaveOn.java | 36 + .../java/net/minecraft/server/CommandSay.java | 34 + .../minecraft/server/CommandScoreboard.java | 0 .../net/minecraft/server/CommandSeed.java | 28 + .../net/minecraft/server/CommandSetBlock.java | 103 + .../server/CommandSetWorldSpawn.java | 42 + .../minecraft/server/CommandSpawnpoint.java | 43 + .../server/CommandSpreadPlayers.java | 0 .../net/minecraft/server/CommandStats.java | 166 + .../net/minecraft/server/CommandStop.java | 22 + .../net/minecraft/server/CommandSummon.java | 104 + .../net/minecraft/server/CommandTell.java | 54 + .../net/minecraft/server/CommandTellRaw.java | 49 + .../net/minecraft/server/CommandTestFor.java | 56 + .../minecraft/server/CommandTestForBlock.java | 98 + .../server/CommandTestForBlocks.java | 109 + .../net/minecraft/server/CommandTime.java | 85 + .../net/minecraft/server/CommandTitle.java | 95 + .../server/CommandToggleDownfall.java | 29 + .../java/net/minecraft/server/CommandTp.java | 0 .../net/minecraft/server/CommandTrigger.java | 98 + .../net/minecraft/server/CommandWeather.java | 68 + .../minecraft/server/CommandWhitelist.java | 92 + .../minecraft/server/CommandWorldBorder.java | 148 + .../java/net/minecraft/server/CommandXp.java | 74 + .../java/net/minecraft/server/Container.java | 0 .../net/minecraft/server/ContainerAnvil.java | 0 .../net/minecraft/server/ContainerBeacon.java | 0 .../server/ContainerBrewingStand.java | 0 .../net/minecraft/server/ContainerChest.java | 0 .../minecraft/server/ContainerDispenser.java | 0 .../server/ContainerEnchantTable.java | 0 .../minecraft/server/ContainerFurnace.java | 0 .../net/minecraft/server/ContainerHopper.java | 0 .../net/minecraft/server/ContainerHorse.java | 0 .../minecraft/server/ContainerMerchant.java | 0 .../net/minecraft/server/ContainerPlayer.java | 0 .../minecraft/server/ContainerWorkbench.java | 0 .../net/minecraft/server/ControllerJump.java | 20 + .../net/minecraft/server/ControllerLook.java | 100 + .../net/minecraft/server/ControllerMove.java | 91 + .../net/minecraft/server/Convertable.java | 14 + .../java/net/minecraft/server/Counter.java | 3 + .../minecraft/server/CounterStatistic.java | 18 + .../net/minecraft/server/CraftingManager.java | 0 .../minecraft/server/CraftingStatistic.java | 17 + .../net/minecraft/server/CrashReport.java | 0 .../server/CrashReportSystemDetails.java | 265 ++ .../net/minecraft/server/CreativeModeTab.java | 62 + .../server/CustomWorldSettingsFinal.java | 659 ++++ .../net/minecraft/server/DamageSource.java | 170 ++ .../net/minecraft/server/DataWatcher.java | 0 .../minecraft/server/DedicatedPlayerList.java | 148 + .../net/minecraft/server/DedicatedServer.java | 356 +-- .../server/DemoPlayerInteractManager.java | 91 + .../net/minecraft/server/DemoWorldServer.java | 12 + .../server/DifficultyDamageScaler.java | 38 + .../server/DispenseBehaviorItem.java | 0 .../server/DispenseBehaviorProjectile.java | 0 .../minecraft/server/DispenserRegistry.java | 0 .../main/java/net/minecraft/server/EULA.java | 0 .../java/net/minecraft/server/EmptyChunk.java | 90 + .../net/minecraft/server/Enchantment.java | 0 .../server/EnchantmentArrowDamage.java | 21 + .../server/EnchantmentArrowKnockback.java | 21 + .../server/EnchantmentDepthStrider.java | 21 + .../minecraft/server/EnchantmentDigging.java | 25 + .../server/EnchantmentDurability.java | 31 + .../net/minecraft/server/EnchantmentFire.java | 21 + .../server/EnchantmentFlameArrows.java | 21 + .../server/EnchantmentInfiniteArrows.java | 21 + .../server/EnchantmentKnockback.java | 21 + .../server/EnchantmentLootBonus.java | 32 + .../net/minecraft/server/EnchantmentLure.java | 21 + .../minecraft/server/EnchantmentManager.java | 0 .../minecraft/server/EnchantmentOxygen.java | 21 + .../server/EnchantmentProtection.java | 75 + .../server/EnchantmentSilkTouch.java | 29 + .../minecraft/server/EnchantmentSlotType.java | 26 + .../minecraft/server/EnchantmentThorns.java | 0 .../server/EnchantmentWaterWorker.java | 21 + .../server/EnchantmentWeaponDamage.java | 56 + .../java/net/minecraft/server/Entity.java | 0 .../minecraft/server/EntityAIBodyControl.java | 54 + .../net/minecraft/server/EntityAgeable.java | 0 .../net/minecraft/server/EntityAmbient.java | 16 + .../net/minecraft/server/EntityAnimal.java | 0 .../minecraft/server/EntityArmorStand.java | 0 .../net/minecraft/server/EntityArrow.java | 0 .../java/net/minecraft/server/EntityBat.java | 186 ++ .../net/minecraft/server/EntityBlaze.java | 207 ++ .../java/net/minecraft/server/EntityBoat.java | 0 .../minecraft/server/EntityCaveSpider.java | 44 + .../net/minecraft/server/EntityChicken.java | 0 .../minecraft/server/EntityComplexPart.java | 32 + .../java/net/minecraft/server/EntityCow.java | 0 .../net/minecraft/server/EntityCreature.java | 0 .../net/minecraft/server/EntityCreeper.java | 0 .../minecraft/server/EntityDamageSource.java | 37 + .../server/EntityDamageSourceIndirect.java | 0 .../java/net/minecraft/server/EntityEgg.java | 0 .../minecraft/server/EntityEnderCrystal.java | 0 .../minecraft/server/EntityEnderDragon.java | 0 .../minecraft/server/EntityEnderPearl.java | 0 .../minecraft/server/EntityEnderSignal.java | 134 + .../net/minecraft/server/EntityEnderman.java | 0 .../net/minecraft/server/EntityEndermite.java | 116 + .../minecraft/server/EntityExperienceOrb.java | 0 .../minecraft/server/EntityFallingBlock.java | 0 .../net/minecraft/server/EntityFireball.java | 0 .../net/minecraft/server/EntityFireworks.java | 0 .../minecraft/server/EntityFishingHook.java | 0 .../net/minecraft/server/EntityFlying.java | 63 + .../net/minecraft/server/EntityGhast.java | 0 .../minecraft/server/EntityGiantZombie.java | 24 + .../net/minecraft/server/EntityGolem.java | 30 + .../net/minecraft/server/EntityGuardian.java | 523 ++++ .../net/minecraft/server/EntityHanging.java | 0 .../net/minecraft/server/EntityHorse.java | 0 .../net/minecraft/server/EntityHuman.java | 0 .../minecraft/server/EntityInsentient.java | 0 .../net/minecraft/server/EntityIronGolem.java | 0 .../java/net/minecraft/server/EntityItem.java | 0 .../net/minecraft/server/EntityItemFrame.java | 0 .../minecraft/server/EntityLargeFireball.java | 0 .../net/minecraft/server/EntityLeash.java | 0 .../net/minecraft/server/EntityLightning.java | 0 .../net/minecraft/server/EntityLiving.java | 0 .../net/minecraft/server/EntityMagmaCube.java | 99 + .../server/EntityMinecartAbstract.java | 0 .../minecraft/server/EntityMinecartChest.java | 44 + .../server/EntityMinecartCommandBlock.java | 0 .../server/EntityMinecartContainer.java | 0 .../server/EntityMinecartFurnace.java | 0 .../server/EntityMinecartHopper.java | 147 + .../server/EntityMinecartMobSpawner.java | 49 + .../server/EntityMinecartRideable.java | 46 + .../minecraft/server/EntityMinecartTNT.java | 136 + .../net/minecraft/server/EntityMonster.java | 0 .../minecraft/server/EntityMushroomCow.java | 0 .../net/minecraft/server/EntityOcelot.java | 0 .../net/minecraft/server/EntityOwnable.java | 8 + .../net/minecraft/server/EntityPainting.java | 0 .../java/net/minecraft/server/EntityPig.java | 0 .../net/minecraft/server/EntityPigZombie.java | 206 ++ .../net/minecraft/server/EntityPlayer.java | 2 +- .../minecraft/server/EntityPositionTypes.java | 48 + .../net/minecraft/server/EntityPotion.java | 0 .../minecraft/server/EntityProjectile.java | 0 .../net/minecraft/server/EntityRabbit.java | 0 .../net/minecraft/server/EntitySenses.java | 40 + .../net/minecraft/server/EntitySheep.java | 0 .../minecraft/server/EntitySilverfish.java | 0 .../net/minecraft/server/EntitySkeleton.java | 0 .../net/minecraft/server/EntitySlice.java | 11 +- .../net/minecraft/server/EntitySlime.java | 0 .../minecraft/server/EntitySmallFireball.java | 0 .../net/minecraft/server/EntitySnowball.java | 37 + .../net/minecraft/server/EntitySnowman.java | 0 .../net/minecraft/server/EntitySpider.java | 0 .../net/minecraft/server/EntitySquid.java | 0 .../net/minecraft/server/EntityTNTPrimed.java | 0 .../server/EntityTameableAnimal.java | 167 + .../server/EntityThrownExpBottle.java | 0 .../net/minecraft/server/EntityTracker.java | 0 .../minecraft/server/EntityTrackerEntry.java | 0 .../net/minecraft/server/EntityTypes.java | 244 ++ .../net/minecraft/server/EntityVillager.java | 0 .../minecraft/server/EntityWaterAnimal.java | 53 + .../net/minecraft/server/EntityWeather.java | 8 + .../net/minecraft/server/EntityWitch.java | 173 ++ .../net/minecraft/server/EntityWither.java | 0 .../minecraft/server/EntityWitherSkull.java | 0 .../java/net/minecraft/server/EntityWolf.java | 0 .../net/minecraft/server/EntityZombie.java | 0 .../net/minecraft/server/EnumAnimation.java | 8 + .../net/minecraft/server/EnumChatFormat.java | 116 + .../java/net/minecraft/server/EnumColor.java | 77 + .../minecraft/server/EnumCreatureType.java | 36 + .../net/minecraft/server/EnumDifficulty.java | 39 + .../net/minecraft/server/EnumDirection.java | 361 +++ .../net/minecraft/server/EnumItemRarity.java | 14 + .../net/minecraft/server/EnumMonsterType.java | 8 + .../net/minecraft/server/EnumParticle.java | 74 + .../net/minecraft/server/EnumProtocol.java | 225 ++ .../server/EnumProtocolDirection.java | 8 + .../net/minecraft/server/EnumSkyBlock.java | 12 + .../server/EnumWorldBorderState.java | 12 + .../server/ExceptionEntityNotFound.java | 12 + .../server/ExceptionInvalidNumber.java | 12 + .../server/ExceptionInvalidSyntax.java | 12 + .../server/ExceptionPlayerNotFound.java | 12 + .../server/ExceptionUnknownCommand.java | 12 + .../net/minecraft/server/ExceptionUsage.java | 8 + .../server/ExceptionWorldConflict.java | 8 + .../minecraft/server/ExpirableListEntry.java | 0 .../java/net/minecraft/server/Explosion.java | 0 .../net/minecraft/server/FileIOThread.java | 0 .../net/minecraft/server/FoodMetaData.java | 0 .../minecraft/server/GameProfileBanEntry.java | 0 .../minecraft/server/GameProfileBanList.java | 54 + .../server/GameProfileSerializer.java | 164 + .../java/net/minecraft/server/GameRules.java | 160 + .../java/net/minecraft/server/GenLayer.java | 184 ++ .../net/minecraft/server/GenLayerBiome.java | 78 + .../net/minecraft/server/GenLayerCleaner.java | 23 + .../minecraft/server/GenLayerDeepOcean.java | 53 + .../net/minecraft/server/GenLayerDesert.java | 114 + .../minecraft/server/GenLayerIcePlains.java | 36 + .../net/minecraft/server/GenLayerIsland.java | 72 + .../server/GenLayerMushroomIsland.java | 37 + .../server/GenLayerMushroomShore.java | 114 + .../net/minecraft/server/GenLayerPlains.java | 33 + .../minecraft/server/GenLayerRegionHills.java | 131 + .../net/minecraft/server/GenLayerRiver.java | 40 + .../minecraft/server/GenLayerRiverMix.java | 45 + .../net/minecraft/server/GenLayerSmooth.java | 49 + .../net/minecraft/server/GenLayerSpecial.java | 144 + .../net/minecraft/server/GenLayerTopSoil.java | 44 + .../net/minecraft/server/GenLayerZoom.java | 59 + .../minecraft/server/GenLayerZoomFuzzy.java | 12 + .../minecraft/server/GenLayerZoomVoronoi.java | 83 + .../minecraft/server/GenericAttributes.java | 0 .../net/minecraft/server/GroupDataEntity.java | 3 + .../minecraft/server/GuiStatsComponent.java | 76 + .../minecraft/server/HandshakeListener.java | 51 +- .../net/minecraft/server/HttpUtilities.java | 105 + .../java/net/minecraft/server/IAnimal.java | 3 + .../minecraft/server/IAsyncChunkSaver.java | 6 + .../minecraft/server/IAsyncTaskHandler.java | 10 + .../java/net/minecraft/server/IAttribute.java | 14 + .../net/minecraft/server/IBlockAccess.java | 12 + .../java/net/minecraft/server/IBlockData.java | 19 + .../server/IBlockFragilePlantElement.java | 12 + .../net/minecraft/server/IBlockState.java | 0 .../minecraft/server/IChatBaseComponent.java | 0 .../net/minecraft/server/IChunkLoader.java | 16 + .../net/minecraft/server/IChunkProvider.java | 34 + .../java/net/minecraft/server/ICommand.java | 20 + .../minecraft/server/ICommandDispatcher.java | 6 + .../net/minecraft/server/ICommandHandler.java | 15 + .../minecraft/server/ICommandListener.java | 24 + .../java/net/minecraft/server/IComplex.java | 8 + .../java/net/minecraft/server/IContainer.java | 6 + .../java/net/minecraft/server/ICrafting.java | 14 + .../net/minecraft/server/IDataManager.java | 0 .../minecraft/server/IDispenseBehavior.java | 12 + .../net/minecraft/server/IEntitySelector.java | 68 + .../java/net/minecraft/server/IHopper.java | 12 + .../java/net/minecraft/server/IInventory.java | 0 .../minecraft/server/IInventoryListener.java | 6 + .../net/minecraft/server/IJsonStatistic.java | 10 + .../net/minecraft/server/ILocationSource.java | 3 + .../java/net/minecraft/server/IMerchant.java | 16 + .../minecraft/server/IMinecraftServer.java | 44 + .../minecraft/server/IMojangStatistics.java | 10 + .../java/net/minecraft/server/IMonster.java | 25 + .../java/net/minecraft/server/INamable.java | 6 + .../minecraft/server/INamableTileEntity.java | 10 + .../net/minecraft/server/IPlayerFileData.java | 10 + .../java/net/minecraft/server/IPosition.java | 10 + .../net/minecraft/server/IProgressUpdate.java | 10 + .../net/minecraft/server/IProjectile.java | 6 + .../net/minecraft/server/IRangedEntity.java | 6 + .../java/net/minecraft/server/IRecipe.java | 0 .../java/net/minecraft/server/IRegistry.java | 3 + .../minecraft/server/IScoreboardCriteria.java | 60 + .../java/net/minecraft/server/ISource.java | 6 + .../net/minecraft/server/ISourceBlock.java | 16 + .../server/ITileEntityContainer.java | 8 + .../net/minecraft/server/ITileInventory.java | 10 + .../server/IUpdatePlayerListBox.java | 6 + .../net/minecraft/server/IWorldAccess.java | 28 + .../server/IWorldBorderListener.java | 18 + .../net/minecraft/server/IWorldInventory.java | 10 + .../server/InsensitiveStringMap.java | 74 + .../minecraft/server/InstantMobEffect.java | 16 + .../java/net/minecraft/server/IntCache.java | 0 .../java/net/minecraft/server/IntHashMap.java | 207 ++ .../server/InventoryCraftResult.java | 0 .../minecraft/server/InventoryCrafting.java | 0 .../minecraft/server/InventoryEnderChest.java | 0 .../minecraft/server/InventoryHorseChest.java | 0 .../minecraft/server/InventoryLargeChest.java | 0 .../minecraft/server/InventoryMerchant.java | 0 .../server/InventorySubcontainer.java | 0 .../net/minecraft/server/InventoryUtils.java | 56 + .../java/net/minecraft/server/IpBanEntry.java | 30 + .../java/net/minecraft/server/IpBanList.java | 42 + .../main/java/net/minecraft/server/Item.java | 786 +++++ .../java/net/minecraft/server/ItemAnvil.java | 12 + .../java/net/minecraft/server/ItemArmor.java | 0 .../net/minecraft/server/ItemArmorStand.java | 78 + .../java/net/minecraft/server/ItemAxe.java | 17 + .../java/net/minecraft/server/ItemBanner.java | 67 + .../java/net/minecraft/server/ItemBed.java | 51 + .../java/net/minecraft/server/ItemBlock.java | 0 .../java/net/minecraft/server/ItemBoat.java | 0 .../java/net/minecraft/server/ItemBook.java | 14 + .../minecraft/server/ItemBookAndQuill.java | 38 + .../java/net/minecraft/server/ItemBow.java | 0 .../java/net/minecraft/server/ItemBucket.java | 0 .../net/minecraft/server/ItemCarrotStick.java | 30 + .../java/net/minecraft/server/ItemCloth.java | 18 + .../java/net/minecraft/server/ItemCoal.java | 14 + .../java/net/minecraft/server/ItemDoor.java | 0 .../java/net/minecraft/server/ItemDye.java | 0 .../java/net/minecraft/server/ItemEgg.java | 23 + .../minecraft/server/ItemEnchantedBook.java | 72 + .../net/minecraft/server/ItemEnderEye.java | 134 + .../net/minecraft/server/ItemEnderPearl.java | 24 + .../net/minecraft/server/ItemExpBottle.java | 22 + .../net/minecraft/server/ItemFireball.java | 0 .../net/minecraft/server/ItemFireworks.java | 21 + .../minecraft/server/ItemFireworksCharge.java | 6 + .../java/net/minecraft/server/ItemFish.java | 132 + .../net/minecraft/server/ItemFishingRod.java | 0 .../minecraft/server/ItemFlintAndSteel.java | 0 .../java/net/minecraft/server/ItemFood.java | 83 + .../net/minecraft/server/ItemGlassBottle.java | 42 + .../net/minecraft/server/ItemGoldenApple.java | 30 + .../net/minecraft/server/ItemHanging.java | 0 .../java/net/minecraft/server/ItemHoe.java | 75 + .../java/net/minecraft/server/ItemLeash.java | 0 .../java/net/minecraft/server/ItemLeaves.java | 21 + .../net/minecraft/server/ItemMapEmpty.java | 0 .../net/minecraft/server/ItemMilkBucket.java | 0 .../net/minecraft/server/ItemMinecart.java | 0 .../net/minecraft/server/ItemMonsterEgg.java | 0 .../minecraft/server/ItemMultiTexture.java | 43 + .../net/minecraft/server/ItemNameTag.java | 23 + .../net/minecraft/server/ItemNetherStar.java | 6 + .../net/minecraft/server/ItemPickaxe.java | 21 + .../java/net/minecraft/server/ItemPiston.java | 12 + .../java/net/minecraft/server/ItemPotion.java | 145 + .../java/net/minecraft/server/ItemRecord.java | 0 .../net/minecraft/server/ItemRedstone.java | 29 + .../java/net/minecraft/server/ItemReed.java | 45 + .../java/net/minecraft/server/ItemSaddle.java | 30 + .../net/minecraft/server/ItemSeedFood.java | 27 + .../java/net/minecraft/server/ItemSeeds.java | 27 + .../java/net/minecraft/server/ItemShears.java | 27 + .../java/net/minecraft/server/ItemSign.java | 43 + .../java/net/minecraft/server/ItemSkull.java | 0 .../java/net/minecraft/server/ItemSnow.java | 49 + .../net/minecraft/server/ItemSnowball.java | 23 + .../java/net/minecraft/server/ItemSoup.java | 14 + .../java/net/minecraft/server/ItemSpade.java | 17 + .../java/net/minecraft/server/ItemStack.java | 0 .../java/net/minecraft/server/ItemStep.java | 75 + .../java/net/minecraft/server/ItemSword.java | 80 + .../net/minecraft/server/ItemTallPlant.java | 10 + .../java/net/minecraft/server/ItemTool.java | 62 + .../net/minecraft/server/ItemWaterLily.java | 0 .../net/minecraft/server/ItemWithAuxData.java | 36 + .../net/minecraft/server/ItemWorldMap.java | 0 .../minecraft/server/ItemWorldMapBase.java | 14 + .../net/minecraft/server/ItemWrittenBook.java | 84 + .../main/java/net/minecraft/server/Items.java | 390 +++ .../net/minecraft/server/IteratorUtils.java | 173 ++ .../java/net/minecraft/server/JsonList.java | 0 .../net/minecraft/server/JsonListEntry.java | 26 + .../net/minecraft/server/LayerIsland.java | 25 + .../net/minecraft/server/LazyInitVar.java | 20 + .../minecraft/server/LegacyPingHandler.java | 0 .../java/net/minecraft/server/LocaleI18n.java | 27 + .../net/minecraft/server/LocaleLanguage.java | 81 + .../net/minecraft/server/LoginListener.java | 0 .../net/minecraft/server/LongHashMap.java | 212 ++ .../java/net/minecraft/server/MCUtil.java | 0 .../minecraft/server/MapGeneratorUtils.java | 30 + .../java/net/minecraft/server/MapIcon.java | 60 + .../java/net/minecraft/server/Material.java | 130 + .../minecraft/server/MaterialDecoration.java | 21 + .../net/minecraft/server/MaterialGas.java | 21 + .../net/minecraft/server/MaterialLiquid.java | 22 + .../minecraft/server/MaterialMapColor.java | 54 + .../net/minecraft/server/MaterialPortal.java | 20 + .../java/net/minecraft/server/MathHelper.java | 310 ++ .../net/minecraft/server/MerchantRecipe.java | 120 + .../minecraft/server/MerchantRecipeList.java | 0 .../net/minecraft/server/MethodProfiler.java | 0 .../minecraft/server/MinecraftEncryption.java | 136 + .../net/minecraft/server/MinecraftKey.java | 58 + .../net/minecraft/server/MinecraftServer.java | 15 +- .../java/net/minecraft/server/MobEffect.java | 169 ++ .../minecraft/server/MobEffectAbsorption.java | 18 + .../server/MobEffectAttackDamage.java | 0 .../server/MobEffectHealthBoost.java | 16 + .../net/minecraft/server/MobEffectList.java | 0 .../minecraft/server/MobSpawnerAbstract.java | 0 .../server/MojangStatisticsGenerator.java | 134 + .../server/MojangsonParseException.java | 8 + .../net/minecraft/server/MojangsonParser.java | 433 +++ .../server/MovingObjectPosition.java | 50 + .../java/net/minecraft/server/NBTBase.java | 0 .../server/NBTCompressedStreamTools.java | 0 .../net/minecraft/server/NBTReadLimiter.java | 21 + .../java/net/minecraft/server/NBTTagByte.java | 75 + .../net/minecraft/server/NBTTagByteArray.java | 0 .../net/minecraft/server/NBTTagCompound.java | 0 .../net/minecraft/server/NBTTagDouble.java | 77 + .../java/net/minecraft/server/NBTTagEnd.java | 28 + .../net/minecraft/server/NBTTagFloat.java | 75 + .../java/net/minecraft/server/NBTTagInt.java | 75 + .../net/minecraft/server/NBTTagIntArray.java | 0 .../java/net/minecraft/server/NBTTagList.java | 0 .../java/net/minecraft/server/NBTTagLong.java | 75 + .../net/minecraft/server/NBTTagShort.java | 75 + .../net/minecraft/server/NBTTagString.java | 0 .../main/java/net/minecraft/server/NPC.java | 3 + .../server/NameReferencingFileConverter.java | 0 .../java/net/minecraft/server/Navigation.java | 0 .../minecraft/server/NavigationAbstract.java | 0 .../minecraft/server/NavigationGuardian.java | 51 + .../minecraft/server/NavigationSpider.java | 49 + .../net/minecraft/server/NetworkManager.java | 52 +- .../minecraft/server/NextTickListEntry.java | 0 .../net/minecraft/server/NibbleArray.java | 0 .../net/minecraft/server/NoiseGenerator.java | 6 + .../net/minecraft/server/NoiseGenerator3.java | 56 + .../server/NoiseGenerator3Handler.java | 188 ++ .../server/NoiseGeneratorOctaves.java | 54 + .../server/NoiseGeneratorPerlin.java | 204 ++ .../net/minecraft/server/OldChunkLoader.java | 0 .../net/minecraft/server/OldNibbleArray.java | 22 + .../java/net/minecraft/server/OpList.java | 60 + .../net/minecraft/server/OpListEntry.java | 59 + .../java/net/minecraft/server/Packet.java | 45 + .../minecraft/server/PacketCompressor.java | 0 .../server/PacketDataSerializer.java | 44 +- .../net/minecraft/server/PacketDecoder.java | 45 + .../minecraft/server/PacketDecompressor.java | 0 .../net/minecraft/server/PacketDecrypter.java | 0 .../net/minecraft/server/PacketEncoder.java | 52 + .../net/minecraft/server/PacketEncrypter.java | 0 .../server/PacketEncryptionHandler.java | 49 + .../server/PacketHandshakingInListener.java | 6 + .../PacketHandshakingInSetProtocol.java | 0 .../net/minecraft/server/PacketListener.java | 6 + .../server/PacketListenerPlayIn.java | 50 + .../server/PacketListenerPlayOut.java | 146 + .../server/PacketLoginInEncryptionBegin.java | 0 .../server/PacketLoginInListener.java | 8 + .../minecraft/server/PacketLoginInStart.java | 32 + .../server/PacketLoginOutDisconnect.java | 26 + .../server/PacketLoginOutEncryptionBegin.java | 35 + .../server/PacketLoginOutListener.java | 12 + .../server/PacketLoginOutSetCompression.java | 26 + .../server/PacketLoginOutSuccess.java | 35 + .../server/PacketPlayInAbilities.java | 103 + .../server/PacketPlayInArmAnimation.java | 0 .../server/PacketPlayInBlockDig.java | 47 + .../server/PacketPlayInBlockPlace.java | 0 .../minecraft/server/PacketPlayInChat.java | 2 +- .../server/PacketPlayInClientCommand.java | 37 + .../server/PacketPlayInCloseWindow.java | 0 .../server/PacketPlayInCustomPayload.java | 40 + .../server/PacketPlayInEnchantItem.java | 33 + .../server/PacketPlayInEntityAction.java | 43 + .../minecraft/server/PacketPlayInFlying.java | 131 + .../server/PacketPlayInHeldItemSlot.java | 26 + .../server/PacketPlayInKeepAlive.java | 26 + .../PacketPlayInResourcePackStatus.java | 0 .../server/PacketPlayInSetCreativeSlot.java | 33 + .../server/PacketPlayInSettings.java | 50 + .../server/PacketPlayInSpectate.java | 31 + .../server/PacketPlayInSteerVehicle.java | 58 + .../server/PacketPlayInTabComplete.java | 54 + .../server/PacketPlayInTransaction.java | 36 + .../server/PacketPlayInUpdateSign.java | 48 + .../server/PacketPlayInUseEntity.java | 0 .../server/PacketPlayInWindowClick.java | 61 + .../server/PacketPlayOutAbilities.java | 103 + .../server/PacketPlayOutAnimation.java | 30 + .../server/PacketPlayOutAttachEntity.java | 0 .../minecraft/server/PacketPlayOutBed.java | 30 + .../server/PacketPlayOutBlockAction.java | 38 + .../PacketPlayOutBlockBreakAnimation.java | 34 + .../server/PacketPlayOutBlockChange.java | 30 + .../minecraft/server/PacketPlayOutCamera.java | 26 + .../minecraft/server/PacketPlayOutChat.java | 0 .../server/PacketPlayOutCloseWindow.java | 26 + .../server/PacketPlayOutCollect.java | 30 + .../server/PacketPlayOutCombatEvent.java | 89 + .../server/PacketPlayOutCustomPayload.java | 40 + .../minecraft/server/PacketPlayOutEntity.java | 133 + .../server/PacketPlayOutEntityDestroy.java | 36 + .../server/PacketPlayOutEntityEffect.java | 47 + .../server/PacketPlayOutEntityEquipment.java | 34 + .../PacketPlayOutEntityHeadRotation.java | 30 + .../server/PacketPlayOutEntityMetadata.java | 0 .../server/PacketPlayOutEntityStatus.java | 30 + .../server/PacketPlayOutEntityTeleport.java | 60 + .../server/PacketPlayOutEntityVelocity.java | 68 + .../server/PacketPlayOutExperience.java | 34 + .../server/PacketPlayOutExplosion.java | 90 + .../server/PacketPlayOutGameStateChange.java | 31 + .../server/PacketPlayOutHeldItemSlot.java | 26 + .../server/PacketPlayOutKeepAlive.java | 26 + .../server/PacketPlayOutKickDisconnect.java | 26 + .../minecraft/server/PacketPlayOutLogin.java | 67 + .../minecraft/server/PacketPlayOutMap.java | 86 + .../server/PacketPlayOutMapChunk.java | 0 .../server/PacketPlayOutMapChunkBulk.java | 0 .../server/PacketPlayOutMultiBlockChange.java | 79 + .../server/PacketPlayOutNamedEntitySpawn.java | 63 + .../server/PacketPlayOutNamedSoundEffect.java | 49 + .../server/PacketPlayOutOpenSignEditor.java | 26 + .../server/PacketPlayOutOpenWindow.java | 0 .../server/PacketPlayOutPlayerInfo.java | 6 +- .../PacketPlayOutPlayerListHeaderFooter.java | 0 .../server/PacketPlayOutPosition.java | 96 + .../PacketPlayOutRemoveEntityEffect.java | 30 + .../server/PacketPlayOutResourcePackSend.java | 33 + .../server/PacketPlayOutRespawn.java | 42 + ...cketPlayOutScoreboardDisplayObjective.java | 35 + .../PacketPlayOutScoreboardObjective.java | 44 + .../server/PacketPlayOutScoreboardScore.java | 65 + .../server/PacketPlayOutScoreboardTeam.java | 0 .../server/PacketPlayOutServerDifficulty.java | 28 + .../server/PacketPlayOutSetCompression.java | 22 + .../server/PacketPlayOutSetSlot.java | 34 + .../server/PacketPlayOutSpawnEntity.java | 0 ...PacketPlayOutSpawnEntityExperienceOrb.java | 42 + .../PacketPlayOutSpawnEntityLiving.java | 0 .../PacketPlayOutSpawnEntityPainting.java | 38 + .../PacketPlayOutSpawnEntityWeather.java | 0 .../server/PacketPlayOutSpawnPosition.java | 26 + .../server/PacketPlayOutStatistic.java | 51 + .../server/PacketPlayOutTabComplete.java | 40 + .../server/PacketPlayOutTileEntityData.java | 34 + .../minecraft/server/PacketPlayOutTitle.java | 0 .../server/PacketPlayOutTransaction.java | 34 + .../server/PacketPlayOutUpdateAttributes.java | 103 + .../server/PacketPlayOutUpdateEntityNBT.java | 30 + .../server/PacketPlayOutUpdateHealth.java | 34 + .../server/PacketPlayOutUpdateSign.java | 41 + .../server/PacketPlayOutUpdateTime.java | 0 .../server/PacketPlayOutWindowData.java | 34 + .../server/PacketPlayOutWindowItems.java | 54 + .../server/PacketPlayOutWorldBorder.java | 163 + .../server/PacketPlayOutWorldEvent.java | 38 + .../server/PacketPlayOutWorldParticles.java | 0 .../net/minecraft/server/PacketPrepender.java | 33 + .../net/minecraft/server/PacketSplitter.java | 59 + .../server/PacketStatusInListener.java | 8 + .../minecraft/server/PacketStatusInPing.java | 26 + .../minecraft/server/PacketStatusInStart.java | 16 + .../server/PacketStatusListener.java | 0 .../server/PacketStatusOutListener.java | 8 + .../minecraft/server/PacketStatusOutPong.java | 26 + .../server/PacketStatusOutServerInfo.java | 29 + .../main/java/net/minecraft/server/Path.java | 0 .../java/net/minecraft/server/PathEntity.java | 79 + .../java/net/minecraft/server/PathPoint.java | 64 + .../java/net/minecraft/server/Pathfinder.java | 100 + .../minecraft/server/PathfinderAbstract.java | 40 + .../net/minecraft/server/PathfinderGoal.java | 32 + .../server/PathfinderGoalArrowAttack.java | 92 + .../server/PathfinderGoalAvoidTarget.java | 0 .../minecraft/server/PathfinderGoalBeg.java | 47 + .../server/PathfinderGoalBreakDoor.java | 0 .../minecraft/server/PathfinderGoalBreed.java | 0 .../server/PathfinderGoalDefendVillage.java | 0 .../server/PathfinderGoalDoorInteract.java | 75 + .../server/PathfinderGoalEatTile.java | 0 .../server/PathfinderGoalFleeSun.java | 64 + .../minecraft/server/PathfinderGoalFloat.java | 0 .../server/PathfinderGoalFollowOwner.java | 96 + .../server/PathfinderGoalFollowParent.java | 77 + .../server/PathfinderGoalGotoTarget.java | 86 + .../server/PathfinderGoalHurtByTarget.java | 0 .../server/PathfinderGoalInteract.java | 9 + .../PathfinderGoalInteractVillagers.java | 74 + .../server/PathfinderGoalJumpOnBlock.java | 67 + .../server/PathfinderGoalLeapAtTarget.java | 39 + .../server/PathfinderGoalLookAtPlayer.java | 62 + .../PathfinderGoalLookAtTradingPlayer.java | 20 + .../server/PathfinderGoalMakeLove.java | 0 .../server/PathfinderGoalMeleeAttack.java | 99 + .../server/PathfinderGoalMoveIndoors.java | 0 .../PathfinderGoalMoveThroughVillage.java | 127 + .../PathfinderGoalMoveTowardsRestriction.java | 0 .../PathfinderGoalMoveTowardsTarget.java | 51 + ...PathfinderGoalNearestAttackableTarget.java | 0 ...GoalNearestAttackableTargetInsentient.java | 0 .../server/PathfinderGoalOcelotAttack.java | 57 + .../server/PathfinderGoalOfferFlower.java | 43 + .../server/PathfinderGoalOpenDoor.java | 34 + .../PathfinderGoalOwnerHurtByTarget.java | 0 .../server/PathfinderGoalOwnerHurtTarget.java | 0 .../minecraft/server/PathfinderGoalPanic.java | 0 .../PathfinderGoalPassengerCarrotStick.java | 153 + .../minecraft/server/PathfinderGoalPlay.java | 88 + .../PathfinderGoalRandomLookaround.java | 35 + .../server/PathfinderGoalRandomStroll.java | 0 .../PathfinderGoalRandomTargetNonTamed.java | 17 + .../PathfinderGoalRestrictOpenDoor.java | 0 .../server/PathfinderGoalRestrictSun.java | 22 + .../server/PathfinderGoalSelector.java | 0 .../minecraft/server/PathfinderGoalSit.java | 0 .../minecraft/server/PathfinderGoalSwell.java | 0 .../server/PathfinderGoalTakeFlower.java | 73 + .../minecraft/server/PathfinderGoalTame.java | 0 .../server/PathfinderGoalTarget.java | 149 + .../PathfinderGoalTargetNearestPlayer.java | 0 .../minecraft/server/PathfinderGoalTempt.java | 0 .../server/PathfinderGoalTradeWithPlayer.java | 35 + .../server/PathfinderGoalVillagerFarm.java | 109 + .../minecraft/server/PathfinderNormal.java | 0 .../net/minecraft/server/PathfinderWater.java | 63 + .../net/minecraft/server/PersistentBase.java | 27 + .../server/PersistentCollection.java | 0 .../server/PersistentScoreboard.java | 269 ++ .../minecraft/server/PersistentStructure.java | 30 + .../minecraft/server/PersistentVillage.java | 265 ++ .../server/PistonExtendsChecker.java | 178 ++ .../net/minecraft/server/PlayerAbilities.java | 55 + .../net/minecraft/server/PlayerChunkMap.java | 0 .../minecraft/server/PlayerConnection.java | 35 +- .../server/PlayerConnectionUtils.java | 15 + .../server/PlayerInteractManager.java | 0 .../net/minecraft/server/PlayerInventory.java | 0 .../java/net/minecraft/server/PlayerList.java | 5 +- .../net/minecraft/server/PlayerListBox.java | 28 + .../net/minecraft/server/PlayerSelector.java | 628 ++++ .../minecraft/server/PortalTravelAgent.java | 0 .../java/net/minecraft/server/Position.java | 26 + .../server/PossibleFishingResult.java | 50 + .../net/minecraft/server/PotionBrewer.java | 456 +++ .../net/minecraft/server/PropertyManager.java | 0 .../server/RandomPositionGenerator.java | 88 + .../net/minecraft/server/RecipeArmorDye.java | 0 .../net/minecraft/server/RecipeBookClone.java | 0 .../net/minecraft/server/RecipeFireworks.java | 0 .../net/minecraft/server/RecipeIngots.java | 23 + .../net/minecraft/server/RecipeMapClone.java | 0 .../net/minecraft/server/RecipeMapExtend.java | 53 + .../net/minecraft/server/RecipeRepair.java | 0 .../net/minecraft/server/RecipesArmor.java | 24 + .../net/minecraft/server/RecipesBanner.java | 0 .../net/minecraft/server/RecipesCrafting.java | 42 + .../net/minecraft/server/RecipesDyes.java | 50 + .../net/minecraft/server/RecipesFood.java | 20 + .../net/minecraft/server/RecipesFurnace.java | 0 .../net/minecraft/server/RecipesTools.java | 25 + .../net/minecraft/server/RecipesWeapons.java | 26 + .../net/minecraft/server/RedirectStream.java | 32 + .../java/net/minecraft/server/RegionFile.java | 0 .../net/minecraft/server/RegionFileCache.java | 0 .../java/net/minecraft/server/Registry.java | 3 + .../net/minecraft/server/RegistryBlocks.java | 37 + .../net/minecraft/server/RegistryDefault.java | 16 + .../java/net/minecraft/server/RegistryID.java | 40 + .../minecraft/server/RegistryMaterials.java | 49 + .../net/minecraft/server/RegistrySimple.java | 48 + .../server/RemoteConnectionThread.java | 147 + .../server/RemoteControlCommandListener.java | 0 .../server/RemoteControlListener.java | 111 + .../server/RemoteControlSession.java | 152 + .../server/RemoteStatusListener.java | 331 ++ .../minecraft/server/RemoteStatusReply.java | 41 + .../minecraft/server/ReportedException.java | 22 + .../java/net/minecraft/server/Scoreboard.java | 353 +++ .../server/ScoreboardBaseCriteria.java | 29 + .../server/ScoreboardCriteriaInteger.java | 29 + .../server/ScoreboardHealthCriteria.java | 35 + .../minecraft/server/ScoreboardObjective.java | 44 + .../net/minecraft/server/ScoreboardScore.java | 93 + .../minecraft/server/ScoreboardServer.java | 0 .../server/ScoreboardStatisticCriteria.java | 11 + .../net/minecraft/server/ScoreboardTeam.java | 138 + .../minecraft/server/ScoreboardTeamBase.java | 58 + .../minecraft/server/SecondaryWorldData.java | 134 + .../server/SecondaryWorldServer.java | 0 .../net/minecraft/server/ServerCommand.java | 12 + .../minecraft/server/ServerConnection.java | 24 +- .../java/net/minecraft/server/ServerGUI.java | 169 ++ .../minecraft/server/ServerNBTManager.java | 42 + .../java/net/minecraft/server/ServerPing.java | 247 ++ .../server/ServerStatisticManager.java | 0 .../net/minecraft/server/ShapeDetector.java | 171 ++ .../minecraft/server/ShapeDetectorBlock.java | 52 + .../server/ShapeDetectorBuilder.java | 113 + .../net/minecraft/server/ShapedRecipes.java | 0 .../minecraft/server/ShapelessRecipes.java | 0 .../net/minecraft/server/SharedConstants.java | 26 + .../main/java/net/minecraft/server/Slot.java | 0 .../net/minecraft/server/SlotFurnaceFuel.java | 20 + .../minecraft/server/SlotFurnaceResult.java | 0 .../minecraft/server/SlotMerchantResult.java | 84 + .../java/net/minecraft/server/SlotResult.java | 106 + .../net/minecraft/server/SourceBlock.java | 42 + .../net/minecraft/server/SpawnerCreature.java | 0 .../java/net/minecraft/server/Statistic.java | 105 + .../net/minecraft/server/StatisticList.java | 232 ++ .../minecraft/server/StatisticManager.java | 0 .../minecraft/server/StatisticWrapper.java | 25 + .../server/StatusChallengeUtils.java | 36 + .../server/StructureBoundingBox.java | 180 ++ .../minecraft/server/StructureGenerator.java | 0 .../net/minecraft/server/StructurePiece.java | 646 ++++ .../server/StructurePieceTreasure.java | 79 + .../net/minecraft/server/StructureStart.java | 157 + .../net/minecraft/server/SystemUtils.java | 21 + .../net/minecraft/server/ThreadWatchdog.java | 93 + .../java/net/minecraft/server/TileEntity.java | 0 .../minecraft/server/TileEntityBanner.java | 0 .../minecraft/server/TileEntityBeacon.java | 0 .../server/TileEntityBrewingStand.java | 0 .../net/minecraft/server/TileEntityChest.java | 0 .../minecraft/server/TileEntityCommand.java | 0 .../server/TileEntityComparator.java | 26 + .../minecraft/server/TileEntityContainer.java | 39 + .../minecraft/server/TileEntityDispenser.java | 0 .../minecraft/server/TileEntityDropper.java | 14 + .../server/TileEntityEnchantTable.java | 122 + .../server/TileEntityEnderChest.java | 0 .../server/TileEntityEnderPortal.java | 6 + .../minecraft/server/TileEntityFlowerPot.java | 55 + .../minecraft/server/TileEntityFurnace.java | 0 .../minecraft/server/TileEntityHopper.java | 0 .../server/TileEntityLightDetector.java | 0 .../server/TileEntityMobSpawner.java | 62 + .../net/minecraft/server/TileEntityNote.java | 0 .../minecraft/server/TileEntityPiston.java | 0 .../net/minecraft/server/TileEntitySign.java | 0 .../net/minecraft/server/TileEntitySkull.java | 0 .../main/java/net/minecraft/server/Tuple.java | 20 + .../java/net/minecraft/server/UserCache.java | 0 .../java/net/minecraft/server/UtilColor.java | 13 + .../main/java/net/minecraft/server/Vec3D.java | 134 + .../java/net/minecraft/server/Vector3f.java | 51 + .../java/net/minecraft/server/Village.java | 0 .../net/minecraft/server/VillageDoor.java | 89 + .../net/minecraft/server/VillageSiege.java | 0 .../net/minecraft/server/WeightedRandom.java | 60 + .../server/WeightedRandomEnchant.java | 13 + .../java/net/minecraft/server/WhiteList.java | 58 + .../net/minecraft/server/WhiteListEntry.java | 42 + .../main/java/net/minecraft/server/World.java | 2 +- .../net/minecraft/server/WorldBorder.java | 0 .../minecraft/server/WorldChunkManager.java | 202 ++ .../server/WorldChunkManagerHell.java | 59 + .../java/net/minecraft/server/WorldData.java | 0 .../minecraft/server/WorldGenAcaciaTree.java | 179 ++ .../net/minecraft/server/WorldGenBase.java | 34 + .../net/minecraft/server/WorldGenBigTree.java | 292 ++ .../minecraft/server/WorldGenBonusChest.java | 67 + .../net/minecraft/server/WorldGenCactus.java | 26 + .../net/minecraft/server/WorldGenCanyon.java | 189 ++ .../net/minecraft/server/WorldGenCaves.java | 217 ++ .../minecraft/server/WorldGenCavesHell.java | 185 ++ .../net/minecraft/server/WorldGenClay.java | 43 + .../minecraft/server/WorldGenDeadBush.java | 26 + .../minecraft/server/WorldGenDesertWell.java | 89 + .../minecraft/server/WorldGenDungeons.java | 144 + .../net/minecraft/server/WorldGenEnder.java | 57 + .../net/minecraft/server/WorldGenFactory.java | 94 + .../net/minecraft/server/WorldGenFire.java | 20 + .../minecraft/server/WorldGenFlatInfo.java | 272 ++ .../server/WorldGenFlatLayerInfo.java | 75 + .../net/minecraft/server/WorldGenFlowers.java | 30 + .../net/minecraft/server/WorldGenForest.java | 105 + .../minecraft/server/WorldGenForestTree.java | 0 .../net/minecraft/server/WorldGenGrass.java | 30 + .../minecraft/server/WorldGenGroundBush.java | 0 .../minecraft/server/WorldGenHellLava.java | 73 + .../server/WorldGenHugeMushroom.java | 171 ++ .../minecraft/server/WorldGenJungleTree.java | 105 + .../net/minecraft/server/WorldGenLakes.java | 132 + .../server/WorldGenLargeFeature.java | 0 .../minecraft/server/WorldGenLightStone1.java | 46 + .../minecraft/server/WorldGenLightStone2.java | 46 + .../net/minecraft/server/WorldGenLiquids.java | 65 + .../minecraft/server/WorldGenMegaTree.java | 113 + .../server/WorldGenMegaTreeAbstract.java | 0 .../net/minecraft/server/WorldGenMelon.java | 20 + .../net/minecraft/server/WorldGenMinable.java | 73 + .../minecraft/server/WorldGenMineshaft.java | 37 + .../server/WorldGenMineshaftPieces.java | 704 +++++ .../server/WorldGenMineshaftStart.java | 19 + .../minecraft/server/WorldGenMonument.java | 170 ++ .../server/WorldGenMonumentPieces.java | 1993 ++++++++++++ .../minecraft/server/WorldGenMushrooms.java | 24 + .../net/minecraft/server/WorldGenNether.java | 62 + .../server/WorldGenNetherPieces.java | 1241 ++++++++ .../minecraft/server/WorldGenPackedIce1.java | 47 + .../minecraft/server/WorldGenPackedIce2.java | 0 .../net/minecraft/server/WorldGenPumpkin.java | 20 + .../net/minecraft/server/WorldGenReed.java | 30 + .../server/WorldGenRegistration.java | 0 .../net/minecraft/server/WorldGenSand.java | 43 + .../minecraft/server/WorldGenStronghold.java | 153 + .../server/WorldGenStrongholdPieces.java | 1430 +++++++++ .../minecraft/server/WorldGenSwampTree.java | 158 + .../net/minecraft/server/WorldGenTaiga1.java | 102 + .../net/minecraft/server/WorldGenTaiga2.java | 114 + .../server/WorldGenTaigaStructure.java | 61 + .../minecraft/server/WorldGenTallPlant.java | 29 + .../server/WorldGenTreeAbstract.java | 25 + .../net/minecraft/server/WorldGenTrees.java | 204 ++ .../net/minecraft/server/WorldGenVillage.java | 0 .../server/WorldGenVillagePieces.java | 0 .../net/minecraft/server/WorldGenVines.java | 32 + .../minecraft/server/WorldGenWaterLily.java | 22 + .../net/minecraft/server/WorldGenerator.java | 29 + .../net/minecraft/server/WorldLoader.java | 117 + .../minecraft/server/WorldLoaderServer.java | 188 ++ .../net/minecraft/server/WorldManager.java | 0 .../java/net/minecraft/server/WorldMap.java | 0 .../net/minecraft/server/WorldNBTStorage.java | 0 .../net/minecraft/server/WorldProvider.java | 0 .../minecraft/server/WorldProviderHell.java | 64 + .../minecraft/server/WorldProviderNormal.java | 14 + .../minecraft/server/WorldProviderTheEnd.java | 48 + .../net/minecraft/server/WorldServer.java | 1 + .../net/minecraft/server/WorldSettings.java | 140 + .../java/net/minecraft/server/WorldType.java | 76 + .../tacospigot/BlockStateRegistry.java | 0 .../net/techcable/tacospigot/CompatHacks.java | 0 .../techcable/tacospigot/HopperHelper.java | 0 .../techcable/tacospigot/HopperPusher.java | 0 .../tacospigot/ImmutableArrayMap.java | 0 .../tacospigot/ImmutableArrayTable.java | 0 .../net/techcable/tacospigot/Indexer.java | 0 .../tacospigot/TacoSpigotConfig.java | 0 .../tacospigot/TacoSpigotWorldConfig.java | 0 .../tacospigot/function/ObjIntFunction.java | 0 .../tacospigot/utils/BlockHelper.java | 0 .../java/org/bukkit/craftbukkit/CraftArt.java | 0 .../org/bukkit/craftbukkit/CraftChunk.java | 11 +- .../craftbukkit/CraftChunkSnapshot.java | 0 .../bukkit/craftbukkit/CraftCrashReport.java | 0 .../org/bukkit/craftbukkit/CraftEffect.java | 0 .../craftbukkit/CraftEquipmentSlot.java | 0 .../bukkit/craftbukkit/CraftIpBanEntry.java | 0 .../bukkit/craftbukkit/CraftIpBanList.java | 0 .../craftbukkit/CraftOfflinePlayer.java | 0 .../craftbukkit/CraftProfileBanEntry.java | 0 .../craftbukkit/CraftProfileBanList.java | 0 .../org/bukkit/craftbukkit/CraftServer.java | 19 +- .../org/bukkit/craftbukkit/CraftSound.java | 0 .../bukkit/craftbukkit/CraftStatistic.java | 0 .../bukkit/craftbukkit/CraftTravelAgent.java | 0 .../org/bukkit/craftbukkit/CraftWorld.java | 0 .../bukkit/craftbukkit/CraftWorldBorder.java | 0 .../craftbukkit/LoggerOutputStream.java | 0 .../java/org/bukkit/craftbukkit/Main.java | 16 +- .../org/bukkit/craftbukkit/Overridden.java | 0 .../java/org/bukkit/craftbukkit/TrigMath.java | 0 .../bukkit/craftbukkit/block/CraftBanner.java | 0 .../bukkit/craftbukkit/block/CraftBeacon.java | 0 .../bukkit/craftbukkit/block/CraftBlock.java | 0 .../craftbukkit/block/CraftBlockState.java | 0 .../craftbukkit/block/CraftBrewingStand.java | 0 .../bukkit/craftbukkit/block/CraftChest.java | 0 .../craftbukkit/block/CraftCommandBlock.java | 0 .../block/CraftCreatureSpawner.java | 0 .../craftbukkit/block/CraftDispenser.java | 0 .../craftbukkit/block/CraftDropper.java | 0 .../craftbukkit/block/CraftFurnace.java | 0 .../bukkit/craftbukkit/block/CraftHopper.java | 0 .../craftbukkit/block/CraftJukebox.java | 0 .../craftbukkit/block/CraftNoteBlock.java | 0 .../bukkit/craftbukkit/block/CraftSign.java | 0 .../bukkit/craftbukkit/block/CraftSkull.java | 0 .../craftbukkit/chunkio/ChunkIOExecutor.java | 0 .../craftbukkit/chunkio/ChunkIOProvider.java | 0 .../craftbukkit/chunkio/QueuedChunk.java | 0 .../command/ColouredConsoleSender.java | 8 +- .../command/ConsoleCommandCompleter.java | 4 +- .../command/CraftBlockCommandSender.java | 0 .../command/CraftConsoleCommandSender.java | 0 .../CraftRemoteConsoleCommandSender.java | 0 .../command/ProxiedNativeCommandSender.java | 0 .../command/ServerCommandSender.java | 0 .../command/VanillaCommandWrapper.java | 0 .../conversations/ConversationTracker.java | 0 .../enchantments/CraftEnchantment.java | 0 .../entity/AbstractProjectile.java | 0 .../craftbukkit/entity/CraftAgeable.java | 0 .../craftbukkit/entity/CraftAmbient.java | 0 .../craftbukkit/entity/CraftAnimals.java | 0 .../craftbukkit/entity/CraftArmorStand.java | 0 .../bukkit/craftbukkit/entity/CraftArrow.java | 0 .../bukkit/craftbukkit/entity/CraftBat.java | 0 .../bukkit/craftbukkit/entity/CraftBlaze.java | 0 .../bukkit/craftbukkit/entity/CraftBoat.java | 0 .../craftbukkit/entity/CraftCaveSpider.java | 0 .../craftbukkit/entity/CraftChicken.java | 0 .../entity/CraftComplexLivingEntity.java | 0 .../craftbukkit/entity/CraftComplexPart.java | 0 .../bukkit/craftbukkit/entity/CraftCow.java | 0 .../craftbukkit/entity/CraftCreature.java | 0 .../craftbukkit/entity/CraftCreeper.java | 0 .../bukkit/craftbukkit/entity/CraftEgg.java | 0 .../craftbukkit/entity/CraftEnderCrystal.java | 0 .../craftbukkit/entity/CraftEnderDragon.java | 0 .../entity/CraftEnderDragonPart.java | 0 .../craftbukkit/entity/CraftEnderPearl.java | 0 .../craftbukkit/entity/CraftEnderSignal.java | 0 .../craftbukkit/entity/CraftEnderman.java | 0 .../craftbukkit/entity/CraftEndermite.java | 0 .../craftbukkit/entity/CraftEntity.java | 0 .../entity/CraftExperienceOrb.java | 0 .../craftbukkit/entity/CraftFallingSand.java | 0 .../craftbukkit/entity/CraftFireball.java | 0 .../craftbukkit/entity/CraftFirework.java | 0 .../bukkit/craftbukkit/entity/CraftFish.java | 0 .../craftbukkit/entity/CraftFlying.java | 0 .../bukkit/craftbukkit/entity/CraftGhast.java | 0 .../bukkit/craftbukkit/entity/CraftGiant.java | 0 .../bukkit/craftbukkit/entity/CraftGolem.java | 0 .../craftbukkit/entity/CraftGuardian.java | 0 .../craftbukkit/entity/CraftHanging.java | 0 .../bukkit/craftbukkit/entity/CraftHorse.java | 0 .../craftbukkit/entity/CraftHumanEntity.java | 0 .../craftbukkit/entity/CraftIronGolem.java | 0 .../bukkit/craftbukkit/entity/CraftItem.java | 0 .../craftbukkit/entity/CraftItemFrame.java | 0 .../entity/CraftLargeFireball.java | 0 .../bukkit/craftbukkit/entity/CraftLeash.java | 0 .../entity/CraftLightningStrike.java | 0 .../craftbukkit/entity/CraftLivingEntity.java | 0 .../craftbukkit/entity/CraftMagmaCube.java | 0 .../craftbukkit/entity/CraftMinecart.java | 0 .../entity/CraftMinecartChest.java | 0 .../entity/CraftMinecartCommand.java | 0 .../entity/CraftMinecartFurnace.java | 0 .../entity/CraftMinecartHopper.java | 0 .../entity/CraftMinecartMobSpawner.java | 0 .../entity/CraftMinecartRideable.java | 0 .../craftbukkit/entity/CraftMinecartTNT.java | 0 .../craftbukkit/entity/CraftMonster.java | 0 .../craftbukkit/entity/CraftMushroomCow.java | 0 .../craftbukkit/entity/CraftOcelot.java | 0 .../craftbukkit/entity/CraftPainting.java | 0 .../bukkit/craftbukkit/entity/CraftPig.java | 0 .../craftbukkit/entity/CraftPigZombie.java | 0 .../craftbukkit/entity/CraftPlayer.java | 0 .../craftbukkit/entity/CraftProjectile.java | 0 .../craftbukkit/entity/CraftRabbit.java | 0 .../bukkit/craftbukkit/entity/CraftSheep.java | 0 .../craftbukkit/entity/CraftSilverfish.java | 0 .../craftbukkit/entity/CraftSkeleton.java | 0 .../bukkit/craftbukkit/entity/CraftSlime.java | 0 .../entity/CraftSmallFireball.java | 0 .../craftbukkit/entity/CraftSnowball.java | 0 .../craftbukkit/entity/CraftSnowman.java | 0 .../craftbukkit/entity/CraftSpider.java | 0 .../bukkit/craftbukkit/entity/CraftSquid.java | 0 .../craftbukkit/entity/CraftTNTPrimed.java | 0 .../entity/CraftTameableAnimal.java | 0 .../entity/CraftThrownExpBottle.java | 0 .../craftbukkit/entity/CraftThrownPotion.java | 0 .../craftbukkit/entity/CraftVehicle.java | 0 .../craftbukkit/entity/CraftVillager.java | 0 .../craftbukkit/entity/CraftWaterMob.java | 0 .../craftbukkit/entity/CraftWeather.java | 0 .../bukkit/craftbukkit/entity/CraftWitch.java | 0 .../craftbukkit/entity/CraftWither.java | 0 .../craftbukkit/entity/CraftWitherSkull.java | 0 .../bukkit/craftbukkit/entity/CraftWolf.java | 0 .../craftbukkit/entity/CraftZombie.java | 0 .../craftbukkit/event/CraftEventFactory.java | 0 .../craftbukkit/generator/CraftChunkData.java | 0 .../generator/CustomChunkGenerator.java | 0 .../generator/InternalChunkGenerator.java | 0 .../generator/NetherChunkGenerator.java | 0 .../generator/NormalChunkGenerator.java | 0 .../generator/SkyLandsChunkGenerator.java | 0 .../help/CommandAliasHelpTopic.java | 0 .../craftbukkit/help/CustomHelpTopic.java | 0 .../help/CustomIndexHelpTopic.java | 0 .../craftbukkit/help/HelpTopicAmendment.java | 0 .../craftbukkit/help/HelpYamlReader.java | 0 .../help/MultipleCommandAliasHelpTopic.java | 0 .../MultipleCommandAliasHelpTopicFactory.java | 0 .../craftbukkit/help/SimpleHelpMap.java | 0 .../craftbukkit/inventory/CraftContainer.java | 0 .../inventory/CraftEntityEquipment.java | 0 .../inventory/CraftFurnaceRecipe.java | 0 .../craftbukkit/inventory/CraftInventory.java | 0 .../inventory/CraftInventoryAnvil.java | 0 .../inventory/CraftInventoryBeacon.java | 0 .../inventory/CraftInventoryBrewer.java | 0 .../inventory/CraftInventoryCrafting.java | 0 .../inventory/CraftInventoryCustom.java | 0 .../inventory/CraftInventoryDoubleChest.java | 0 .../inventory/CraftInventoryEnchanting.java | 0 .../inventory/CraftInventoryFurnace.java | 0 .../inventory/CraftInventoryHorse.java | 0 .../inventory/CraftInventoryMerchant.java | 0 .../inventory/CraftInventoryPlayer.java | 0 .../inventory/CraftInventoryView.java | 0 .../inventory/CraftItemFactory.java | 0 .../craftbukkit/inventory/CraftItemStack.java | 0 .../inventory/CraftMetaBanner.java | 0 .../inventory/CraftMetaBlockState.java | 0 .../craftbukkit/inventory/CraftMetaBook.java | 0 .../inventory/CraftMetaBookSigned.java | 0 .../inventory/CraftMetaCharge.java | 0 .../inventory/CraftMetaEnchantedBook.java | 0 .../inventory/CraftMetaFirework.java | 0 .../craftbukkit/inventory/CraftMetaItem.java | 0 .../inventory/CraftMetaLeatherArmor.java | 0 .../craftbukkit/inventory/CraftMetaMap.java | 0 .../inventory/CraftMetaPotion.java | 0 .../craftbukkit/inventory/CraftMetaSkull.java | 0 .../craftbukkit/inventory/CraftRecipe.java | 0 .../inventory/CraftShapedRecipe.java | 0 .../inventory/CraftShapelessRecipe.java | 0 .../inventory/InventoryIterator.java | 0 .../inventory/InventoryWrapper.java | 0 .../craftbukkit/inventory/RecipeIterator.java | 0 .../craftbukkit/map/CraftMapCanvas.java | 0 .../craftbukkit/map/CraftMapRenderer.java | 0 .../bukkit/craftbukkit/map/CraftMapView.java | 0 .../bukkit/craftbukkit/map/RenderData.java | 0 .../metadata/BlockMetadataStore.java | 0 .../metadata/EntityMetadataStore.java | 0 .../metadata/PlayerMetadataStore.java | 0 .../SpecializedBlockMetadataStore.java | 0 .../metadata/WorldMetadataStore.java | 0 .../craftbukkit/potion/CraftPotionBrewer.java | 0 .../potion/CraftPotionEffectType.java | 0 .../CraftBlockProjectileSource.java | 0 .../scheduler/CraftAsyncDebugger.java | 0 .../scheduler/CraftAsyncScheduler.java | 0 .../craftbukkit/scheduler/CraftAsyncTask.java | 0 .../craftbukkit/scheduler/CraftFuture.java | 0 .../craftbukkit/scheduler/CraftScheduler.java | 0 .../craftbukkit/scheduler/CraftTask.java | 0 .../craftbukkit/scoreboard/CraftCriteria.java | 0 .../scoreboard/CraftObjective.java | 0 .../craftbukkit/scoreboard/CraftScore.java | 0 .../scoreboard/CraftScoreboard.java | 0 .../scoreboard/CraftScoreboardComponent.java | 0 .../scoreboard/CraftScoreboardManager.java | 0 .../CraftScoreboardTranslations.java | 0 .../craftbukkit/scoreboard/CraftTeam.java | 0 .../util/AsynchronousExecutor.java | 0 .../util/BlockStateListPopulator.java | 0 .../craftbukkit/util/CraftChatMessage.java | 0 .../craftbukkit/util/CraftDamageSource.java | 0 .../craftbukkit/util/CraftIconCache.java | 0 .../craftbukkit/util/CraftMagicNumbers.java | 0 .../craftbukkit/util/CraftPotionUtil.java | 0 .../craftbukkit/util/DatFileFilter.java | 0 .../craftbukkit/util/ForwardLogHandler.java | 0 .../bukkit/craftbukkit/util/HashTreeSet.java | 0 .../bukkit/craftbukkit/util/LazyHashSet.java | 0 .../craftbukkit/util/LazyPlayerSet.java | 0 .../org/bukkit/craftbukkit/util/LongHash.java | 0 .../bukkit/craftbukkit/util/LongHashSet.java | 0 .../craftbukkit/util/LongObjectHashMap.java | 0 .../craftbukkit/util/MojangNameLookup.java | 0 .../util/ServerShutdownThread.java | 3 +- .../util/ShortConsoleLogFormatter.java | 0 .../util/StructureGrowDelegate.java | 0 .../util/TerminalConsoleWriterThread.java | 6 +- .../bukkit/craftbukkit/util/UnsafeList.java | 0 .../bukkit/craftbukkit/util/Versioning.java | 0 .../org/bukkit/craftbukkit/util/Waitable.java | 0 .../craftbukkit/util/WeakCollection.java | 0 .../util/permissions/CommandPermissions.java | 0 .../permissions/CraftDefaultPermissions.java | 0 .../github/paperspigot/PaperSpigotConfig.java | 48 +- .../paperspigot/PaperSpigotWorldConfig.java | 0 .../ServerSchedulerReportingWrapper.java | 0 .../java/org/spigotmc/ActivationRange.java | 0 .../src/main/java/org/spigotmc/AntiXray.java | 0 .../main/java/org/spigotmc/AsyncCatcher.java | 0 .../CaseInsensitiveHashingStrategy.java | 0 .../java/org/spigotmc/CaseInsensitiveMap.java | 0 .../main/java/org/spigotmc/LimitStream.java | 0 .../src/main/java/org/spigotmc/Metrics.java | 0 .../java/org/spigotmc/RestartCommand.java | 0 .../main/java/org/spigotmc/SneakyThrow.java | 0 .../main/java/org/spigotmc/SpigotConfig.java | 0 .../java/org/spigotmc/SpigotWorldConfig.java | 0 .../main/java/org/spigotmc/TickLimiter.java | 0 .../main/java/org/spigotmc/TrackingRange.java | 0 .../main/java/org/spigotmc/ValidateUtils.java | 0 .../java/org/spigotmc/WatchdogThread.java | 0 .../assets/minecraft/lang/en_US.lang | 2678 +++++++++++++++++ .../main/resources/configurations/bukkit.yml | 0 .../resources/configurations/commands.yml | 0 .../main/resources/configurations/help.yml | 0 .../resources/log4j2.component.properties | 1 + .../src/main/resources/log4j2.xml | 10 +- .../resources/yggdrasil_session_pubkey.der | Bin 0 -> 550 bytes .../src/test/java/org/bukkit/ArtTest.java | 0 .../test/java/org/bukkit/DyeColorsTest.java | 0 .../test/java/org/bukkit/MaterialTest.java | 0 .../test/java/org/bukkit/PerMaterialTest.java | 0 .../src/test/java/org/bukkit/SoundTest.java | 0 .../bukkit/StatisticsAndAchievementsTest.java | 0 .../test/java/org/bukkit/WorldTypeTest.java | 0 .../inventory/CompositeSerialization.java | 0 .../inventory/FactoryItemMaterialTest.java | 0 .../inventory/ItemFactoryTest.java | 0 .../ItemMetaImplementationOverrideTest.java | 0 .../craftbukkit/inventory/ItemMetaTest.java | 0 .../inventory/ItemStackBookTest.java | 0 .../ItemStackEnchantStorageTest.java | 0 .../ItemStackFireworkChargeTest.java | 0 .../inventory/ItemStackFireworkTest.java | 0 .../inventory/ItemStackLeatherTest.java | 0 .../ItemStackLoreEnchantmentTest.java | 0 .../inventory/ItemStackMapTest.java | 0 .../inventory/ItemStackPotionsTest.java | 0 .../inventory/ItemStackSkullTest.java | 0 .../craftbukkit/inventory/ItemStackTest.java | 0 .../inventory/NMSCraftItemStackTest.java | 0 .../metadata/BlockMetadataTest.java | 0 .../src/test/java/org/bukkit/map/MapTest.java | 0 .../java/org/bukkit/potion/PotionTest.java | 0 .../bukkit/support/AbstractTestingBase.java | 0 .../org/bukkit/support/DummyEnchantments.java | 0 .../java/org/bukkit/support/DummyPotions.java | 0 .../java/org/bukkit/support/DummyServer.java | 0 .../java/org/bukkit/support/Matchers.java | 0 .../test/java/org/bukkit/support/Util.java | 0 gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59536 bytes gradle/wrapper/gradle-wrapper.properties | 5 + gradlew | 185 ++ gradlew.bat | 89 + pom.xml | 51 - settings.gradle.kts | 9 + 2280 files changed, 63250 insertions(+), 1075 deletions(-) create mode 100644 .gradle/7.1/dependencies-accessors/dependencies-accessors.lock create mode 100644 .gradle/7.1/dependencies-accessors/gc.properties create mode 100644 .gradle/7.1/executionHistory/executionHistory.bin create mode 100644 .gradle/7.1/executionHistory/executionHistory.lock create mode 100644 .gradle/7.1/fileChanges/last-build.bin create mode 100644 .gradle/7.1/fileHashes/fileHashes.bin create mode 100644 .gradle/7.1/fileHashes/fileHashes.lock create mode 100644 .gradle/7.1/fileHashes/resourceHashesCache.bin create mode 100644 .gradle/7.1/gc.properties create mode 100644 .gradle/buildOutputCleanup/buildOutputCleanup.lock create mode 100644 .gradle/buildOutputCleanup/cache.properties create mode 100644 .gradle/buildOutputCleanup/outputFiles.bin create mode 100644 .gradle/checksums/checksums.lock create mode 100644 .gradle/checksums/md5-checksums.bin create mode 100644 .gradle/checksums/sha1-checksums.bin create mode 100644 .gradle/vcs-1/gc.properties delete mode 100644 TacoSpigot-API/pom.xml delete mode 100644 TacoSpigot-Server/deprecation-mappings.at delete mode 100644 TacoSpigot-Server/deprecation-mappings.csrg delete mode 100644 TacoSpigot-Server/pom.xml delete mode 100644 TacoSpigot-Server/src/main/java/net/minecraft/server/PacketSplitter.java rename {TacoSpigot-API => eSpigot-API}/.gitignore (100%) create mode 100644 eSpigot-API/build.gradle.kts rename {TacoSpigot-API => eSpigot-API}/src/main/java/co/aikar/timings/FullServerTickHandler.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/co/aikar/timings/NullTimingHandler.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/co/aikar/timings/TimedEventExecutor.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/co/aikar/timings/Timing.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/co/aikar/timings/TimingData.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/co/aikar/timings/TimingHandler.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/co/aikar/timings/TimingHistory.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/co/aikar/timings/TimingHistoryEntry.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/co/aikar/timings/TimingIdentifier.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/co/aikar/timings/Timings.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/co/aikar/timings/TimingsCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/co/aikar/timings/TimingsExport.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/co/aikar/timings/TimingsManager.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/co/aikar/timings/UnsafeTimingHandler.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/co/aikar/util/JSONUtil.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/co/aikar/util/LoadingIntMap.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/co/aikar/util/LoadingMap.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/co/aikar/util/MRUMapCache.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/net/techcable/tacospigot/event/entity/ArrowCollideEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/net/techcable/tacospigot/event/entity/ChunkSnapshot.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/net/techcable/tacospigot/event/entity/SpawnerPreSpawnEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/Achievement.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/Art.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/BanEntry.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/BanList.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/BlockChangeDelegate.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/Bukkit.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/ChatColor.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/Chunk.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/ChunkSnapshot.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/CoalType.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/Color.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/CropState.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/Difficulty.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/DyeColor.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/Effect.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/EntityEffect.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/FireworkEffect.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/GameMode.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/GrassSpecies.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/Instrument.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/Location.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/Material.java (98%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/NetherWartsState.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/Note.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/OfflinePlayer.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/PortalType.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/Rotation.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/SandstoneType.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/Server.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/SkullType.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/Sound.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/Statistic.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/TravelAgent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/TreeSpecies.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/TreeType.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/UnsafeValues.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/Utility.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/Warning.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/WeatherType.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/World.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/WorldBorder.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/WorldCreator.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/WorldType.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/block/Banner.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/block/Beacon.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/block/Biome.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/block/Block.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/block/BlockFace.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/block/BlockState.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/block/BrewingStand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/block/Chest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/block/CommandBlock.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/block/ContainerBlock.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/block/CreatureSpawner.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/block/Dispenser.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/block/DoubleChest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/block/Dropper.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/block/Furnace.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/block/Hopper.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/block/Jukebox.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/block/NoteBlock.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/block/PistonMoveReaction.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/block/Sign.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/block/Skull.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/block/banner/Pattern.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/block/banner/PatternType.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/BlockCommandSender.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/Command.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/CommandException.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/CommandExecutor.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/CommandMap.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/CommandSender.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/ConsoleCommandSender.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/FormattedCommandAlias.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/MultipleCommandAlias.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/PluginCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/PluginCommandYamlParser.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/PluginIdentifiableCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/ProxiedCommandSender.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/RemoteConsoleCommandSender.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/SimpleCommandMap.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/TabCommandExecutor.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/TabCompleter.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/TabExecutor.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/AchievementCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/BanCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/BanIpCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/BanListCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/BukkitCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/ClearCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/DefaultGameModeCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/DeopCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/DifficultyCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/EffectCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/EnchantCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/ExpCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/GameModeCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/GameRuleCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/GiveCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/HelpCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/KickCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/KillCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/ListCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/MeCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/OpCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/PardonCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/PardonIpCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/PlaySoundCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/PluginsCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/ReloadCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/SaveCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/SaveOffCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/SaveOnCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/SayCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/ScoreboardCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/SeedCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/SetIdleTimeoutCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/SetWorldSpawnCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/SpawnpointCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/SpreadPlayersCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/StopCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/TeleportCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/TellCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/TestForCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/TimeCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/TimingsCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/ToggleDownfallCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/VanillaCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/VersionCommand.java (92%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/WeatherCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/command/defaults/WhitelistCommand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/configuration/Configuration.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/configuration/ConfigurationOptions.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/configuration/ConfigurationSection.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/configuration/InvalidConfigurationException.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/configuration/MemoryConfiguration.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/configuration/MemoryConfigurationOptions.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/configuration/MemorySection.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/configuration/file/FileConfiguration.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/configuration/file/FileConfigurationOptions.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/configuration/file/YamlConfiguration.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/configuration/file/YamlConfigurationOptions.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/configuration/file/YamlConstructor.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/configuration/file/YamlRepresenter.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/configuration/serialization/ConfigurationSerializable.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/configuration/serialization/ConfigurationSerialization.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/configuration/serialization/DelegateDeserialization.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/configuration/serialization/SerializableAs.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/conversations/BooleanPrompt.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/conversations/Conversable.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/conversations/Conversation.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/conversations/ConversationAbandonedEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/conversations/ConversationAbandonedListener.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/conversations/ConversationCanceller.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/conversations/ConversationContext.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/conversations/ConversationFactory.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/conversations/ConversationPrefix.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/conversations/ExactMatchConversationCanceller.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/conversations/FixedSetPrompt.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/conversations/InactivityConversationCanceller.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/conversations/ManuallyAbandonedConversationCanceller.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/conversations/MessagePrompt.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/conversations/NullConversationPrefix.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/conversations/NumericPrompt.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/conversations/PlayerNamePrompt.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/conversations/PluginNameConversationPrefix.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/conversations/Prompt.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/conversations/RegexPrompt.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/conversations/StringPrompt.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/conversations/ValidatingPrompt.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/enchantments/Enchantment.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/enchantments/EnchantmentTarget.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/enchantments/EnchantmentWrapper.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Ageable.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Ambient.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/AnimalTamer.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Animals.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/ArmorStand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Arrow.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Bat.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Blaze.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Boat.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/CaveSpider.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Chicken.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/ComplexEntityPart.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/ComplexLivingEntity.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Cow.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Creature.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/CreatureType.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Creeper.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Damageable.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Egg.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/EnderCrystal.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/EnderDragon.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/EnderDragonPart.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/EnderPearl.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/EnderSignal.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Enderman.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Endermite.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Entity.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/EntityType.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/ExperienceOrb.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Explosive.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/FallingBlock.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/FallingSand.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Fireball.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Firework.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Fish.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/FishHook.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Flying.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Ghast.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Giant.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Golem.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Guardian.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Hanging.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Horse.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/HumanEntity.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/IronGolem.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Item.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/ItemFrame.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/LargeFireball.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/LeashHitch.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/LightningStrike.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/LivingEntity.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/MagmaCube.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Minecart.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Monster.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/MushroomCow.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/NPC.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Ocelot.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Painting.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Pig.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/PigZombie.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Player.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/PoweredMinecart.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Projectile.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Rabbit.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Sheep.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Silverfish.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Skeleton.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Slime.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/SmallFireball.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Snowball.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Snowman.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Spider.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Squid.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/StorageMinecart.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/TNTPrimed.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Tameable.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/ThrownExpBottle.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/ThrownPotion.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Vehicle.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Villager.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/WaterMob.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Weather.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Witch.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Wither.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/WitherSkull.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Wolf.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/Zombie.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/minecart/CommandMinecart.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/minecart/ExplosiveMinecart.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/minecart/HopperMinecart.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/minecart/PoweredMinecart.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/minecart/RideableMinecart.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/minecart/SpawnerMinecart.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/entity/minecart/StorageMinecart.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/Cancellable.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/Event.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/EventException.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/EventHandler.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/EventPriority.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/HandlerList.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/Listener.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/block/Action.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/block/BlockBreakEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/block/BlockBurnEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/block/BlockCanBuildEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/block/BlockDamageEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/block/BlockDispenseEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/block/BlockEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/block/BlockExpEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/block/BlockExplodeEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/block/BlockFadeEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/block/BlockFormEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/block/BlockFromToEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/block/BlockGrowEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/block/BlockIgniteEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/block/BlockMultiPlaceEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/block/BlockPhysicsEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/block/BlockPistonEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/block/BlockPistonExtendEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/block/BlockPistonRetractEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/block/BlockPlaceEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/block/BlockRedstoneEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/block/BlockSpreadEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/block/EntityBlockFormEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/block/LeavesDecayEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/block/NotePlayEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/block/SignChangeEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/enchantment/EnchantItemEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/enchantment/PrepareItemEnchantEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/CreatureSpawnEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/CreeperPowerEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/EntityBreakDoorEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/EntityChangeBlockEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/EntityCombustByBlockEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/EntityCombustByEntityEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/EntityCombustEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/EntityCreatePortalEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/EntityDamageByBlockEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/EntityDamageByEntityEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/EntityDamageEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/EntityDeathEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/EntityEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/EntityExplodeEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/EntityInteractEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/EntityPortalEnterEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/EntityPortalEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/EntityPortalExitEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/EntityRegainHealthEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/EntityShootBowEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/EntitySpawnEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/EntityTameEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/EntityTargetEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/EntityTargetLivingEntityEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/EntityTeleportEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/EntityUnleashEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/ExpBottleEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/ExplosionPrimeEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/FireworkExplodeEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/FoodLevelChangeEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/HorseJumpEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/ItemDespawnEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/ItemMergeEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/ItemSpawnEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/PigZapEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/PlayerDeathEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/PlayerLeashEntityEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/PotionEffectAddEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/PotionEffectEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/PotionEffectExpireEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/PotionEffectExtendEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/PotionEffectRemoveEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/PotionSplashEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/ProjectileHitEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/ProjectileLaunchEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/SheepDyeWoolEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/SheepRegrowWoolEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/SlimeSplitEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/entity/SpawnerSpawnEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/hanging/HangingBreakByEntityEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/hanging/HangingBreakEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/hanging/HangingEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/hanging/HangingPlaceEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/inventory/BrewEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/inventory/ClickType.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/inventory/CraftItemEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/inventory/DragType.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/inventory/FurnaceBurnEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/inventory/FurnaceExtractEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/inventory/FurnaceSmeltEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/inventory/InventoryAction.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/inventory/InventoryClickEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/inventory/InventoryCloseEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/inventory/InventoryCreativeEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/inventory/InventoryDragEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/inventory/InventoryEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/inventory/InventoryInteractEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/inventory/InventoryMoveItemEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/inventory/InventoryOpenEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/inventory/InventoryPickupItemEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/inventory/InventoryType.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/inventory/PrepareItemCraftEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/painting/PaintingBreakByEntityEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/painting/PaintingBreakEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/painting/PaintingEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/painting/PaintingPlaceEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/AsyncPlayerChatEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/AsyncPlayerPreLoginEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerAchievementAwardedEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerAnimationEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerAnimationType.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerArmorStandManipulateEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerBedEnterEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerBedLeaveEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerBucketEmptyEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerBucketEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerBucketFillEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerChangedWorldEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerChannelEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerChatEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerChatTabCompleteEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerCommandPreprocessEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerDropItemEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerEditBookEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerEggThrowEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerExpChangeEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerFishEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerGameModeChangeEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerInitialSpawnEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerInteractAtEntityEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerInteractEntityEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerInteractEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerInventoryEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerItemBreakEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerItemConsumeEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerItemDamageEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerItemHeldEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerJoinEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerKickEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerLevelChangeEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerLocaleChangeEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerLoginEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerMoveEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerPickupItemEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerPortalEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerPreLoginEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerQuitEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerRegisterChannelEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerResourcePackStatusEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerRespawnEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerShearEntityEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerStatisticIncrementEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerTeleportEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerToggleFlightEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerToggleSneakEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerToggleSprintEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerUnleashEntityEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerUnregisterChannelEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/player/PlayerVelocityEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/server/MapInitializeEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/server/PluginDisableEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/server/PluginEnableEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/server/PluginEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/server/RemoteServerCommandEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/server/ServerCommandEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/server/ServerEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/server/ServerListPingEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/server/ServiceEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/server/ServiceRegisterEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/server/ServiceUnregisterEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/vehicle/VehicleBlockCollisionEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/vehicle/VehicleCollisionEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/vehicle/VehicleCreateEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/vehicle/VehicleDamageEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/vehicle/VehicleDestroyEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/vehicle/VehicleEnterEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/vehicle/VehicleEntityCollisionEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/vehicle/VehicleEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/vehicle/VehicleExitEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/vehicle/VehicleMoveEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/vehicle/VehicleUpdateEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/weather/LightningStrikeEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/weather/ThunderChangeEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/weather/WeatherChangeEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/weather/WeatherEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/world/ChunkEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/world/ChunkLoadEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/world/ChunkPopulateEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/world/ChunkUnloadEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/world/PortalCreateEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/world/SpawnChangeEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/world/StructureGrowEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/world/WorldEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/world/WorldInitEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/world/WorldLoadEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/world/WorldSaveEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/event/world/WorldUnloadEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/generator/BlockPopulator.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/generator/ChunkGenerator.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/help/GenericCommandHelpTopic.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/help/HelpMap.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/help/HelpTopic.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/help/HelpTopicComparator.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/help/HelpTopicFactory.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/help/IndexHelpTopic.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/inventory/AnvilInventory.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/inventory/BeaconInventory.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/inventory/BrewerInventory.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/inventory/CraftingInventory.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/inventory/DoubleChestInventory.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/inventory/EnchantingInventory.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/inventory/EntityEquipment.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/inventory/EquipmentSlot.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/inventory/FurnaceInventory.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/inventory/FurnaceRecipe.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/inventory/HorseInventory.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/inventory/Inventory.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/inventory/InventoryHolder.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/inventory/InventoryView.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/inventory/ItemFactory.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/inventory/ItemFlag.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/inventory/ItemStack.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/inventory/MerchantInventory.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/inventory/PlayerInventory.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/inventory/Recipe.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/inventory/ShapedRecipe.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/inventory/ShapelessRecipe.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/inventory/meta/BannerMeta.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/inventory/meta/BlockStateMeta.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/inventory/meta/BookMeta.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/inventory/meta/EnchantmentStorageMeta.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/inventory/meta/FireworkEffectMeta.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/inventory/meta/FireworkMeta.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/inventory/meta/ItemMeta.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/inventory/meta/LeatherArmorMeta.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/inventory/meta/MapMeta.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/inventory/meta/PotionMeta.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/inventory/meta/Repairable.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/inventory/meta/SkullMeta.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/map/MapCanvas.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/map/MapCursor.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/map/MapCursorCollection.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/map/MapFont.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/map/MapPalette.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/map/MapRenderer.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/map/MapView.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/map/MinecraftFont.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/Attachable.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/Banner.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/Bed.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/Button.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/Cake.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/Cauldron.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/Chest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/Coal.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/CocoaPlant.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/Colorable.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/Command.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/Crops.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/DetectorRail.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/Diode.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/Directional.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/DirectionalContainer.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/Dispenser.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/Door.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/Dye.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/EnderChest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/ExtendedRails.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/FlowerPot.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/Furnace.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/FurnaceAndDispenser.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/Gate.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/Ladder.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/Leaves.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/Lever.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/LongGrass.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/MaterialData.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/MonsterEggs.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/Mushroom.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/NetherWarts.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/Openable.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/PistonBaseMaterial.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/PistonExtensionMaterial.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/PoweredRail.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/PressurePlate.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/PressureSensor.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/Pumpkin.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/Rails.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/Redstone.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/RedstoneTorch.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/RedstoneWire.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/Sandstone.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/Sign.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/SimpleAttachableMaterialData.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/Skull.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/SmoothBrick.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/SpawnEgg.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/Stairs.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/Step.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/TexturedMaterial.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/Torch.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/TrapDoor.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/Tree.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/Tripwire.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/TripwireHook.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/Vine.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/WoodenStep.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/material/Wool.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/metadata/FixedMetadataValue.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/metadata/LazyMetadataValue.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/metadata/MetadataConversionException.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/metadata/MetadataEvaluationException.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/metadata/MetadataStore.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/metadata/MetadataStoreBase.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/metadata/MetadataValue.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/metadata/MetadataValueAdapter.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/metadata/Metadatable.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/permissions/Permissible.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/permissions/PermissibleBase.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/permissions/Permission.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/permissions/PermissionAttachment.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/permissions/PermissionAttachmentInfo.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/permissions/PermissionDefault.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/permissions/PermissionRemovedExecutor.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/permissions/ServerOperator.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/plugin/AuthorNagException.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/plugin/EventExecutor.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/plugin/IllegalPluginAccessException.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/plugin/InvalidDescriptionException.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/plugin/InvalidPluginException.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/plugin/Plugin.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/plugin/PluginAwareness.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/plugin/PluginBase.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/plugin/PluginDescriptionFile.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/plugin/PluginLoadOrder.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/plugin/PluginLoader.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/plugin/PluginLogger.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/plugin/PluginManager.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/plugin/RegisteredListener.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/plugin/RegisteredServiceProvider.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/plugin/ServicePriority.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/plugin/ServicesManager.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/plugin/SimplePluginManager.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/plugin/SimpleServicesManager.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/plugin/TimedRegisteredListener.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/plugin/UnknownDependencyException.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/plugin/java/JavaPlugin.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/plugin/messaging/ChannelNameTooLongException.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/plugin/messaging/ChannelNotRegisteredException.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/plugin/messaging/MessageTooLargeException.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/plugin/messaging/Messenger.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/plugin/messaging/PluginChannelDirection.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/plugin/messaging/PluginMessageListener.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/plugin/messaging/PluginMessageListenerRegistration.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/plugin/messaging/PluginMessageRecipient.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/plugin/messaging/ReservedChannelException.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/plugin/messaging/StandardMessenger.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/potion/Potion.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/potion/PotionBrewer.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/potion/PotionEffect.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/potion/PotionEffectType.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/potion/PotionEffectTypeWrapper.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/potion/PotionType.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/projectiles/BlockProjectileSource.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/projectiles/ProjectileSource.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/scheduler/BukkitRunnable.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/scheduler/BukkitScheduler.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/scheduler/BukkitTask.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/scheduler/BukkitWorker.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/scoreboard/Criterias.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/scoreboard/DisplaySlot.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/scoreboard/NameTagVisibility.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/scoreboard/Objective.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/scoreboard/Score.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/scoreboard/Scoreboard.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/scoreboard/ScoreboardManager.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/scoreboard/Team.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/util/BlockIterator.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/util/BlockVector.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/util/CachedServerIcon.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/util/ChatPaginator.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/util/EulerAngle.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/util/FileUtil.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/util/Java15Compat.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/util/NumberConversions.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/util/StringUtil.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/util/Vector.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/util/io/BukkitObjectInputStream.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/util/io/BukkitObjectOutputStream.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/util/io/Wrapper.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/util/noise/NoiseGenerator.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/util/noise/OctaveGenerator.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/util/noise/PerlinNoiseGenerator.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/util/noise/PerlinOctaveGenerator.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/util/noise/SimplexNoiseGenerator.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/util/noise/SimplexOctaveGenerator.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/util/permissions/BroadcastPermissions.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/util/permissions/CommandPermissions.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/bukkit/util/permissions/DefaultPermissions.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/github/paperspigot/Title.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/github/paperspigot/event/ServerExceptionEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/github/paperspigot/event/block/BeaconEffectEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/github/paperspigot/exception/ServerCommandException.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/github/paperspigot/exception/ServerEventException.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/github/paperspigot/exception/ServerException.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/github/paperspigot/exception/ServerInternalException.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/github/paperspigot/exception/ServerPluginEnableDisableException.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/github/paperspigot/exception/ServerPluginException.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/github/paperspigot/exception/ServerPluginMessageException.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/github/paperspigot/exception/ServerSchedulerException.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/github/paperspigot/exception/ServerTabCompleteException.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/spigotmc/CustomTimingsHandler.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/spigotmc/event/entity/EntityDismountEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/spigotmc/event/entity/EntityMountEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/java/org/spigotmc/event/player/PlayerSpawnLocationEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/block/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/command/defaults/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/command/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/configuration/file/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/configuration/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/configuration/serialization/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/conversations/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/enchantments/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/entity/minecart/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/entity/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/event/block/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/event/enchantment/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/event/entity/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/event/hanging/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/event/inventory/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/event/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/event/painting/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/event/player/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/event/server/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/event/vehicle/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/event/weather/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/event/world/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/generator/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/help/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/inventory/meta/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/inventory/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/map/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/material/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/metadata/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/permissions/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/plugin/doc-files/permissions-example_plugin.yml (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/plugin/java/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/plugin/messaging/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/plugin/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/potion/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/projectiles/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/scheduler/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/scoreboard/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/util/io/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/util/noise/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/util/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/org/bukkit/util/permissions/package-info.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/main/javadoc/overview.html (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/ArtTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/BukkitMirrorTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/ChatColorTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/ChatPaginatorTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/CoalTypeTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/ColorTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/CropStateTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/DifficultyTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/DyeColorTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/EffectTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/EntityEffectTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/GameModeTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/GrassSpeciesTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/InstrumentTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/LocationTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/MaterialTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/NoteTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/TestServer.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/TreeSpeciesTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/WorldTypeTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/configuration/ConfigurationSectionTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/configuration/ConfigurationTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/configuration/MemoryConfigurationTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/configuration/MemorySectionTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/configuration/file/FileConfigurationTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/configuration/file/YamlConfigurationTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/conversations/ConversationContextTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/conversations/ConversationTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/conversations/FakeConversable.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/conversations/ValidatingPromptTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/event/PlayerChatTabCompleteEventTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/event/SyntheticEventTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/event/TestEvent.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/materials/MaterialDataTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/metadata/FixedMetadataValueTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/metadata/LazyMetadataValueTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/metadata/MetadataConversionTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/metadata/MetadataStoreTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/metadata/MetadataValueAdapterTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/plugin/PluginManagerTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/plugin/TestPlugin.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/plugin/TimedRegisteredListenerTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/plugin/messaging/StandardMessengerTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/plugin/messaging/TestMessageListener.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/plugin/messaging/TestPlayer.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/potion/PotionTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/util/StringUtilStartsWithTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/util/StringUtilTest.java (100%) rename {TacoSpigot-API => eSpigot-API}/src/test/java/org/bukkit/util/io/BukkitObjectStreamTest.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/.gitignore (100%) create mode 100644 eSpigot-Server/build.gradle.kts rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/co/aikar/timings/SpigotTimings.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/co/aikar/timings/WorldTimingsHandler.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/chunk/ChunkSectionSnapshot.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/chunk/CraftChunkSnapshot.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/chunk/WeakChunkCache.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/command/KnockbackCommand.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/command/TicksPerSecondCommand.java (62%) create mode 100644 eSpigot-Server/src/main/java/com/elevatemc/spigot/console/PandaConsole.java create mode 100644 eSpigot-Server/src/main/java/com/elevatemc/spigot/console/PandaConsoleCommandSender.java create mode 100644 eSpigot-Server/src/main/java/com/elevatemc/spigot/console/PandaConsoleCompleter.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/eSpigot.java (97%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/eSpigotFeature.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/event/BlockDropItemsEvent.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/event/PlayerHealthChangeEvent.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/event/PlayerPearlRefundEvent.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/handler/MovementHandler.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/handler/PacketHandler.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/knockback/KnockbackHandler.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/knockback/KnockbackModifier.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/knockback/KnockbackProfile.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/knockback/impl/AdvancedKnockbackProfile.java (100%) create mode 100644 eSpigot-Server/src/main/java/com/elevatemc/spigot/network/VarIntByteDecoder.java create mode 100644 eSpigot-Server/src/main/java/com/elevatemc/spigot/network/VarIntUtil.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/pathsearch/AsyncNavigation.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/pathsearch/AsyncPathfinder.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/pathsearch/AsyncPathfinderNormal.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/pathsearch/PathSearchThrottlerThread.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/pathsearch/PositionPathSearchType.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/pathsearch/cache/SearchCacheEntry.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/pathsearch/cache/SearchCacheEntryEntity.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/pathsearch/cache/SearchCacheEntryPosition.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/pathsearch/jobs/PathSearchJob.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/pathsearch/jobs/PathSearchJobEntity.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/pathsearch/jobs/PathSearchJobNavigationEntity.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/pathsearch/jobs/PathSearchJobNavigationPosition.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/pathsearch/jobs/PathSearchJobPosition.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/pathsearch/jobs/PathSearchQueuingManager.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/threading/NamePriorityThreadFactory.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/threading/ThreadingManager.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/util/CryptException.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/util/Cuboid.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/util/DateUtil.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/util/Dictionary.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/util/FastRandom.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/util/SynchronizedIntHashMap.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/util/YamlConfig.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/util/task/AbstractTaskExecutor.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/util/task/Task.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/util/task/TaskExecutor.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/util/task/impl/ThreadTaskExecutor.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/com/elevatemc/spigot/world/AutoSaveJob.java (100%) create mode 100644 eSpigot-Server/src/main/java/com/google/common/base/Objects.java create mode 100644 eSpigot-Server/src/main/java/com/google/common/util/concurrent/MoreExecutors.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/Achievement.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/AchievementList.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/AchievementSet.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/AttributeBase.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/AttributeInstance.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/AttributeMapBase.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/AttributeMapServer.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/AttributeModifiable.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/AttributeModifier.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/AttributeRanged.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/AxisAlignedBB.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BaseBlockPosition.java (94%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BiomeBase.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BiomeBaseSub.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BiomeBeach.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BiomeBigHills.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BiomeCache.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BiomeDecorator.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BiomeDesert.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BiomeForest.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BiomeHell.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BiomeIcePlains.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BiomeJungle.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BiomeMesa.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BiomeMushrooms.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BiomeOcean.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BiomePlains.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BiomeRiver.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BiomeSavanna.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BiomeStoneBeach.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BiomeSwamp.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BiomeTaiga.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BiomeTheEnd.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BiomeTheEndDecorator.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/Block.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockActionData.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockAir.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockAnvil.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockBanner.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockBarrier.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockBeacon.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockBed.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockBloodStone.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockBookshelf.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockBrewingStand.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockButtonAbstract.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockCactus.java (97%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockCake.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockCarpet.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockCarrots.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockCauldron.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockChest.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockClay.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockCloth.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockCobbleWall.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockCocoa.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockCommand.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockContainer.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockCrops.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockDataAbstract.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockDaylightDetector.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockDeadBush.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockDiodeAbstract.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockDirectional.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockDirt.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockDispenser.java (97%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockDoor.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockDoubleStep.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockDoubleStepAbstract.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockDoubleStoneStep2.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockDoubleStoneStepAbstract.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockDoubleWoodStep.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockDragonEgg.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockDropper.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockEnchantmentTable.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockEnderChest.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockEnderPortal.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockEnderPortalFrame.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockFalling.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockFence.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockFenceGate.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockFire.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockFloorSign.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockFlowerPot.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockFlowers.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockFlowing.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockFluids.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockFurnace.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockGlass.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockGrass.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockGravel.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockHalfTransparent.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockHardenedClay.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockHay.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockHopper.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockHugeMushroom.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockIce.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockJukeBox.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockLadder.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockLeaves.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockLeaves1.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockLeaves2.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockLever.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockLightStone.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockLog1.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockLog2.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockLogAbstract.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockLongGrass.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockMelon.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockMinecartDetector.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockMinecartTrack.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockMinecartTrackAbstract.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockMobSpawner.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockMonsterEggs.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockMushroom.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockMycel.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockNetherWart.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockNetherbrick.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockNote.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockObsidian.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockOre.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockPackedIce.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockPiston.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockPistonExtension.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockPistonMoving.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockPlant.java (94%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockPortal.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockPosition.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockPotatoes.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockPowered.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockPoweredRail.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockPredicate.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockPressurePlateAbstract.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockPressurePlateBinary.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockPressurePlateWeighted.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockPrismarine.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockPumpkin.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockQuartz.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockRedFlowers.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockRedSandstone.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockRedstoneComparator.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockRedstoneLamp.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockRedstoneOre.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockRedstoneTorch.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockRedstoneWire.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockReed.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockRepeater.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockRotatable.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockSand.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockSandStone.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockSapling.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockSeaLantern.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockSign.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockSkull.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockSlime.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockSlowSand.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockSmoothBrick.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockSnow.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockSnowBlock.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockSoil.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockSponge.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockStainedGlass.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockStainedGlassPane.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockStairs.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockState.java (88%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockStateBoolean.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockStateDirection.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockStateEnum.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockStateInteger.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockStateList.java (97%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockStatePredicate.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockStationary.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockStem.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockStep.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockStepAbstract.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockStone.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockStoneButton.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockStoneStep2.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockTNT.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockTallPlant.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockThin.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockTorch.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockTransparent.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockTrapdoor.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockTripwire.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockTripwireHook.java (98%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/BlockVine.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockWallSign.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockWaterLily.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockWeb.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockWood.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockWoodButton.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockWoodStep.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockWoodenStep.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockWorkbench.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/BlockYellowFlowers.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/Blocks.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CancelledPacketHandleException.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ChatBaseComponent.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ChatClickable.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ChatComponentScore.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ChatComponentSelector.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ChatComponentText.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ChatComponentUtils.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ChatDeserializer.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ChatHoverable.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ChatMessage.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ChatMessageException.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ChatModifier.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ChatTypeAdapterFactory.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ChestLock.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/Chunk.java (99%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ChunkCache.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ChunkCoordIntPair.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ChunkProviderDebug.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ChunkProviderFlat.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ChunkProviderGenerate.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ChunkProviderHell.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ChunkProviderServer.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ChunkProviderTheEnd.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ChunkRegionLoader.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ChunkSection.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ChunkSnapshot.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CombatEntry.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CombatTracker.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandAbstract.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandAchievement.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandBan.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandBanIp.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandBanList.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandBlockData.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/CommandBlockListenerAbstract.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandClear.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandClone.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandDebug.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandDeop.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandDifficulty.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/CommandDispatcher.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandEffect.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandEnchant.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandEntityData.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandException.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/CommandExecute.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandFill.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/CommandGamemode.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandGamemodeDefault.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/CommandGamerule.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandGive.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandHandler.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandHelp.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandIdleTimeout.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandKick.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandKill.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandList.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandMe.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandObjectiveExecutor.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandOp.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandPardon.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandPardonIP.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandParticle.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandPlaySound.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandPublish.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandReplaceItem.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandSaveAll.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandSaveOff.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandSaveOn.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandSay.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/CommandScoreboard.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandSeed.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandSetBlock.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandSetWorldSpawn.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandSpawnpoint.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/CommandSpreadPlayers.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandStats.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandStop.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandSummon.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandTell.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandTellRaw.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandTestFor.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandTestForBlock.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandTestForBlocks.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandTime.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandTitle.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandToggleDownfall.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/CommandTp.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandTrigger.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandWeather.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandWhitelist.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandWorldBorder.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CommandXp.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/Container.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ContainerAnvil.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ContainerBeacon.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ContainerBrewingStand.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ContainerChest.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ContainerDispenser.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ContainerEnchantTable.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ContainerFurnace.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ContainerHopper.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ContainerHorse.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ContainerMerchant.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ContainerPlayer.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ContainerWorkbench.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ControllerJump.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ControllerLook.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ControllerMove.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/Convertable.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/Counter.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CounterStatistic.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/CraftingManager.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CraftingStatistic.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/CrashReport.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CrashReportSystemDetails.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CreativeModeTab.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/CustomWorldSettingsFinal.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/DamageSource.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/DataWatcher.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/DedicatedPlayerList.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/DedicatedServer.java (63%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/DemoPlayerInteractManager.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/DemoWorldServer.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/DifficultyDamageScaler.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/DispenseBehaviorItem.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/DispenseBehaviorProjectile.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/DispenserRegistry.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EULA.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EmptyChunk.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/Enchantment.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentArrowDamage.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentArrowKnockback.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentDepthStrider.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentDigging.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentDurability.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentFire.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentFlameArrows.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentInfiniteArrows.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentKnockback.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentLootBonus.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentLure.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EnchantmentManager.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentOxygen.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentProtection.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentSilkTouch.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentSlotType.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EnchantmentThorns.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentWaterWorker.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentWeaponDamage.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/Entity.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EntityAIBodyControl.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityAgeable.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EntityAmbient.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityAnimal.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityArmorStand.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityArrow.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EntityBat.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EntityBlaze.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityBoat.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EntityCaveSpider.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityChicken.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EntityComplexPart.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityCow.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityCreature.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityCreeper.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EntityDamageSource.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityDamageSourceIndirect.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityEgg.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityEnderCrystal.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityEnderDragon.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityEnderPearl.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EntityEnderSignal.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityEnderman.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EntityEndermite.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityExperienceOrb.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityFallingBlock.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityFireball.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityFireworks.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityFishingHook.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EntityFlying.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityGhast.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EntityGiantZombie.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EntityGolem.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EntityGuardian.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityHanging.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityHorse.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityHuman.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityInsentient.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityIronGolem.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityItem.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityItemFrame.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityLargeFireball.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityLeash.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityLightning.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityLiving.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EntityMagmaCube.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityMinecartAbstract.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EntityMinecartChest.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityMinecartCommandBlock.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityMinecartContainer.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityMinecartFurnace.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EntityMinecartHopper.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EntityMinecartMobSpawner.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EntityMinecartRideable.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EntityMinecartTNT.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityMonster.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityMushroomCow.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityOcelot.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EntityOwnable.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityPainting.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityPig.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EntityPigZombie.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityPlayer.java (99%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EntityPositionTypes.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityPotion.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityProjectile.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityRabbit.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EntitySenses.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntitySheep.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntitySilverfish.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntitySkeleton.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntitySlice.java (91%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntitySlime.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntitySmallFireball.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EntitySnowball.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntitySnowman.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntitySpider.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntitySquid.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityTNTPrimed.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EntityTameableAnimal.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityThrownExpBottle.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityTracker.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityTrackerEntry.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EntityTypes.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityVillager.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EntityWaterAnimal.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EntityWeather.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EntityWitch.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityWither.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityWitherSkull.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityWolf.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/EntityZombie.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EnumAnimation.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EnumChatFormat.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EnumColor.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EnumCreatureType.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EnumDifficulty.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EnumDirection.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EnumItemRarity.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EnumMonsterType.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EnumParticle.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EnumProtocol.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EnumProtocolDirection.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EnumSkyBlock.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/EnumWorldBorderState.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ExceptionEntityNotFound.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ExceptionInvalidNumber.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ExceptionInvalidSyntax.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ExceptionPlayerNotFound.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ExceptionUnknownCommand.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ExceptionUsage.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ExceptionWorldConflict.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ExpirableListEntry.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/Explosion.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/FileIOThread.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/FoodMetaData.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/GameProfileBanEntry.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/GameProfileBanList.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/GameProfileSerializer.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/GameRules.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/GenLayer.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/GenLayerBiome.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/GenLayerCleaner.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/GenLayerDeepOcean.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/GenLayerDesert.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/GenLayerIcePlains.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/GenLayerIsland.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/GenLayerMushroomIsland.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/GenLayerMushroomShore.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/GenLayerPlains.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/GenLayerRegionHills.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/GenLayerRiver.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/GenLayerRiverMix.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/GenLayerSmooth.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/GenLayerSpecial.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/GenLayerTopSoil.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/GenLayerZoom.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/GenLayerZoomFuzzy.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/GenLayerZoomVoronoi.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/GenericAttributes.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/GroupDataEntity.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/GuiStatsComponent.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/HandshakeListener.java (67%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/HttpUtilities.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/IAnimal.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/IAsyncChunkSaver.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/IAsyncTaskHandler.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/IAttribute.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/IBlockAccess.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/IBlockData.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/IBlockFragilePlantElement.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/IBlockState.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/IChatBaseComponent.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/IChunkLoader.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/IChunkProvider.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ICommand.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ICommandDispatcher.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ICommandHandler.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ICommandListener.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/IComplex.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/IContainer.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ICrafting.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/IDataManager.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/IDispenseBehavior.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/IEntitySelector.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/IHopper.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/IInventory.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/IInventoryListener.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/IJsonStatistic.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ILocationSource.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/IMerchant.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/IMinecraftServer.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/IMojangStatistics.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/IMonster.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/INamable.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/INamableTileEntity.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/IPlayerFileData.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/IPosition.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/IProgressUpdate.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/IProjectile.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/IRangedEntity.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/IRecipe.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/IRegistry.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/IScoreboardCriteria.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ISource.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ISourceBlock.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ITileEntityContainer.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ITileInventory.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/IUpdatePlayerListBox.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/IWorldAccess.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/IWorldBorderListener.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/IWorldInventory.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/InsensitiveStringMap.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/InstantMobEffect.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/IntCache.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/IntHashMap.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/InventoryCraftResult.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/InventoryCrafting.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/InventoryEnderChest.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/InventoryHorseChest.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/InventoryLargeChest.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/InventoryMerchant.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/InventorySubcontainer.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/InventoryUtils.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/IpBanEntry.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/IpBanList.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/Item.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemAnvil.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ItemArmor.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemArmorStand.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemAxe.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemBanner.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemBed.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ItemBlock.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ItemBoat.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemBook.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemBookAndQuill.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ItemBow.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ItemBucket.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemCarrotStick.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemCloth.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemCoal.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ItemDoor.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ItemDye.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemEgg.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemEnchantedBook.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemEnderEye.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemEnderPearl.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemExpBottle.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ItemFireball.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemFireworks.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemFireworksCharge.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemFish.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ItemFishingRod.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ItemFlintAndSteel.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemFood.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemGlassBottle.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemGoldenApple.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ItemHanging.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemHoe.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ItemLeash.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemLeaves.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ItemMapEmpty.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ItemMilkBucket.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ItemMinecart.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ItemMonsterEgg.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemMultiTexture.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemNameTag.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemNetherStar.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemPickaxe.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemPiston.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemPotion.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ItemRecord.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemRedstone.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemReed.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemSaddle.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemSeedFood.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemSeeds.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemShears.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemSign.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ItemSkull.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemSnow.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemSnowball.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemSoup.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemSpade.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ItemStack.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemStep.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemSword.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemTallPlant.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemTool.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ItemWaterLily.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemWithAuxData.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ItemWorldMap.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemWorldMapBase.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ItemWrittenBook.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/Items.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/IteratorUtils.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/JsonList.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/JsonListEntry.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/LayerIsland.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/LazyInitVar.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/LegacyPingHandler.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/LocaleI18n.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/LocaleLanguage.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/LoginListener.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/LongHashMap.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/MCUtil.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/MapGeneratorUtils.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/MapIcon.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/Material.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/MaterialDecoration.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/MaterialGas.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/MaterialLiquid.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/MaterialMapColor.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/MaterialPortal.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/MathHelper.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/MerchantRecipe.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/MerchantRecipeList.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/MethodProfiler.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/MinecraftEncryption.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/MinecraftKey.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/MinecraftServer.java (98%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/MobEffect.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/MobEffectAbsorption.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/MobEffectAttackDamage.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/MobEffectHealthBoost.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/MobEffectList.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/MobSpawnerAbstract.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/MojangStatisticsGenerator.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/MojangsonParseException.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/MojangsonParser.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/MovingObjectPosition.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/NBTBase.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/NBTCompressedStreamTools.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/NBTReadLimiter.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/NBTTagByte.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/NBTTagByteArray.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/NBTTagCompound.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/NBTTagDouble.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/NBTTagEnd.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/NBTTagFloat.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/NBTTagInt.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/NBTTagIntArray.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/NBTTagList.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/NBTTagLong.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/NBTTagShort.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/NBTTagString.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/NPC.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/NameReferencingFileConverter.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/Navigation.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/NavigationAbstract.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/NavigationGuardian.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/NavigationSpider.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/NetworkManager.java (92%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/NextTickListEntry.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/NibbleArray.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/NoiseGenerator.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/NoiseGenerator3.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/NoiseGenerator3Handler.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/NoiseGeneratorOctaves.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/NoiseGeneratorPerlin.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/OldChunkLoader.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/OldNibbleArray.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/OpList.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/OpListEntry.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/Packet.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PacketCompressor.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PacketDataSerializer.java (95%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketDecoder.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PacketDecompressor.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PacketDecrypter.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketEncoder.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PacketEncrypter.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketEncryptionHandler.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketHandshakingInListener.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PacketHandshakingInSetProtocol.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketListener.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketListenerPlayIn.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketListenerPlayOut.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PacketLoginInEncryptionBegin.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketLoginInListener.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketLoginInStart.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketLoginOutDisconnect.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketLoginOutEncryptionBegin.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketLoginOutListener.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketLoginOutSetCompression.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketLoginOutSuccess.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInAbilities.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PacketPlayInArmAnimation.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInBlockDig.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PacketPlayInBlockPlace.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PacketPlayInChat.java (89%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInClientCommand.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PacketPlayInCloseWindow.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInCustomPayload.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInEnchantItem.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInEntityAction.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInFlying.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInHeldItemSlot.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInKeepAlive.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PacketPlayInResourcePackStatus.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInSetCreativeSlot.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInSettings.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInSpectate.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInSteerVehicle.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInTabComplete.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInTransaction.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInUpdateSign.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PacketPlayInUseEntity.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInWindowClick.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutAbilities.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutAnimation.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PacketPlayOutAttachEntity.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutBed.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutBlockAction.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutBlockBreakAnimation.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutBlockChange.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutCamera.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PacketPlayOutChat.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutCloseWindow.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutCollect.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutCombatEvent.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutCustomPayload.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutEntity.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutEntityDestroy.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutEntityEffect.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutEntityEquipment.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutEntityHeadRotation.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PacketPlayOutEntityMetadata.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutEntityStatus.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutEntityTeleport.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutEntityVelocity.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutExperience.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutExplosion.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutGameStateChange.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutHeldItemSlot.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutKeepAlive.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutKickDisconnect.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutLogin.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutMap.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PacketPlayOutMapChunkBulk.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutMultiBlockChange.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutNamedEntitySpawn.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutNamedSoundEffect.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutOpenSignEditor.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PacketPlayOutOpenWindow.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PacketPlayOutPlayerInfo.java (98%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PacketPlayOutPlayerListHeaderFooter.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutPosition.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutRemoveEntityEffect.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutResourcePackSend.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutRespawn.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutScoreboardDisplayObjective.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutScoreboardObjective.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutScoreboardScore.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PacketPlayOutScoreboardTeam.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutServerDifficulty.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutSetCompression.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutSetSlot.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntity.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntityExperienceOrb.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntityLiving.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntityPainting.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntityWeather.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutSpawnPosition.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutStatistic.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutTabComplete.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutTileEntityData.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PacketPlayOutTitle.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutTransaction.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutUpdateAttributes.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutUpdateEntityNBT.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutUpdateHealth.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutUpdateSign.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PacketPlayOutUpdateTime.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutWindowData.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutWindowItems.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutWorldBorder.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutWorldEvent.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PacketPlayOutWorldParticles.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketPrepender.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketSplitter.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketStatusInListener.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketStatusInPing.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketStatusInStart.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PacketStatusListener.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketStatusOutListener.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketStatusOutPong.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PacketStatusOutServerInfo.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/Path.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PathEntity.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PathPoint.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/Pathfinder.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PathfinderAbstract.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoal.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalArrowAttack.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PathfinderGoalAvoidTarget.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalBeg.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PathfinderGoalBreakDoor.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PathfinderGoalBreed.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PathfinderGoalDefendVillage.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalDoorInteract.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PathfinderGoalEatTile.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalFleeSun.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PathfinderGoalFloat.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalFollowOwner.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalFollowParent.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalGotoTarget.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PathfinderGoalHurtByTarget.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalInteract.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalInteractVillagers.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalJumpOnBlock.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalLeapAtTarget.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalLookAtPlayer.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalLookAtTradingPlayer.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PathfinderGoalMakeLove.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalMeleeAttack.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PathfinderGoalMoveIndoors.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalMoveThroughVillage.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PathfinderGoalMoveTowardsRestriction.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalMoveTowardsTarget.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PathfinderGoalNearestAttackableTarget.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PathfinderGoalNearestAttackableTargetInsentient.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalOcelotAttack.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalOfferFlower.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalOpenDoor.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PathfinderGoalOwnerHurtByTarget.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PathfinderGoalOwnerHurtTarget.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PathfinderGoalPanic.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalPassengerCarrotStick.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalPlay.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalRandomLookaround.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PathfinderGoalRandomStroll.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalRandomTargetNonTamed.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PathfinderGoalRestrictOpenDoor.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalRestrictSun.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PathfinderGoalSelector.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PathfinderGoalSit.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PathfinderGoalSwell.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalTakeFlower.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PathfinderGoalTame.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalTarget.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PathfinderGoalTargetNearestPlayer.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PathfinderGoalTempt.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalTradeWithPlayer.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalVillagerFarm.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PathfinderNormal.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PathfinderWater.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PersistentBase.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PersistentCollection.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PersistentScoreboard.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PersistentStructure.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PersistentVillage.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PistonExtendsChecker.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PlayerAbilities.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PlayerChunkMap.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PlayerConnection.java (98%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PlayerConnectionUtils.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PlayerInteractManager.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PlayerInventory.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PlayerList.java (99%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PlayerListBox.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PlayerSelector.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PortalTravelAgent.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/Position.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PossibleFishingResult.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/PotionBrewer.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/PropertyManager.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/RandomPositionGenerator.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/RecipeArmorDye.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/RecipeBookClone.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/RecipeFireworks.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/RecipeIngots.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/RecipeMapClone.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/RecipeMapExtend.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/RecipeRepair.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/RecipesArmor.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/RecipesBanner.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/RecipesCrafting.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/RecipesDyes.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/RecipesFood.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/RecipesFurnace.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/RecipesTools.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/RecipesWeapons.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/RedirectStream.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/RegionFile.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/RegionFileCache.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/Registry.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/RegistryBlocks.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/RegistryDefault.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/RegistryID.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/RegistryMaterials.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/RegistrySimple.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/RemoteConnectionThread.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/RemoteControlCommandListener.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/RemoteControlListener.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/RemoteControlSession.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/RemoteStatusListener.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/RemoteStatusReply.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ReportedException.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/Scoreboard.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ScoreboardBaseCriteria.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ScoreboardCriteriaInteger.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ScoreboardHealthCriteria.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ScoreboardObjective.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ScoreboardScore.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ScoreboardServer.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ScoreboardStatisticCriteria.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ScoreboardTeam.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ScoreboardTeamBase.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/SecondaryWorldData.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/SecondaryWorldServer.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ServerCommand.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ServerConnection.java (87%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ServerGUI.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ServerNBTManager.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ServerPing.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ServerStatisticManager.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ShapeDetector.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ShapeDetectorBlock.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ShapeDetectorBuilder.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ShapedRecipes.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/ShapelessRecipes.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/SharedConstants.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/Slot.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/SlotFurnaceFuel.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/SlotFurnaceResult.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/SlotMerchantResult.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/SlotResult.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/SourceBlock.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/SpawnerCreature.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/Statistic.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/StatisticList.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/StatisticManager.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/StatisticWrapper.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/StatusChallengeUtils.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/StructureBoundingBox.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/StructureGenerator.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/StructurePiece.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/StructurePieceTreasure.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/StructureStart.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/SystemUtils.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/ThreadWatchdog.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/TileEntity.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/TileEntityBanner.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/TileEntityBeacon.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/TileEntityBrewingStand.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/TileEntityChest.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/TileEntityCommand.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/TileEntityComparator.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/TileEntityContainer.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/TileEntityDispenser.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/TileEntityDropper.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/TileEntityEnchantTable.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/TileEntityEnderChest.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/TileEntityEnderPortal.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/TileEntityFlowerPot.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/TileEntityFurnace.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/TileEntityHopper.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/TileEntityLightDetector.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/TileEntityMobSpawner.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/TileEntityNote.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/TileEntityPiston.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/TileEntitySign.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/TileEntitySkull.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/Tuple.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/UserCache.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/UtilColor.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/Vec3D.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/Vector3f.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/Village.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/VillageDoor.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/VillageSiege.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WeightedRandom.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WeightedRandomEnchant.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WhiteList.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WhiteListEntry.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/World.java (99%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/WorldBorder.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldChunkManager.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldChunkManagerHell.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/WorldData.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenAcaciaTree.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenBase.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenBigTree.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenBonusChest.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenCactus.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenCanyon.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenCaves.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenCavesHell.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenClay.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenDeadBush.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenDesertWell.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenDungeons.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenEnder.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenFactory.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenFire.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenFlatInfo.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenFlatLayerInfo.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenFlowers.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenForest.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/WorldGenForestTree.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenGrass.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/WorldGenGroundBush.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenHellLava.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenHugeMushroom.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenJungleTree.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenLakes.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/WorldGenLargeFeature.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenLightStone1.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenLightStone2.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenLiquids.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenMegaTree.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/WorldGenMegaTreeAbstract.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenMelon.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenMinable.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenMineshaft.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenMineshaftPieces.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenMineshaftStart.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenMonument.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenMonumentPieces.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenMushrooms.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenNether.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenNetherPieces.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenPackedIce1.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/WorldGenPackedIce2.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenPumpkin.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenReed.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/WorldGenRegistration.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenSand.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenStronghold.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenStrongholdPieces.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenSwampTree.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenTaiga1.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenTaiga2.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenTaigaStructure.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenTallPlant.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenTreeAbstract.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenTrees.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/WorldGenVillage.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/WorldGenVillagePieces.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenVines.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenWaterLily.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldGenerator.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldLoader.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldLoaderServer.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/WorldManager.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/WorldMap.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/WorldNBTStorage.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/WorldProvider.java (100%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldProviderHell.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldProviderNormal.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldProviderTheEnd.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/minecraft/server/WorldServer.java (99%) create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldSettings.java create mode 100644 eSpigot-Server/src/main/java/net/minecraft/server/WorldType.java rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/techcable/tacospigot/BlockStateRegistry.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/techcable/tacospigot/CompatHacks.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/techcable/tacospigot/HopperHelper.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/techcable/tacospigot/HopperPusher.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/techcable/tacospigot/ImmutableArrayMap.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/techcable/tacospigot/ImmutableArrayTable.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/techcable/tacospigot/Indexer.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/techcable/tacospigot/TacoSpigotConfig.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/techcable/tacospigot/TacoSpigotWorldConfig.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/techcable/tacospigot/function/ObjIntFunction.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/net/techcable/tacospigot/utils/BlockHelper.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/CraftArt.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/CraftChunk.java (97%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/CraftChunkSnapshot.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/CraftCrashReport.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/CraftEffect.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/CraftEquipmentSlot.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/CraftIpBanEntry.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/CraftIpBanList.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/CraftProfileBanEntry.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/CraftProfileBanList.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/CraftServer.java (99%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/CraftSound.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/CraftStatistic.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/CraftTravelAgent.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/CraftWorld.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/CraftWorldBorder.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/LoggerOutputStream.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/Main.java (91%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/Overridden.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/TrigMath.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/block/CraftBanner.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/block/CraftBeacon.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/block/CraftBrewingStand.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/block/CraftChest.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/block/CraftCommandBlock.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/block/CraftCreatureSpawner.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/block/CraftDispenser.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/block/CraftDropper.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/block/CraftFurnace.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/block/CraftHopper.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/block/CraftJukebox.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/block/CraftNoteBlock.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/block/CraftSign.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/block/CraftSkull.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/chunkio/ChunkIOExecutor.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/chunkio/ChunkIOProvider.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/chunkio/QueuedChunk.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/command/ColouredConsoleSender.java (94%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java (88%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/command/CraftBlockCommandSender.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/command/CraftConsoleCommandSender.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/command/CraftRemoteConsoleCommandSender.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/command/ProxiedNativeCommandSender.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/command/ServerCommandSender.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/command/VanillaCommandWrapper.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/conversations/ConversationTracker.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/AbstractProjectile.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftAgeable.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftAmbient.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftAnimals.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftArrow.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftBat.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftBlaze.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftBoat.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftCaveSpider.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftChicken.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftComplexLivingEntity.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftComplexPart.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftCow.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftCreature.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftCreeper.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftEgg.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderCrystal.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragon.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragonPart.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderPearl.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderSignal.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderman.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftEndermite.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftExperienceOrb.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingSand.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftFireball.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftFish.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftFlying.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftGhast.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftGiant.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftGolem.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftGuardian.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftHanging.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftHorse.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftIronGolem.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftLargeFireball.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftLeash.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftLightningStrike.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftMagmaCube.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecart.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartChest.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartCommand.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartFurnace.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartHopper.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartMobSpawner.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartRideable.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartTNT.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftMonster.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftMushroomCow.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftOcelot.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftPainting.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftPig.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftPigZombie.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftProjectile.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftRabbit.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftSheep.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftSilverfish.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeleton.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftSmallFireball.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowball.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftSpider.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftSquid.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftTameableAnimal.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownExpBottle.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownPotion.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftVehicle.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftWaterMob.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftWeather.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftWitherSkull.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/entity/CraftZombie.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/generator/CraftChunkData.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/generator/CustomChunkGenerator.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/generator/InternalChunkGenerator.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/generator/NetherChunkGenerator.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/generator/NormalChunkGenerator.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/generator/SkyLandsChunkGenerator.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/help/CommandAliasHelpTopic.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/help/CustomHelpTopic.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/help/CustomIndexHelpTopic.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/help/HelpTopicAmendment.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/help/HelpYamlReader.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/help/MultipleCommandAliasHelpTopic.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/help/MultipleCommandAliasHelpTopicFactory.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/help/SimpleHelpMap.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/inventory/CraftEntityEquipment.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/inventory/CraftFurnaceRecipe.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryBeacon.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryBrewer.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryCrafting.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryCustom.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryDoubleChest.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryEnchanting.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryFurnace.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryHorse.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryMerchant.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryPlayer.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryView.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBanner.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBlockState.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBook.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBookSigned.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaCharge.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaEnchantedBook.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaFirework.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaLeatherArmor.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaMap.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaPotion.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSkull.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/inventory/CraftRecipe.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/inventory/CraftShapedRecipe.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/inventory/CraftShapelessRecipe.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/inventory/InventoryIterator.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/inventory/InventoryWrapper.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/inventory/RecipeIterator.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/map/CraftMapCanvas.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/map/CraftMapRenderer.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/map/CraftMapView.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/map/RenderData.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/metadata/BlockMetadataStore.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/metadata/EntityMetadataStore.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/metadata/PlayerMetadataStore.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/metadata/SpecializedBlockMetadataStore.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/metadata/WorldMetadataStore.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/potion/CraftPotionBrewer.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/potion/CraftPotionEffectType.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/projectiles/CraftBlockProjectileSource.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/scheduler/CraftAsyncDebugger.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/scheduler/CraftAsyncScheduler.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/scheduler/CraftAsyncTask.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/scheduler/CraftFuture.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/scheduler/CraftTask.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftCriteria.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftObjective.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScore.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboard.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardComponent.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardTranslations.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftTeam.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/util/AsynchronousExecutor.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/util/BlockStateListPopulator.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/util/CraftDamageSource.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/util/CraftIconCache.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/util/CraftPotionUtil.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/util/DatFileFilter.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/util/ForwardLogHandler.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/util/HashTreeSet.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/util/LazyHashSet.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/util/LazyPlayerSet.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/util/LongHash.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/util/LongHashSet.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/util/LongObjectHashMap.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/util/MojangNameLookup.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/util/ServerShutdownThread.java (79%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/util/ShortConsoleLogFormatter.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/util/StructureGrowDelegate.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/util/TerminalConsoleWriterThread.java (89%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/util/UnsafeList.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/util/Versioning.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/util/Waitable.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/util/WeakCollection.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/util/permissions/CommandPermissions.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/bukkit/craftbukkit/util/permissions/CraftDefaultPermissions.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/github/paperspigot/PaperSpigotConfig.java (87%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/github/paperspigot/ServerSchedulerReportingWrapper.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/spigotmc/ActivationRange.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/spigotmc/AntiXray.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/spigotmc/AsyncCatcher.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/spigotmc/CaseInsensitiveHashingStrategy.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/spigotmc/CaseInsensitiveMap.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/spigotmc/LimitStream.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/spigotmc/Metrics.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/spigotmc/RestartCommand.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/spigotmc/SneakyThrow.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/spigotmc/SpigotConfig.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/spigotmc/SpigotWorldConfig.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/spigotmc/TickLimiter.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/spigotmc/TrackingRange.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/spigotmc/ValidateUtils.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/java/org/spigotmc/WatchdogThread.java (100%) create mode 100644 eSpigot-Server/src/main/resources/assets/minecraft/lang/en_US.lang rename {TacoSpigot-Server => eSpigot-Server}/src/main/resources/configurations/bukkit.yml (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/resources/configurations/commands.yml (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/main/resources/configurations/help.yml (100%) create mode 100644 eSpigot-Server/src/main/resources/log4j2.component.properties rename {TacoSpigot-Server => eSpigot-Server}/src/main/resources/log4j2.xml (73%) create mode 100644 eSpigot-Server/src/main/resources/yggdrasil_session_pubkey.der rename {TacoSpigot-Server => eSpigot-Server}/src/test/java/org/bukkit/ArtTest.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/test/java/org/bukkit/DyeColorsTest.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/test/java/org/bukkit/MaterialTest.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/test/java/org/bukkit/PerMaterialTest.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/test/java/org/bukkit/SoundTest.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/test/java/org/bukkit/StatisticsAndAchievementsTest.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/test/java/org/bukkit/WorldTypeTest.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/test/java/org/bukkit/craftbukkit/inventory/CompositeSerialization.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/test/java/org/bukkit/craftbukkit/inventory/FactoryItemMaterialTest.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/test/java/org/bukkit/craftbukkit/inventory/ItemFactoryTest.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/test/java/org/bukkit/craftbukkit/inventory/ItemMetaImplementationOverrideTest.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/test/java/org/bukkit/craftbukkit/inventory/ItemMetaTest.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/test/java/org/bukkit/craftbukkit/inventory/ItemStackBookTest.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/test/java/org/bukkit/craftbukkit/inventory/ItemStackEnchantStorageTest.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/test/java/org/bukkit/craftbukkit/inventory/ItemStackFireworkChargeTest.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/test/java/org/bukkit/craftbukkit/inventory/ItemStackFireworkTest.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/test/java/org/bukkit/craftbukkit/inventory/ItemStackLeatherTest.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/test/java/org/bukkit/craftbukkit/inventory/ItemStackLoreEnchantmentTest.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/test/java/org/bukkit/craftbukkit/inventory/ItemStackMapTest.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/test/java/org/bukkit/craftbukkit/inventory/ItemStackPotionsTest.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/test/java/org/bukkit/craftbukkit/inventory/ItemStackSkullTest.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/test/java/org/bukkit/craftbukkit/inventory/ItemStackTest.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/test/java/org/bukkit/craftbukkit/inventory/NMSCraftItemStackTest.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/test/java/org/bukkit/craftbukkit/metadata/BlockMetadataTest.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/test/java/org/bukkit/map/MapTest.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/test/java/org/bukkit/potion/PotionTest.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/test/java/org/bukkit/support/AbstractTestingBase.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/test/java/org/bukkit/support/DummyEnchantments.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/test/java/org/bukkit/support/DummyPotions.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/test/java/org/bukkit/support/DummyServer.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/test/java/org/bukkit/support/Matchers.java (100%) rename {TacoSpigot-Server => eSpigot-Server}/src/test/java/org/bukkit/support/Util.java (100%) create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat delete mode 100644 pom.xml create mode 100644 settings.gradle.kts diff --git a/.gitignore b/.gitignore index 724d452..9c5daa7 100644 --- a/.gitignore +++ b/.gitignore @@ -67,3 +67,5 @@ libraries/*.jar # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* >>>>>>> 354c5c7d98801e512c3da0913cd1824a9cf4b2cf + +/run \ No newline at end of file diff --git a/.gradle/7.1/dependencies-accessors/dependencies-accessors.lock b/.gradle/7.1/dependencies-accessors/dependencies-accessors.lock new file mode 100644 index 0000000000000000000000000000000000000000..c24a7d1ef04b05bff2c5457cb102fe6fbab81915 GIT binary patch literal 17 TcmZR6kn@#8oZtEf0~7!NFC_z} literal 0 HcmV?d00001 diff --git a/.gradle/7.1/dependencies-accessors/gc.properties b/.gradle/7.1/dependencies-accessors/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/.gradle/7.1/executionHistory/executionHistory.bin b/.gradle/7.1/executionHistory/executionHistory.bin new file mode 100644 index 0000000000000000000000000000000000000000..b372564e2b6f19e8d25fc98dce1f95fc2c70bcc5 GIT binary patch literal 5262936 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

B?8f_6Z#5efit!=iLgS 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�^i1{F0^|w zZthw?j?y|d;(Zj|HkaPbM?Ob-BX4i_AzCH3w&qtYzg(oYzH2dz+6d|rh;B=Pu#LsJIX2K&V z8fdL}j)$_6fpV`hgd0;X>wLU>dCjF(&$13w8NRsy6F%ukJ0v0$ZT&_04Uo(T_?O$f z;`zHwG}RouVK-BGkX7+*nA^?31&6`FlclLNhBq4D>E^a$Soz)_4q>-oveO+wzy!Q5 z5qlkAAF`~|*5PAK$BgJs(|BVS*IgRq6?+G!2BCe)B5KK&NJiwhtB&p1qxa;*kjPq} z;40r?B{1ddPP9EDN_1KfjyG z+F>XAPcoaaVA7Ur@MEdaeYW?hzpR<#v*z93ao(x7A&xkw|oswk2h_cF=zIQamy1wj`1jhd;f@} zlGJLToWM>)_rIW@Kmh{5avpo>_vC5!d0*LT$&tO?dMX!Kd? znAv{Ch1@p4h7TJ~b(17N6elKu<57?s3z*@1 zA)7vI$GGfJ=Au_24Q+#B@4{?EL7>5&f+GtpgPSVzLLXFrnyw8#^6kU7T-7(1pFFU> zYA0?r-p<=vlUkl1aNvO&6$MZ)^lyAjSo z79QX_#WVcrZ!;`&f9NF&sQBR5UA8AJ*QkFDO<|RE~VP4V<;5yl>r_rqrrl)x+f9T&14##jou&=++-^Wj|(A(czz~UQ#MFcpOR}%gALFp)u@2d;?9}G@iRuD%w z1o&qJx}IR`43($WwPo==KrJK?5D)Z=@mBX|lzWlZ(?@e{yN30BFq`(@$a(xOA*G#b zRUZ}SYK?A*XK@kIJeCdgQjs#t>8H>XKMGL*zN-5Y+g&=Xe7l06ebu;+k8=;(r zYdIglw63|#b8BoI%lGjb)nK5+puqSDXxpSvx?m@QYN<`AZzSy$m5BaSEH&yCy52If{8yRL@0Ccr6ZKlf z@}i%Vkyff1qoETujJ(pehQ5>Hk@JEEf{_rA-XIMsW*ZpOt9? zX^(@`JxmKoTYfZw{L-EW-^%nn`0W2IJNo?+$))`{x&^t>Ps&Igy^s@RY}l%Gj8u^} zwR`fvoh0BI1#HxeMQio!FTVjyN;KLEFW#HK{~jibhvtXt(rn$b^U=}rkUi2#LbnuDu z%V@{&4C^VNFCtwS2Ox}S>5mhn!zQQBnh8f{kBm_YFB}tDNIN7Wh#cB$qzeHp2t+xc zuyI{<#+#9j_VxGGO1pQAd~#xB$7I@J87bru|Bu(>f1p^Reh_WF=!{7_e*4X4`8{f$ z_~L6@$LvA0-9)TIi$56pA{DI;-VUv`5ti2q*Cf5_o>BBXFilf^lv)sNuN;=8LAms#z7C|J6J@;O9{xip0`SZ(z_wLkArk!e`gJeN&Q!Eyg%M%0x0xvNll;8+| zXb1cJUQQL~*3_2PHqlPDAQT?r4#gt5f_WUukb#mZXK`iK-Kp(&b6Xu)vL{n1mzLgw zOfndhSvJvFLON&ilbXWk_uOh$n|@}e2H#sL-?E|UD4D~7Vp)rrfSm`31i8C6u*Yt< zJYdh8@p*;z)ON&kI3Y1rV%UHnvk7Yz~TsQz8m*FRR7 zkBu4?HFI911MOgo;)qCpk-ZCIiaJAlPz+XzQya&096xIIz&3tnK9@mxi)1;Riz%*9 z)aHe3A6)-DI#j;$UsKY5GFiz1X3K!kd72%AZ5JPG^A$Xj+%Y1fhi4xa+%KB=EBu*;+E!ZfagYti%M zIfdZ1hC)}sVhYp?0y)JrEZJozxH)9cc@FcNV`ysa!<%|FCw~6nz=x;4K+Nt+Q@^_(1N5}9B{bE^@Z9N zIhdz20<;dlsMhi@#cjtp|7j~HQ z{1GTiC|4ddA$e;rT>l_C#oDl{v1aqRy{_%lQr>>eJ&Rg

+!MgNWicxt7P?c?Nhj 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 z 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⁢Qme-StT04j~g39(@V%Cq*7W-!Bk{ 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

    a37Q~NQPxoVRdhJ$itIK_uxtc z`9u)HzxEl&@wIbjw*L9DaOX_U7|8CBF_0M`VbFbQGnoi78(vZ_sVRqXhmmb2w|u+n zeR<7OtEF}4K&j1S6l6ZgD4yxOU^)s&#A4{di zwf#Cr&fHNfDwQ%;pAX(}%$KoQgEBT5f<7`s{RDtwoXn}8-?v`U@xIsc>kVhV8MSX3 zl1vf=ePoIRpdwTXD+cud{x^|I!pM7+ zF03D)*Js6!l{;(i4Th>aE1}rt6e!&{1|rCnf@}zKpRh)=OY=UqKDm7Rok6u*-h93l zY79hB3j^uCosEiE(CHYL(-pUFU$Y24mfi5lvwB0%=Uju@*{J9wzSq4^gp+8&B@`)n zfp5czJuBDeUEj%DEn2e>@`-Q)iLYs!K?@-_hA>DD*M{Z~h)q~JW-Abk%tS|O&8_?$MCu>=)h+$EsdHlg7C*YH_3uQIQ5OjEa z*p>`#2e20+QPzr08@!?-l&FroWPHfw6_;209{Anh+M&7>j}L3dBul! z1c7EzpppUHL>bGy$KME9+Sr~E($;Cxbs2O}#>H0~G;IdUQe{z>CyxlIu_x3!Xj#`r zZC3MYqYM`DweCA<5VH&FVaP#WKzvH;XEnR|{(XZ+oXH_mr^d{WgF0ytQ%VNW{ks(k zp`=zb+bwLC>|@<4oD%=o^6+u-7wFvzg;*6BeU?GW=d0W7t#mFa=|8V{^ zTO%z434%6jYsC!(p?;Dd9iMh8<&AwjPi&Zfb#LXkM3l9q0MVvQ)`5Yzpng5#-##UO z*+t8xW}GAY%=V&`iTIi}8MVgx=vYdlWpb_%r?YcrPy5rUK9whiHZL}kxtF12R0E7Q zXIe3`m6RK(YGmg*$ihY17`Bfs$gg{TZ##C1q~DkMH`)aV?gxts}Bbl zFL~B>n{g+U*`ff^t7ceBMU`1_^jW(g{$Xa*;H3@`2EVpF(yC@8DBV9qQ;7lQ_u(?| z`lDG{^upnD8xHYma)0IBZP3d!l?7js?TYhNm-DcSWL|1q*=`H21Dn*IP`8` zi9?i8GI}OSAhhjOHo|D2`uJQ zZ1?eXXvP}PCds=lX> zMDU0r6eqF4k-F=xdhR;x-S}Nv#7kx?B#El;X;T~9a8PC#%nVMY!_Zr2PsBZQ6K;I% z*j>boLa7Y|LR)ac4s^3t>y3R(`;%Wcxy3t;7-;r%L)!#YaDog$+mhRfLA@t@GIxEN z@cdDmrX2gNv+l_Dd(S~Fx%zwB_Hw&$aI&*j#8q)Z@80X-7Ir5oKBRr4koQyK?xFT_ zDim#QoxM~nvQ;StlQncz-64&?&R%^#bLWBtL#vA@w+@D(ZIiT@tJM9-hN+=fch)p( z!}ScgGo>~MwMnWzr*AF+fi_Zb6NxXp;Ki_mGh>IjxlV{4)TqcH9yyl~3~dJxM=VPM za>|&jVADaEM8~FwzhBo=jMwesFRZh7;P%�?DPT88@(Gt6FE(qj3n4U?t|Ztu!w z{;H2sIT(hvSaqmC#OHyVHU=s*P5ekl!Vwno;1C01H-TWo@^`|i!*y#zlkz?C4G*(A z4L*E%t~_l!CE*A|!6r~(7lIlnbpLh>52X-PfLB6zfP%sbSMrjvx6y}nx37MGZ#pE! z4tl$V$5jXYfu!Rmsxfj;*0CjCMk4j~ZQ z4u?*l9-z8X)6I>=OWZoJEjZ(PN2K@s8HG9=k|Ah2c{zp4f}~<`D3LS4WNj^LR+j&E ziD4R}$Ge=#CoiE+UQ{UB`~hcIOMJ5xcDMg=`B$9{?bAN=*uBYYKgvNMzNRgZ<^mq4 zi-`zOnpwLZ!+Zu_Zt<<_(w9fCjza~~NC32{kSiB7qEW{!HV(AA)ZoEa3%l)~ThtJS zwMD5A1VYeZ9LaS+ZdIT9jOp0BAe@p_~>b z%lXflcWd4E4vmU$a((ivs28Z?9}1GTBQ|(;7L3(PRpro!FkiPTooau`G-&IF9nTtm zLLIRwK(q;h8`sZIKp3dr7b+_P64{?FrM7rG{N$$9R zzIzC03?)}(CyCaMSTVJcbYrt_hs#>s`Z*Y7@F5WT7G4Ni1>p-n`%8nurw12*&CZ;Z z?moFvid=Zr_q4?T-NEw?AteU5bCLOjZ?0bDc5F#t#wBqqDh8+tN8j>`#F3<%=cI=z zxy;td$t5c)>Tz#xDMT(m8H6^M*&U3k&hX02ttnd5sjsJz`^LP4#RVBCmzfMfn+=81 z>NjS3S-MWo?#QXxZC_5x+&3s2N&=uymBPXW{3Rc7#`_OFet6f4CmC-=iRDQzz`z6e-hp=E0a2FT-kF?KNEV z_DSsSD=2k>Kxms^4{)%H6oKHJg;*|Ec_(#DdzL-96?n3*X!!L3ugjBA^NWI{Eu5|# z+*Pcq6~|cb>H~Y?SRjVbth34mJC6gig{wq-~v@o zmyWF%u{ONk_Yw97Cbzg%m%kgOVh{*zgnDs7h{s7xWFuOo4Hff%Y%l1r+Lhb$}0NSE@$}!zTKm{k9 z()7&8F)6<7`<ePz&oc;A5@Zp z>T}u_9g6crt(HD#&VRVN?)y8Z>rK4g9ku8r0NpE(wIXqbREvYjDn8{rWciRWg3Ym# zqaT8EXG6-P@%>ZX7dnUl7ds5b3UW08>`%HcX2QpY;rI!~ybuOdyF~E=Tk!)8da0&@ zV@__aQ={qFu<^DF)=&4lB>0$^Q~~QH2BjpCO@h*W)ilziaTFQh7T~#Jh&4tIuBW+& z`74djT{%?X*KAkCkwP1&Y8q*3*(h)tp1qRhTS-B@Xa=r1x*aPFV?A$ z1EuaM#Yp+&k<3K;j#V$F=P%h+Gj50b)ca56P_a%0JTCu=b)drQVI`~tG6`QKO--i;+^Hdnm@Fti?4z&=m}-u99i za7(OvWyJo%mn%mU4S)Lbhkey6K!v9vEsJXV6`i!f4KEL3<5<1qcLC3g_cvPTGxcG6 zCoecHi@FP-aOlCLx&}qd1UwmeInHh#x3d@j-svTW8o0)n49Ke5q-r40gGjl8W({J< zJLS&r5*<41%8!%zeXrh5sufzbNKxT+-=U6A6)BvADA05Q@=@=xJlF18xn)Z9g)_ds zAByTh9qJTV$Qv{oi|+ePXko{VFPDPi>}273V4dXB@ZMAJIfe~w661nnpnelt_|ZV4 zhx40;w$E<5b?o#diE~31Ss!m%`tWkq=Qj$t9^7s>zCWfUkj1ijZeY7;^^*qQCyK83 z=kU|3cDpq(=t0%pK?_GNq#*|8O}Y+iJZ!_x1m4azM`OBHt?E>GdUp?NMW9J>60?Ck zA<#%7xV+cO9_G_qbPS(x{Y$;RT6YhvIOtss@Wv&AFS7!V3!=&Tefot(4c^^dlJVo+ zm-+PSHAm}eAmQmf5IKwGd@N6kOn;45wP#%(bH*-ZV$Z|t((H`29*8u7>9tB&Ne;^( z@PHE1=sUNzb$`>?=3sezn?X%>ItFXCN+@s|l7AH29^RXSbO$_q!LrE6%JH>qeZA{G z+xEEM}-x;5vcOY1G6m0>Ju}dAh2??BK=I4*FYMQsNIXbIwVW+n~K3! zS1$!U>h3VAd8;l%lM!A62@6ra7shf$=Pgb&CK%NH=S#R!zJd_typy?l%1zARj?F8) zza`9sH&5K0af})bXOp?A3KwiTidqy{`%q7>U!$g}bn8s0CE=-^o5Me`I-Dacc6 zXM8x`bz+D5ft`=A-!a}7!S5GH1hciEpv$9CP8-GuR@P3Dw@T)tt3jipMqPrt4a{4! z?R5Jou?UYwi2>sSfq{kxWaRa*R{8_j-GG%?EG2U?a)8+NPp)^1+LvFk7yR7z8-74W zUJ;b84w;=7T`gYvq}4n;a@Xv-&XN_C2)|#61{fnuWsqo!XfsKQ zcX2o+AVob~Cbx*z;Ausdr%_{NT@voRw7&K2s`X^XVT3(WypO9I(YAPiK~NapBkI^X&ux#N`VJ#gJiM8jJ^h*i~0~c z<@FOnm4@G2Wx3;XWM=pLDHn_`yj#vVRJF)yL8KQ0LC`{#ekLo#%evw4jOLve4Y$eY z`D&bTbp}EkCYm=_B_m2=$buJGc>2|tiSY^Lm$%y*S(oH#-(1lc=n8Ktr62glm=ah4 z;SVBnF*)E{#Hv1xn+>>s=+Tr&<2tvO&ogh(eOP5V@NF>OjeI>Z}06~*#7fIv)**MlZHXbCbMWX1?U*;N)H1DhlQ&EIu-^I$K4>K;L1WF zSxM~8lwrNLboyD{#z;XxSNIt+%GkpYvI+C(=Cw5AT!hi%%{KXu*6eP82tPvx8HU%3 z?NT=WA~PYF`yzTx-liAUTjq2LWEy^}&UR5T=)M^#U(-cV5<#xXL}uyTQ%28#MHO{< zWr_0`Q9Bc%W~2&i@R_A5YGo_SiJMI*&{P1zmR^gz^(_vdB!d;CRj)>GJ8t z&I!CnGfp;)MBIH4x~~aNw@@j|Mu|m=hficKwx)hRUu(#OQK!Os@J@6!|5AleX~98r z3=@0Hi`6dH@Y0#AnFr#n3tL65`4)fm_NX4MT56ABYDGdfGh(s7BR_&K)Vx~zGW5`l zDetCmx7$7$Vr<#$zbcr~hJ= z|NQMie7AA$|MXh)X3l!;tAGI40|OLakI7nCG4Wiw`MW6dx2ERD?jCwoH3JlInqw$f z%@{7E1opCS?~Kl@nRM&gkUk#s&R)|VL!rXbtN~bh0$)lAK`~jOC2c3Y9MYUGMOX7Q-?9Yb(IZQ4{7`WOv`U|{Vn>$xE{iYWd~&jOX#e`}Sfb+5i~hJv zgp@NCC!3MG>&mK+E9QB-S>N`XTb=$;G0=QAR2S3&)vn2^<1Wt(8Z>B^TSu=&tr$yx z%+P)|)PjQMP^y{=M{YPsA|msWk&?SLl;7lB!Pjm{j!j1o*B(mMj)i9NQq<`=v*QXF$8 zYu)*Z^BuW0FW27vV&Xz(+?6WC3W|BU!5l)CsQV^`lqi+0=bTiG?={;F1T5 z8&UP=G!!~h6KEa9<4Z_&coz8=-7P-iF*GYSV2%0iBaU#PGc~0!99^&L6_W%ytoRF6 z^*I9jt;=lPj(zTdL5;O*?zyx>ysp=PqM^`{dWJ##Oe_W0{CH?!z{(lB28Ldo=ld`) z=b&hN7+mN`J;4wdU3t&=)H;IKN;tWYBILZvY=0~zKt*YA@ZK7KyTNt}p6&Fog#-w4T-h#2Mg+ok6!{vlFw1hTd~6^7yo|Ro&{>fr5gDg3k(z zC=g-)C6qWtNM|yM>eVfIY4Eh7t7E3%-OKMO{;}%4U<2ox-ZK>JhD*%vteNR ziMJFAcp;t`i`_ zw<=gR1WVU7pK5rH4XB#~?1=@Xd`^p?gPVU(^BZeh(=Vt^`yclZ*L*4*Y$Oi4g19O& z2v)44G+y-%J^kCeEHuVV{QIKMt<&RHA%eInGz2#qXy`hTswg2Cau4MTp^(QFKgY7c zBOlK5YFcu)MsqV?#EDdegkXn)gs#0yMF+>8F#e=MS4@^`r=WQg2Hrn(af0;d3iG{R z5PO#j1sjEeelb%~p)j6g!*%M@ji{r69(&lY9hZpQz6Dk(X4=r`l_4=)_vp#-i}{ij z6Jl*Q)DJLfJmmV{G6bQaE9qS&Cu&hsJW&AMxyg$(D0p&ufwTtCV$-{w!xtYOgGhQ; zVNy$+CMLSVhALvzY++jlnWggv+53ddh9L{mbDHHG{bYd%8>+CVS%R_9zxUe{27%0q zf9D&PCCy(v7~j01<=S&+=2f}(BQWSu*ff);nJn8^o*$cpXO=!bxw3zGZCj7O6E;mu zdSuH9T!K(NwA`ZKGhVJ9bi!oVwtIgjd_DPhY-wWBqYk-%B5!2DYr3t0sP=Nxhy&Z! z1~}XQJo0xs1Y@~O)0-ugGOJC3D>wv%OQ`F_jC&|Lw{i~CJgh}dY3Qn>jHB9*U24OC z!bMkJ0fIG>W8E(1Xyx&J>{q9JuRNU6rJffeuRw)B&5sHJU2n=%G>{*RD-J4TiMwcV zG-KzGT2oAg+mf{2C^(~84878c}#kUSn5-1ad0{Jt4C&pa-* z_5L~Er6ycrS`o>FAl}jx7nI=5uNaK=8nRCOMpx+oVmuDfUQ26i@bs23HwXI;ZO(Vt z^EAGH%|D3J0R%F3HOS~XrV#YN%#j7W!H36>78bpj5EXp3;O5kGiHKtgfdpnsjfAd? zGlC8kGinl;tQV8kKJjbOyBTl)p!nzxStW>zGXh@4hZp=L z_v%C+yHij8W<4lK=&DO0QRJ1O>QX3wp>0wXba2dN(IOt03Xtmt5^tfic&&XM^Nn{3 z@-AAAn$#$*br@<=6@YB5Na)&@lv77$2J9-1VsL4pmR2UqtbF1f&t?9pi*`kPY{?Ef zj@Xuzh{z0SBBJY&2hNmoam;x^0)7M^D~4kp$(8!^q1-ob6Wfq8i>HpZK5mqf`El_v z#3K)!v+A+YEPyycB0(q@yRId#*X7}(wk3aDf5o@%hM%MOCNA0qP%9F;qK?YhN_=`*EeoJZ)c3f}E~QWWw0L;QmwU!H zVlRCBSlw!A;?Nf>isEkM6$+3}Ep2fwlKEh0V0N~hWAL zkwZn|4BrO&d}vy6b#@s*eE}k_xQ**Xi zqr%$lPfHL1Arvnv40MGU5Nz0hE=Ob`v*927Z8&3r@PM$dm0kYPL_~-I!3vCpu6$UC z9pz&qe=o5VZct#9(t1MoAKuA_td?$(ojzoM$cKd(LgS(9Dnf%L5g%HfXp@xgo+BH) zZ4y=ML*kyR35cr*4Q?P5v>jHIPN^%>ANA;9JiQ?G+E>BPQLn#bo-RinR>*q|?9bAb zGecbqxd+$JQXDD)ZA_t^(=%pt^xTTiF?%;0I#zjg-CRV@40TP=sAxO#Lu(@r1??{V zvDl4N%;U?TGS+rxlG4Yr7^|`E=X`4=?q`QO@ZX4Cap%+%H{RNl4IMXa zMBHRSf~5_UUi>n9(5XVe6>22O+muOi8xFY8v}jGsN}h9OtLpqRG# z;J69$rpbbrlN9}O`N*BlZ9R)^>!hsZBW|;xwbG7DFG5I=qsdsMNl92lzil-Z?Y!Tw z*Rf5%s}n+PnDnyasEAP=xtOeevhN*lb=jZME$#6-TX&yJ)$KT%IP_w+?NJ#Cf66P{ zlgM5C7o0Y-^t1=PbWB%A8fL5zxS)7k6iz7`_jY zl=jKV-Q9dq$%TX;X`Op?ug=|p;q}6T14srTYkm0pO!xEx#*3HSZd-1L9BNn{3oyK1 z6kbb_n_broo=+2B85TO<<%7YyayH9u5VWyX|k8mcPf- zd5LW7*~ck+ZdaG`P!%@4+|vMpsO8m~+nGzV#^0IlDiHSzJm>h5VYQ0T>>0kt8x zQq7~k&$`u%PTXVK%hy%Z&72mts5*xRiAFDihY1@{DFM%3#FHvgZphnc>$v1`)9rd0 z4zB;T-QeMk9IF$&s<7$Bd}|g%WwKUIo)d8+Io7(&Tk zvuvBZ)G@`Yj^CFs7t)z8DmiF30vDqQDe-o9V$<)J1Hx^jkPd}#zDm}@(y>yA za=yDlQ9-&7mK;MCD7Rtn{l^wAA33Ls^@n9Uj+Y}g2Aq#75z(w4TG@Gb=10v=vD?4@ zci~4wFLC3>+Vw*V3YrB=NdJcWM2$7H%!gi{6-I*2vgZGuh$%AU0H$z-K!c1r)q3fst zGo$v>$m}FcEa2?l%E+Hm|JPuCsp(e4Q3GZNg@&$TX%YM&0Z+(B6-&c^qAS@0ACBXx zq)5@T)KV-I3S^XLEo<*NH|gi#);lb|H$B?43&OTixuM|D z6DyiG@3|%hmjYX^idj}QT7;#gEQs@W;ll1xu=D1IC~yQ#?W9PkAkAc#9L$Hf-+nhS$=!sOr5}=zPBL1d_O`)2xhe4pqmvh zrL1UXpx5bq^VZ;v0Ro{((da=ROfOWyiWVGnZ3D!r;AD_J!QC&N-;5nJbm7A#ZrKgo z506A_12{BW1Ns$Bm0>^=IH5m-u|{KqQvC3fPAWK-K(L{kD~q7KhpX%P>~GoGZr98s z1|JwZ(PXkIkhHBmHhD_29mQNIYPT$)qJHdwMIRcD-}*JZydnv;_87F1bQqehy;HHo zO7dOBnh*4MZ9TD(`Qh1&&1olxY;k#6h}b(77?dn%VxTK4hr|ZBU8AhS^isb~3C`^O z^?OIm@Y~%Q^)83R1QnjH3_>Lf$_y<5}sa-0B%A!PaZDi+k(a?WP{$c zeWw>AR<;h$8?onV{j~3ov}%MF4D^~)FY3$m4s%x4FKE_cZT+Q&gR*Yb|EkrTQXuIy zr;5R`OG5I@zg}m~K3Q_V{nC?_M)NqMbF`XM1hgK=hwV9&bv>4|ru1e-hS!l(1A`k| zEvuS*7+MeHyK~|6-<(CKL-+6hb8FoW7T@>0(U+>phoR}UK8oe1T5%>TtM1RRnA$nv zD|t&Vx01Cn(`tQ?@VYN1sOqE}5WwdVMLue6l^x}`t;3LezU*<)vCcK9m>>c|_Xj-U zohM#}Gj46#$ub$!{w8$dgT8&Cb3ZZ=tHQ_yZ4?-cB$AV;`m^qD4OK&N z6!Cl99}*L#A$!Emsx-f~`DN2{y`wL1L=T`_LlrC=0ZS+83P;+Om`i+}T^BX(l>KMN zz2*&2YHNG1t{ z#`onqCozaGlrR_xBqFfC=-w`3qi_^!Dd6FG1>iNB#6v6*@bIa+e!z2jaNN9vxsK~^ zm9(x|4B15to?R8Z?pIgA0!B1Q`oT#~XO5rvJ${idYw5LuiUrZTq19E8O#WW?rdvfK zd0uNTc~|ec_nOEXlBJUjx~{i|Ot*?iHH7X}93~U1D#KNnOMF&e`oHVBEdJH`AeUOh zUxtk+gH#+Qm;zf#i~exz2+6hK@~~z(INdRQhW^_3HD}t|MN2yTFiBd)*g;VL0l0ZkxDyzl)&mM3k>}zrU-BKEwOF>d(5@Ak|PDb5VpqsCvZmk%}*+5N5zSc$_ys;gxXxLT+3a57?2 zsl%x;w^lwaUf7hqhzG?*R2bM=G3Y+brXqr44Y~_+LH51oN>~mso_Kxk8`GgTOJud0 zu?|3CHWdQ4HUxBP0{&zwELNQJ?CZK?S>3kPgO(4gb zAlqFiCeFHtBdi&ZoS0UomA}q6|KZ+&u?wjMnxMLmj;IO8J9^m@1yOLz|E%k^r>okI zuhDjeG+_40-(#WZhzgo$IR!)0Iqx|6Zs4pW;p4P_buca59yZ-|T8)_t)AlZp(=zXx zpmgrHc4DcF56>Hub*}O7&>Xud&O84rZe+Nxaj=&C76Ge!=TEih>Q*H9d|MRmZP_4n z+N!OsU4PHH<#+>f{#0Pu};78)5Pwiq-hkZGGEH9=}tL&qB+qFozCaCTYHUh$saIlg!@WEzxlgy;2 zciK%9Cx?WW7fuX-4mK)4HWg6!U8hxJD~T3z1M!J|8o77;xrV`_ltNzKw9TK#LS3g- zP)dpkC|Xq!%rSUS%L~Ej&70TUhp{-O_vpk$!^ZIEf7Pan5Ez{vqZ41Ma8>LHF~JGn ze&k^G#-a^QS>8v3{7(1%qs3!HgX_NIjB2Slp?o6cXQa7^Sa&|;jGl|3phA zstPeCjt!W%?GEBk+(7awyzTAMuZeqUgULT#cQp-3E`gqCsSqh-o;W_B5a~WyT1AVJ zDfkkJv@UfIbzC{t?ef=8@28ja%Uah2N|sh3Q8J_j37wWwAzB0-BsMZz&b}XDdpLi@ z&u0Aors6$XETuxcG{9-s4Qwwb5g#|O?trk=*nq22r`HM6WB01k4G2{CY3eEoP>K;~ z`haD8nqv(*NDOSgIOA&C3eorOUzWzyv8vkwN>f*%Pzn(eh3?ZOR8%M#0k;e!`ln^y z4{vq&uua0FjTVa@IV^?JB~*|~`pJ;AZ)>h%to;p%@;b8gdwwl?)~uED>fx^r4vea{ zH3~58#Jll9n=mQ%`WWAn+cEZSPi!jlv5N(nl(ARO3R@XgJr|8bk4i7fP_88trQz>9#!yVd550cSDJkUK{Yir}StZB!&D?dt zsoOT@>Zpc2%a3cZDH@P;iicuwA!y71QT{wKcU|^6pJDA6zj(5*VU{+Vf&$ikVhUFO z5wn4~3F-A;aNlk51KMwBR%`Z-UMA&GVhZ%_6P-(LC>LD*FDHp5_`^p!M#XAvSaL-X zTp}-`>CfVAlh?NJKV47|T4HMD&e#M~g;mxd0nkTexKyS}lkw;=INqm+|4R3Dvn5@> zE;)%LQVpPcCk-r@VkQ-1VsF<#f|gp+TBf|~P=8o*>%xWaqf`BBHieut0IHZ%6zF@p zM8HO@y3tL&W8~OYYE|DM|Hz_a!MiUoHfjoh>T}&^PT(`^3M#eKF3@Rf|fxf2RY26-}J}Z z_dlIDqN!=?%*=;S;F17iQ^4rZ6P#dWpbX!NuT7g`X8fc<%H;3u2gY6UFr?^-5(JN} zDL{0eR7Ok@NQUsoskAt7;dW7*?dhT(SC?2O^cespl@Z^A{0HUtbk1eCT&{9!tbF@4 z=r(lUwd3@ze21LTk#dNKmSRpmX8HTp>>7kBXWJyFWkrcBJ`$zOBxVyRBv62>=>xsHK=E z=7N)}$`zV^{m-+Nuk4DL2TK}Ryt}&B=IitgH z2hT2(x@MU`mumzR8-~*Tshk)XkgF(LhRZ>5ansp`!^}%7zIO>MdNcYdbSfuc0I_Nq zI@Jnv=p#-x9_np_}&;80dcUJ|Dex*gNR1mtq5+-JcV+DFXVu`M9Tmhk8vsfV; zPL};TX5V4RmFdX^zR;C00m#+>q;YPo1fZQ5E(AALC)I5{VRN0=E9a+N31+@U&#fBb z2W=i5$4Veo9^zD%>rT(%_M2PYZq)8&(y&K0{`<*DMfiMdDxB`G0Ety4lMFik$hp8F zCUP@2G8Q!7*dTdq+lR9TzUlfP2f6|z5Rhqy5zuJVK($N>Ujzz(;UaSFlwU>hknzcn z4Er^54s3b@ZPZ{W8h17;u_`KYN^-P&L~(`TiHd{}X@WQty|bwRX!K#Nq6vi?Jk#UY z;F$@z`yQA*IAfaOjrL)Q?`hn8t+9i%B5xF5_h;dI97ev(-(T2oQ&h7*W|z>LF9l5Z zfm=dXIMz{e?6B{T*j^cnD+LY!Fh=z5ETP7SQPeVF?~$D@mPpnV21 zjP4&$5zETKhcy@Z!^Vio;<~gf-@W5fkI*sAPI|mE>IyxeBH)SCPYrk)jhQV7C*V_E zczyQl%)W6#*C$Iap5rZhf;MI<02)ubj$D6r&f(&=L+{6&TT@`Lu-W3|o`Jj2r(F^V zorLni3u(eM_~yN-7qjKn#vYqHFFqN4tFsnD)gUx_WLT>&V!O@!Vdfgy?c26v(|TVy zo8;q*_Q=!_G@33)u_#dSG7}e3-$wN=jPLa8Vb=1s+uJ*e&ZA8i3`L`J?u5tYthlO7 zvis6b{W`Uu`8BH^%R!#{DiQ6RYXH*d^*Vu0kswfD9T-Rm?xoV&A44skd|XribnPdl zSLdL;UMd`o@fxRaS&&pL4#lOSj>Glw(H&PNU1~nC_M}&(ZJV7$0e zIWfP3PONLN;aXO*&yX$-AAQ`N(DO@$qj7#+fIChKGCVjD_>FyS$%T&#bIQsF8|0zq z7Xs3KmKU*!a$G?jYq7|JE8`Pdgo}miV58qQsSkV}xvoq2_M*!uD9eigXKMl1eZ@0^ z0-OPbi-^_rrEnoDyHpaK(zI@R;+s*o4~}3%70(D9I2ULfG|IXw=4mP&WPB04&Yqm? zJFfANE_;lFR=s@x3oYwZI2xUL&^1mb12ug>6j0>}oe0g6U+UH>cU9!!Cf6>fd83_r zO-MR!o$)9zF}OQ8IIE7MpI`n7G?TP@A@TV$p+{*h!$Tz@0wN=$ z(KF-ePlw-*$m|;1;{LT7T0(+k7#f`<@;R@2*r~e(r#ejAAgf3`IX>qq+DTGF&}gmQ z`2Ls$B;5FkCNUcxJS@swb-LFRx8i&2(bgIQqEX$5aXrM~5d&@`uAC`*upI;lhjg}R z`l08Wsc3c6grw24BL?>ZAwrz$R>OaLS__%i*H3zB&S>+i8QQbc0Ho1-b_X3p$dd7> zph-aEtidzaxHm69d3A0A+IxnfXgrF#3jztVz!5Ba&mI)8+VNuUxygOKuA+~kDgfPQ z{SzB4$6XLA5%SfS=)`VKa`_8$4lZ7wwf>HAh|4{jP5UN7S^oqgcD0CTG<1rTQ(Ua` zTlSA$Skvj}{!Jm=37m?VXhWxlpwYW<4;72$K^9Wbup1}#cW(Q2V}6&Vl~)|{P61Ml z_AaP!G}>lG)k1Kz!s%U*QS*dh%GSa?>>A^r)%230Z8HQ!WAp;Nf)hxIL(29nR-G-Z z`^$Rg*tZ|+JvA5|y&!?mX({AbM~yssU!LR z30eD6(H21sL8E$kNVyW#?Fy3>_^IJ<`?>XP7Zj8-oQh(@XPkn#!NVR7j& zlXnkVjmdUxaEBXmvJF~lRRFZks6Y~_c5-%ti7xiqW|Ra(qgUo3 zRgP;1o&e(N6=ZI?yRvuG_$JS9zS&u@{0iDD(*UGV3_QUdElzBBUxT+R_?2aSJC=`( z%6M#z76TOkjdyciVsK+Gawp6tleJmaZGPeR>=Cb4`z<_SwXh!gZjJ&*4=>{>fW-j0n!_t-)w1qo)X2w0oYo= zbzcPrd$NU1Ajgp#6OE#Os>||8C${X#o9Hs_=ymSTb5Io+0-BA6rop!+$R|iwr+_eQRRksc^dQ2TjZwhZq{QGRhQIyuJZ@#r7W3hN4^_0(kTj|@Ary+ivC9Q~%YNOf z$f^E>Msa5jzijP0d*KSSI-{ZWFzaMXns&`JCH4IDFvA!1>u$C5mR3FMYDgN=*{H&z z7~I^SD*+*EeB#$y{w%pwwD_#(y;0$RCN?<|4=)P#CGw3UfPiyVr?kwxqPfF!wGGE^0f$gCx*{bh!@5s3X z1PFm+tb9d`)8^&&C2-(vlf$gOef(-Z53_+BIZXiFx5kn1rJ({Dw$sSq);Odebbkj# z8jRzLQ>5Ou1E#*eYyM+yIj_5gbg1F+MCcBP1j?p@>fYHSjZP+ty;|;<_ByPC%qs~}MLQ0u z`F$q$h>YhC36Nv-hOd8wAI|mH#4D|W)cn(0~8#(_moIvAX%{&1&DF$ z@s)A8VUKUD{_O{hIQMR3H#X!ck?>P$S4XeWksER^!*g=c<%abKwT^|Gd6A&;Zs`#8 zGo8O{kO;#A1tJDxCF#wA@^8A2f-A@2n1{=Q#8PK&AoUnCtw-CIFShJi+$5sX<>;PX z&7df_5}2(8SoeowoOnf_A&Tre-Z=L&d;N?!2iGswhZi|tgbu|x-I{Q^Z>o)xY!Av1 z1agJ0ij_C#@jz+|b>=Tg*L*fkJ8d`g^DCdodtK^6O|@|jszsywPMrippiYHQ;160Z z^FXW@JK9tEsp#@9+Nk^tzimm)#$vaM9#E%Ff}d)z&|u^hD}t4M#n@4<50#VM+gBLb zInLiOgV=bnQRKA?jH@{0*wt$A{%Szr8?q9&+fV@;!bPN zqExel&E78V(4zrdlqtlM;AsPBj$6 z>jrMme%<7a`MYs@&q{aZGIBL_QN;o1!dW%G68*6#{{NW!4zQ-0PO6%jjDoW; zW_49+1)}d#DPI(zGG4okVu$8V%bDo@(BnnJ!#(q$z$j80HT6~MRnS!-k8*9O9`Gu6 zk=7<(w@u1iE*-ggQ0saFKS>#fb?KfCs4H{{rqmWk`QlPP30`{X#5~U(clOYGk$OT|Ay~hVehkr~ylxekuoF zQE*S7Zozb~)z1+H?rDL~*TvS($&${fihd%YXfTRyeDKg41O=2!k8BjX&j<=0I;`s@ zb~lsQ)m>^n(`^)Wf>GwA1mkB34hZ~<{J0WukqsNi9Y$vJZrNTKYg>^0@xaw~TTxDm z3WbeEss0!|W~DipJyV*(1CGAFbBZ4TC|T5Q@QL1Z)BUWygQ)cUpvVCBVK( z@ubC3VK=XzY_R81gwV4=e(~2{sN+A1vicLOu%S|pttw>AWPLFm)_UWM`W+XRHDJ{K zeR%?uV1*GW$5%x}nXiJ46v6kl6{xE5zA%~{IW=Q+=OtX1COgt=*G2g%+Ucu5lL;Dc z$V0jBwF2}oX}oPt;Mhqsef=*$nM}}#6UZpmYx!?>k*GbxBBpH8lPqrO#ffElz4caS zY1eC*lJap5P#*}t{9W*zzeTcO^0pkio}cQ9b&a!%jI!V!rkhS&5ja!hf$3NC_D8(? z+wXqQ=Y=iCh^HJv1@|=RC<~^leI?SdF8F=-Mg1b#nf2>;Om;dw*cBB_)j~|cI0b*|kMcORQB$^uVhkuJ9vVR=OaI=y=KQ=mdZ6r7icOj;^>&nj6B$!NT{_ZG&v;sf7? z?tMAz9(-ORvPvMMm|+`#e^4P$$?(>!+&3vx>SXQ6cZqN*cyL!c!vr!4(xZqYjQwW9 za!DL8a+d1@1O4`Ua+@_4c5MWwM-fMvL`s3VMKkUV-Z+6=0_C8;XegcJ+iq?7lG5^p zpI(+8h0QIRe`|Co-UDd6%hqjniBC;dCf=A z)`E1Usr~^4JCypDaV+KC*uddf$(Fk~RKmlPHUHE+>g6%3{?-wfMOBhf(vFe|zzaNw8S8*&ugMtJyw@?wWqEWtA(D!Sy@tv>3WLZr>%S zACrofji9Z5Z(sH6m8`qtgQ?sBzUPN$bu@c!ub(obOTO(6OUT<-5i5CziK{=lqWb+x z<~_Jl{AFgdh+1P^Yu(K7Y3v*KD^MB@MORdGO1@Qe)$bmwezlTiZ?PmuwcVaNGr3Kj zu+QcW7F*`u`RV-`a*tJ%N~Q^vZ>l}JPs#)DX?(@tvVp-^O}OGx|2q}4jq|{<0-+Fj zUkW@DKel$SJ>s<2W)Zo!ieLP>mrR;%oQ@6CQ8C;2uLiY~r6EFYB%#~n6mmeRrRcL6p10+055@5;42WS15if2!)^pTyyn$zw3$ob zhp;oyrmCiAqvl9{cqyczZPRvVHuSC_8d_6u9;q|k`c8n zQlmO8F@@g5s|hiF)r6F4wPLIkzZ;HEZXSQkhB7!C?rHU%g)@kX!@7~&2Bsz()7ymfWJQ&>j`@s{BiZ~vB3Ef z;jMsn@GqM@x|EjpX8eK8M>ZCDLz}MpLkdPr?wd$u0-kbpOGZy?EM=O{?RrY)xaL8v zba=#|kE=hs64X`+;|nbU)VV4jdAr>Peh+E#LU3j`r*D@}P`V}gb1E3*^W8)EJb|iA zvt|9{faBiV2DNGBUl!`xJd?yA{CV~Jp7NqEg!N!>-0hlv&(r&&(~8nw7^nX`%^5{Q+-49sJ4 z5QT)w++`B{w8>-*uD`X1BdV4F}#0e-BhV2$w8>MwIa=7(b`0h!u7u2crh2VNRTc`jX* z(|Wq?A787W@r!oX8awz8ROW)rI$JAH_16y25K7sBRZ}GArjxcz$gKOO>!f&AYV^X> zQ0)K>k+i_jAds>ail#stI4Q#K_BB`6YHi{$KB=syZh^GGP;`C-=Xda2*;DQK)N`2} zHG0v8nLbfNqq7|!&(l0Vl1M08uY~XblO?M0d08Gi<7k(C!#qDN?KTC9t|?T8@cFxH z_s!(Pr@k`#a_5BGZ&9b_Cx+OS@TSau##l@6f{341KVzUjln6|((sn#v`kayeV8ix- zFKeBPd)i?z#2E3@>Yq|?K3CqqiV%`4F<#!WLu{8ljXpPMdz`s!1vI7P&#T`J0JrW! zJV@X6xJmh!r!4)J#(5`mn+u|#AierS3Pw%Nl%<&Pgr}m=deEny9DabvXULfz`b*$Z zBYj@|v0TMqSb>OuIyTkh%h+ChW?Xifn|Ob*qv6JED3+`7ef3{-D1IeD?{3#B-Fw)8 zJ3DPg*N`-WS%aX94*28Z>N6w(0$E_FFN3j2ZYr?9RO96x_6s;6TyV^hh6n=0GG&?~ z_5(KI2i2%Enp|)||40$wC0RWRL|)j6A6H|XRU1bfUwQf@0}HEajuFNeTk%mfzJ1os z9mkT-1u<+azgST$N@?}uT5Jznx48XY<0T@;nnnX3V{e~zOTk8iRb$}+t-@j9dDW{5 zqGUm=!~JhpEFW?5Rn(19%ly5t!UI|*(~4A$HzO#q@PZu->>>okFaAk27K+iunX)dO z@~EvEd!<6@MK*n25Oja&ciVNFxA1G3V})XLiJ`1ihs3*4eX;8*h^SB}vVhr)u|ZD1 zJvTFI#%_EX6=T83(PoeEc~T09K&wXYu`1%>3@WE?Oz`dW3+uY4*l-U<&z|ui8}lBk zFm><{-J*5Q97NzURKyj+JTY0psp8oe4xjXYBkWmLW94um<3tsw4GmaCtB|gW$Eh}o z^kR@0DDRs}me=>hl8O~mn#{}VRjTx=m z8D)HSq+aI1QpT|=POnm02(B7y%~WAoVjL-Jr;w+0OPjV6{Jk2F+kSdM-)9TU_A6`6 zRC!vFu+>*E_dw2BEm3LG2M!ra%@oYL4{l+QTS}ChBkpTbYxR<3!B*6a>^I@vd{l9Q!uxe z5DVF(Xnrcs zTs7>gw^;pW!#<3EW{7-41wucLEI5QCRlGWtj^;`@P8QA%wl?k_rcSm@*0%M#hFUaF zvdby_$xiz^ycHvX@MG#2LGZx^?W6@^e0i!D5q)v>4Aa$eFqK<8#Fzzzdtv!pSbV92$?9%cWR`b;(s;E^s>Qr zX&NBmf?dlLFkmVJuj-_xJaB@M7vz$s-pEfg;Lnq-`QV)jXg=e|DmAT`?Q@}9@xzIu z^~2lTAJ6zFD9sY&#e2Q5c3X9mNPNjTQT{B!%f`*!!NqxUpUHz41&hIJP_DdKP7^(O zDNS4!fzm%Tof;Nws=QruQhh5|c7i}+Nn_c~Mju)foW0WI$LmAUNorJ6fykdPQBd+- z!F2^APOPXEE^VTBknrm?hfXj$ulM{lS~Z8tPBL-(2tkOw-A|t@=|9=2M91N<34(q8EhR zN!Htd`Z>@9#n7sLDAzY^W}UbKk)q(V-g=x;{X?bN=`F>7B;gDBplz4lN^E7yXBun* z*o!&lJg|gU%H&0PWtu;z70;8GwFaLDuBiRb0;!lSQ6TfB9695hU?32OC+2VkLBP<; zu)`_GHdH9Y0-zqC(KUWnRS+^+i?=);H2Q+U7cXA}(e11T>lm3lF&$>hXkL+55-kLbe7IqyfO4k;9MD`!Tj?VOdS|&#Jckk8G2) zeO{*lX>a^So?XDX^wNm+%7n393+E6W^|nX3RKfEyu_V&aO74*WKUt|U_SubPiPMbu zZOSike;*AfMc5u4^#3eS`M=JDQWz(JC{)IGN6a>~;g+f`y%}v|1#Hj<&JKt3xPthLuwKC@6cThkMDs1I)dq z>$HzOMEK7dRaRMbu(#04^O5rYK`F!LZMIDWF%01k^PG2?yM1>tc4_F3R%+_zL7uD2 z8SU=kEYFKIl>fn%D^Q&cpXSX>+LXN2_4CkJVNXy09Kt-v3E5f*|Jl_~rSkx>kFVUs zW{a}z-6WAu;y0Y=G{&G6BUv@_5ZBoE)OpVeX62RK!8Qs~9-O!#hPHgZyjZqUWm?Ui zbnWP(p6!mTzM9>8%~KJ$EU;dlu&{nr^!7= zM6sSL$4_(MGwK{#d}ycB982>CdV@AHg2;NVg^;?vl{o5veSF9V#SiIo?a;!U%&xuG z$1NZ4M%Y`4L$0FuXD=tKwlJOCJi)J4Jl4lK-chk|&%R4D6Pt^tMrAx5+nccoUYi;u zh5ss}KpV>Em zN$}4y`>Qspa(3~3q5G0c`pZgumt`gCuZyYC(-bO*q~w&MGXr5v6)y@nzVc3+5)Qb6 zl;^$T9LE>6ztQ~L$nC9HiHG`{#g2ul)F=qq7$F-XtoEQ!CF~Q`Rt7)%<+3VXq_K@~|b)olP zcW9$f4zBup8km*82Ev)Wv!tf@%b6zEI_^5OqHIp;3ly{J@Bdl(jVhQp<;co^xh)q| zdsnLNuF^?^sS-+^3erv~`{km=9uj3`35t})R z@Sjy)sj`ME-u8wn{T20g*#F_R1t%}2?F!l4^nKly`yN8IK9qwme-%uoq~09Li)@1g zCN=AGR(wvsymfwBR>hth+39?k3 z`g_wi8{b1E|F99)psMzGk%qQgOT>yUGs>;!dA39C$o%-%4Oa137njXl&qx6jY|LZC zp3kx&3hEiQ4FxaD)O+Q!O-p-bhXmft?3z+odf|;df?KCxpwTjrgAxWv#N=a~A}t7_Z^vG0V5iHEOWasp~&S`iz1KU10W3{WKEHey>4M+ zUFOo?KC#fk_{$Jk7Zd0NLE@f7T=7m&CoQvS2&p8ta#0&y3q7&zaUSt4@7WWC(EILfcbvR3@$ zYs?Wfg{h3)2uq|L;GY#`_#edatRTzBU^68?0}=)nwJ4fjc|?=r&T1 zaR4C|j>9Hg+(J0j{>%We*m0&f;O+%thRG^vn^1J^=b^y4?AK;_F}r$09iMpE|CIB8)=_NgRV^HLRZ4?R}N}W@XD^;hvwNhP^0pNC?%QjbDjC^1D}(NLy<= z`z&}77FjXjfPnYeXCG9(86}biMzz11&?%H6?|~%K*m|M!M%Nr@J*r##!Hf1L?SRUJ zYs#bvL960ffwzvJurrjF{A@)bf3~mJ3`yovVTt#QINge;iSW+~@BCkEo;7Ct?6|>v z@c0wA>A2ndSbN8;26i7GCK{V9u`)f;hj9eVHy)kTm@HjbbnH{O?c!MT#bj%-Xc$^e23D()B-WsQZ;VY#K9`NwPpH@P-c7M?lYxMs)wJ7)cp$n&HtpG$ z#}rI!89sV4`~3*3_xqxCn|2fit)~g_w1GTH&o{8z?%Ql`|JX!w^ildl-KPmMeYHPY z)U}?p7{5Ac-zV|n)*006Fk5D7FXBV}1~gU^5`=cK+(54>(nKw`XOGt}-abcEU;Lo# zyvc~l#nJ$w)tK9X>LVnP;$#hX%v!xWJS6F=LD!kX`s+648UVD4W6u|omy&%^Y5dX} zHQqbbl(aqMSvN|zI2r)7iZcehDJ9L$d}+djmBB^tBfSp{w!bIh=@v%=fM#)oLXtRM z*%RsvNVf=om)dP!v+?2L%ETc7&?=6Gf52p2?{E59ywuM7*PHXOqZj6~%>Y1RmVz^n3f+fD*gI8($8! znNhA=6cRbDXE;}`#7|5PHZ-^H*Jr`U;je<)4EH?md2E61GaLef)~yudhZHbivZQ|B zn@`y*Ihpm#-ZJ8&tfua*6bbUr%31$koIiQJHAP2dl8NgQDrpyDo;vjOp^;2?DLisy2#rGPnH#GnOMX8*`}^Fl8+S{?@-BOISu(pKUiX7|G_2|I!{cWBEVs%or?YTOj{#n8A|I3L2 z@TF)Fqjn!033`%lwbHN15Cn9udqrB5$ly-9RPs0E4M)h2(H8X^V-HA&JL4%=$F zIJ#;0rAK9n11r{atYo#JVd$N^5Ri}Vht=READtqu1n;wpIy@w8iAkfA>7j|0%$-&w zdd-PU;~Kzrg~^wi^_$i(&g|EF*4EdLD={Zz09u_A50I`XFEB$=M3ZIp`*Ya$k8rXq zeT-^8h}P|tAVFxICBP9mM?|1_D`}F} zJZhRXOmevXqt^)B>(6=K)_`1`LLr~R#Dj>rJ? z&Jk7-mLySsn_vE~yjq4fz0|J$*R?;sRx(Ej3|dbc9^!xiA>UdYF7oGUtf)EddEfi> z*yQ*3PQG4sO2&t{>?;`1-8VKD?+ksg($Yz@SwqWw%n2P<@APU;nXqu-VZp#$4ac z`?$J=LSfJvKJyL~$oN9dw4E2Ge+IOExZzeqjjU0G$3dp)ny@7iTczUIHmK&~F`0Cc$UZv0^I za8Y~eF_UFoZ}c{Yi$#gIA~$w_&}maT(uJ=KhK`2`?gDv>HKp3Aa@(1#k;5tmHSQ}i z3p1)UCofYk1^F-mO-#pSDAw0aev~7Z|DQ03<(Uz)tm6K{_nW7dvl}2UL$#4pS=D?ya-iyd4pA z=UvpAys2%V$B+c>VLEEV{33rrKq%M$QxxLbcxA&zO!AU2iML9 z$JAL|JAcEC4p`%1RXCgg#FhiGwE#W(kBJAV6_aHfzR~O0(L%owOH0Sa^tCL)I%EG2 zQbKq%&!zmxik!<`rQJ`SmJV1wvth>CJyT}&t86Z{0MR^`8eBnR4_?^0`gA>%vC24c zTl^~ayZp^uT`HNA$|RvY!YfFt7pq5idbe?R`%C*LM$dGwtHb0dRwWYV zKOh?DzarsFK|2QZBjM{O59(J$dA!y;^6behn^UP(5lsVzJ{5Hkg>gZxUugZ2UehvJ zr5g+;kMu0K+I;F!-*zQ-vvsIw74WEaCkYlGWHtta#z2s)_!%Z=c8^6n#=hOuFQh@g zwhf(cklaZE3P^C&f>P}@jiGdV0!t{tNLJ?C!raxV3+|P*@#yyFXD`bRjHA$-BLWyo zJ_wAy($6G2}>+eQyUGy<^nrXvp4pno3r zBM|n$6?F0Y=*@afj!5?B*J;?xtIu9Wo}#fga?gjL;q$2`^vnPB2oP%uT@1*ySyqs~ zD{uLjn2TOkZy6W<|As(~{ro>N26(L;Yp}@>v;)_HBYBMDx7x=FkK8Obza6qHh;go} z1E3T5;eSMWqHbEKLgWJq>TmBI_VecJWxF$SY;8X?j%l@A(4etVa1`6FFmPj}Sl?2P zr5HT!=ZZk|E;vM04cdEi?N8oCj|z9qPmVgYtZX0IcB$#v2>NPo0|W0jYG&k~v*K?A z`{cFu{K?(tjwdBP$xL;e)andl7d%aBYPmszsjI#BL8XGoO@SfKm;5h;@~%wQ#FU~9 z6WVvE6&w1_XS%-MTE>Y=Wzz*nZ4?k2YdJqs)x637h8vZ-?e$Oo>G5pk$l^s_lbyGI zB}D-Vcrd?^S#WvIQyQnZ@zB``>a}&YomuQboZa z6l${p32Fq*7-*g1FHn^eJti`moD*x=sl4TmtrL5-N+o3j5u1=ueV1YPOF$0!tAW_Mfasem=g?r_x%1$;`qnv%=bv%!W#_QE z?L9nulB;;A2SW;^(x9jIof?4|4)$un8B{TX>cxG(A3es6(P0qK5R}%=2E8Jn@XnL@rxV%k$3kxRpUOP3cH$zqb~gMq zmBs1R70GaaN*G=H+m;F0M%Ig`H;?gM`3NdbPyU?BqSV%rz@8Gykx%pYdN#V&``O)^ ze(e_#(C!RWlp6k+${PAu6*H)H;G_GEoNRhzPi4DB)HyN0b}dvxU*mf!%g|%L9H09A zah?AT?v^Q&+>CHYy!&n+RED1TDV3>`e5?way!ob-qb#RJ?8LdL%NP4T0~3#5@$LR{ zTKF~#C{>b3%+?^L(#R1xA&TL_l?3orQJPh6J2w6_U%y7jArJZtne?L!GIB%+qA)}V zDwD&B{18R*mT-xUa(?6_4VpR0T=3`Tk9#fcn=giv!-*I~nIMd6Z?#N_-2*iPUN6TY zfGz1#qB5&l#W-jfZs;B&2v9fBer!15sfYDS{^<69Vp7B*d?>3~#X6ae z%AQt4=J7>2qn1nb^o!GO+SmK=HfHH;Td1cMk!y^A%9EgyT}!UYg47w+y8B&mv-abc z&g}SC@Ode85>zs)`kaQ5wG?uvt1L9D-qrTj8;r*?cNUKGS$HZAHL?T(Do=#?$coiN z+h^F<{qMHSjN)82xb4x&)BrjW;zO(Yo(5ZC1qvd81xM&qGPJwEa#y46mS33N$E9EB zw-#k9$W%0JDOQ1?jwN4p^V}$^=J%RCRVUadN)OFDG&*@M_a{N!wRHp2>B5< zijxO;Sf^Tm9bdjrn{F%f*|q-xcT2f_XVTGDP7LmTki=AmB9!{Am^d)#iX4F(0*HinFs*al2ngEE4u z$4gO9qh6)Dc|otl%ltcDenW{j;hq4d>;0H`4kKGYBm4I4V%c~#v5oyn?ku;h<{ z0gKngZdP%PSyzfs8@eVP9TrBy=ZC0Ie?~(-Mb~8PN;~$eL(`7swgpHFLnNWWnp<;& z!Q~Fop^-NKxa7jb@PV^)V=is#e$EkP&B;_WEJT}t09>)lSFV~;+^I0`>#LRhmUK8! zidu-O&uP$U8+ltVD@mkO#uef`hg)7=7jwt!i8$m&{ks-FccXM#la2Q6B}HTuKhE$;x^RPUb*vNT&sv^Fog;ZTtP1w)gmo>U#G{SCY`Uo-Xqwz=|j#3 zlqn=r(X~Y7ZDG~srM9De`keub7C9JA_Pu;2*H7ybC6ZBjS*TJK`B9bRz{huL(l595 z#_`Pub2`9Fclq&5&;fYAc)E1yGVTT0iT}!{%@6a zmksI+{^`AM>ya@rpMN|wUTNex;U((iqDe=CSyVFN4zjcHQ7^XZGG=1%V_Bh|Ztqh(dZ8(yB;BD+Flv$hw5s&U{A93hM6O^mHElTq-DoLECQo> z-fMD8-(EfYKI-~h(Lq1GUXPBVPIv0>=@?_ctgQs3kKoGj&E`bmlzkuj4zA}@|CAZ? zByx;lA{uOnqdZLwc0QP_$z}0>%_e^}Ke*-GUW1NyNY5NWNJB)#k}Za^^CD%4kHe`?LL*6;B^D0RQv>HSe3aRSQz zkcg;FGL=UqIl%%Ep9fMSz=K&u$#^H_-*NpJ?CT2BCAV6wRzO^>3Zyz@+8Y- zeH$Ulz2C$nq;W{@afcco_oLi-Bq#+4_}V>TNNX`5MIr?D953Z8sWZH0U|T1Fq)-I#;|{@*-Yz zZ+MLhvI_s!C_N`q&~ORi9te`YaejX$7nOyqEw?y-fAoo|XKo@dAqWIC=(M{)2r7v9 z6Ve_s2Cnit;l4uBX+i4+_hM>|Md>t|ipp|YN{`e%2=qpkfkK)1ABb6OyX>CWB)V=n zXPV@AdO+I;b)a%uN^caWLjcflO2N6oHK&DBVd&pv+to(gGu;wyADfFhrNA_F=(-T} z_{2G0kvP($>$_I9V^^=-)amnzbEpe9cQpYGTfRGZLM$X-P29SCr}?+HF1s6F`O$rQ zJH~C)mX9E$Lq$a5aAFqNZuh7?=~s1c42 zJ)AvUC1Ar;E!A#Ws~RJsQ?TMjK)0G#kJi41dSI-T zoCZsS^MaqUvUAhxuE`#`&-jeFah+$mjZl^brlEmpZ!U;>JBd{fGrHE*cO0;n-6bl1 z%-fo#+agg+!!$JLxw7{(KF~u=6PA|D9(>uZY<=+Rsg38O^c*6gVdM8E=BW&`=ieLZ z8pFLcXTMkK$BZMWjh{e3!@&yt_CWP>=zjH5*4FH_r}S6kn=|61^zW#H6_J95xC!>_ z-Ge}tSX?cJZ56#L6fXN<6x@oLXc4m;6*ti!qaoGJTP*a)d7k&;;Mwr~X-f=-{Fwjg z?f3bpR5$haG$;lfKOUR5DBi4S*pZSRLC(!?HW-ak3?c=U3(rQ8u1TzL$7DqtwK3dg zpIvZwV$gfHSE*uX;b{_3s>fj<*un7?ig`gC3#jjAw4_CCnJ4#%e)hdcZ~N!66dAaO?g zxtw1ox^=H}zt~IrM)&*%C+?8NK|oL%Q6!6m)w6&EdOK`cXq`=+&u5*z79H@*`vn|P zBnzYgKX`Jl4kdfDR~+p==e2fpKjw!BBxgru_TzFCrs9Z;JQ-`yPfG=Gi%6#zINe%DiH-H zr`0Iif@XCdVn~<+9zW|jyGeatr(L`{Wsg&|ZlkOLKwmb0v9I^fUJ_IS zwLVjT5e=J8Fj^Imz!`o59Up${OqYj7qxlKVBD>aed8}IjH2^40aiT07)S{ z*mA#P-)OdA^XV>j!RCwu(dP`{L|(GxMuO0~8@UEXN(DSAw6s3NrVTR-+kD_??y^T4 zas~@@??##kw5pve=&vV+orUCPPwO_S(fgX|x<)Va{JK_R_cQ>g>|L&5ER@_tfS!S{ z%dlsV@37Cm1EyPxcOJ{Ji`xnHF4r&b)wC(*%jyu1%I#4<_IySe9?%hcP zfUeyM3z;e69JcWJlgV;0s=sTJQJ*$@RvujaE6Yqz>+Yl-gsxcvZ$!iRQfu%yEfTT~ zyAQRToiKJ)@vpuveMc<(*3D2>(v5U7qzj#!ahrL()^4$)`BkDO)ZQvl2@0 zx42Tea_NLSd1uN+J0F(AnS6?)oCX#3X9G~g4UE1_-l+xe4I+Pc59w9-27{H3IWERV ze_Cxc88~e!;%q>G!P|q7U<#-#IjWcw0#Bd;8b5?9;VXE;B!(m$a=|&dzy2AMvJX3Y zJpE)-%E%#BAyv#30S$CT(}6~1gJ`}|P{nIbyy~*zC7eP$kYCRY7rB8)_3C=DUW**E zJXkJiEgpN1Demwn6>1Qzz+(elkiWyN3Ld2o>~sr@dxZ-PUC;Kh_%m&OQ0HH7!|QZ_ zAJ{49Qj35X1|6!3&!D_ywIbsln?S`MA%DJckHv%PTx#)Tf4jsXZSQr+MXD+;UL|PM zp8_$};sDixS;Hr<#gDnKc10~ZZuPKpz(ncn#)wm(T02n?ls*q9Dx{5K(I~FTti@u9 zV)}5YE|v!RjvM2aAJL_GvoF^1Ves>CqDpEbFfl z@b&S#t42F)NBCA44%imtT8YNFN5kfzSaC|GzzeESsmwA`Q@#%@7XL_x=3asImNYv$ zX^Mn#7_l=bmRluI_x~dzVr)Wl7}fChu?BwUtR(fnX7fJobYdK-qKq0?v~35_;6uWt zq_Tb#c11D2?c0Gi3@RHW^EFM1VjJeWiY1_6JtUd*%gUy|{GM;HEK=Xisl^GYUP*gTiMyM#pmqIxWu|GpcmVU9a z-CY;Ru5O99^Xjnk;yI{^GD1;x!WI1&)Riczlh{w-FHmRJ4P8=Hc;I}5ha=F3`_)BUQD6wlQw$k_(r#3mTLdIay$tp@ag5K> z{adddd$;_U0o;vB^RP)Erg{5T6hI12e zvN?!AHa7W2;*;^QZ?c>-y)16Vq%0csCmj(;h4c*pLbE@hJVwZcBPbA)wS{wi^v>n` zeZP*YnD=Pi0ME+&0W=QHHc#V>1h#7F;`s)tYhs6Vo*%Hb{^az^Y@P-L9icsfi=*Tx zLI7Wld2PM2naONPwCx~-S`2Z$cR0kD^yx_L+oGRxK~eZ zT>ZU{%f?<2dcCze*E^YUhM{|3t_m#8u7L)N_Ob*WbKub8T`4=(q})iqvaK@Hi2$Mb_@R!^;?uSFX!_QR5A0r# zD%CqO!RU5kWycRP0`-?_&=x0uTM2Cf173UBJC;RES#5V=~_o%oPlau^7T_j^0wVR_of?gFonzuTFu(&q52||yVL>)?g znLgdKZO=3>Hf5jrj^KnR`ucp~E8}ySL6Cdtz zX@dXRI2|iZ8whRpRq{$K@@7w(4l|SG8=XC-g9A6O@X-4|oj=xh*M4869fdx@#9}{3 zei&bfNGs{L!fA4yLcgv9{xtvM@-XwT4#Bjd(6*`+{W3;}1{0s2fD&#V4Ckc{4yHto zYIcD!x9Mx`s|rO=+fi7aiDAu`%JUPTC3U{_ET2z;-kE|shaB&(KC(~yQ5cOt+w92M zapHsS3y?S$8b*gXTeoDioEg2;xZ?}H_Sr$v(<%(v$zZZR`5qLxC-khdu152wEg#jL zu3H!~J#8^kd9_O}yl7U}y)F()zkicybMwgc9&L)W$4E7ZXE4I@DvX zcW(49Dk3Iv;NY9t&9tu=Gy-jbM2sCp^A5~Wf>zFB=X-SquXb_GXc_*f*mKxA?SVvH zIJE6TSd|>?sk((9oEhA`j5FT+)UfsA+ox_~WG~i{4x$}}Hn)+;5;S28Z(o1->}szU z3!evE`_VOan0B{O3j}S!G>D&w5O6Sp1nVw79zS!meO{i)Zog}r=JT}&({uv;N5s>3 z`Ee+Bh{0)_dG%-XzPci@o!+dfibn$aPl)Hn4;F{Pvv+m3ZF9q%Hb$588P7vqzC~0` zJPjb4*PDBY5O;`i|1j0;`8~Zi)-SV6d;_MqXu}lDd0z2H$U3TYCT8$HH!`y z+Eh?cBiA~T?=2R?8AuC^t^O``ediQZUQ6O}ZKJt%71RPj+xD#B2i$sqXTTa#ZL`V0 z`n%{}r;ZJN`!J?FFVOBJYDb|hBCn|N3YI!)VeMZp&HRyG(5)5U^-1s~g9_~tc_aXR zswa04`4X}(!DNjs>pJdN?{rJ%H%3jHcK!8qs2&=E`a(boivaE>rQqo=Zp7b4p5j{N zC%)^+FnD!f@b&|ULO_~iloqs7WSc<7Y-O=y8-wxvrZn3yF7kTQcTBjTl_J4}@I9rK zhSkj4MDX|_#6p!%qx)pd{rvmTNAbF+hD+A(gewiJxh4_Pq$Z#Pu%A$!Q|9@Q!!^Hh z)~Rp%JB`c#9-gmFO&~H#D}<^?9)wB75|CwutGL&Iz%Ca?PCv-+an|+!%C7VE5P9B8EOsSW)Zfsegv2eQ{LBv}oQkiqZ{01N?a}#1 z*^I9q(yoXbT9lw#@Tfm0YZVq(%(e5ZK5ie|qX&cap{1#VQ4r#stW`h^gZk<#B%ugf z1ZZG<{8*9UhtAs{%#Aphb#S3OqWTI+9s)V-^8*4&_On)F}vwn))-aYD~dOO z;=TLT7Zt8ToPkvk;5DZv1oa_#6+awn&>WFCH5o~1M(n)%PS1Wd3%kXswGk1LR}r&e zV(PDkRh)2aK`ltI`Yqv-kWAL5C-a^4d(Fy!+d5)P+UCZVh^t{02pbJTePCY25iXWZ zgl09B!)DLtFUn}Q_vV~=MRpN6?GS-^6%H<$CJyzUzltebIQL+_5Dq^Lb)7h}@Q_d3 z)20hDFTHP7f$;oQD7a{36zX>)6-yik+=LU$#sXb@P{CUo)uo_#Nc;kutVy>JyO9cm zjl`f+6;%u=>@j2jP4-_pa%C6abKam^O{6cTEYYcoT5 zNxO36gw17^{f~=vo;gqu{|SXeyr*HZwx)eC3QC(cQuu1EQ}+&{6ID}41k`^*L?_@B zYn&L5JWWVBcs?Z_25 z)sx6bls2AGgskP^UOu>C!Xs-fb6Yq2vu^CQ(v5XH+~4|Z8QgeA5v_(vs4o^2qHL+n z!TV%ukN7^k_q>I9_hn9YN8%4e6>PqQC>DgHu`5HP{!IYR8Z4+n@xV2jM%4FtuK9{N zf6Ik)a+gQ)Vtk?yZvt>cSXeEH)VruSdkBGX{VX^1k6P3((1IOi6n{}twO%2)T>9E zmS&cx&Iwu`={v6~^F&6WK`=#*DaS$@DdGWcK)xwRqK9K7{4eLu$F+TB*?`@|K-Lo@^fHT)dK;JyrB{KQ-NMy>Syu1y;nw`Ew(UrnFXSj0G?@l+TC zB+95Akos-A5^-^3Vii0;^M24Cm)Xv5Hy>rag ze0GcX3tD#{7`?2Hvtj?RE!x+lb`9;fct?WbLM= zN`N%aq9s^*8YMw8_7){PES{X$=T7Z}+GF{#mCYgognqFU<)5LMGv+mTHtyUvo9`u! zegu_2{!s<7$RN~5p0VYkTyvJ8ydb{JCOAX}*OAU?8@%lzx4S=S(|bhU`8dZdu5sUJ^VWrk*dzkZ9OjO+Rn3gw)FJbn@@K39J!aT2CDwcx7-j z2a&!H38w{!`dc{-@kD%h+Ds~Zo^5G7e$|q?Yx1rgjTwlzmD7+6#-PEE!;aCeivMW1 z23I4~{ub}L*WJW!Ux68G{ce;Wr=V2Y4H5wLnRDbhl6i1_t;E40LOyAimU6$^U0f=) z%{sYCFOfB-J|c6DJXcz_CZP7fq&WnYVIw?E_(}a(~@>{PNrqcEYI24pc}O znm1<^Px#?Cs^7vG*1SortokQLPkr5+RoUiD0-*l75L!ugpu`v`w97~6;iAwo*@uv6 zPA|;U^MmJoUX8degw~Z-D4LJJ4xo*rfGgB|>SVEH&6LNB3)dVqi}YF0z_Dv(M_?^L z)Zc4EGl=I&Sja$x06Y(YY{~p)O%I!#^}TW`r>OIQzm{=`du?bAb%4>Vs5oZ`AbaI3Oi4uwLuU?6W?aYYO*xsi{2?lj)Cx#y|lZRbvD z{P9Yqf+0|7j$g^sW30p?X(*}uSX(n2E@ogslk@hvu`1TsTDS z_3U*;+q(ou4es1vw2gkF8KWyZn;>E6HXuMWdp;@9^Y*A@$coqjHQw3WoAR@8al=Xt zh$aZlN3PLgHUp~YswxtX?~R{UySI^m@4gv!N30#TnR z2px^pc?h`W$T*q3Y}1wWE(ho4hqRF;^g<*GLOU24fo9VoPZ)+w$I#hl40gq*)OLyr zGRb!T+psdzK?0z8D@NweGFgWtmu9)N$WB=i)+Bsg?Zwk7+lrAeG~beGv?*Y+-uU`Y zX3f0yGkoi!&I`Y=>sEG4rU5~79AA4L4wGg4Su`#1&+XLgg2zj49<#b#SsY(G7R^T} zh%wx1oS4)4^If0tfv+X`AAWxK&9CeTg#e-1aEuKl)valH+M_Bx_WRiU?scVo z*Oz!Pay7gEK;{QWQ4AUiljZ{e#2;>PcDH%;az@dn<1bc*W+$Z|aI5S9fB>P{)AJAq z1PJ-ILP0Wl+op3i9hx09=3X4~n-7m9i0E68U9yBDpUzo2IBR-c*46G=0Le-&V=HU)yCSdmrdE*BKFYQBIT= z2ix9`v?cIA0QsuL`XnwWYcuM|W6pj5_pS1c%y11isw zgbvK7`N6TLI*n`Fs$Klm$FB3HAdI|HCf!K1ttaiG)%N%?<;jeSnI}iJ-EUU@BwqV^ z(uP5s@?i`?6P0@7vV&LI^>*E-4eu6pX;xqD%BMk0{k|l{3^>M#{9(B(sNe~S(_#O- z58_5fjo8Ft+rqD2+1wq z7c^*%|BxOTh{Q7`7`rks>gSLoCR)N(Mh)`AEMhM1b)C^I-rzJLvO!9cW_)bRet zg*AT+oEpxLJ96gi^t>8f5Qis{SY!<9-F{7>fH#a<_DojPs+A48Th}vK{kv&L{iNsx z2)AETJS}L{*PJE`s`fLOtaWBTI~$zN@wL8a-M{e=tDlIP(`3oiD9# zmOs~Sx^-jJoo5ESV~s8%97wV_Fa+%)k&-@`tlWMk_fC2K9&FVEKFjVA+UDcC%cs?!Ma>8WK@CmNx zi(1YxYjYPdW4K`2K`mNuc*nBJDJ{jV>Zi<%8NIVJ{) zocg_pFdMF7M4c8#=N>V8S{!-JGW_zlz4OLI#9l<06$AwJnNAahRRn=F0I1Jyz{J6_4HZ?OvF*nY`?DLLD;10Ii|~3IR!IIF;B2_` z&>}wM^tOG7>;_D@s=!g79jrxETsrach&aal;u)nsBYQk}IXNDY9jrw<41q3HR6K1& z>_jVPyp9iCpV{2y{w|TAY*>y~RYU{OWh}rMD3m7)mGJGzFV|gdoB6cdJ(zvBevqyC zgPcEFjfFM{x^^RPjruDcT@U=scpVY17rWvs$Ee*Dt-BGKl&;-K!H4`d6gnGJL@x8( z_|CijuP!S?HZOiJVqZ+_|J@ z0qd@pe6Y$m@~0r->CxQ#UYB%>LL#TjiYYWiV?SiFVxBx=^MyTg4$U5CmNYi*rdBJ4 z2B31u+kzI?;bKV;)}GwZGE^W0t`EMw7|Zr|+@C$dgFo^{#44xRnb4BgMM`DEK@uOt zs)2iW$0vob7aT}A^L%us>*&Q$!$GZdRFW{nJ{E)~rbLcA{TH=B~1igGx`M zNPaS`hH^Z?4UCi%!1tAe0*_q6u@;9b4tr9LJi9MI!VT^O;;2C~aR|prEDGXBx`zk? z#4-*a`>%?{z!K)_V%qA8dGMJfD z`^AdlyRWQPmN_xj6TB4oV=6C)1LU>5xuA;~M{((+Jco-_x?L38?)i~5h2zJ*sOR`> zgfs}c999vtQN&b6T~wT4{-GT%m7%3T91PAI0zZ5nhK?LN_Rvz(z!*E{8{H4x_zp!~ zR4|y6r4{BsA)3OSwdTsWxM+vHV(VOvknqO*9e=J<6wGLN(mDKymLD z_Upp0KQUoyvqhKm#@y7Rd??}yDwnzh*a7ztK2N}x;;iR)=SU@a*4s8`?%CT^_#l(9 zk+|G72&mkf1Np)bj$*6@JZ0hzcw8RhAr2AnaQ2JV6~4}V)w@2u{u-x3d$SyX ztrLLC(N~Bg7XT#W;p{JKVm0`w^h0m!rnmEI>>Jht8hr)(5CN52nTlO#ya%TQ7mt~C zae3DI2OjQgIs`*onTlZo36*7fVV33f{&%$Lr|GsSRggAc0ekvk~VR1(dx%f-N$lFeLe2Mhp;_kntXt)k~YyW;`0;+O<^%? zxjcERQe1|%+kVeFGTh_{Q_?Drac|5>Mk>KP!7@OURGwHB0{lPr-UF9b1wB=`_PQgQ$AQK z(-!2RbY)5Fc`^B2b1Hv|ir5{t-b)SXyA~{919KTjr{zTGg^I)qxt<*5YgZlTzIlXA z*{n}%%ROy88w#Y;q6MsIGYJAtov2bzkVB)_v==uUEm{11;iS}$hj$wigbjU)!xc!| zr^Iu-;1*O*lv<-?Rsq9Xhn}mIdV1;tt69i8+N99piMM$5@mxAGwakD6qXq=nd&hu~ z9X)w$VjRYl8(&yzntbR#|8!jG1UWLbBm{;@aOpeO@+0(>i$TVenk*63(1j*Wih_UyOP&y5ai|){#ic&y{Bk%p6wq zF|*7ZUrGe*(Kl*E9`T`!L&zORQMHNF_GngKIfkreoi!|2F5Q`0<)GdV_M-~MQF4U* z6X$F@rk(4I=R2SJZtC(Ja%XDc)Wg9HxOv8de0jPTIP4{8>z~H%Ex-7%*!y_$+Og@c zJ2skaU_4l`=Go`FDwHae(Vd_o;rXnZ9e16|cM5J$;Qb+Fw}E}04a}uksMQPIlYx{z zrGIN4^K@@u2m9lVee*9r91EF+TAc2oKmuo;6-wLvT@`d+^5R`tk!`PqwNG1Dzw#om zCmL9xSkYVt&1id5HwvLrbcl5jC?k$4)!Ku`F~4J#+r5l+u?c)IB&D*|dMIc{OGGy$ zEJVyR(X~B{aYQMYT~MljMBl4xZ}I9i4t8m8V_>4QV7WZ`X}eX36*Gj+Z#@2+I$wtE znK<>?mCQQmft;R=pp%~#DbPb6G|Tpfvmp~jQvIC{86oC-OQM`MvtTk{}<4;+S0>9qxl<~Tyq16e-na5!FN0qomsMTaji1?Ut zuewyc^)Rw%_Tb79{x1v|>;~}WS!&}^wMgiNRTNVCgTGRu^tt5WKC;97QBMc8$yzz4 z^i~5)Eru2_(dIGJ2|=*r9IUzsN*Ctq)V(a1>JaGJ*20R0cEFlVnHaMS7)H7Xlee)#L+&$n_f`!w`fT<)R)w*)Q^D+x0$4-`L?EaR_N|2*W*v-@Rx zT=C5qrSUShJiu5klcBVFPs|?hkR6r};EBC%h>Z^=jG#_V^U~=%x+px;)=aCrRtzOW zX=xC1hn)tOVK7>T2%*4*8(o&?Hxh$Sy=uHJQr)>_ok2rSL18djC?N|3HKSD!q`=+= zrAsll@afZj)7JH_qCif!m{@;~F{^-yHlrZDQ1Ifj604Fysn)|1e%;R1Z&Ew#hTo=5 zidJ)t3Bp91$1Q;^Kf>TRjZ8)#kRRo|Y{su%vO`c}nR;87^&1ShB`~mn0XENg5H*YZ zn9eSd*NVhBYk6NB%0y<~=yLy|f$?BP?>Ecg3wCl9UOiua=%*pF@7EqaI8m+sXC#aD z=tT#aXKf0O5hb7!Iv+g#&x2(;zDQ1*&O6<{)tYe!GzQiteW-a<2kO0b}5s$)i%8KrhgV7OK55i5Ln$OI)Y2T2*t2Q zsZuDd=^>my8+>TleDRL$XNE0pUwNw4O2{ulam|F8qpxuuD80D6E`4*!4Xu`b+mkvP zEnluSYhTk4Tw0+}Ut_7>sF<$O2ltIGyP`?er}Km72Syj5QpgI0I-H5+@~A@!(ODr^ zTZ23jB?tmRl~|oX-P>)!Ru!Ah-Z#8#=+!k__p4fDK}Q`@5X1QI+)r1G8A^eAdmldI z|269Sf|f%{gkPS=XNP zUY5#Hu~HPJ)=elLU-fmw?j3DsI*q;Ou~A$t>b-t1>!Y}I$HxOVsS-RADD+eVS9}cp zeDrGKF$dr3ee&I}yPhAoxq5TR9Z%r|OdPipl4PFnK2w@~v{S?UQ}y30<*!C}q;B~- zlrbR*4C%2ZFkFV?QauNvu(UDvKHKjoZFY@l+c=`2^RkFjv!HNX3IGDHNPv0zSff_! zEY>BfKLjZ{&6eAUFQsgLF|3h+KBi%~HKs_#@D{~s7ra&5*MuIc-gUU$r&skyR1_Uz z7*nKL=n&klA6kYrGKo^x&z`YeI`4`JFFOCdas`_Rv<5$Le2WX!Vt z=y;-J5pMh%_+|U5+1Hv(D|^kkLOb^Dhl%6%v`Oi{LI!TMXs*R7T>@6lS@QB(?|mhk z99Y)t3*)p&=|2qP(uYOq0#GTuFfG;TElVacFb2(uh7e3G=2^;pj` zRo}R*UA0*~(0|IoLTC2lg%)5I1HhN4l}0lnUC)%AUU5nJrtV?$;%1$j8O&|~FmYU7 zsZi5Q=$ojl=?>n6)_oR)v64>9G&rCaXqTS=F*{n-x>@T2=PtkO4ExLBpSP>C!7- ztgmq@ZlQOI*t+(Jv*HhJ7qA~R^pR$<+Cfzr?2S|3=xA;4AF0y&RSTQvUuJEOo4Cc6 zcbMI3*8`fxh3BtP#V8eucuI4c*RS&K+wmCdmdR5O2pZHY#qPp`QD*7)02B+s3lk~T z+J4_15m~fiZv(;PA&b87Y7}bN`&|!cmVOTeM+>?WX3y52**m&ydiSkNdcowC!PD6L z9Y%3`_e`ErgTN~-3b~g^g;EocQk~P;w~lj8XqE#Cc$izI0)-`k^H^u46)f0xUp*#!<_L!wCqo(@s?L5u zVS#cRW-`?!<+r~-k^V!%P?+IbP*{9WIC8lAbw$?@D6$K&h<91UWY z-JlmL!B$o6ktE)=bK2JRAAMGTf4A;-c;&Y2y8(aqmect%v1oo-Q0yT>TO7Rf}+^>`bl@vbm9@ooc_Ef)%TRr@d9lHgpk2H(*9}M2= zgSDqrL4%GBOC+xhymR}+#~&@(t$zm0EXVL*X|#5E;g`B}$*NEu_Iyp(Tl>o$7|wnS z*CDt}52N;aVX!nlL5AwWNGOYeetcSV#vaQ88eZD|!g;{0U#T0$^k-i@X%MqmJHhb^g*wJdDb*$C`pP%DRZy$nzpQPy z_N_@yGwBxidif=>L7kUYson>G9VU$_CJ0NRSs?;97 zoNAZ7JTAMj^!$R7FB8H#WUza8=os^?IBHZ|S8&$erscY9AGD`%i_7SQY0r`ktT}a#BERczSCM>vi z!S6-knBErm=d`~nVP9Ej5VK6p5Tz(VcQMA}Ka=*^`cM}1J@-kD-3_-6i`l0pj53Rs zhbU34EyJs|>D-f9b1#g(wtb`1&ahtWTCPKwsi&n0LudxrrFP9ToQ7nbYJ4GDk{Lh4 zfIB2aNk^H*dZbwB3R2gpsabRXhaL$(dzW0nU8urfAd6 zEpso`DHu`hMq$m0$aZ=p8dDsDgv=_Q?_jVn;Hj*>Oz|cpX zw_|PIwC{bADy;IZnX{t*PWGk10Nkvj0c}E8Wj1;3(U-I8R4;LK8WL02_-N3eoJMjo z6$mDFIz%u!FvGm>CRH=w?B1d3y*-ZN^Jg*!HUu29bZKSrpSgSlzZhGVSW?=+D6^E9R_( zZVzc#fgYAilbpr~T?qQ3ey+{3VYbItP3-3J(DOh-)>z0Sr{U>>=NIAw!syc7 zWVuT+bI{-ul95j~ehTRB1g+{cs8$XN%4MtrjSrd##0>_$nD(mXVcTDB|JEOMQRIfS zsQ46$b)XTU3Bx49rEy2&h*c~2>k(ZusXqeL2+Ht6|7M#G)0?{)fR>3`|#n>lSeLVGcd0!=Q60+%;vGy;X?=9WI&+UKP&?9Z3RZvMrG3oOzo(F9|q#HB4uV@nu}D#1Al1Z&|B z>rhhttX=t;=FPnxeq|cTv+G9XLAERnE?|RmdH0YY(?o;k?>sf?7=n!y7Q(| z#r}?MYP1+uNt7F!d>p!aAkYFsXfDs^q#*cHs7xIja#+;*!I_;-7x^Ev3ucxW0-euE z8CZaqI6R+|?E8UgHPIqj5I!oNVlfDg(i@StsA=_x?7b(r} z>2R4RObG|7HOZtB@J6E;IP)=&gPv>~TJ{gx_NH)Yi1V_Rzn)jR2IUD;vi*(>r;9f+ ze?ZMROf+KL^rSj}@KpXkgRRRcwp|?Y;fV--i3663l>(<`5Frr$GG;gMJSM>qwXWHP zsrLn?pKGzycgErHTJ>MRW)Kb)U{C=Q%4H%8(WAuUo;p6T=Ye%++rE(}V{Nl5tU+V% z1_U>@I1MGTkVC={gigQ=Du!_*Bu2vHgO@+C65lfHJ-QHu0!vlUn?gOVUaIEtx3fc}PH0ryM0mOHJu3Ux0u8iZJ5@w<8ghu8PDNa%iKfWDt$fDdru}z3x{vHOCarO5oSK5f za;Y5%A;uaikJha;)h-VE7N5FqSJsxk$xT&tJYiFin3-C*fC0Z|&M_mG3Sus46Sk?X zpo#7Io#LO@&v%=@EWOV6vQ3d)#zxE-t*ho266=hvwCDM2w6AIHS^HB zezy+huSRzMUPe|@5B_r^5=##_w9u-3c6d|hmpgDpgLA8%c{T13QwBL?bj=~glp(J^ z-T#0NlRV-zS*5g>9n&f-TT*ZKK>Oz}N@dKGRt_zW4ztrT>*CrA1(gfH*_zz;^cL68 zgR*OmLu%gYGcG=~_5qtwZG?asjyVi&sDT)|KJsDX z66>?Wu2d?&wEf*2wqp(}l*@p+1j6(n_|W;xdHnm&(zm@l+%4lXlHkVs*(m@DT_jMX z8tG7GQze==ptDq01hmsudAXS#A17}=)nm<+!QtZ!s}d^#E~C|;aez-{1#zP0uWB7y z?b^?8(UWyYyF<}x&`8j6W}62X6M;(FDYyw#>RLoy;8Nzb0|T-vf> zna^x)OBSFR+{e0eEYpI1=y<#4`Gn*3)81YRn~}Y{FPr<=5Sr7gGh#8-v4T0~rD7Dk zia1zGn-L@0FP!&zc?6OUb9VaR;c+zP%-96yKk`|IF4bB%}qL(SkMAkx5CW-N~% zp8BQ4jDPA}n$oPs1l7smm)M*H2H|Gdy9r)M-GDom$FJVH%Z5&CXIb46we~n5oZ`v0 zcN-zVzHu0W6r@n9 zMKb!^8N-^Ny_q-ZgRB3@CQrRiZTo^OqPb_7&AH6iO~46tlfVi|p=CBe`MLy5pag2Eou=$7M$j+wY%*MQLR1_!*N->`|Bw|uK zY0ALdsr%(u6qcV2Gf&5H8pB5Kd4dW0>|Ahs!HS%XCw}I~M)S9Ccd7x$u+e*;iRE+$ zU>70`qyvID4Qep%=chEda;fE~Yu}&jt~@-@7v2HbWr0X=>KLGlL?03VJ`tafrVs8C zC|lZ~?5O1;*fBttLWkmX>ryIWv9h?}{Vbsu_S7w~zR6z%D>O>6HdOr8vzxOsRxQbL zm^_s)P~18MZ(UlDN??Qvr&g1WC7~gi>g;G#f1mS}DwF1p&u%C<)fcv!bOZ$K1h~u? z>!kpX7}M?zMl{%Pb^G$UPPglp^t*m;MlC2~3~tQjR;I0bq0?p_e^~qOtAZ@r-cMaJ zHEiL@xnH2Ij0M5vgNiDU`6bcFP^HjI6Bj2{_tMCr!eQmgEe#KzT+n>_cum{+_2;gH z9#qtV1#Dn0odQ};NHKybv8dJb;g4kb^%}$aOGCw05BDYChnxahG${uI&82fj%L*w- zh)AVP{FUU`B-g0CwR!aB4SknBv4nHJv_Mh@9gxeDvz7~z{V;_xPPe6fpR=`LvrPAT z)ov~-j9zsUeppcpB?X{Exg7zJ=M<>`S3W{-?Cmq~B9QjB;Y_y@eePx-TeUZ%>+1Qj zS;Hasm`Y3m1q>j!BS3KhN~Wt4WTK>CnXZtrb)9~XySX>on{jj8#`2pVjD>s`Gy(LW zTy9-DK7@FDjwm`*s**-ZWi&rh!fk%$@PkiFK3(nQ{_R@0AGCGp2nY-iFq1+BM&h=` zV69crdwE9E+4*rNeV1%H>i+BJUPB7S0CJh;r0Yy!Fs9+uiki3Q_2rC$)8(hfjUL0d z*uEJ`bJBqXG!U016m%RAY~wSU;=SSSO$A4y21j)`ZasI*>rW9-2?ZUJ;GKpv(=5Qd z5NCtoicD{j(YnNef*+Z8)#7VC->3}D0s{oNtm~ueRZw$Aq%8<5^*EGpCOYFqw~eQ5 z?sxlV6;#(phXIvlC=93O93E+J9h@MI)~%t7%U3E`lQX{A+K*SqF0&fLFz56UpEz__ zVeV1ge*5inO^b`Ex&6!E>HN$)HnA)+pXRKhH{~+_5U=M&H;)4Z%W~WG@s#b=)USH? z*U+<2{vo6FM=twPp^JWe%;@_Y`yKr;n~he8oeuZExD|Hgk_zA=rO4n zdfj)D`_Erx%GZequ3d4p^SHbSsP+*Xgww&NSf*Cu@|Vvx8y&O!A`-Xl+3@w>+~L88 zTXXs1CaAJB7?pWO(;~NOZGBbZbOI94_{6>iO@iyqf?nLzYtJpSC>orAilw@0_~N9( z>2VeLK4pK-8TaDMsUHkx8SS||$z!FU=+l4Mvcc2sd(3)~F*s;nY_<0p&`BO{%;noL zz2z!V6pCkFc%oXr*PKySzB1GsemYk&)jaA5g?Ba4WZ?IthR zpz`W_*PQ060hh<$R_0TS={rxx@Alq)ePo@Pd60pL^UjXsGL@PT zAV#DP!crnImBF6<#(vV;_=`LJlU!lJ`e&j}+eZpd{=5mLQWIhr!E>(vB>RLglp4AA zoHqRR)oopr<5zl)wv6njum3DCE-hnx9DFe!oTofm7mk*?E_%I5kEH}YK2iC~raB9K(DH(B0mvqrorjAcRgexU12nh{Az~9M zP@~q9s`BACc`kJa2w#n;bnEm&#V{y@h)pVeBAm|%FjmlY7LQ*Wt+3#kXT9k!7uCFa z_sWl0{TTtq2EuT81%{6Wmiy=60^S5o5NU5!+pO3-{7U^ii;t~d92I0Q90py1;hnFK z;?j4HGcH$1Rj4ok`)?O49ffW|BsI7Z$8R0*40 zW)h1CF-v40tfm%QF6`_z_hUlNX?dlF;@O78GD3vQn{nD~A~|C1X&%4c##KL~2YNQP z4{y3|LT0r4GVfrYS+Em z$=gjf&nN|HtzLUBBR4@fhfD$-Od5F{mbm3DlF1@Px+hhxWPV=ct|{54TfySG4uM7G zpvX<5ST4_a1S7uk!BV9{PA_jaaF#r{l(O`+wu=^iYqK@C26V*1a zT^#)NgMD&h;MMf5JN=DyynJk3ACBI=6*W;nfF&pgTfFYfg$HL`&5%nn+=S2pG;P zJT^cGUUinMg^^eUvCs<@fvW%_!W^&hMrpEm`pqsOJ8}o??VA?5dRN!EL{S8Snt(=4 zfKwCT)C2~oaZ?llJelI4V7y zs(d?HX^}iLXr-lwvu?b&!m_b_yti(uX!N-u8{^(} zZ!m{AD;Gyfn9`m9$XNQx!ELZyB-0ztD!r>ce|2)wTF+qt9lv#qZGz+#b2tr9eEJ^| zI0(;&_Qhk^K@cnU2DYB;i>FVFD4c%i;)L4qpS#?3dxD(6YYr7-lz&hC)_D<)rE%}pR&K| zy4b}(n=CO^?BQmo%Sk!EV#pp$Wjg4|jW*nS@8bRG!?#xdX|sDty-2d0Uoqr1MDyN% zM7cvmkzfl2FQuyWC-?Y6sxD`Stf|s^@u+>V&bMul1I3-(hN*IL8^3+xlHB*}`&(E1n0-lh?Eb4` zPl&U!Apr;!C-(z{DIYHudTYRg$MGP&9(b@+T|xaX5Su}9|EsF7q>HGpa#)q~veG4l zH;D`i3Mw!R<)n%k#RqvF0cR56DHQtRe}L^U9t5hYA!B{Q?Mpwpy-MB`H+PC-sfn%B zL=`iN40#YC$OsIQ;pAqN;)zW(e?7Tc@m04kSvNQtJ#Sjxfy#<9#LXy0gH0|b4NhtZ zQVfwoVd**`6_0pR1b>6KheAv|DTSRcDIHYquDw2_*OoqR--lL{d})1ws3AzvB84Mp zfvQ^=Nkg<)?@8^Vl_H?>LNWF%oJtt4z!C&iwvNImEKSzd(au3AR>a4HcSLMuB2Y^g z`oYo8RVYRsP)VeRgR|Jf8I2S>xw}W%ySs{A-5uRf_ecqfirpMUVn+xF$hz9aij+Kl zs^k7n)vY`A+|;7uC8zCC7cE)+*2Q2Fm^OAG9wQbNqLHXbE_AeW2dul?IT65 zZm#YQ4pEV=&JIrYF0K-1R3wR%M0vQlxVVZOqX-aS3xEj5`n+_=Hw2M_K2D$Z?+)O@psPJZ5@(UUyNkUj60j_G z5xY7&yE=&MUBn_6M`y7lDk{pwBg%mewZ)+X*G(pFc{?JG8;?Q-K-c~ zW8Ik~ikAsha#0+L|INY9$zJFlB|+VyP)8ScS0_hzk=O|gG#GtHduJEaLG144;^E-v zVsCG+!vXf3>+4U4)SuPzo1xtWsht z2EmC!2RnD$-~i8{;I4roLe#;-*}>J(J<1g*fs;GXO^JuZ1$A|Bk90&GodBaz?w~W> znN$GBIw}O`^DSa*+RZPT6Y{e6+fmg{ za21JMJ)GP;+@svx-5pU^XTW}>gPWV9y^~|4y$6A@#V`bSwpB6*Ok8-+xlE&dqfbfv zJS|zvhZkeiY24w;8V!_Hi2ujY&Iza|DvoqT9irS(=SX|h-C67$=?^?j5-IJ>zzMA=KCBvB%FFmF6iCue(!hlj|`#l^$k4Rw@AD3~n{BRCvWC%x6t zBhCwL!^Sm=tvTSLC2Mj=G5Ro8BbTa$#DAUb92|v?9&Sz&&^=;%iP#|ujY2)Jfpv0r zcd(bZx<@&>xuYT%cT`MZY%vVMlG6K^%br8K*6_!U{5e`Is$j|L?<@vO*kq0o#fz1w zN-d=RVk?tIDn-g9FlRu|xw*TDoWwxS9PK^a?H%16qdcOVoFw)V2S-@>b`#vT=@rs1=5_aZ(fbB=iQ)U6w`BF`6@y!>5PhN@=558RC5urZ?eDgt1S#Oy zUg+Wmrmu^eyPFeg?}FO9y1Uyup^lMJV1|o8hdQ}A+hgTUT$o_MFga_c^&7wC>wvBe z_I3LjxA<)MWlPqufMPJr-o04*B+<8yB1adA*vSzrM~)s*_Na@*-qqe7C@HovMml>$ zM%g>qi|loMi$QfAyM1*l^m>WBYjuVu)c$yUyxbBT1H9V^d#gYX38T?SrA7+Uu7y6J z8j}oMwy8kM9eCtJDT=oOr7PpqiUgs*LJrpOVA6R_{AueM=@T>P_PeSSpFT)fvctl`@KhLytqux`rTD4WgCu65kj*Qr~bQ~wXxDEx<& z#*}v#A(fVWjj?a7Jo&G8QWIDx{P?fq<)O)+H_g1Vcz=m2J|q7hu}}EJ`ZjC0rn1d) zZx=^?;huLl|E<+W+yDQRb;3^{wOh0_=U(lKxd+#to>{8sKW3ZoyM&f3vC}5QkRxezh0Kh(;T5pdV1487A0elF{0Fxzf`GIC}|w#PnrEY>Twtxv|CiWAOzqX4EN_2jzFe+VRJ-Ukwg6h|7tRMr(*S zXoMjAU-wfmRt8WZr}b>d7jtf{l)HAzD_ytCo4gnBJE0IIfl*4VCxd@;Hv2bX(d22n zhWDv?XFqx0LThO!q zkjA(_Uv;>A}nMJe+;7v6oTB&AZIy)rqYc%z6Xt&Xuw#58SG{dz1SPEV- z)z2Tix~ohwBv;kEeIZTSv`q?fa4pqm*sprfYsv7C86(8?oFaJ9Un3eWcc}10*hzkQ z^kroUFRS53<`g>#PDTgR1XAJGNGfd2)BXhhu0|8-c24Q#xm7;ZZFQ;E(vJhO9#x;g z933rGg)Mp7pO}RHSUqE7DyRKAEEIitsI*<${#eLOQRrCr zalX$N?5SyY_SSybYSjb0H@TJNBaMoZiot8`Ni;4yeqS&)z@}Gd#P(TJw)U7)AF98= zf-t?k>XQT%8ny?0^4~6-+`0el{4*!i{g-9BLH4R%`!^= z2A&8wzz#_CfGX^tXquX=8tIxfPH?)**av;(JqBEX@)~hEWZ;5PI)AL-iNU3f5GgoG z4ic?Ep*1{oh9<_cxX9f_iN|imIIkJnd)P%UC~Juj!vOY!$@Q9G9b*>fn%qprg+$z! zIvhzoJ*Z2qPUrVGfU3h09K#UPuMu6q8_fP74uaONXrtjGjbwF=`QI-+>c3<9cxa8# zYj65V*hLAh!^jG2G&a{&f0?-HU0QzHy~X}t@~eD?CLt@v^c#bp9C*_-SZ*4P(JuU* zso&Eo&)kvKr}etBpAw;sfdyguL8s!HXiUcORyCD9O<9;VVUqmi%GXb!LDy^l$8wqt z&i#0hvI>en%Tz*t@^3yOwTQ;>%j>?9otLjw@O0aEe6>y0+E85-En2{eHhm9MpQSO} zJ#bJ}bo-Ki3rqBSUvz3ToYSn=-tzJjWA4L)?lqDX+Fy+IPDKaEga2z!WzCK;0B!tz3eU84s-CmuR-CU2SGBy<{~ zC=t`JD5AD-)4SETzx21v?)-c=`*;{3!NJs}6pP{_7^FVZH<&XX z<1@Vv3R6q0l|MV$t@&7Z>XK;iGCHA=F#3k8qq(K_CyfyZ_ zY`zbS*>Y;(;f5_TyFsPBSS6vsO@ELe1qi}5j;!LYRS6!y>=^4>E)!ln8L3uKQ^&e(FlOody!&$-1_y0b9i9dtoP^2`94-WNqN%l^6| zt;ehO`53YOpEZv|mW~~<|K{=p$QMO%{~IbC^gZ;h78n7t@8=-9V}th{UwbF|m}{LX z+122_ho04s~|8h+B1*@MQf zd<|KXczq&9p;86~)BCn@F~C>JN>E^LRjO5CpmYLFijbda$(c(Qg_q0rJ=gmAntaH& zjZ0yaz#pqyZgAsa2ti}LdHsZ&qOz*wc*2B<#lgDov za^}88$+uIoi{7=YlkqDF@?Pr$kjo}93i*jgHOD)&9Dd8H$+@qYkM|raF;@as46Ir+ zIAHilm3Z~?r!!VX*>&}csnS#E>OhT=QO z)*F6|-x+#0?Z+nHR<0ZSoIiLFZ~eIxlCI^&8dDDZCnBZHfV)BRx#af;!VeOvq%M3IJ$TWWED6)>VBkM zo#J2jm21dHU@Z6<>8C3#A6(I*^`xWe&Rg1ze}YroQVv;Shy=yUv-um`PgLE#+2yH+ zBw@rVmuEOKM*}*O{&9RRkloY#^71ENduDrdi!Qi$U5@m4g+orYuo#bp2q25tV+2TW zdHcg@a_*Uu`sQ{#BRJHlPrXp=)oF)|M|VEUgOnL`5y1-)Nw$FqL2-s{}G%|ALu> zDALk-1?4Nb++VV3V9PCgTYbVmzqlm$d{o)Jjtj(j1=edEG}D>?We>TXt%#h@Rx zKZ3t&?~6&&9VTj)gf73=^WFY2K^?mL&-#LszFh%XKnG&|Z|y)0TG1Q()ooLcF07(z zS?^NS(=UJEn2!juOb^ppssvUieve3@uk~Ls_w?8Iogey-8&G;u`ik#3dTT{wxgHwm zoI);v;is<*IHIXm_2Hzx9arYuJ>)>Z=T$_~m~iTYziPFg|IFc)+qoT2)1tf2EJv`r zz8*4IcQGwG`3^R1DzvrTT{aps`e>LLE zfEB~`5p-skM{*1@1YSl*6JaVTR>A{EYg%2dQItJy*v6u_ME6WDi!5ZLLXBRHuu}Ikk`8?K&Q(FuF7{mvN;^w!bmhc5|-NyBVqROTOl&IP95-x1U-XnGM};lC5ug z{?lQKMW3rKA8($VQu67e6ufm#O=KqR&W~*StY@VQ^M18GT=QJf;^Q@I)t-j8%_@te z>D~B|h&7uL&nvu7dn>)J9v=57yXJHpv8c4g1pKZC$^Ol49ZAON@Q#@SRj~si%PjC0 z&-xNN8z+-e0a>Vjy`|IVSA)yXN)0<2xZZY-$M&$$pJ_PiYbj(g3(8BRA`3)X@LR`b z`M$MUKYZ)g#MR-qO7EJF18to*Wn{Is;ilinP!ak|`@1%zyskQvwnBks<~Zcx3fz42X@sZE1ihog3-Uam{W zo6f=3(e90IHo99XKfAeLP1Bt7rF$Z?p=&CV0Ix^C8($6`?vcZ<@N$Fe@coOZ9!b-? zEg}))lg7&Ho$cV+;zzmLw$nF+F2)gyfbub}ZOHcfYcwA|zKYs8EPUjkn0uaImk`nb z<%4ce$kzW%x0smOr^Ug6eZn92yz*gM4&HicYl{@^^#zhfT?}Y%KS;2}s2!t*HTe3f zsAgwXMq-v`3l6?s6ZFRPZAX9ZyeulpTpl_(#lLMHGMgeo--%ymMm2Nazs&JR(M5}u zZQr)qgA>TEZ!wwjT_PC<-1;O7D}OcXrZ|(>M>3{O-jV1%oA%)pHdICyv%1lBs`=*P zqTJlanRU)BwEXySbeiT64*Z57%h`e6Sb+hm2!sXyXo~mTf|GF$X=5YKdk)}b9>n1p zWspUza7xw6Ik#N4`quE-HYXN)t^XAL@G$Y!=12zRX(sm|%Hd9mxuV)mr-$!1zaE%) ze%_as&ohqWxF6M#bPA{SQ0qhtD15zdzMEU9rFTuAj7^<$&*Grh2$HD}Vu<%(MT?;! zpHFET*2#UnvZBKY0{WpevQ{5T9CD!FQ{ry#b2;>?a)9TIHYpz?U6Rk7!8zDa0kc$? zj&)K}<&kSS`&vXk`tcz4-Nd<#JD$TKi&`PuCFP<%jyJjKc?Lw zBfr*I)@_^+t=(z)iLl)YWV+UGO^PurXTIgSPfx=XY0AcKf}=xk;h#-wX)%%TEP?q2 zQX#NsccPI+>`rHrl7;g}>6)n-z3=vW>^-$?$)=BRN*R7gIyRG-PF)i8_KBublW4Ez z?<}|XJ$G|n$`c%P5lD@Jh$Y_|bU=(k0#!G$;I~pvO&b*$(so8@O}}Ofa^jxh$kUd{ zOdXQyp~R#6&N{x$?bxMZf6c@y_x8TP+n%cidI%Z6d2H8jEf z>J)Wu@@V;i^N&NrE>xF%+nG8415W2Tf~?R7`D^er5aQ_-EhEpjRZu($dfNZzWMs*; z)!hjKFG?Zv^$1Xqn)`3wzMpsKtNp}VjdEtoiaz1r{OLl;sR2VnwLR-1ycKZh!yRP* zl{*g`Z+S<|+ROEj<)A_gDgl-XmXxeSC6sR+>nfdibLOH2o!4f)Jy`Ij;TW5p${+Zr zW|Ty-jKHaHm%O%aW>KZ0lrrB-ju2JoCm_K2bwD3?Jsup=ID1FhNKsGU;7=RufNtS_ zKV)_g{wK^u^x5nt!&}Ik)_icO>WPrm%g4OHY|CRMq1KMnXZH-LHe=e6M(V-mhZY=- z?B+BUZ+)aBGE+yJYU?wra$raUi>MKMt`Gh(sBZ?*_EuBCqD{??Gx)c6D(l~Eo^`&@ zM}K5C#uVWq)OAq%{#HFMHaX)NaD0W+1S>n2N%+UcmL{~7Y|W~z-|s*A)w)-`JyDbT z<{$RV>rWulNo^%vk>s3kz18f#Isa(gAJCq~Kpku|eiBoqQyqqIjq<<@KQD zF>()n*M1G}PQ?MUOIwV`d_opur3xg2a0w9F2o^%hLq}5Zbt?HNu1(I?&#NkW6^*Gf zWj0P>OLx#Sr`)$+?{na1V9cSE@b^2`E=QK=oJ9;r8Ak z!-?fpL+0v`SnpE9@;x%6{rCFT{D{2|f-leL@_rfK{zWbD@lO%U7reW^b!_~+gO?@` z3mJgSfqg*a7Zo4XPtKgTXm{~RpAm6m9`Lep3d>4k13RzA{7d&XcO~3uc9rpEoHn`m&YV_aF~xZdC=!Dz znGC=EQw}pC`(B@6;Ws2-T`3F0-NEN5D!#W0Rsdm^r7~q4|fWdT(|IF^k=sw4q-M!hbTje2juSFpL zH+a(t5;Rg1Z8;79BaldRtYWc`#!>>2>u4v%j7Cs?(~f+Z0qZIs3{0YEOe&O>)E6qg zu6g6osVbkJ?idApqq=r>C|=M~VmS-?ZGu9nE@5F&ZQ2~@*DCxGU<9V1(x?(pxdd4t zL8C+SUME7mLH)HV7CUKV zwY>#sP@Mz9A2l+(Ep|ag>ma69EYwj2$`yqwaU|9|F~}rxjjCd?k@h+L*@4%gvFp|w z)TANRP;Z8$lcem(PWA@#C|aQe@5@%S(Ec0Qlk|U^q(m{DR8_G!T1+J&Ck8e~Az%*o zBJi{xV5-O>@)OjQAQ5&k>Udcdi?htn60NaCLEG=xcgUB)zy<{VNrq~-9)g;Y&#yA_ zc{_o}E1%QB7-d2K?m3A$+icGS?CWuw@HYic54J%yJMhzryZq))~-)5;X;&P1Y zc&yz@W6c!!^M6?R^fEaNH6UPEUl6=m6WbWpHpR!Um#=q7V6TX5W5ku{APu;uksz4{ zTH(4Cj*Y|-=16G!A6_M>l@U`%03rmKW_e=0K^D_$AGX&;SJnkmN~_P{QE&){kson2Y$9nERuI7GP=Eq zB0jKEpC3EkXI8(mo zqNgMj6NGC5JQ&FcAb`Tcv@8>?xm?=7Ww9<^0fAOB=%4Pgl_>r9$7!RA3VqmM!3su1 z1y3)c0@;t5W8`)rfQVv=+&ZxhhiRDd!5OB?Knxm`n$jm`5D4+$46!v9Q&xhMDeGAO z4hZNm)q zL2?bwA&i&+Gibf(lSwxSW){;(a1xKt3{Lu;m_~@1@?9U}6Ub=L6pzmgnu3xyV68Mt z$$Tq>f#5D4pBda`WQ8z5gX29`8&0Ou+hcYA#IYvnK5Vc+3b`mS1KyaLq@#o_$l9O4 z-{H_X){3^KGa|H%=od?&ZsK@+W?&waPX=a*jtC?hw#-pPO!BfZ!` z9-kRINIYVuvlMjX^aa!-XUeCZ{zp;u108vMW}qYS)Kl?f)u(rs+kIL$5PIWESw_sT zOehW2xUv!?{#ePcVjSQgeuS)XqdYz{ZWK!CfG7x9DO@(&7_kLlQY!+F&x~s|QdG(q zp-2BM@vt?9CH$7hXNKP*xGS7?_R=Z0fK^@tlvyiJbFyO?m&YfJc&^U7+Z`zkI#&;hq5-=AY6Ju^uzpl zd}f$G#&3VSUPkutUn^x z0+~tcMf_J>8f^Fn$(QA@3mDeoY~&f2neG7@Y&fCcRcFHq{jt)f#qDCDewK&M3T0-a zKm{TQp$x;hJSz|*#lnj&MTV!BA_JWj3`(P;@ShM!m%78_GgEhpCyh7uZzcL=5;|k7CVSbtBWnUjK^mtmqAt+8-z>6(9dt<@tOH;kYeZq{#bR!VoW|= zf*mrKwmN8k&E@8){iuGWL((E(=K4XKrxvbX>JW!>sRjNZx(qAYh^R1ZKu1blXJH05_qm#TaoKTwZ)o46)Z` z)Y*p2bWrHxgCfFSnvo*HWq1U|kpZ!wY)+nDvMLlFL6I^b97KxCI{=C=b`hzW%}l6; z?f@tf?4l7Q%re9L$*JZ|+^9jxzC1oN*_VBW8KZHULsOXQWFf_nUM4b+&&))Iiab#S z^owm$GmA^lAH@xeIM7t!@tHZ&kmrvg!y*(!rr^IZQU-Ild3FDJ~t!dLm*+ zE!IL5JU+7!1>{K96VMbHCZl0$f2`znF;*NS zf>Mhpv%&|mu6UvmcrG`3QkWn^RYrJxW|a|WqbK0tQUj~|L95P8nV@D^LiBlIseQuZ zCo*cEuq`3QBE_ZuoakVNnU{I8>=BR8EPM1D=1ClwKwh&0si+LH>G-1mIfWrHP9JrD-B#K|OfjMTCl~aT&IP zi=->A##WY%$7hyhgThvDiHuX=a_3_Rgw1wpSzuO+gLXcK7&;u6fvYSf>Ok%rqeLAP zxXOY+OkHh6ujbth6<)B?8!MHP0ID>tE6ruL9aMnhZ?TRLREC10aq(6@s47maND%rf z^v2&}9Yf?Yg-D_j{@I>ZfOrm2 zq)NB&{4LfYG?Dw0QGVlpE7tM1Fa{c_)JWq{rKyGoWC7}Gb^I-iL3_pp3X_1k$xvYo zGuLD=QZ0hV|66)O&8XahSJ?PldIFSVRSBcHU1kiFjrbF#C;pas_=6THlp?N|H?Q;2 z{w?zWCJ|ntTJ^Wg1N=S~mo6jY>PmSg{+4+l>#jt~$oG-ByeWjoh&5YV>(2jM=7Hvd zg*xtUnFm(Q!Oru4%RJ~mnD@8L17}vQt`v)qO+~3q=x><^Q=d54YBu~W^YADA)y%pL z|NkiSz@@Q7q=ggFoqtO#fCoRJ7)v5^TtDxfI+t>JwM&c?3op6?34cp0$kmvEX8pIs z!vEotkWe(NAASFpSTNC*6??UWzae*_D{Q+Nufo_U0)OC4kaQ#F0`iR-*B! z9DA%6o9cK2q7(lX6Ziw6sc?OO|EZV&mzD>ar>9Nh|C=n|sY$d~^LLip`<}ZwFNH1B zQrlN}A~|c;{oiDH6NDh^sVcUP5uRRZ@&B7FZ-&DQIW9rWOmgeL$?{kdm4N7V#UaD|C=l?Fw#rJI>}|e+ut;G+}i$|re6G{F08};rm17eihtA8V?~2SLN!nb z?16Wx02*t``M*h1=Q7e3PyGFxoIU7oa<+-CU|CYF|M%oaol8kvk(?L(yExUM3(M20G<^IZ3kCo{Z9x8@ytJY>tD4SPo+>%1otYD1JH;aLh+FazWVN0k2C$~AxWX<3Za?Co z626J3Sff^GhvSKDp#O&}4KGwJpIorPw)_%gjh+;Sz^1HoV^9n*4wNRfU-&B~LKJiJ zd%K74O9k$9`v+s_JX94UmmAN6ZNBe~=i>VR3DW41| z&gl3{iq}LZ-e?vC@Mkpo;QwEt7Mt&5SM)9#+q_e0_C1^xY%VeUB-k}&loVC!*5=hOci(;bW5uN&yAu~? zo}7NhpcwjKQb5bJCgr9zWHjZ39UtzTaIIw0nA!*x4q4EpC8vem#8F-GPn z=N2y^iH;{qoVE6sY8HMS@8dq&VRTsk?rmSaWY;;r<=j}UvaVy`(A)-Oa z81JZqGpiy?3~){&4x6dZRo;sDcyL^z`0lxALFuICipN8*TsNZ!r6ooDTAW*S`*q^@87o`zkd=n`hmq#m8B_!tRQFG-Q}x4Ci@iS^W!1>7 z<6Qc&!JPrZnN4}f0^1b#@9ox9v1-22^WMAcYbS~v2OCx%2zY{X<>@U~iK0-_PKBKX zu1)=Wy*!*G4@+!6?%IX7H;^1X1u}@{ZX9qwV7K7FfZm|gqBZuHAdysi!hW{&MCF{c ziLPk+iw#(3d$K}GH_UwYe)le#^+VSwEy9!!qOvHIf3M!) z)7~O+3|WYS$M4an^P2o?V=`)bOzAJK`SlHw32TlXxU`0IXCqequtEL@1> z7Ee?bVy3Kn_&z4Z&K^Af_C@}V&%b6z63FWo1zt@`9GcPfNCx!P(kn?=^R ziKCn4L2oj!iJ${>soBIR03`sUK=poY_wJvXCdT&Zmv}07UfWS(NV5sn=>RjZivmkR zt1Pim$=6p#-ECViU`NcwmQUT;*rfru+$hN2l`7)3%f`i&XJc*-pLwV6(!jz~Jr>@F zHVU$Hb?wc-EH*7EO^Eo=WABe+D}voRjJQ61L8C!z%<9^k^644o5=Ztd_VLalF{*Q( zUCS*uqxrK+%8L7Qy}a`fTj=Q-vVWNPX*i{g5oZb(#q}XzDYEKHExk z2smW}#&s@Yp6~NU?VdVaJ?3)Irt*OkSCQrVjO)R;pN!ryAmEQu5r-p>rYtI3>iXQM z^B?oRUBApS8ENgg?`P7Pjt@A+^SW-;eS&Ak&KU3A&~19%2{%~!Ss%u|72>Ust3gZ_ zs)U%&jCR@8Kz?BQ*Nrw#qOwbWu~;E&K$G7i=xMk&c$P-3ArD%*ef;UW=zXE1t9q}C zWcNO zdtR;eVvt3_Vd&YKNNmj)KnU&`?yOPD!6r{BM|i}$!n)O4J7?x@N$)hofycrygy7yl z?Fx19?IpfvyL_qLWZzBO_~xgFRbnwv=>YEgx0@yojZ`F3{d=g}o{3#ge@JzTvRYE{ zvfDP6{)G_SuNPQKF|0xo>CiRj-h2v<15wD7R@Yy6qF}enH=7C}E=z+CEvv+0KGE8n{4SlgD&v|A zN;Jx&Q6H?vCe6U!bTVM*@VW^f2GhIh)cJz1&UrTTBbT;E#x zt*0S&Nr0Kyb*9+u(zRyn(Cy`3F1bGMLCago(+sgo0?fp&3&n2F^YM-S%6ac<+2&^M z^Rye^46#cB%*3uM#ct~X9UAgmw@O-A{->hP*5Ffy*d+mGV%Lpg*Lm(kn_FF;P3B)% zS8o(Ldx;@-Nr0Kyb*I=3+0xklbN`Y_CC&|>)pJVjU_`fLXG=d6?Diy+Zzs z1Fd`J5A4?Q^oKjYPE0qzEZN>X%xZVuqEGcM>^b%NORBootAU^UCm3LsY;PWBwfk=S zEl0N>FVkmZyNmT>E-npjW`J3;y?L0`?z&OWW)w{RQ9pX>==P7x^iAk!fLXHrR}PQn z+LIw=AZ&Kn7J9yB^EV$-fANPMcC$qm(oW}$)*m@#6hy>POd{LbxYTS_`|A7ygUgnz zdtQU2K}>2}a_J^ziL&GI1&swMUS~hmQfHi4^|Z$8u8^CQ1;J%pl{fiFHPxy4RoWc# zdn)U$?6Yl=>Op*GD6R@_%;~@@WV)PszvU^L-Fr)+~f=M?`ChD*;mgK6JHF`7X4oJ-eCY%pE+%_UW4wQ}#LD>Wd` zIfHu!*yPC$ zDj_XGnv{)NpHlX}Y8o-7{luQ7Yg`+t+1&uy#v&C(M_`DK$qP`hOm>PXAqbXa2z4?4 zgjeH%S9tdh)HwKYmZll9&X`b4yvfUh{6-kR1co?crnhq3csulAYRTIb4)lEy168&X z6S^v(x{bq#pXqdd7hEbvL zTRDbI9^ZTNzOS`^@ugPO2fKS?o+2BK%A`-itcvF?Lq$r4ME%dTcw2H-+aKP!ErUi) z2ud=pc={BsnRCtaAr`+bqIlF_A)(fEYTcW=x#_WxT`k9MULNyHv8U-sWS6nQGDgcB z`xG_Vg+8c)xmv_!jKAKZT~n`4PLFqFhTfRKx=&FA1bPHaUbMp4ywW`k%Fsmbo1uGp z?fkX1>GRR&Hs9|!8`)}fxTH~0QZd;1k{~i>T{4IlIU#;{{1T@>d@bXBAT=RpUH<%E z?q`iJ87w5sy0rVs#UQGJxwJQRzv(+6v(4*MMW+sTzuj@K@ui)OhFPr%P;7xQNQbu; z*)G|eZsjNtj_A}OQ*PXvVB$?)&dS()GO+ly&8g}9ynNSBS02?YF~}y*7TIiUHn9>h zyI8$6T05Ou(?eg({;_$Dbfcz1T1+*El`noTmL3taF6LdNgPGgZnUvZ|8(rUb5H^j@ zo3qr(&-h}lN5HJ&bVX&%sZ_HpW;P^2@xj zTW!Dj;rBBu7mTRx+{m~%dIZcYj!ec7XI8E3iSI1eO}Q-@QfWoI3!{D~4ugPM#nC$- z@c3N^U!3haz(00?SKX|f@bJ&Z#nB^R4nHVmmI?it3&D6zn!R+ocj8U&xW@L+@(;24 zK`A(Rj0qZAvx*YPTm&Zg*4}ybczEOPElze9-`RBBxF`&`S#7u=ky4^yIvbwUed_MI zzx_;gJF{A#+5G9@8HkOk5eybW-qWezLl~PG3Dc4 zhVBul2_VE?>j_q9YoB55X}DJs}S z6tQ4MMa6=>pa}MY9mEQXy^A9DhWc;HNzR^Zg7^9V@2vmxJ9IzGd_c8g@Nf!jx)i-@^(bQ5^q7)_Ls>U#M~=Iatv?#10|u{o0M+3rLfsx} zmAm*%?BlkKP1gKPXGK+*2P(k-vX^6(+pP~*<^tL&fNF_cQ4}>Gbi2v?Y@59cUfg>< z`e(EB&nAo z9Y}aro4kyaSj5u`=ryiiYV#x@>v-IFhd!NJ3I|uQ+R!j~=S~b>aEB^8I8t4wiLXWn zrEyXmZ%azKf^^fgD&|fn5?*s6)4B%uu-b6Rfd>(p-TK}Z5AHYGz6x_f1;BbJ@deNH z}t+QQx zj%}CN=6n54uVRj<0C?v}+5Cti(Vd$q#R*%jdW3icIc@SPUaH@3SJps=?Iu=l!&ej@ z&gaUzTZM77R#aNd!s$+9nnu+XMQ&Yq**jjpx1k3L>%94Kggic1{9Jf#d$||%`rV66{gfQ%uMs!gWRul1K>y;RYoK!hQUQ79>jiB(P_tvp)W?7 zj%|ue97Ry#Fb5DD0UQAzgv3epmN-*8u0CTLe9_I8z4%tj&ofAKpcey&IZ!f0v|N$b zn5N8-x3JpN7H1~PTx<^(ea#6=L7IaqP;jgsFNr9Yr#1%Uq+_OG-&SqfTlU4s zs>wwDCgkeT4S?ea@68o}f<2&Cn$Fy1*X1c4E({Bpad~d<-~qWk!jMP!s$g(DOz`0e zG*(WX+s-s>wZ7+2#<6CPr@g!p5pa8C1oB}5ni$7rs4pj2wREVRE?3UyFwCM7)(-wv zIq!J$;1$TrP+jD7R`Lr`J=Ib20wx6%6ef1igG=@s3TJt>pZoje?u5Q6+o4K+Dngbv zA)Q5lNbFOmV8_&)1sygtskkuKEq`JlKNTthMB*N%qc_Yi4C94INkBUbk&q1*y5=`x z3XE6HsvK@`u+#V29^ne`A0z^t%roN9g%{)BGmid8DIq+}b18ROk#o53G)wVFlfLm z;YvXZ7;-b#!iDWU4xIf{R`Pjz>!NcJtNuoV5kT+pYcQEB_0Nz6hPHa9;htAtOr4S@ zI5|xo`J{=Z(PhT9ztChgG8jbl&$|E0m;XP;MZ)9od6VSv2tw(vzZj8W5>k0Gdhe|h zB@vzujNAW@28a5m{(&{Go=463tK%Sh@y*SH%Ut^O-Xt0OcHrNvc`X=xTeOQX8cZmN z&5}GrN;Ltd;rOhO4mX;bEKPgSZ^w{y*>pWy^k3l78%`t11v0w@A_+*+BKnGBA!H#?f>FGz+TA*hl5DDT z{$d;Reg(WC*^FGBdoe;j2n^rpTge&4IJX}V|7F7!T zM6I-?+JOZh;{PI<*$B&-Df<=`&uVTo?4>mMq>OP+x0!{Y;q$pR^oxIb1jrRpTs|69 zK1+MsBhX=V-m=eI$1~3V-wlBV`{_S221Jc)d*FSMw1Y5GKBm!g>^?R97Ja!>MeAc{ zM2xe4I{cVmK4B)kjeSOUYfuo&I98=>`T*&@1yPQ*oFA!r-sHa#My2#Nr%#7V7V{hKUNLxV zZM&wFTM!btdg3(XG`l<+C4xk;2?qVIL_%&T)QNRch^Xr)|3M>?&8sKhfs7 zAi+>zH2dco&d_4Y-%D~yT@B+6#@u(R!FuR?yHopAhjkmN{<#JZEh&sgZ?z~`s2@gZ8@jc{XH!v@CyFe{GwD#BH=(nQgCQKd}u}<77jG!;>N1CfzH-! z_O2*#aBW%6v$C$fxzxjl1_c(4jPh^H8faJu!k%%OxM$DB*}HpYcC7Tt`MzVzFc*`* zoHYs#&0$Z?ctf*BFa_G}DD&Cfxl$=7oD1*iYhE_8K9cp!Z_Tb3sU~3&3$?biTITTyS4 zG(aqUK=|g$BT4|mGa<043A|Y^;L^zXWsjylDqmNt`4&BMg`lVRF}B8{NEPK8xDpRg zst=ZDa=pfpeJ7vkb3V-FO}$AAhEg75lOR}1Z-@#(b682EH9(}OaGp@kk8UNrZq&E; zkUvpjhcxg8Ih=cxk_<>9 zWRVH+1(LkE;oMjgV3IW5WVk-h>-Oz+cnZc~nz&lQ?%+4~k>To?hq^=wtcD zb$jMmsPicGb2>XO*vA2TO6qE`I?J)el&$=l?CEW4jW(?|8tS|Ne@tg16J@DRGv7F| zI!B>i`SY3Qj&&??tQ9nF&iM^{phhNI-_zM+RQbn=ssE66?E33#?oxJ}Y3sL`p7(-! zjFLa4^F07pS!z@O@`0pmRn1WOF9g%)PUdDGD{V37br}ERt!3{-(0c$fF-wb>&SO8B z6S5e-97#A=rioaECdX`usfgQB(PDn5r7^xH(6OHkLKX)Gp)*WF<_IO0y3JdL)tm4d zsgKSrcy_OzXRnv5p)d^@1tpgXi`I zRGrnBhSLv(#%-_nBc;fG`=jf%UbXozVyQs>A+h=p#=A+glm-FSZ7erb)kuNIY75BT`(#)JPNmI~w_5=-3&&Q22Z?B%-s2Xae(R4mKL zfAU|%Qi1$KVyQdE4Ko%rv>aygI$dgzv3JFz8vjKs705p%mb$mxh3_AZ78Ug_6D}^g z-P$xa`M-#z0{Mr;Qg@+?Si0!ppk)IEGRCi057&Q$OV3oXaj8J)JWP=}(%z5>JD4YY zZaraO-;Fihwp-n9mOKbLOpzh9cVi_4oiDA){E$WRmvF>l%?<6j*nX{Zi~Xi%o>?;} z+F42)0=#ozY@K}7Xi+uWKvhx@(i`=f1m!LN4R_nd;7ff332oL@{PQVqUmN zeY`aGy1?b9ZL#$5ik)h{eCrwLi7+wf5-J^?U8>2<69XQ*V}_T@$tA&Q*W0~pzSnIC z)b^RowUU6&h?9z4TaJ2&qojAXU9ul~`%L?-2@d0m>Ov7G6|?HkF^sG&pEF4v%lX)w z)ykl4|0lb@-SAssW7!8avLpgJBTvN0iZnyZ7;*3H2v<(0@w1m+uk6wB2^4uEhF1MO z23uhVstbb!M{4`&8GL!8VB4WK+a6cjH17lV8p>8ssW5CQb`hW{1XrEL==^ni%ooP$ zr;lBB?rw3a&>yv>KqT~r&=kIg9mxIVb7LJ8o(HH>qh5fchjbp*x~*u$jn9|c2j%qf zpoGxm#3086NlfRJhf2RyoVbDX1Yx*R7{cs*+E($V^&Lw=vFMI*dcUGV=*mN-?mEda z7(qKx48i*M@2tyvyIKU*nmb|b6k(sw_&Pwu5DfF&n%NWrk!_ zw6D2tf6EA{yDc%)5DkV6-A=^-IT-J=HN5jTTUn)rxmaf7hqN$c5)9Vdo+AJWiR1&#%G!l#hgKc(SaZX5@nK)*11M`w zrNXcf9m2zjh1k4iPj(FVf&YXL4H(TA)JjAxMD^zwblO4QBil|ACzWyd1kZ;a4`M%V z{%zEX^Om2T7k2H1(rIlv45u0e6ZR5LxaI+XXkx#N^Y(l8``W%)7#J`!3w5f|B0ER_ zsfNS@dGFlH+|}vH;Gg&QjtX`YGzvb;*s6WBL6Tyy;R-$k9JSN(Jjr{K*@TOY<}V2! zcm8$LW+)pD)11UK?gCJhl2G;yQ(m-Q*}3DvRbAI_cvt+(pRqy5h--*2m_o(4d4a~N z>P7l$_IK0NrG=7a^WR0zv=B^1nL;WRt|jWj3m0n4OW~P_#Kb9ShK2LT$lgvI5ukI4 zlF8^yN>ceK4hqkfa)7t~KKWYypYxY$tl_UT;92g1l9E)83WD%A{joqL7lfKWGBdJ> zj)~0lJ}YY&v{gKhu@0r?a^GA@fknsVf1d1Ibqufl<9(0ij9J2>Kcd$bEVPcpR5%nR z7C2TQh#A85lmrt4p1E)B-9E*+qBPd2&PO*ch(;=kHX#m^7%S$Bq@ZOa!Mf|0%8?gq z#|<~;blfO5=)4$d5@8|?o{J+$um(pqTfQhHlHmMs1Ad1k-NJ)&k0!sF?T}r7@?5m( zFqlOZ6F#J<=7G@SDHAQM3T4f|xd%QQx(Q_#wa74R`;I)&O9zZSG3En;haZ~0{`j-W z;x&l_w{%KGZTm0{CZ=OV61AcfzFy#U@X$Mx(0dCP+i&>E*TuAk21Dr0ktdBHM!8=e ztJtK>tJ8@y?`Pg}I@k*pdeeN5WrU>>&LWX|gkMSCJ@GROs2uG zM>_K3fC(YScxCBlhrkNyiNUK)y4sIP4MOdaWC{$yW2Xp?R2^uu@!iKC+}XZ`b>2Xs zU;kfwQNd#p0SfVs=Wf5~sNvCvLCuluY6x(!3#u9j2zEC}+O6Jk za@W3jhc4DQezU_xB)b{{3`@=_3Uo9B14eLMBHL?}cKdU$Zda$4Pj`KG6Sd@E8VqqL zXO0j&XHc)XPfxy-deoa~`Ke^!kG9p{A>&XG35LzuSp-V3gMtdAY~daYcN@L&*xRJ^ zcI&*lHwH{bZPr?3*jV?G#c4{MIh$^ZS~acPm2S`5@IRVw+@qUy5*Y@sS~+}v98fw& zV?)-=9ij|>!rijS}P-!$cTth?_he9zJ|94f!2c-0-%p7`xQJ-!iK=8yrzK z1VM-)BI3s700)@|-n|pU?mX>GZn;zYWD^^2!O(hHg{X)Km5R9Y1VVP8*rL;+RwV zx!wl{t+|5=*CRe*HCxW?}YwL9#U}i ze!-*b9#f}te(%0Emy%>E$6yf{@|+2640>PZz(P3?F+i$VHtTA<_2tG%X0IG;ve2gQ zT*~VlSS%eV^kzB3f;o%inZQ)3QtcN$T;6c{$oIE-JA`$-k||lvuv91roC@eAis4GQ zS_*h2pxdhRxz^WLja)px1uJ{GUIj#A(3@lr&yzRE^pd9sP-kjr&4$d2?{nNOxA_-d z9BF-?@^%28DKrSqxl(k7*4Dr8LrysDJrv&M@alOBZ|#ljrgyH87+8e@rL;gc2X(5( zKI|BBWMp`w$WA@d@(Q{H>K6)yfg$ih6{7Uqg{{LES`~8d?2QjPyyz|}@B-6d2)ww< z+Z$-ozwcZc^)lvuF+1wFNB*bXeIB9`fFKeKhf?<_X@o>15~wrPn1=ganfPU!8pnV6 z8Ml7ldGI~jES?eD?%k832mIJ22pvzu7b-31H*oD2E39;KwZYxR_ z9cj@WrOWEiF`N^?-yS29KMx{wqNl7~o2S=Dt;|oesIlqt`nsrd0)+@eoI+W1h;mF8 zHNAIYb+r?tDss+)4m-pHqDT4WgXT*(75-Zdkb z?<0qJ<+T6M^TOFN1BRjWoJ@h?62d0}Bz+V7evdD|c>dj{kqd`9W|$tF(gbx0K_bAQ z(>^>ts8kk4N_)6w)BI^rt<3#2AZM|K zKYwtI)qQxA<*t?IYfX)63zh9ug*yp41ONsvh2VzJoZ;7=o?~?ri0#`ryx&p2))?ib zz%)2?ozK%;Ps~g`II6=j&Wg2{*p_XUuXID|x`qJ5mhS_e5c8>56W0dkzgqHoo_UH- ztV4(P+mTlj2tphxA{51tv%n-rvtvJB%Q`aT)J*sB@2C7hst81b;Rx&l7$7CA$GnU$ zKa$Q~bk64Iy7pGJb5TcNhy=ry1HWc`5HiSbUgx>J3|=+(z4V(^b<~zarogcbCr0tq zFSS<$)d^{k$_f0MC7ilxa7;XM8EObHc!EBtkP_3d-HdCqU(6gep3!G-C(a%J*(gsC zNs3`9%3t-9A4!$Pv>Y?)SNnqU_GRnGho;m85N zFs#d!KCkaTFzQqyGeV6!k`%**nvxGMk*0wN(=gKFz@_k73oN%p_=+B-b@f7BsAs?ihcZ{eje5wk8jS$_QJuyw?Q+YL}*dMz>xsc!xvei*^?h18f1?bdpQeJHmo z3&}d3h)Q+Se2+mf;P`O{v(w84wJy|)G@s&-?GaEP<#CfK=v;UXiU*41O1ezLt&1F! zjM|2J#kwW!m?FzdgchDQ0j+u*4T2r)VEKD3whf3}Y94LZ`ZBWxcaUe3&9mmz%r5oj z!g?$xV=2g3WHLHCCU8ltD;}KLf>IEXP=mIVL38KyscgY~7ym^#>d4P2P{#xXy-Efo zJ*|F;mM~EgAtcM^N$1_?>|bKPr$@J_+wNsEV84VkA4*wZa#|C2sG@+LGPY4XKHNL+ zem`lZakgMs@S27jIV+=Q!-+doaS#x+Mii+cDeGB4^OHa6sI$j_IrDEHu)4i>;@}T( zM3E|x768^6vgb*~T%nW;3AFs}j7Lkp-~Tekwb!3|;S8e1fIU4T+S_z7(?Ut!zTJ?hC)tfA6+ih0Jww;L3I~}FlNf1?Kn|V^(A@FP3H&wD48~{L+aS8Z7gq$ zgZk(yz{rM8FBnz@BymQZtfEtz-JQ}h{??F&Hsy75ZW!uUKrH}T6M3n#<{rhD@jy~Y z2yD4Ox4qCm`oa47GLM8BPEps7!il_8%Z&uVx*K^##7TJ}QfO%%NG!@ZVSd@%#m?d6 zfG=w;_3uX72w2t53p8sM!G{IYLHjzSWwQo8`}2EoyEHpj{c5KLaGlN?P*k;3aT5y~ zP{T)tGPlwK+nAc17Rznc?Ou9i2;%^`Tn<(7bimNr#aPP@DtYqe$|RuoCZvFuE3ZbF z9BGv+saQL{)~Sbepf1K*CQug+*5kLfr5Jc~b$JtGnSZCT*%`ST?>yCi{HD@lJrQ|x zL*Ak9AW>HX}CJ{d}(-J^RnbJZuEzM%iDDBPP##G%@TMc8qJm3 zgU4xckZt%rVe-+$y}l_kMhq=$x6UC+=PaQCaGha66LYRSr4*9IIXUV;yUJwCT`d-* zm_OO;s`CtspvGn0bHOHkrd&;nrZzEeHtv$Y2A?Yv}W=twpdkb zXL44;o*qBD#4=yRZO@tYa!F=mD>#!+v7>5H(eE38B5q*xW%7=2L~juJyL(8ljwMyW2zJ2{c;eia8Rlf+wZKkc0+ab6yoTUl3oy zv9uhpyn!_%Ps{rup@HtJdeBNS2&#A`NK{=`yo6JT2lDGVF+y+fs9tmR;9u=P|HoX5 ziHTXOLxq;+e;7v*qADH?{tX_j59|~x4JfMop|Lh|#HsLe!&&k>p$- zeqg6qcS;PFE({#1N(dz{S*^&pS5BbfN9a61P?ooE;*v3CH{KT9`f|st4N_H!`Ktnr zelJindoXLnlX9R>ym0P4*#W$T3Fb&18DFe;fm*%Zs}8cV=edN zqVJu44Poov4s>DM#5{B0WC@&okpvX1ha@|{?yIZg{nclkyoc;R9b)i>aj=SMLj&Ey zE1vSQ7Pa&ycJBPEf0qHBh0!Ns-Y?u?&N!rBK3zzdjSIn+)?#5AE-CGKZExpl?ZmFR z4|W?J^{&de=!ClaFU+ArIn9(jLM{uV{C4BF#>Y;zPv4Z^EF|*^*)W6^4Qs{=moLK(;ZtF$m8HYZJ~u*&&_49~HM(FabqZ4y=2 zV#AhhmG@@ocG7e}(0@h2Rh}AD{K#`nA&K_Y{#vbHPPMz%)i!L8`84DU;)+6vpz>nu zDG0Q7qtf;|Az3cFT^-dc(|r5hk_+Xtt1oK=ccapFHc7;ow{JyZB+BLgq-G)Zo3pxa z7oPqUo}7NUZB^U1HU|BHR7lxegdiK6dLywgMv`TmeI~!uz>NKCUUW-DAQjR#1PJEy zfXW|{3rA8QrlI8f*8L6M_L&oyQ0=KKA)j5s-r+2$dft*agCi$@lD{d{$E?sS*v z**&YWd0G%SLVJp!g3{)x_=)AgS7V|M^Q8~F<_72WOmFaGRTm#*XipJM&;#=r@0RS% z4F^R=oVgsn%Bq_w{|g-V>Ro5~%CxSWl6lrKQ|u~EI5JK%^zX}m1B>}+pv58)Mu}fn z`b?5`FUQKgg;Zv$U*I*kV^zI3SCeOs`)pEbJzvKst_@se8}t(%aB>pB=%Oo);+$F z#>^j6%9m7i^3lei|4yIS7Km5wkX}ynpK&8QbyDW>q84WZ$1eJTxYH+g1q405m8LBE zD-tT6k3$m8Z8^cF?A92Mv%S|AN5=%8*0a)dfnd9@l2>ApH+#}PFoQ!}aMLeuQzL)h z*mGp8ed3M?-S<_xQSb>S5{0^Pqq%(LRTDH}XU+=_PvkWiAxd3-s$*y?i5|gpqF`H9 zihdccQ3CSQ6Q-e~Rs9(?MhLvG&t1~8G_9Vm?p1}N$L0#lGcoMBQh9y?G($NDQ|3E( z@nu0*$9D)dGU}+?6-Faqn;khj?p)wGLgJKkpTP~4`8pXz{NPwEO83+~J1Bar!cY$x zOvCr94o7iL<+sbYRqT;icl8zh!cgh4#YpAVE;;a``H?ez$$_usx1(kZPpBr&EYKYz z)gs2WV&v(5TnRPu%rvaO|Ag#h%l+ea7~CH+FnC|0?iGVZz!peUvZH9;p*$!-D<|OI z{SS423i~GdSsmIlWBE1Rfkb^c*mfahl^o?$b(>H)Gx&Y_B!dGDo}~J&&9!FFOy%g_ zg><7}J2sM8f+lQ0hc~`1SM6lKXB+ig*W_D{?qj142yDSLh@V(7aEu_q5=4caYMO}m zd$b9xF;2{_uREBg7w8`mPwVAJR);2aU-!3Kl=%3q!O*ba2Y)Lb1?Zm;&zma{MZ>d~ zvBB|rexO;AdCHZ{M%>1+eIX9Yjt)&o2P){^StG`nSX-NNHMmqgdjuC;ul?(JDO3bu&6kG#e!Sn8C8b!AkG z1IyS}S)%pKpHtCiAfAwq}FPub+z7qk3ov z`U?RmECRTjl!B+fgb~l%+VJbJv0XZTT-3}bt$XP~L?Iw;GFl5-DY8u+ z`I%lRKDMBVu;39~&`ObDLi(Q8O2Zmv9b!YcVsgo)Z9#v&at55~v%_wS&+QZ!Yq+_9 zhHDBTCN%*afJ6D3oU(NH66x+k*WMlO+$(kAkttnusR=|zYlTqF$b&GcNCGmw2^Eiw zOD-SUd#`cjI-n!mw^~U25+K;k*9FMr6MG2|{kA6Q{r?7-#&Z;B0JkEEf zcVt)4LkF(Bnm_;N34QM0x+j+ArT+Te5a9!>A;4otZ3y~9@@jtA_MkZ; zd1@rDo?nw(F&MgQS%Y^$4fb6}gyhx4ESQ-7t6?=KY)4QF60Ck(xFjUg(9?IgU|6lX z=KUUaG59pF;V#70uo{Gg2BAMNujYsl%OO^~n#%pvZRYNcYP{o$#rV13gA@880`qDd zLNaX}`cM99rU>DD1YABGelkkTcinxb|C4#krXO2h=G_``@>in}qES)k-;LBPv0Vrg zPA(hEG^~@In{jxBO&0g`({4s<2Kga&BQ*vKiGfoU)eI@@F=PO92Q03`_3X0KX~6}@ zy1%zo}J8qmGJ)_B={p zK7#eGJaF<;9>=|HlO<)>jv*eusi8DliGZR%5H$;-N?QZ?pZhIxrbh#0|oI`E~p4 zweN~9AL(Or+v2Mz9#PCw4W=e$<_&r6EE z`*%u;fTBNDM?LtOnIua#BW&`{g)To#`(DbM_9=SU3Ph@o8bLFC8U*^E>Z{oyS5Q(M zC833v+i*?0FMItS%^f-2p!3N($%v==Y9w;?Bq|cEjb{`gYk9br3vQT*$lA@QI6HC3 zpvvz_2kZ|RM^1qo&nTkRFbVy|g2bwp+H9gvw(f}U#Tvp>IjvTB3f>3R@t!|-B%)Xl zfySx|js761R^Y~4n+Eos04cm zfeHQewYojZ*45cGxcPujHCj4OM;uWJ6oimU6#6fx36|7?LDqxqcD&Z^t>fW*aU>ClBt9~b&Ed`w^2AYm zP|6FMIwy;9g5zWBAE^|*zF4pAnFG2_&0hgxo<&=*^t4KXtXviRHF8bP{-7eWW6R2_ zovLaU5g_=*Qj~v&W-eWFNo<-Bxbub4o81?ffnk3k78Qj4$g^^}sMefqR7fOv=q?b; z;5yPPYj`z1-1hkF@&-n&T6B!`Kt!IEII3lb#-TrUi4snJVk5S@ipd|F)Z!1x&0n!@ z{OFPypAoT3lw2AJ`lDV5ksLvLT}Tn58=V};vh4lp$dCB<6E9ewLqxq0Vo_k|Pv3_` zQ@+&<^%qGft?WKBvb;Ax`PQ(kdiku#_dx}S^nFM;9YFNo%4vxwX_SmrH0peCpOEMS(!#PgrMtdp#rFArz+$eC8Yg#Mz8;ikN{Uw98B9e@$5|Pgq z^k>dd=Sb$u3APgn#C$Ggm!6XGwZvub^77d^c?a&~4qlJQoYRsFjfEjx1kIU9AOOyY zynwkx6at!aLzd)n@6Q&kYwhf7lVWytm(!TOsBn=2O=bAOSm{K=yk*-(O@vuEcPybAEFQPrUng@W0ka^w+3 zX220mrf!+n@Modaebd0LcUL5S5LL!nROL`1VK8sbYMuz^*Qeezv#Xm!`^M$dONi>rwEUVp5h@B9u`3Wh+z9KVvM$JmL4(kM##$;EX_ z+ct0Re>0$dYFha4$ct6Quh2M{eG@rTh}!GDwm4_fLWXoAO#Jw7%rkLzu*~x7q<*bsdpu;iH`6Hl|;BHMkR=5A|M=y7b3^z^Z&l9YEN{({WK> zDeT{5e$(~~-?l5v1M`3J^CI!{^>=pZKwP1Ms+%XbWaNca~xlH9uCv+ zklVn<&DSM7TKsHEV~6{_=T{ZS*NuhQg@PC(tj4#YSDsuu;8FUnc)f3L%e7U8w-F$i z4adkRO5GaQ{Vi%=;Vj#EvR(3}&#k{YR%JLS0GL$~6d01H7t53Agz(iJ(~u=-Hm$eK zuB9X+E3#)r+?H=<-U^K z+C8AEBLNx*vvSIpA22?=5Eo&HM3EZ_d1Tc+)56YQJsxpd(vjYI}M_3&5 zfNL{0a`X2+^Qi2;qT80ORmD&cAec{jzM}AOKG%`Y3y&bDhA<5WBn>;7Y_M|RuRBg5 z4(pnwRdv$S0fgD&D7o?xayf8l#s5-bn{Jsm*IyeG{xsm0@&2kT4jSj5m^&Y_geQdO z?(PNCSFOh8KNsCz5x3YlEaUIyP74TI8okoW5dAf@Z?6)6JfC6q!|!a0ICM;ub&C_a z)9CdhVa^R2C6ws#SF7Lkm(KUgT))$yT@c&C#HFg-Abn_jCDB|7+npm;UHbAS!GRa|K1=wFqc__*osQZ)a>&}!P13+O(-vZ6bRPY^Q4?$J}i_&@dbD99~m3ZJZ)Dly!ydaw@|t;=#RRnW=hGB zgHTJRy2qC;np|{mY)Z`BHHo#ybVTGPt0qbZ1pTQ_ut?;~;FQ8#&g(ozTIT)+o%g>> zIfF=bf`!o#({JQeV#ptq%D6s?1*OVsgdOJTONV;B*|T82Wu1y@+;!g(MqVY8ek5$` zNw;X0 zV*2+bsnUQeIgvjs_W~6>A#oO)Wsb0ax^Cxl*R+H87Nun%_9Z0;UgC?lg`u7#wr0<(!O5+>Zes(TK zBvQZvAyDW)mcW8(oHa-^PG0)Fo^F}`yMml9g_%W(5yui(G$aoFiD%K=2wn)E%l1?L z+ZMQck#-_JpC_fhoV*^|(B7+04ewf&-qW1;#n%yuXDTpORbcebAw^8Igc2#c*}kH8 zMvMXN`&E2v$3V;>MM4w~{g#m`oPQ3M0gVoJmNXZ@tlMxUwIp=XjuvHQ?>UlGm|MJy@?{l|W7p}=Vv zwd_IM&06}S!;#;mp0RCCT?8pc>3Hy@JxDLC2m@|c>< zCQn7woTf^qA*cTUNfjlQa#Ongai4_2Z7Q9(HTZD(<~nafq{FCSSh`{8pD{u- z--sw-sPd|w(!+Dno6Dwm*KfRKm-?~J*{{4L#EcPw=>owgmcMf55btLGOgv+MAki#Z zGKPKPPKV{F;u?flxor*vGNo*KVu*r;8*U4NG7G#0ubaP3C^TJ={1ZTGia)FgIy&r?&s ziHiNAbnZq}Qe3-{f)Dv^C~0$N8m=C>(!*rxm((H8@6~>t{4`VNZiFJoDhg$1WE$># znR&qI#r^&%wVsV$*llJ9{i0CFv5Mlup*#!NwA7Xnc z{4&p{&Fmi1M}MMQ%$f9JBDCc7k68M0Oy}ir zxV)A(2XrxGD=vLhez-`j+qE_t2Tu*&J#+S|oc!60jxV6gVKp%eMNFsZRCA&{A370I znOPCzf6zI9o~z^b-KTx|8K3@q_Jd5Pnp}Cf(juobfTZSyDvB*nBmk}xFO(4J&jZWi zosTc~dA9O0tHz&gXP^L*8ipzo1?Ha+O>r`}=g2sOXp_TQzq<9_{rs0r>&k02_3Zk0 zqETS*tRn>zY7HU;a>*FDd!W&^)#o-kZQU3BqD03!LJ|L>(`re8N%IkNLwH;%!TQJk zC+5xV;Ib>^&~~4r6Wi}%tR-76Edn~-j0i4Y%vOvwFGQ7t1m4MueMMqk2*JM7Y~u@N z7o*-p>~kJ^zq1G~mM#Zi=>?#3^cCXB1pv8)1pBufOX1tBb2GmwK~GyvQ3Mcx`j75Sh8y_ zR6JRya5@3$G_bnFB}98VKEP%ROSm!gRG{^oA?Cj!1FK6kC2>BDp=?+TM^1>mfh-|I zThZGq6N@bC4K8Wmczo$&9%Bp1(!w%8lysgW6au(_o1a)`s-=y$k2`!e@#OG{tl&9E z{5tH0&JhasQFK3P+}>P-Ak6|)ztNO9US2f#{exED1N;n}i*^m&Ys^?f8glCAbn3gh z{SVtl7|r9W%OnxHveNYAkc-_nw14o_&+}`I{RNP|tBF}CVmi|s)tsYcW(H7+r#Ro3bI=TGVq z1Vw$BMhm1KQ)QE6a5t?bN^W!U3cug`KX7_|-+A)uK|W(AX;G-@l^v3`>FEqFtC<1E z_$ct~!7c(MQfbNa^T(ZS1LJ*tzisgS)T?c15)@umL$Gv1(0QYw=7;Sd3<2-pW!fXm zG(5Iw*;&!WpLbRytcIjX0_6Qg)yvJLK--0Eq^jT=V0`**P# zaCygi9V-V(eICooaUevHx8fr#ads%Tr~(uau8je zU5GM%gdBs;8h1DT>A$Ay)LJ`_oS!CwJYY3B(axDdj%Pkp{lLA!xmB#LN?X!y;qtqz zIeyY5oDt4*UQW?59|&4J`@FMABIQzslWBOQRi`}ZnD^;cgI!vf@$OdY*ymBibh?FV zz0fprB=qUClgW@~b$TcIy|&&|eU4>y$SqXUY1%g`>F`)6_3%53$PxZe)+fatePs(- z`@)_t2_N%WhlN5?)0xVo9!`9Nk-jfartY?)0_@|mVD5$&=ItBp8V9q%9fXygwAiE zHaLH2V~+XT>o0u5rWLGNm;;^s)RZhO%F|f3KLs0nPB<|E;2Wv!4!!T?aiLQ!C)gIBZ*aohOMq_>mBWGwFg^@81sbz1#Kn zwmf!CsKeCCsaaHNJZ`#D5c!iSdCeCtS(x>i%U*8iFPkDrnBBZ&=CJuX+;pWd2n0Mv zRw)o@nn4z2Ub_cP!$t0qdAllNZ$_q6=rFQMQ6O46Unr|hC0ikc>ii==Z1{jc8z&r^ zow@0qql@yb0&@mO1*Zp;W~ImOHoERjXZWLj_=1%Aug^3eQGo!*a+>#%Z)`O>Dx6P8d2 zBj5Psf|w~&2nbVG7I0hW6gg|wV|LeIgVQ_q>Ih3Hj({_JZ7-j-Y3uTu^^ zQBz|m*A5zk&g3LDLrS5*-62_)%zy*)-EY6%+S;{^rNfhRXQAXIHK|e-h!mq&;3blG zY$Z#<@W`Aei7t+6pD-=Gb@KQkeO>{T8lxcIT+oMGBClOSs8*xA{0}~79Yb=Pt{clu z7LU^>2$dR7SVC@o*gla_d_H+X0_t9mOaIC8xU12ymEc9k$i)z<$`aq=6~@Aw~f-nfIC7eN_`@W;Pt zyrUIxK;k7wY{wBsbJRIVxodqFyuP{fgR|L(`@Y!^moe6n)ErRAt8tMj=!}aH3`a?% zB8eF}v9@5K!jbaS?)RDjANkR`5XR#p4DC{I^V>f7iJ8-n{rn zS6(2;nnXdT7YdEF`~f~UgsjqQJKybQy`fvV^uxHb=ROY+Kwc;`;8a>Vk2)$L97RHz z8F<|z0ZAZSiM)EFrla2a%DYQOzZuXxIVs2_>3R1_&{0Pvh;I5y`j@Mm8A5>`1)Y9U zw@c^AlLZad#Xbw0$4J*+teWrX%ve*6ycg*GA=3=DPjQCPni;MyjLz3JAoLtkDb>WBmmLA<08QNnE)10E8X~ngHkG#_g zp&HMpxn?bO-aKd~D}{M%^duf*qc+=ADh%38zFj!Jar5f-<1dw;oISQ-`PSN*C~ek! zPx~nIgxnAbCrqYUP@o3MnVAo|Ume$R>4o8*>~B3kYLBuu6`kRD0SJ>yKSrj=iw_*@$92AZx=vY)bdPiNwyfXT%$sAo7x$o6Cr;QtZSKZ6J zUSYPMGU`eyRm_^8qSul@j1x=p$>S9(QcYj(IqM(1WAnLF#S}{dv8|+`*J2Y)b3=(i zV;XW#2JTNCpSn?2YjlHd#f`sHEH=TjhJ?;6ZbC~z#+&-7M#P=W7X{Dq7W}Ar`dHhw zFK0km+yntga#IoD(dQ_cOeE9{ayzrSL9RnBJ%8_e-}iOR)4z1+Gem_)pA{?+`fS&4 zNBD7L>uJx&ZLhhi!GLKx^qE9Mug9&@XFE=$dRJtu7?xe@(xaNWOS=9_J$hyn#p70~ zvxWkTdVux-{7{MJ__)}npzzj?O<^J1XYN_wqI)JOYdg*ZhA9skq+fhQ_z{yKv*ueohU@a z0YNfwqEWxNt30-0OH2Fr!tObvyY)Zado`5PKv1%@Dd~KXMzBE^K*Ny_s18m{gWZS7 z0Glp%Ev`y#3Vzm^ln1>?BVfqVpkS~#SsF$NS-P=3M-4n(&2jO%impAouk4Fk}N zqcoZxD;49sWT6`Mf!)&vGi9|oNnR0Kmvp$M(obFgf18>Y!if5)=%b2q1K zg)*oJ1f)nx1WZaM6?284&V*)aviO#@hg=bjUQ@Zzv(dO(Cv_z9#q7rp0F$gms*?M2`UM(u(AZgSY7+BNUz6Q3_@Vjq6uEcz%& zrorOv%NZbsdX?GfE^k}Rz5e>myOY5kSP#+OzJ>xzV8cF6?H2R>d)BVrZ1{q_`}23M z966*A9oSG4U~zyQlyyqM%P?Y;r_{aFvr}no<#YebPhFf^MAN$k-L|&~A0_-O$B3LCQjqVzDQVd=Yps3DR_>s;fsK;ZAYOUGl+=Jau~$S6HmKr zgrO9p%rq?PzWRB?uZ>IDZVv({wWe{kw1E(*jTucoGmH?j{Clp*U zYQ{Np^-Qmi@9XS3cXegUmw)mC(E&b~3X6IuSs=!`Id4JwYLh`v20Jcl`|ITkC$xHy zY49-31;zc;2K~XLSxr)UoH=~ycv8W^Sj#Iqm?qI+F^6tk&^=G1A+Lrty|%f*$G*S6 zJ~-TJhJgv%9704`&Z!Cx2>sYP%I2-d=fKhThA(D(HE;JCeNH8jVA(U>M8a?t%1I?DWq6$re?Jh@eGKROzt zO^N0B2Fm`)o6tLihpR`waj1>U$F__Q?dI)$x4P}{a`f>{ix7*u>mDVIkcdPA%{o2f zZWPqA_Y$Kl*YQu>C$tly-CZgjmQ9FYf>8TdFUOsddCZby!S%NPEUadT-h^N(EPlEN zSN@d1pCge;H3NV6C3oNZCr5S%x*zWP<$+x?+D}K2V$pjNAH?t*Ec;ezP_Ua>zq~*jLy^#yBjpkX zP@_Sg^A8C2^?x|3#myeOR$H`vgN}dcMxZyZQ59s>W{1$H$!jm(2%E6%XmOeUYb##b zXi8qA$`RH@kL6}i$&BJGE$@b>Jw=xsu1G)T->G%_%-DJjS&nPaH-lBc&{-uwK%`&k z;E9;56tC%h&-OVw&Z#KP@OX3I4^Wi=0)(X(1dAQ>l7}0V5feg`zK*Td8QXQ9?qIXM zk^S>OXV7*`ixA6B;w1r33_z89aGkC>L4NN& z?&r@;?%km0!cAxwoI-}>oTlP|(Ee(Z`wVihpT$ec?O|E1x7AkkISnGh!nPvDsoDE1 zg%KtrtVI?>64w7oimdYm%{D}Y<#-8&W^H!PiCGmsy7|qM%x@6`>kU93FG(a=d?jyg zsNCmJ2dGMXI+jeV)%=Q;uwZwii?!RMeI=L*i*Y1a@D+hl7=(TYz1+0;#-qA%*QR_9 zEG#>49&H>Eq*%_!1Rwt3Dw>esp1*tN@%1zAtbKdbWQkM4R`mH;n-Ys*^Z{8dkoNR9 zNagWedxd;F`zFQmO)=5VOCqT?_{)%&45gsOX!UXBEqs! zDL5cB$!(SExcfB^R?&b91QLlse=vBcO|=;V%e{T)|7 zI^lM%(ayp;d!e`R1T_myjm45H{78)@f8C@>Y`tLPj^WLNHW?59laIFK5D^wj4!OUn zXIgG+Ty*1izZP?@v9Dh;Mq6?c36^UKUkOJ{PPJkhE*o?{H8&*0cFF93OSQXgX^Os< zpweM6hXfOZo<}w5%Uv8~+D*GO+x~FSSo8)&rNc7XfC=@}7XHx6uEp^mq5{Xx?%vd{<2UqZYbfaKutGS5 z8g)K@T6jOfcvPh2-BNMKsiVrF4lC5p>8yuD{B1&s^ zbiTtOgmL3cii2b^vjdeNxS+o?xbzBF7b-UmN=zxP2%i}HLA-LM!HP&mF8OT^A=zJn z(b;4{UiMBgXIh*Q%66*Xnm5)1eT<&BkMH9gJZUi0WPu=O=^&>y5<`eW%ogb_X04sA zg`)UJV=`D-FTM*09fBh<#O!Dh-o&AB1Q+1h6v$ze-{d>QhH%B?>QUFqQd8zbGR`0b(5+3#nTBy>$MM6 z`Q%lc)n+d^eZ>A9B5CN1xzk%5{MElLeCc|wLi8>YS8aPYiQtKyI6 zLI)3?1_iRvL_cV(8s{MbFFJfl7tn2bvL62|zjJg$Y5O~Or&;+hR+DTmJ0Xaqc|eEXHMy;MJwJc`JXHCVq32JM_S+Wq9h1FuIwkp~hjON;gy zjZOuL5wZ|+qi*KS6^No$cc1dU1Kv?WC@a;}d*HB^qKjX@+$&o>#B{|gMm~e2MI>ah zh<|}h=aGcOB~^Yx2WP)OZn5A}kFV1^%xv^}?u7v8NJ65gN~xr$b5|oVqZUR}k66#nkU+>lR*tfP#-5y%M z_zWd6w3T=_fC|Piqerggt%6#Abcj*_REN??a9Y`1?$tW0fI#?uzw1pxjYst&) z7M0^)oSwU`tgHKrd*2}ki-e#pk`jT=q!to8B!QGxKGY$W8xjSMB!plS+zsZ=4im3D z8|KiOyT7h6l+;2(A_;~>qVs@4VvFs=m4L%BcoLy#icUy%WuUNWVTH(cd$&x%TbCc_ zp#utuoP{E%^Lkp$j|%4r*)~zK2$95t6Rvdx4h?KHI{mlT!W#ZP54CtCI1OD-E2&w! zsOb#4s049{1`Y&O#{%w6*>`75y5k4a$M-YpY+VfnT~sn42yf8oA1UX-1(fFw=kUE0 zzuAO@fV6h485vM^^}~AZn~@U&-f#IHZMuMwP4&}zI@^QII{Id580E$@}ycyVja z@djH@Y;10NeI{(YRWqgsfmYv6DbNH?G>7d9{-G3!uxlno_gpP3jT%gB7n%69xbb1w zw^K?YCuLDd>8$CXQa6eSZXynNt4|1G5xi*rH^-q1t{whnQ*dQTHdNC=rDzmE$N(5r zOd*bPHthJ|l{1+greVUX`QvOKrMrr4KirJYHG{ibljYHYaF2dlCjiEc12&&kZPjAPnHPYuYb67a#lAg)N}%?$?+ z8Rajpv;=N#dgJPV>+edIW`=B=*J5r3;{i;>F%IjSF@0FK@e8R^ zC^z|P1oZ(48HfG67uDKI$I%0F)t!;t_xDV3Tzf}ZB;k}rif>pG15?%3$~Voq(# z+p`a$oN7G)7>+p9MY>mgKF0uN9O|p-#b+Apek9y$G=; z-Z0$h zC4_1@X-&8i0-Kqp@IwfcHaWpDr)Zb`k=R*-y!}4(*KMYe0CZ*|Lo)f>wVv z%AS3n*W^h1(qJeP8JZR{9kxA2&V;9g6oG1daDA_qU7uUe`ROxo&e3PCy7w3gDaP>+ zC!K4H2laRAx~1^$su6d-TV1HEr*Hfy4Q! z{83i|2to{3GnyC?^>pewGPuy;t&vN=peLuNH|p~Xbv2`l8pH0PVMTuF#RI)DB%){@ zX+?~Cvgxj9DSn##r{K&Y4x{VAW^*X$flY)&qdSyYl4; z{Bp0QFJHgg z=8z$NR_#{BX4w5BvrVSM#=JvV7-(WdF#ojK%n5Ee%f0`cnzrfw|Do%3~>(Qu?D{i0_cCIY=X9p8nIIJt7p z`S<3{JGFYdXAU;$7d`uUSW-^_VkW{sSp$#*g)Bx@ruVX$wx?$D<7_rh8T!5*_5>j2 z1%rarpc|Sc^oq=$Jg?gH!KNc!d!N5LbYEUPHt2@tLIFkU(IpZ_OWSzG^2AKnSRp3{ zSl_Zg1PK#F9QoUtjZ?21Z66Wvz0HE}UE}5r--12501rdiLU5hRbOVtK zo`}zq-{e{5?&=(}@ZV2dozXXsyzo!NtpEaOfdeFW1rRDgH$-uKEGs1_R?#oZOaI`t zHK!*e%qiIBZ{z$l8n*%nC}@L-110n55_1qbm{9H;D>9TX=Ck>+s5sKG9Gm+e&zCy} zo1AaCbU4iH(?3GEZOC=nf*9p=VdSR3qMrt0u>0z zEK#JGRZ#Me6^E=u1KZF=YuTv)OaEyObBCJ^#gr&gz<@%32n?y_9Q2CCBq*LAsnDTG zK8rK17}aSPZ&=^*GK=;TYtAV{d?xXcu{1oYIB$oKJN`l;tJ>+<>g{+~C} zX=5vl7I&qsKu@J&B$+iFrO)(1W+tCwf}YNP?b@bnx^-pVp&MS+9aE=pF*O{CKuBGD zgk)s@_bwdwZ&HPc%axcXc0EtK?7}WScJy}=7atT{OytE5k3?lfT6bX&>N+?3RPedf z$D1?GKc}rhiGb30a*5^fg5r4`zM>6a&+M%C#WR)`EDF7y*=fmaR~)gp@nm}P(gKTU zd2P{em=C{<7Jqo;z2x_nlfyBdJa#adEs8?~VpaqXD#;-?|AV{SvZyyM=bn-n`|lst zjEQMctPDVA_&))Ju;2ie4{%vnsF$Sao1Nwzc*F0zYM9>ZWYdSMG2wqH7#y*}f{|%p zDo76nkvPQ@*qnkc-}+bnJJ~4v=8t`;hVB>xQ$aWyh)e?$A{#0-#)XekAC4kryzA34 zAbT16M&Iv8AI#f zA&tQe7evO&=YHP7UaxD?$6m|+W_$7EN4f}O8AEfAhauB4hKQDCriK6wf=u--)7iXd z_OIRVxC+KqI-hpHSjG^^SO_v}BtQi7g|fI5>`(g$;u9pGP@vqmpfd((Z)$HhIefuD zqdn!Hmc1E@sgVG&z!%B_R4QR2V`_yz-6!YlDFy^9l@F3+ek_D?2w~Ts%vD ztE%C+X5gcD7nn=^mpKHC=!NZw1Wmp&6q&Jeh;V_BFXk~vN&o33ed>j_APk!I?%aI8 zVcxp+Yrci-oMVBBokI*j&=y3{Wad1f81d&wfc>t-Nte`xG0Qo>1`N-i*YIWPrA?Te zCln`y;G}CScufL$B2bu%Xl}udaEjt&Pgx zFk5Pnka;tX+D$Tw2xpqkSmmPk*)q}TY~Ri%RgLe;j4(Ijs7<8~3z;`05M!ef;@CWq zqJ*p5$IBFUN}kV5t%&s4#@O9|%q+|e3B-*GP%=viK`fx^ zR@txj4(2DVPla!vBWb^FbYvB#ln}%b3X_FuOk~!5QDP7rsd3YF8?dQC z0gDinYw%#gXpmT;$2XD~nv_l}>LxTK&f~n;X3mA&OB)-GYoF*xTZsxwV#bnr=?U7`3xEii z$o?&jJIg)WF&z)QPV2G5^61%#7M`|t9Wa-kssYKIV;L2Q3XKjp`gO#$@MiVjw)cD5 zXWVYg9An0kDYaodmL!TNLI+cKEq?O6HrzI0iR;N$B`1^GW29DTJeirBAe|$Y3j$0D zf*9$;EjLzdESsfh#dmv*dtvJ#0mn}b_im~C&SfDcb5kuWnLZv&h=(ANFA@sS^)M5T zG#fPH^WAUT6K?(E{n%juCe2X=6q(U%m;~%Srfcx!B}MZcKfg#kvY<$(pbI9Ntqefs z)f@D6Wb>U7eSO;OjNhnR36nG$>z;*TuHH~1N!@x0-FolC=gq5& z*X2cHw;p~x>5K0MqFkup`cvVV;2~Ax?{T+Hw0M_xV4(8iV*tp!BZQU|t<;`u4Be7o z=W}dUci(ZwwrTd5J3`!OQVNbl@+DCTY-T(Q7|voSH-O2L7FcAmr5VIbR~`#o1;82R zQ2j(ilJ)qLCynS<#x)l8>6|#WS2SF31jc58!e#+svw*N!sK7=_bs&|D!Z#lB_dOUc zXVP6azvQ)Re}3}rFizTyIJi2HN-kBSBBl5m5sOGW4_Oscna?2S7Fo_?8}xhiuB^yA zUN!U7`5p`O;NojUj3NkSbxny8J|H9Qw+ZY*i>btHndzPdhqm4|xS#q^w|kInKiXlb znb`zpiO`YaD>sEzWMPmc-MfEHY45aSvrdz~{>5RhmUy{GrUuzqh-|x-_gHcJeBTZa( z8RuAhq?B)K!Zwz@Z-(k&DKGb^`d7O9=Cm3qbe#6~q!DMntbALOms?iZ3@1jUl*()Z z??K2*2ONELMs3E<{Ph-(clSzv6EV3evY)I}W)t{Uh4aZ@BHY0&HaJ4#V|fzg)iyiO z@N}l|C`@^cWmuj zIdDm{4)ARp!KxBKlj19@Vgxy3PrA4m=g;Yrw5RJ(w~*+eD_~z)6$3C7Dfa`gDIdpS zx+RDu!Z`4}9z?Lj-XQD@ax)O>KTh78M1mBDzIEeVd;~=FzCqj^nDd}?^@DvYj!W0zG zN)q@AIdBg?seg&c;L(Hhe)&!Z6PZ(MB#qkf^WplO2re0OFfLGnONvqzF2Z|K^GFd3 zh&+=c?V~AX#tEel1jT07%n0c-Su<;MD<%hA$AHF5X0a?#ryBE%wYfc$!?WUX*-lor z94A{In`7hX7-8vX&#`y3cHlX(xjY`n!HUJP#sC7e_U6$n5uGu~xwOLz?;mf!tq3;w z6gRE4CSlyV2}ATAMop(j6?h)>hV*Y?i%)y`z;?1l!)$%Er>p zo@>ivaoOAmCp$YkdzN(s36semUjkK>xzG1&>A%rux-5!Z|Zk`tL$=8k4TqlO0r zdHV-5c~(xgR`%A85%xd`Y#f1Xa-Fz#JbNogwl&Y%1`rzI2qx1Jj|EVyzyedgf9TdJ zwMF-KTv-|{EY|la|DWeoAr0n{2|!+%@IS2_%`KUr)rF;_wT+FFJ&R@UWaHrE7~$yX zXw9>?1?01>92~4IZLHarPB4s_6b7cQCO-IBO478(F3q`F(;jzOph;MozX_|3q7D+) zNFc0C=pWYRHb6Xi9JW2rD#DRx%eLe>+H!2!j$o@>M_Ac{L?}y34lBaO(#gTj0fGU$ z3BbS+gbDxC*4)aPY3<}-!v!DbSaLa5 z5xfYVlXTi_Y#psEx%Q3`)((z5mYpMy1H+g}VPKNzeVL-NjIPmP?W*pa;nfss5=Il7 zK$3K;M6u#HBA!^nM1C-f<+DXBQ3{Yq8>X#;qaDkJ16I-6(#g@%+R-|~DZ<8vYss~; zwzmaqZE0(1XX6;51TEb=Ftv}a{xsIs8#z@sb+K6?pOgDPFR^s%h$GA;pzavYHkyh2 z+Xl!IAk>-z*3j0$-YUY98^MiWIReGw#Iv!rtsO%3L1)78ry(Y}3w8=xVxis1eRU+r`n5du4Sn+%?rF_aY15`C75IB!N|6CVnv@aqZn<`^VXg=ydu20~3t# ztj$baM;5Kk#;;M914WnqXG7r+7+{RJuNi{S^v1opx7VJ~y6v9&|B3m$gAY*t+c0jw`v^@BcE>i{Ta8thwFbK{rNp zn&j?oUuQH|>92 z+&^S=G5YECu+H!FvGjoCY~N;D*$e+}lZ$bv?-;uo?ds2bZMWL@#gb2+f2G02_}*w@ zGWql2O!pm$ZARFK+tOFC!6P$K3g`&}I;@J}CO|?_ibl`!lMJ(ycpd_R6*rDYY3mZKPD&gUj;Fj^RGImdK7 zUl?I@YG%}^##MRH$lkR1vTwlnY_AO#EV}mV`cv0+&%>kFo>&EqD%qn$*I*oue-^r^ zBKyi>3jWM76R2A&>` zOpde%98U~YIxuHLC9TYdizLBdBF&{FX)wCEbmg%5HtUY)Mg<9qh6t}i+#NQ6GExx` zxSo|CUnCNWP_Q0#*S|0864%$%&GA5O^_DgdAlP|dnnCF^2(a`$p_?!k139KXtH2_C zho;NPy20mqHUz_8UEL9S)QSd_KgL9TwtIZg%&e+YU%6Kr-)^aE;{yXf?EY{oMNPV#UW0>i!5gPvF`;INb?JH20}F{bfUO|@=@oxQ5pqWm>G;oX$s!-a@W?r<2k*ZH;aq71 z^;Rav=?A)>i&9h}v>nHr{>%S*rw%6zGz+|olW#%@x3-6hB&tIgBrWzQ6rgA`;YJzn zf72&U{ATx#Ij3|3ZbPVMI^byobv49LC{}C^sFME%ewOf((E{di$8wSXiV0iIoDPe| zgpYNHncbxiwYNmkCP#rqh$5}WiVk%@1Y?c8qMNl?mY!GuleWVEdSO9~2|QTma{-xx zNKmscE*?#nlWWw^EZ-Pgm(NofS(n@Fg0by2z{;*j7!M`uqR8MH^ln%`t9#Dr51o$d z?)|#15}Kj6deHMugba6nLrGy(-% z?N++6Z_pfZ&S&ds1($uZVAyxqwe}H+C87jr{woSncld%%2RaP!4>9^T^29w|2Utq} z#jZ7S6rkX?X5=j^uCZF(!rE}r@ra7sSh2aE>?e1YgoVPg z`9bu#nI6qr-^dYTC~2(@HBhaXV<$B3HjK4FGuCenv$Xl z(>Gs}_pb-@4sKx|upFxu=m;--t|2i|2o{-E!fCgj))STt7&Ol!GQj$ITDk*F)ZBL1 z*+uw6Pz8ZZQM5$0wrjK-_Ea2Il=si9m$#PBfC*aM5qg;?Un4vgXo7}wS@B@)Q1kTq zV?ss4T9NOYI{IL<*&8Zhl8OzWqpinv|0JH%i}`~?`t&Mp}JEW@FqSUU>au+Xp;w$+UVx|RlW_q5hN0nbZ0 z17jk<^}5aBdfh1Co;Qa+FJJAy-v3_S3EN}O5MEx(tNpwq6f&UP)iPnDd3^uwev0eFragz{`0Q5f6H~uN+#b-e0vX_H{;&C$9_>C2uFe;H4cfC!IWT7zL=u5Qgl~wpyz7dhS)OkY>Id4$9WfgqhJs5y7krk&83}pOth`olN zi1p7it!LdA?{|g|oBIrm29s-g80M32$i~&@LjvDe_gZ6~DtQLOTs4GVGayXJbOj6% zzd1*A|3}F?LG8`J(_jA0hanE>W6T*DghJ=Ru+EKG=sJbHD}P?g}*SyywD+B_d`qz!SVIh9gF9} z+NwYw<9Q)k0|q&1yeO;37rP-VUM#Jfe(?G|SY6f`0-+qWY6NYGM(3YvW3PCpesQe> zf6{KSo1U5UIVz!T-Q(mlCrh+;tMD|To4+y2-sXRNXCT4*;u>@RHfNl+I@lv9*bKE` zi0hjy^?YYd5B<1hyVIp+n)|oz-tMq#FQgRCH=}LFgDJVc5d7AuV_xO=^jUFi4C_+s z%e5`bAo!!-v}haf2(T_N1pR1OwY+j?)ZwptAn5fiXj_PYv2HMgU}0T+ zTYb-I^h%wL_JfPIw%Y|ESlNoUUI_u(6^3B-PCiNQH}UiVK6mMgs5b*LVbT!)O3R;yAp;8mVOSJnzjt}_I$H)p+}-*pex;>*vnw>ZCcD~7(j zlukQ@|8kSuX9%bMXXmIfzfv~s_E}Ok_3GiD@FJX|({>W$Bygc2JRiPnZf>J>==o{mwEu-bwkkkjDJeUQOAWzlw0Yvy z^0?$lw96`iaA=t^{Nt;-V(cRZ3m~p(5tZ=m) zOiJ!Hgz%L9~=#~Gw!8n9cA}f(-`8G_a;Ec6Q*XRf%3+dVGV$MdRf_Pg>XI0 z*i?P3rFQbJBR{V=>E?BW@!V;ptoLPj)VbdfWsP_9-o%!UIlR-vy6VDrGiR9JBXni+ zMA-$05NM^jwJoh1K5@8Fs_wRzR}bui^x*YYv`zR4!@J=S_^yiQ4(B9{#GOvD$NDYe zTEQHFqeJOjM2u<`t~i9PcG?s7ussC}--!#unM+;GU}E;PpcUhZQSXjJ$eP>z7$3Lk z_<$PE<(?G^;EzQ!YR|cM5%d3Nrwu0u$rz+MhhraLk z)BkI(wrczff=0` zXD$KlH^k;3l+FQZoVPz9_a5%O` zt5Kf-f0RaQ1(Co55Q%vb`hp}7zz`;h%|LFgHF_jpz==)Z@;tyLMGCk;71LJq=`TmSi! z^Y6Lea&A>gTTe)*g#xDT&rTo4cLZXSgZ;yQ(m_D=gke7hQs1SGpv+U^V(Eq*Gl~}*4-@(5^vJJ9XPOs2x-@3F=cD*tv^*S<$k0DLld-}`+h}WZFeULq z0l336j|Yw{Pb2}=d=i$#UD!LPzkYk>%MdW7;KYXLus^#;!{Kz0sjGt7wrX0i0K z75p~wk2kXA2$>K;Oc_B;3_-{P$+_z)XD~iSGphoBoDQki<u=eCLH`rucX)sgFw>;kSC;R{l)jLHog5V`$P3)IU$&ugT3z^Z)2rO7r?(GQ(h5{i zE`uO^_~8!vyvKqveqzwfE0za5=QtyGo;XG#jA!}@1>kTDl9k1R|84fa5bOqI(f9Rt60qHR${HwKU@jU@I+mL|d?)W3AHt}IR3JSg|3F8ltxo^C2N z5(bX4xySXHV-(arj47EG98|M+KYfq+O4W0Z0VI5s@kd1mZo(rw6R?FF)^GA`%TK4p zHoBC*-nomtowi*`epEt}w+_;99CJjF|ELh~gNgKq02W_feB$Z3Y5D8cYz%lmXl`u3 zkce{BI!FO6Q~>_*%7}8EgCQT0{hW5$CEkIelqXrMj~b0M=tx^5pLq<`@c2JoloU&> zv=}Kkt3X*RKUTbnCy$3JwbF6Mgo?84eq9eOzfv-A#Zv)o8+!(lBg1~2C-0LeRB zAvsr2flRqWmXlRQ>Adoty#}nxTs$@qb+$s1j)x$8dG$vWBt)=ZU(F1AgutK5)LinEOza$wvi~=t@I8hvF?KY+al+uI?n_%m{3-PT^3QbP#XX7zX-Oev%}HEDh$_Qg}V9ce_bxiNFSbRK5v!)$_JDa ziH!SCLY7S=&XpxVdAoE5=Uc~ys9NtIm4c6l-F%+C!!(e@4kokeGWfDD2$NuXv-ZsY zH?u@5u0^Rql3$F~9kN0AyCYmwg>kqkR@$)XS}5=N9MdtxVVKXAY&d;wXj3 z{&AZDC6{o0Wj0FyI#e;iou{<8DME49qi)yQe{$a3X_;^k+j8z`OjiN8lrjuxfdTyE zL7(4{k1llmX?#SW{o!1Y?yR300rbiMY$1jJ>DfhyJ7IT;Dt}u-Fd551QU^q0wD9Ckj*Y% z7$)JO#wYg0knx)ZSXCCH!!zZAFjmrAr!S z7Gm2Z%ZOEsC$lw;Y-Xh&_hfP8v%9@^0(YocmtQAtS5{Vs?J~!-ra=*`fcfLzos!OQ zl@blT%S5KRZ`TEk;9ie?xLG%Ilk+uhW4hy_s73*i*^gB=*CHNB|A>SV!Vtpuc6u|v zx{b+!!F-*gj0im;rXQ<}a3wJEW!eptK9ooA8u$61b&lHdao(GAk*4EjA0ya+sPW{_ zvn=8XNeME~hC>FQX`7_iJmGl$uVL+qR}jpzG8p-Xxf@6j2e~;s5r+6Nxi+bW+`Q4J zKW-ZT^+?Tog2S8$kj(ziu!KWhG7@C|isCr5eNZvy*oAG|oFa8;2Bqf`s48;B|YvAQY}EP1+qtUB+Qt z$epzc(=b^^G#Y|@f;|&J`vApRnY(ULzmoW<>pOcDRMnpU*PDP~3g` zq}5vNDQU>RTt^jGig1`^dw+sYUy)+jFneb!Q z>+^%+)-E}7f7JO3oqQt#mrE7!HxdIfkS<^b@gwDgYx)IGXEy|-I{KZs`o%eX7;UwZ zuc#PKzWEdslMpNK3;!(t+pGOSJ|S}#t(f22CUZ4``Ggw($8T&=S{agLkg5zy2D?iy zvO!WbA{iE87U6ByemyealY{-RLFHoFX4C|$g!@lYHJcg;gA+BO6aYG-sP*~yNxmI( znfCu)f06F22|dI`f(Ndsq5ny`ToXx@zXL^P)oGml!6NUdXX$rivgcTL|AOh|g&R#~ z$2lk_ju7eEYu%`JLx=bCX#T{#f57_;OvgFYNHUKLf}lN}5jttr`77-?I)`<%#_gTh zt`p|CAb=n)YIy$-P7-4?j0J(C9tZr#Qyowzoe~>7P6DbQWM9`;@c{uNBiY5td;5%8xC7IF zRf!8UESb>`924L&8<8QMmjwlb=C*!XxyC)J!DY(=Otb?>zZ{IrZ~=~V><;!ARx-Y0 z#`d$Ps+dP#hP~oo!UZ_$(U4dE^tCOa013oG;CvHlq8D2iq;mV_cI2(8pbyoGErbgH zAU24C4^;>Vi+}!?m+b`XaCs3dsJtfX!d1o_B3rF&9QE8cnl0OHzqLnWZ)Xim6Ly3v z1P}V+7K7(91#5*6#RPXR7-Hy*nlAGnReULpnq~3I@?84%fwY|{^Hzx|JUn65Te4OP z5aSb%W5*y@)9s1Zo|kL>U1~TuDdas=yb3RQ$aGjJV<4r4kt~KKn_VVCj&yaTSH(D% zHfoOwpYuF1<;S@Fe9rsuy>JU77>5PX3Mt{ZN~y>}E(eaM(Jc~YkI=GrAJ)5@WA>i> zEl@=})yt%ef>ObAi{-IIIF9~VQpKCW4xK96xhS?KY-*-@!BfUSN}DNFg69q^Kcx5t zjMomw_Kg3=}&F3pSifWyzI<`+q;gzt=v>Dm%Lsp1`VYu z11?R2p@+_Ju=%&YdCmKV5qk4m^t*Fis9t3dprBN>dk8onx`bElC6`9tpKO>kVxmR; zP`CQMY3fxw5e`bN3GlQ5zevwkGrH_u@8bQ~OjP!;=z)4`0uN8v{)8-RLWT0v+4gw? zCv&Aii|#Wd=H3DxRO(daNkxc+a<&3N-#*+zE%3G&t5>~wrl6(pUc*_lp}%KK2??dj z+zV8{z_FAmX|-kg@?A;s`Bw~jO&e^hUYRQ)pp+eN@H!mFj`yS5tVNod^?q8SE~O#O zQ`NJhgn&|ZMuPXCICe6`^T#cXdsLqiw%^hFj)0?{9VG-5vl9zS+Czl~5MMB~WSov& z(eR|#g}rCD8=EBj9XmJ#l(M7bAJ7?BZOz{c7kP#K<7km>@@Uvw_3S7ipdt>6m}N{q zydrQ;x9rrxabd;OrK{>#BD=SQaZm)@0tZehEB<&TaPOMY_sypxYrGDweKE*m>NoYQ z;J_)h;R0A9t`Hw=Xzy-gHRtV+moc4(gq#gIJV(6^M}UITqZFn`DdZsLer`W$kLXzO zS8vzkw-PP&M=2qa>r^`E(mn=3pm8!6r{atgL|x-u3J0Ambskw~E2)O6nX9yXh_O&= zbHg>`#5lHQe4h1j?JjZRxl5tO3upYuQg3q;;h=P11@dCSOGO+{)^qyYoxRMUs=fIB zn&pp^{nhU)0u+>1*?HU1G1xFt#n zPy5QxJaDDek)W!;k}FHqiyaXTO2rN$2(QjPvQ~C!rZ-byoZ~92DR+jOWvJ8;1Slx= zUV~Vmtq{hjOI%*vaqj)HR_(XzBvyK!sZj5|;^8Tc1_enQ!?K0o(8ckzr2QJ_{kuv+ zYK}UMJGbVmnfhpu3N+NJ2k;gf$5d?Sn6I`iKC)~iocg$|XszF<2Rwp1R35iMJc$oC zmIrDR@IYHM9Ao$IZ>Vx@Y^VFN%>Jyc$CD`9L3Ot=YEa##m_?|3C-mYH$Ke`Lw|7%I zwz_!oaQM~bwNKAOom*7v44y;I9E~Ql~^(cSl-a2FH?FZcAIH#oa^9V%Km}t$S(eof1MMl&%t> z2p@8BnAGU&q~BLB|8Du&`=g2s)UT2f0!nQ{X$53YA^y&A#Y6q#!J>mLC$w1o-v4y( z#p-QBA{^AN5jetdV%K)~*cRt)U&edc9;yGhcJi;^tPvgowQB^Iw!?8`>+v<>WvF3- z{>82>Kjt-l{LLB>;Gopn2o^?0#`2_hC=o2B9W}EX=d(@Ub=+UKk`JF8*Q`*zwV?(T zrRx^T67XYVS-5r6-ff&&aU#=cSb5c~FK)M1t6w)F9Mm!ex{QM72{@*@2Y$6*<;-@x zI{jogCv`>PZd(TXY7teCAEB=a#OihTSMoGtFtsibq=(3o4VQ&*ge z?u>a1iJ~40M{by35W$a30Bvo6`OE|xUGW=|yYX$L*Q8B*mR;M_%;J
      &zm=0`zT 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 z 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
      +9&eLIqF21uLi`!5D^Cc41TvY@g9B;IV1Z2U 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%0AjCO**A~$3)6{V)~8X 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⪚U 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

      =BbfU_h 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

      (A``6$j6P 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

      Er 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%0AIeNFe5eBN~=oXu$1eB>^C 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

      o8(-7?BW2N!s+G=+Vc?N#pMVIp6az!kYsl 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 k$SWX0BWn2FDs;8~A2lepc>n+a literal 0 HcmV?d00001 diff --git a/.gradle/7.1/fileHashes/fileHashes.lock b/.gradle/7.1/fileHashes/fileHashes.lock new file mode 100644 index 0000000000000000000000000000000000000000..eb57ca165036d746367363a85b32b5715d4354be GIT binary patch literal 17 VcmZRMPUiW}#d=`}0~nNT0{|)A1c(3t literal 0 HcmV?d00001 diff --git a/.gradle/7.1/fileHashes/resourceHashesCache.bin b/.gradle/7.1/fileHashes/resourceHashesCache.bin new file mode 100644 index 0000000000000000000000000000000000000000..7e94d0a0989b69e3b48b4837c2a67df54bd26315 GIT binary patch literal 72559 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 LWJKQ}muCL}$PPYh literal 0 HcmV?d00001 diff --git a/.gradle/checksums/sha1-checksums.bin b/.gradle/checksums/sha1-checksums.bin new file mode 100644 index 0000000000000000000000000000000000000000..89a276ea0634a8d473970f80782586b518b96d92 GIT binary patch literal 27245 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 - 4.0.0 - - - net.techcable.tacospigot - parent - dev-SNAPSHOT - - - net.techcable.tacospigot - api - 1.8.8-R0.2-SNAPSHOT - jar - - TacoSpigot-API - https://github.com/TacoSpigot - An enhanced plugin API for Minecraft servers. - - - - -Xdoclint:none - 1.8 - 1.8 - UTF-8 - - - - - - destroystokyo-releases - https://repo.destroystokyo.com/content/repositories/releases/ - - - destroystokyo-snapshots - https://repo.destroystokyo.com/content/repositories/snapshots/ - - - - - - - spigotmc-public - https://hub.spigotmc.org/nexus/content/groups/public/ - - - - - - net.sf.trove4j - trove4j - 3.0.3 - - provided - - - commons-lang - commons-lang - 2.6 - compile - - - com.googlecode.json-simple - json-simple - 1.1.1 - jar - compile - - - - com.google.guava - guava - 17.0 - compile - - - - com.google.code.gson - gson - 2.9.0 - - - org.avaje - ebean - 2.8.1 - compile - - - org.yaml - snakeyaml - 1.30 - compile - - - net.md-5 - bungeecord-chat - 1.8-SNAPSHOT - jar - compile - - - org.projectlombok - lombok - 1.18.22 - provided - - - - net.openhft - affinity - 3.20.0 - compile - - - - - junit - junit - 4.12 - test - - - org.hamcrest - hamcrest-library - 1.3 - test - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - 3.1 - - - true - - - - - org.codehaus.plexus - plexus-compiler-eclipse - 2.5.0-spigotmc - - - - - org.apache.maven.plugins - maven-shade-plugin - 3.2.3 - - - package - - shade - - - - - - false - - true - - - - - diff --git a/TacoSpigot-Server/deprecation-mappings.at b/TacoSpigot-Server/deprecation-mappings.at deleted file mode 100644 index 5858b48..0000000 --- a/TacoSpigot-Server/deprecation-mappings.at +++ /dev/null @@ -1,62 +0,0 @@ -public+synthetic org/bukkit/Bukkit/getOnlinePlayers()[Lorg/bukkit/entity/Player; -public+synthetic org/bukkit/Server/getOnlinePlayers()[Lorg/bukkit/entity/Player; - -public+synthetic org/bukkit/entity/Damageable/damage(I)V -public+synthetic org/bukkit/entity/Damageable/damage(ILorg/bukkit/entity/Entity;)V -public+synthetic org/bukkit/entity/Damageable/getHealth()I -public+synthetic org/bukkit/entity/Damageable/getMaxHealth()I -public+synthetic org/bukkit/entity/Damageable/setHealth(I)V -public+synthetic org/bukkit/entity/Damageable/setMaxHealth(I)V - -public+synthetic org/bukkit/entity/LivingEntity/getLastDamage()I -public+synthetic org/bukkit/entity/LivingEntity/setLastDamage(I)V - -public+synthetic org/bukkit/entity/Minecart/getDamage()I -public+synthetic org/bukkit/entity/Minecart/setDamage(I)V - -public+synthetic org/bukkit/entity/Projectile/getShooter()Lorg/bukkit/entity/LivingEntity; -public+synthetic org/bukkit/entity/Projectile/setShooter(Lorg/bukkit/entity/LivingEntity;)V - -public+synthetic org/bukkit/event/entity/EntityDamageEvent/getDamage()I -public+synthetic org/bukkit/event/entity/EntityDamageEvent/setDamage(I)V - -public+synthetic org/bukkit/event/entity/EntityRegainHealthEvent/getAmount()I -public+synthetic org/bukkit/event/entity/EntityRegainHealthEvent/setAmount(I)V - -public+synthetic org/bukkit/event/vehicle/VehicleDamageEvent/getDamage()I -public+synthetic org/bukkit/event/vehicle/VehicleDamageEvent/setDamage(I)V - -# CraftBukkit -public+synthetic org/bukkit/craftbukkit/v1_8_R3/CraftServer/getOnlinePlayers()[Lorg/bukkit/entity/Player; - -public+synthetic org/bukkit/craftbukkit/v1_8_R3/entity/CraftArrow/getShooter()Lorg/bukkit/entity/LivingEntity; -public+synthetic org/bukkit/craftbukkit/v1_8_R3/entity/CraftArrow/setShooter(Lorg/bukkit/entity/LivingEntity;)V - -public+synthetic org/bukkit/craftbukkit/v1_8_R3/entity/CraftEnderDragonPart/damage(I)V -public+synthetic org/bukkit/craftbukkit/v1_8_R3/entity/CraftEnderDragonPart/damage(ILorg/bukkit/entity/Entity;)V -public+synthetic org/bukkit/craftbukkit/v1_8_R3/entity/CraftEnderDragonPart/getHealth()I -public+synthetic org/bukkit/craftbukkit/v1_8_R3/entity/CraftEnderDragonPart/getMaxHealth()I -public+synthetic org/bukkit/craftbukkit/v1_8_R3/entity/CraftEnderDragonPart/setHealth(I)V -public+synthetic org/bukkit/craftbukkit/v1_8_R3/entity/CraftEnderDragonPart/setMaxHealth(I)V - - -public+synthetic org/bukkit/craftbukkit/v1_8_R3/entity/CraftFireball/getShooter()Lorg/bukkit/entity/LivingEntity; -public+synthetic org/bukkit/craftbukkit/v1_8_R3/entity/CraftFireball/setShooter(Lorg/bukkit/entity/LivingEntity;)V - -public+synthetic org/bukkit/craftbukkit/v1_8_R3/entity/CraftFish/getShooter()Lorg/bukkit/entity/LivingEntity; -public+synthetic org/bukkit/craftbukkit/v1_8_R3/entity/CraftFish/setShooter(Lorg/bukkit/entity/LivingEntity;)V - -public+synthetic org/bukkit/craftbukkit/v1_8_R3/entity/CraftLivingEntity/damage(I)V -public+synthetic org/bukkit/craftbukkit/v1_8_R3/entity/CraftLivingEntity/damage(ILorg/bukkit/entity/Entity;)V -public+synthetic org/bukkit/craftbukkit/v1_8_R3/entity/CraftLivingEntity/getHealth()I -public+synthetic org/bukkit/craftbukkit/v1_8_R3/entity/CraftLivingEntity/getMaxHealth()I -public+synthetic org/bukkit/craftbukkit/v1_8_R3/entity/CraftLivingEntity/setHealth(I)V -public+synthetic org/bukkit/craftbukkit/v1_8_R3/entity/CraftLivingEntity/setMaxHealth(I)V -public+synthetic org/bukkit/craftbukkit/v1_8_R3/entity/CraftLivingEntity/getLastDamage()I -public+synthetic org/bukkit/craftbukkit/v1_8_R3/entity/CraftLivingEntity/setLastDamage(I)V - -public+synthetic org/bukkit/craftbukkit/v1_8_R3/entity/CraftMinecart/getDamage()I -public+synthetic org/bukkit/craftbukkit/v1_8_R3/entity/CraftMinecart/setDamage(I)V - -public+synthetic org/bukkit/craftbukkit/v1_8_R3/entity/CraftProjectile/getShooter()Lorg/bukkit/entity/LivingEntity; -public+synthetic org/bukkit/craftbukkit/v1_8_R3/entity/CraftProjectile/setShooter(Lorg/bukkit/entity/LivingEntity;)V diff --git a/TacoSpigot-Server/deprecation-mappings.csrg b/TacoSpigot-Server/deprecation-mappings.csrg deleted file mode 100644 index 48bc504..0000000 --- a/TacoSpigot-Server/deprecation-mappings.csrg +++ /dev/null @@ -1,27 +0,0 @@ -org/bukkit/Bukkit _INVALID_getOnlinePlayers ()[Lorg/bukkit/entity/Player; getOnlinePlayers -org/bukkit/Server _INVALID_getOnlinePlayers ()[Lorg/bukkit/entity/Player; getOnlinePlayers - -org/bukkit/entity/Damageable _INVALID_damage (I)V damage -org/bukkit/entity/Damageable _INVALID_damage (ILorg/bukkit/entity/Entity;)V damage -org/bukkit/entity/Damageable _INVALID_getHealth ()I getHealth -org/bukkit/entity/Damageable _INVALID_getMaxHealth ()I getMaxHealth -org/bukkit/entity/Damageable _INVALID_setHealth (I)V setHealth -org/bukkit/entity/Damageable _INVALID_setMaxHealth (I)V setMaxHealth - -org/bukkit/entity/LivingEntity _INVALID_getLastDamage ()I getLastDamage -org/bukkit/entity/LivingEntity _INVALID_setLastDamage (I)V setLastDamage - -org/bukkit/entity/Minecart _INVALID_getDamage ()I getDamage -org/bukkit/entity/Minecart _INVALID_setDamage (I)V setDamage - -org/bukkit/entity/Projectile _INVALID_getShooter ()Lorg/bukkit/entity/LivingEntity; getShooter -org/bukkit/entity/Projectile _INVALID_setShooter (Lorg/bukkit/entity/LivingEntity;)V setShooter - -org/bukkit/event/entity/EntityDamageEvent _INVALID_getDamage ()I getDamage -org/bukkit/event/entity/EntityDamageEvent _INVALID_setDamage (I)V setDamage - -org/bukkit/event/entity/EntityRegainHealthEvent _INVALID_getAmount ()I getAmount -org/bukkit/event/entity/EntityRegainHealthEvent _INVALID_setAmount (I)V setAmount - -org/bukkit/event/vehicle/VehicleDamageEvent _INVALID_getDamage ()I getDamage -org/bukkit/event/vehicle/VehicleDamageEvent _INVALID_setDamage (I)V setDamage diff --git a/TacoSpigot-Server/pom.xml b/TacoSpigot-Server/pom.xml deleted file mode 100644 index 9b14d20..0000000 --- a/TacoSpigot-Server/pom.xml +++ /dev/null @@ -1,306 +0,0 @@ - - 4.0.0 - net.techcable.tacospigot - server - jar - 1.8.8-R0.2-SNAPSHOT - TacoSpigot - https://github.com/TacoSpigot - - - UTF-8 - unknown - 4.11 - 1.8.8 - 1_8_R3 - git-Bukkit- - - - 1.8 - 1.8 - - - - net.techcable.tacospigot - parent - dev-SNAPSHOT - ../pom.xml - - - - - org.projectlombok - lombok - 1.18.22 - provided - - - io.netty - netty-all - 4.1.78.Final - compile - - - org.slf4j - slf4j-api - 1.7.32 - compile - - - net.sf.trove4j - trove4j - 3.0.3 - - - it.unimi.dsi - fastutil - 7.0.12 - - - net.techcable.tacospigot - api - ${project.version} - jar - compile - - - org.spigotmc - minecraft-server - ${minecraft.version}-SNAPSHOT - jar - compile - - - net.sf.jopt-simple - jopt-simple - 3.2 - jar - compile - - - jline - jline - 2.12 - jar - compile - - - org.xerial - sqlite-jdbc - 3.7.2 - jar - compile - - - mysql - mysql-connector-java - 8.0.29 - jar - compile - - - - junit - junit - ${junit.version} - test - - - org.mockito - mockito-core - 1.10.19 - - - it.unimi.dsi - fastutil - 8.1.0 - - - net.jafama - jafama - 2.3.2 - compile - - - org.hamcrest - hamcrest-library - 1.3 - test - - - com.velocitypowered - velocity-native - 1.1.0-SNAPSHOT - - - org.lz4 - lz4-java - 1.8.0 - - - com.github.luben - zstd-jni - 1.5.2-3 - - - org.apache.logging.log4j - log4j-core - 2.17.2 - compile - - - - - - - spigotmc-public - https://hub.spigotmc.org/nexus/content/groups/public/ - - - - destroystokyo - https://papermc.io/repo/repository/maven-public/ - - - - - - install - - - org.apache.maven.plugins - maven-jar-plugin - 2.5 - - true - - - org.bukkit.craftbukkit.Main - CraftBukkit - RELEASE - Bukkit Team - Bukkit - ${api.version} - Bukkit Team - - - - net/bukkit/ - - true - - - - com/bukkit/ - - true - - - - org/bukkit/ - - true - - - - - - - - org.apache.maven.plugins - maven-shade-plugin - 3.2.3 - - - package - - shade - - - ${project.build.directory}/dependency-reduced-pom.xml - - false - - - joptsimple - org.bukkit.craftbukkit.libs.joptsimple - - - jline - org.bukkit.craftbukkit.libs.jline - - - org.ibex - org.bukkit.craftbukkit.libs.org.ibex - - - org.gjt - org.bukkit.craftbukkit.libs.org.gjt - - - org.bukkit.craftbukkit - org.bukkit.craftbukkit.v${minecraft_version} - - org.bukkit.craftbukkit.Main* - - - - net.minecraft.server - net.minecraft.server.v${minecraft_version} - - - - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - 3.8.1 - - - true - - - - - org.codehaus.plexus - plexus-compiler-eclipse - 2.5.0-spigotmc - - - - - org.apache.maven.plugins - maven-surefire-plugin - 2.18 - - ${basedir}/target/test-server - - org/bukkit/craftbukkit/inventory/ItemStack*Test.java - - - - - - diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PacketSplitter.java b/TacoSpigot-Server/src/main/java/net/minecraft/server/PacketSplitter.java deleted file mode 100644 index 1526dd0..0000000 --- a/TacoSpigot-Server/src/main/java/net/minecraft/server/PacketSplitter.java +++ /dev/null @@ -1,58 +0,0 @@ -package net.minecraft.server; - -import io.netty.buffer.ByteBuf; -import io.netty.buffer.Unpooled; -import io.netty.channel.ChannelHandlerContext; -import io.netty.handler.codec.ByteToMessageDecoder; -import io.netty.handler.codec.CorruptedFrameException; -import java.util.List; - -public class PacketSplitter extends ByteToMessageDecoder { - - private final byte[] lenBuf = new byte[3]; // Paper - - public PacketSplitter() { - } - - protected void decode(ChannelHandlerContext channelhandlercontext, ByteBuf bytebuf, List list) throws Exception { - // Paper start - if channel is not active just discard the packet - if (!channelhandlercontext.channel().isActive()) { - bytebuf.skipBytes(bytebuf.readableBytes()); - return; - } - bytebuf.markReaderIndex(); - - // Paper start - reuse temporary length buffer - byte[] abyte = lenBuf; - java.util.Arrays.fill(abyte, (byte) 0); - // Paper end - - for(int var5 = 0; var5 < abyte.length; ++var5) { - if (!bytebuf.isReadable()) { - bytebuf.resetReaderIndex(); - return; - } - - abyte[var5] = bytebuf.readByte(); - if (abyte[var5] >= 0) { - PacketDataSerializer var6 = new PacketDataSerializer(Unpooled.wrappedBuffer(abyte)); - - try { - int var7 = var6.e(); - if (bytebuf.readableBytes() < var7) { - bytebuf.resetReaderIndex(); - return; - } - - list.add(bytebuf.readBytes(var7)); - } finally { - var6.release(); - } - - return; - } - } - - throw new CorruptedFrameException("length wider than 21-bit"); - } -} \ No newline at end of file diff --git a/TacoSpigot-API/.gitignore b/eSpigot-API/.gitignore similarity index 100% rename from TacoSpigot-API/.gitignore rename to eSpigot-API/.gitignore diff --git a/eSpigot-API/build.gradle.kts b/eSpigot-API/build.gradle.kts new file mode 100644 index 0000000..a1175d0 --- /dev/null +++ b/eSpigot-API/build.gradle.kts @@ -0,0 +1,80 @@ +plugins { + java + `java-library` +} + +repositories { + mavenCentral() + gradlePluginPortal() + maven(url = "https://libraries.minecraft.net") + maven(url = "https://oss.sonatype.org/content/groups/public") + maven(url = "https://hub.spigotmc.org/nexus/content/groups/public") +} + +java { + withSourcesJar() + withJavadocJar() +} + +group = "com.elevatemc.espigot" +version = "1.8.8-R0.1-SNAPSHOT" + +dependencies { + java { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + api("commons-lang:commons-lang:2.6") + api("org.avaje:ebean:2.8.1") + api("com.googlecode.json-simple:json-simple:1.1.1") + api("org.yaml:snakeyaml:1.30") + api("net.md-5:bungeecord-chat:1.8-SNAPSHOT") + compileOnlyApi("net.sf.trove4j:trove4j:3.0.3") // provided by server + + // bundled with Minecraft, should be kept in sync + api("com.google.guava:guava:17.0") + api("com.google.code.gson:gson:2.2.4") + + // testing + testImplementation("junit:junit:4.12") + testImplementation("org.hamcrest:hamcrest-library:1.3") + testImplementation("net.sf.trove4j:trove4j:3.0.3") // required by tests +} + +tasks { + val generateApiVersioningFile by registering { + inputs.property("version", project.version) + val pomProps = layout.buildDirectory.file("pom.properties") + outputs.file(pomProps) + doLast { + pomProps.get().asFile.writeText("version=${project.version}") + } + } + + jar { + from(generateApiVersioningFile.map { it.outputs.files.singleFile }) { + into("META-INF/maven/${project.group}/${project.name.toLowerCase()}") + } + + manifest { + attributes( + "Automatic-Module-Name" to "org.bukkit" + ) + } + } + + withType { + (options as StandardJavadocDocletOptions).let { + // hide warnings + it.addStringOption("Xdoclint:none", "-quiet") + + it.links( + "https://guava.dev/releases/21.0/api/docs/", + "https://javadoc.io/doc/org.yaml/snakeyaml/1.28/", + "https://javadoc.io/doc/org.jetbrains/annotations-java5/21.0.1/", + "https://javadoc.io/doc/net.md-5/bungeecord-chat/1.16-R0.4/", + ) + } + } +} \ No newline at end of file diff --git a/TacoSpigot-API/src/main/java/co/aikar/timings/FullServerTickHandler.java b/eSpigot-API/src/main/java/co/aikar/timings/FullServerTickHandler.java similarity index 100% rename from TacoSpigot-API/src/main/java/co/aikar/timings/FullServerTickHandler.java rename to eSpigot-API/src/main/java/co/aikar/timings/FullServerTickHandler.java diff --git a/TacoSpigot-API/src/main/java/co/aikar/timings/NullTimingHandler.java b/eSpigot-API/src/main/java/co/aikar/timings/NullTimingHandler.java similarity index 100% rename from TacoSpigot-API/src/main/java/co/aikar/timings/NullTimingHandler.java rename to eSpigot-API/src/main/java/co/aikar/timings/NullTimingHandler.java diff --git a/TacoSpigot-API/src/main/java/co/aikar/timings/TimedEventExecutor.java b/eSpigot-API/src/main/java/co/aikar/timings/TimedEventExecutor.java similarity index 100% rename from TacoSpigot-API/src/main/java/co/aikar/timings/TimedEventExecutor.java rename to eSpigot-API/src/main/java/co/aikar/timings/TimedEventExecutor.java diff --git a/TacoSpigot-API/src/main/java/co/aikar/timings/Timing.java b/eSpigot-API/src/main/java/co/aikar/timings/Timing.java similarity index 100% rename from TacoSpigot-API/src/main/java/co/aikar/timings/Timing.java rename to eSpigot-API/src/main/java/co/aikar/timings/Timing.java diff --git a/TacoSpigot-API/src/main/java/co/aikar/timings/TimingData.java b/eSpigot-API/src/main/java/co/aikar/timings/TimingData.java similarity index 100% rename from TacoSpigot-API/src/main/java/co/aikar/timings/TimingData.java rename to eSpigot-API/src/main/java/co/aikar/timings/TimingData.java diff --git a/TacoSpigot-API/src/main/java/co/aikar/timings/TimingHandler.java b/eSpigot-API/src/main/java/co/aikar/timings/TimingHandler.java similarity index 100% rename from TacoSpigot-API/src/main/java/co/aikar/timings/TimingHandler.java rename to eSpigot-API/src/main/java/co/aikar/timings/TimingHandler.java diff --git a/TacoSpigot-API/src/main/java/co/aikar/timings/TimingHistory.java b/eSpigot-API/src/main/java/co/aikar/timings/TimingHistory.java similarity index 100% rename from TacoSpigot-API/src/main/java/co/aikar/timings/TimingHistory.java rename to eSpigot-API/src/main/java/co/aikar/timings/TimingHistory.java diff --git a/TacoSpigot-API/src/main/java/co/aikar/timings/TimingHistoryEntry.java b/eSpigot-API/src/main/java/co/aikar/timings/TimingHistoryEntry.java similarity index 100% rename from TacoSpigot-API/src/main/java/co/aikar/timings/TimingHistoryEntry.java rename to eSpigot-API/src/main/java/co/aikar/timings/TimingHistoryEntry.java diff --git a/TacoSpigot-API/src/main/java/co/aikar/timings/TimingIdentifier.java b/eSpigot-API/src/main/java/co/aikar/timings/TimingIdentifier.java similarity index 100% rename from TacoSpigot-API/src/main/java/co/aikar/timings/TimingIdentifier.java rename to eSpigot-API/src/main/java/co/aikar/timings/TimingIdentifier.java diff --git a/TacoSpigot-API/src/main/java/co/aikar/timings/Timings.java b/eSpigot-API/src/main/java/co/aikar/timings/Timings.java similarity index 100% rename from TacoSpigot-API/src/main/java/co/aikar/timings/Timings.java rename to eSpigot-API/src/main/java/co/aikar/timings/Timings.java diff --git a/TacoSpigot-API/src/main/java/co/aikar/timings/TimingsCommand.java b/eSpigot-API/src/main/java/co/aikar/timings/TimingsCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/co/aikar/timings/TimingsCommand.java rename to eSpigot-API/src/main/java/co/aikar/timings/TimingsCommand.java diff --git a/TacoSpigot-API/src/main/java/co/aikar/timings/TimingsExport.java b/eSpigot-API/src/main/java/co/aikar/timings/TimingsExport.java similarity index 100% rename from TacoSpigot-API/src/main/java/co/aikar/timings/TimingsExport.java rename to eSpigot-API/src/main/java/co/aikar/timings/TimingsExport.java diff --git a/TacoSpigot-API/src/main/java/co/aikar/timings/TimingsManager.java b/eSpigot-API/src/main/java/co/aikar/timings/TimingsManager.java similarity index 100% rename from TacoSpigot-API/src/main/java/co/aikar/timings/TimingsManager.java rename to eSpigot-API/src/main/java/co/aikar/timings/TimingsManager.java diff --git a/TacoSpigot-API/src/main/java/co/aikar/timings/UnsafeTimingHandler.java b/eSpigot-API/src/main/java/co/aikar/timings/UnsafeTimingHandler.java similarity index 100% rename from TacoSpigot-API/src/main/java/co/aikar/timings/UnsafeTimingHandler.java rename to eSpigot-API/src/main/java/co/aikar/timings/UnsafeTimingHandler.java diff --git a/TacoSpigot-API/src/main/java/co/aikar/util/JSONUtil.java b/eSpigot-API/src/main/java/co/aikar/util/JSONUtil.java similarity index 100% rename from TacoSpigot-API/src/main/java/co/aikar/util/JSONUtil.java rename to eSpigot-API/src/main/java/co/aikar/util/JSONUtil.java diff --git a/TacoSpigot-API/src/main/java/co/aikar/util/LoadingIntMap.java b/eSpigot-API/src/main/java/co/aikar/util/LoadingIntMap.java similarity index 100% rename from TacoSpigot-API/src/main/java/co/aikar/util/LoadingIntMap.java rename to eSpigot-API/src/main/java/co/aikar/util/LoadingIntMap.java diff --git a/TacoSpigot-API/src/main/java/co/aikar/util/LoadingMap.java b/eSpigot-API/src/main/java/co/aikar/util/LoadingMap.java similarity index 100% rename from TacoSpigot-API/src/main/java/co/aikar/util/LoadingMap.java rename to eSpigot-API/src/main/java/co/aikar/util/LoadingMap.java diff --git a/TacoSpigot-API/src/main/java/co/aikar/util/MRUMapCache.java b/eSpigot-API/src/main/java/co/aikar/util/MRUMapCache.java similarity index 100% rename from TacoSpigot-API/src/main/java/co/aikar/util/MRUMapCache.java rename to eSpigot-API/src/main/java/co/aikar/util/MRUMapCache.java diff --git a/TacoSpigot-API/src/main/java/net/techcable/tacospigot/event/entity/ArrowCollideEvent.java b/eSpigot-API/src/main/java/net/techcable/tacospigot/event/entity/ArrowCollideEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/net/techcable/tacospigot/event/entity/ArrowCollideEvent.java rename to eSpigot-API/src/main/java/net/techcable/tacospigot/event/entity/ArrowCollideEvent.java diff --git a/TacoSpigot-API/src/main/java/net/techcable/tacospigot/event/entity/ChunkSnapshot.java b/eSpigot-API/src/main/java/net/techcable/tacospigot/event/entity/ChunkSnapshot.java similarity index 100% rename from TacoSpigot-API/src/main/java/net/techcable/tacospigot/event/entity/ChunkSnapshot.java rename to eSpigot-API/src/main/java/net/techcable/tacospigot/event/entity/ChunkSnapshot.java diff --git a/TacoSpigot-API/src/main/java/net/techcable/tacospigot/event/entity/SpawnerPreSpawnEvent.java b/eSpigot-API/src/main/java/net/techcable/tacospigot/event/entity/SpawnerPreSpawnEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/net/techcable/tacospigot/event/entity/SpawnerPreSpawnEvent.java rename to eSpigot-API/src/main/java/net/techcable/tacospigot/event/entity/SpawnerPreSpawnEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/Achievement.java b/eSpigot-API/src/main/java/org/bukkit/Achievement.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/Achievement.java rename to eSpigot-API/src/main/java/org/bukkit/Achievement.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/Art.java b/eSpigot-API/src/main/java/org/bukkit/Art.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/Art.java rename to eSpigot-API/src/main/java/org/bukkit/Art.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/BanEntry.java b/eSpigot-API/src/main/java/org/bukkit/BanEntry.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/BanEntry.java rename to eSpigot-API/src/main/java/org/bukkit/BanEntry.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/BanList.java b/eSpigot-API/src/main/java/org/bukkit/BanList.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/BanList.java rename to eSpigot-API/src/main/java/org/bukkit/BanList.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/BlockChangeDelegate.java b/eSpigot-API/src/main/java/org/bukkit/BlockChangeDelegate.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/BlockChangeDelegate.java rename to eSpigot-API/src/main/java/org/bukkit/BlockChangeDelegate.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/Bukkit.java b/eSpigot-API/src/main/java/org/bukkit/Bukkit.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/Bukkit.java rename to eSpigot-API/src/main/java/org/bukkit/Bukkit.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/ChatColor.java b/eSpigot-API/src/main/java/org/bukkit/ChatColor.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/ChatColor.java rename to eSpigot-API/src/main/java/org/bukkit/ChatColor.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/Chunk.java b/eSpigot-API/src/main/java/org/bukkit/Chunk.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/Chunk.java rename to eSpigot-API/src/main/java/org/bukkit/Chunk.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/ChunkSnapshot.java b/eSpigot-API/src/main/java/org/bukkit/ChunkSnapshot.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/ChunkSnapshot.java rename to eSpigot-API/src/main/java/org/bukkit/ChunkSnapshot.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/CoalType.java b/eSpigot-API/src/main/java/org/bukkit/CoalType.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/CoalType.java rename to eSpigot-API/src/main/java/org/bukkit/CoalType.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/Color.java b/eSpigot-API/src/main/java/org/bukkit/Color.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/Color.java rename to eSpigot-API/src/main/java/org/bukkit/Color.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/CropState.java b/eSpigot-API/src/main/java/org/bukkit/CropState.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/CropState.java rename to eSpigot-API/src/main/java/org/bukkit/CropState.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/Difficulty.java b/eSpigot-API/src/main/java/org/bukkit/Difficulty.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/Difficulty.java rename to eSpigot-API/src/main/java/org/bukkit/Difficulty.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/DyeColor.java b/eSpigot-API/src/main/java/org/bukkit/DyeColor.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/DyeColor.java rename to eSpigot-API/src/main/java/org/bukkit/DyeColor.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/Effect.java b/eSpigot-API/src/main/java/org/bukkit/Effect.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/Effect.java rename to eSpigot-API/src/main/java/org/bukkit/Effect.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/EntityEffect.java b/eSpigot-API/src/main/java/org/bukkit/EntityEffect.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/EntityEffect.java rename to eSpigot-API/src/main/java/org/bukkit/EntityEffect.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/FireworkEffect.java b/eSpigot-API/src/main/java/org/bukkit/FireworkEffect.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/FireworkEffect.java rename to eSpigot-API/src/main/java/org/bukkit/FireworkEffect.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/GameMode.java b/eSpigot-API/src/main/java/org/bukkit/GameMode.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/GameMode.java rename to eSpigot-API/src/main/java/org/bukkit/GameMode.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/GrassSpecies.java b/eSpigot-API/src/main/java/org/bukkit/GrassSpecies.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/GrassSpecies.java rename to eSpigot-API/src/main/java/org/bukkit/GrassSpecies.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/Instrument.java b/eSpigot-API/src/main/java/org/bukkit/Instrument.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/Instrument.java rename to eSpigot-API/src/main/java/org/bukkit/Instrument.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/Location.java b/eSpigot-API/src/main/java/org/bukkit/Location.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/Location.java rename to eSpigot-API/src/main/java/org/bukkit/Location.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/Material.java b/eSpigot-API/src/main/java/org/bukkit/Material.java similarity index 98% rename from TacoSpigot-API/src/main/java/org/bukkit/Material.java rename to eSpigot-API/src/main/java/org/bukkit/Material.java index 80529dc..18087e0 100644 --- a/TacoSpigot-API/src/main/java/org/bukkit/Material.java +++ b/eSpigot-API/src/main/java/org/bukkit/Material.java @@ -461,7 +461,7 @@ public enum Material { private final Constructor ctor; private static Material[] byId = new Material[383]; private final static Map BY_NAME = Maps.newHashMap(); - private final int maxStack; + private int maxStack; // PandaSpigot - Make non-final private final short durability; private Material(final int id) { @@ -516,6 +516,21 @@ public enum Material { return maxStack; } + // PandaSpigot start - Add setMaxStackSize() + /** + * Sets the maximum amount of this material that can be held in a stack. + *

      + * This method is for internal use only. Use at your own risk. + * + * @param maxStack The new maximum stack size for this material. + * @deprecated For internal use only. + */ + @Deprecated + public void setMaxStackSize(int maxStack) { + this.maxStack = maxStack; + } + // PandaSpigot end + /** * Gets the maximum durability of this material * diff --git a/TacoSpigot-API/src/main/java/org/bukkit/NetherWartsState.java b/eSpigot-API/src/main/java/org/bukkit/NetherWartsState.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/NetherWartsState.java rename to eSpigot-API/src/main/java/org/bukkit/NetherWartsState.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/Note.java b/eSpigot-API/src/main/java/org/bukkit/Note.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/Note.java rename to eSpigot-API/src/main/java/org/bukkit/Note.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/OfflinePlayer.java b/eSpigot-API/src/main/java/org/bukkit/OfflinePlayer.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/OfflinePlayer.java rename to eSpigot-API/src/main/java/org/bukkit/OfflinePlayer.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/PortalType.java b/eSpigot-API/src/main/java/org/bukkit/PortalType.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/PortalType.java rename to eSpigot-API/src/main/java/org/bukkit/PortalType.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/Rotation.java b/eSpigot-API/src/main/java/org/bukkit/Rotation.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/Rotation.java rename to eSpigot-API/src/main/java/org/bukkit/Rotation.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/SandstoneType.java b/eSpigot-API/src/main/java/org/bukkit/SandstoneType.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/SandstoneType.java rename to eSpigot-API/src/main/java/org/bukkit/SandstoneType.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/Server.java b/eSpigot-API/src/main/java/org/bukkit/Server.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/Server.java rename to eSpigot-API/src/main/java/org/bukkit/Server.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/SkullType.java b/eSpigot-API/src/main/java/org/bukkit/SkullType.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/SkullType.java rename to eSpigot-API/src/main/java/org/bukkit/SkullType.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/Sound.java b/eSpigot-API/src/main/java/org/bukkit/Sound.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/Sound.java rename to eSpigot-API/src/main/java/org/bukkit/Sound.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/Statistic.java b/eSpigot-API/src/main/java/org/bukkit/Statistic.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/Statistic.java rename to eSpigot-API/src/main/java/org/bukkit/Statistic.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/TravelAgent.java b/eSpigot-API/src/main/java/org/bukkit/TravelAgent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/TravelAgent.java rename to eSpigot-API/src/main/java/org/bukkit/TravelAgent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/TreeSpecies.java b/eSpigot-API/src/main/java/org/bukkit/TreeSpecies.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/TreeSpecies.java rename to eSpigot-API/src/main/java/org/bukkit/TreeSpecies.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/TreeType.java b/eSpigot-API/src/main/java/org/bukkit/TreeType.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/TreeType.java rename to eSpigot-API/src/main/java/org/bukkit/TreeType.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/UnsafeValues.java b/eSpigot-API/src/main/java/org/bukkit/UnsafeValues.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/UnsafeValues.java rename to eSpigot-API/src/main/java/org/bukkit/UnsafeValues.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/Utility.java b/eSpigot-API/src/main/java/org/bukkit/Utility.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/Utility.java rename to eSpigot-API/src/main/java/org/bukkit/Utility.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/Warning.java b/eSpigot-API/src/main/java/org/bukkit/Warning.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/Warning.java rename to eSpigot-API/src/main/java/org/bukkit/Warning.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/WeatherType.java b/eSpigot-API/src/main/java/org/bukkit/WeatherType.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/WeatherType.java rename to eSpigot-API/src/main/java/org/bukkit/WeatherType.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/World.java b/eSpigot-API/src/main/java/org/bukkit/World.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/World.java rename to eSpigot-API/src/main/java/org/bukkit/World.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/WorldBorder.java b/eSpigot-API/src/main/java/org/bukkit/WorldBorder.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/WorldBorder.java rename to eSpigot-API/src/main/java/org/bukkit/WorldBorder.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/WorldCreator.java b/eSpigot-API/src/main/java/org/bukkit/WorldCreator.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/WorldCreator.java rename to eSpigot-API/src/main/java/org/bukkit/WorldCreator.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/WorldType.java b/eSpigot-API/src/main/java/org/bukkit/WorldType.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/WorldType.java rename to eSpigot-API/src/main/java/org/bukkit/WorldType.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/block/Banner.java b/eSpigot-API/src/main/java/org/bukkit/block/Banner.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/block/Banner.java rename to eSpigot-API/src/main/java/org/bukkit/block/Banner.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/block/Beacon.java b/eSpigot-API/src/main/java/org/bukkit/block/Beacon.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/block/Beacon.java rename to eSpigot-API/src/main/java/org/bukkit/block/Beacon.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/block/Biome.java b/eSpigot-API/src/main/java/org/bukkit/block/Biome.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/block/Biome.java rename to eSpigot-API/src/main/java/org/bukkit/block/Biome.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/block/Block.java b/eSpigot-API/src/main/java/org/bukkit/block/Block.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/block/Block.java rename to eSpigot-API/src/main/java/org/bukkit/block/Block.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/block/BlockFace.java b/eSpigot-API/src/main/java/org/bukkit/block/BlockFace.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/block/BlockFace.java rename to eSpigot-API/src/main/java/org/bukkit/block/BlockFace.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/block/BlockState.java b/eSpigot-API/src/main/java/org/bukkit/block/BlockState.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/block/BlockState.java rename to eSpigot-API/src/main/java/org/bukkit/block/BlockState.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/block/BrewingStand.java b/eSpigot-API/src/main/java/org/bukkit/block/BrewingStand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/block/BrewingStand.java rename to eSpigot-API/src/main/java/org/bukkit/block/BrewingStand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/block/Chest.java b/eSpigot-API/src/main/java/org/bukkit/block/Chest.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/block/Chest.java rename to eSpigot-API/src/main/java/org/bukkit/block/Chest.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/block/CommandBlock.java b/eSpigot-API/src/main/java/org/bukkit/block/CommandBlock.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/block/CommandBlock.java rename to eSpigot-API/src/main/java/org/bukkit/block/CommandBlock.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/block/ContainerBlock.java b/eSpigot-API/src/main/java/org/bukkit/block/ContainerBlock.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/block/ContainerBlock.java rename to eSpigot-API/src/main/java/org/bukkit/block/ContainerBlock.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/block/CreatureSpawner.java b/eSpigot-API/src/main/java/org/bukkit/block/CreatureSpawner.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/block/CreatureSpawner.java rename to eSpigot-API/src/main/java/org/bukkit/block/CreatureSpawner.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/block/Dispenser.java b/eSpigot-API/src/main/java/org/bukkit/block/Dispenser.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/block/Dispenser.java rename to eSpigot-API/src/main/java/org/bukkit/block/Dispenser.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/block/DoubleChest.java b/eSpigot-API/src/main/java/org/bukkit/block/DoubleChest.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/block/DoubleChest.java rename to eSpigot-API/src/main/java/org/bukkit/block/DoubleChest.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/block/Dropper.java b/eSpigot-API/src/main/java/org/bukkit/block/Dropper.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/block/Dropper.java rename to eSpigot-API/src/main/java/org/bukkit/block/Dropper.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/block/Furnace.java b/eSpigot-API/src/main/java/org/bukkit/block/Furnace.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/block/Furnace.java rename to eSpigot-API/src/main/java/org/bukkit/block/Furnace.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/block/Hopper.java b/eSpigot-API/src/main/java/org/bukkit/block/Hopper.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/block/Hopper.java rename to eSpigot-API/src/main/java/org/bukkit/block/Hopper.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/block/Jukebox.java b/eSpigot-API/src/main/java/org/bukkit/block/Jukebox.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/block/Jukebox.java rename to eSpigot-API/src/main/java/org/bukkit/block/Jukebox.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/block/NoteBlock.java b/eSpigot-API/src/main/java/org/bukkit/block/NoteBlock.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/block/NoteBlock.java rename to eSpigot-API/src/main/java/org/bukkit/block/NoteBlock.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/block/PistonMoveReaction.java b/eSpigot-API/src/main/java/org/bukkit/block/PistonMoveReaction.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/block/PistonMoveReaction.java rename to eSpigot-API/src/main/java/org/bukkit/block/PistonMoveReaction.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/block/Sign.java b/eSpigot-API/src/main/java/org/bukkit/block/Sign.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/block/Sign.java rename to eSpigot-API/src/main/java/org/bukkit/block/Sign.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/block/Skull.java b/eSpigot-API/src/main/java/org/bukkit/block/Skull.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/block/Skull.java rename to eSpigot-API/src/main/java/org/bukkit/block/Skull.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/block/banner/Pattern.java b/eSpigot-API/src/main/java/org/bukkit/block/banner/Pattern.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/block/banner/Pattern.java rename to eSpigot-API/src/main/java/org/bukkit/block/banner/Pattern.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/block/banner/PatternType.java b/eSpigot-API/src/main/java/org/bukkit/block/banner/PatternType.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/block/banner/PatternType.java rename to eSpigot-API/src/main/java/org/bukkit/block/banner/PatternType.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/BlockCommandSender.java b/eSpigot-API/src/main/java/org/bukkit/command/BlockCommandSender.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/BlockCommandSender.java rename to eSpigot-API/src/main/java/org/bukkit/command/BlockCommandSender.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/Command.java b/eSpigot-API/src/main/java/org/bukkit/command/Command.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/Command.java rename to eSpigot-API/src/main/java/org/bukkit/command/Command.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/CommandException.java b/eSpigot-API/src/main/java/org/bukkit/command/CommandException.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/CommandException.java rename to eSpigot-API/src/main/java/org/bukkit/command/CommandException.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/CommandExecutor.java b/eSpigot-API/src/main/java/org/bukkit/command/CommandExecutor.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/CommandExecutor.java rename to eSpigot-API/src/main/java/org/bukkit/command/CommandExecutor.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/CommandMap.java b/eSpigot-API/src/main/java/org/bukkit/command/CommandMap.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/CommandMap.java rename to eSpigot-API/src/main/java/org/bukkit/command/CommandMap.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/CommandSender.java b/eSpigot-API/src/main/java/org/bukkit/command/CommandSender.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/CommandSender.java rename to eSpigot-API/src/main/java/org/bukkit/command/CommandSender.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/ConsoleCommandSender.java b/eSpigot-API/src/main/java/org/bukkit/command/ConsoleCommandSender.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/ConsoleCommandSender.java rename to eSpigot-API/src/main/java/org/bukkit/command/ConsoleCommandSender.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/FormattedCommandAlias.java b/eSpigot-API/src/main/java/org/bukkit/command/FormattedCommandAlias.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/FormattedCommandAlias.java rename to eSpigot-API/src/main/java/org/bukkit/command/FormattedCommandAlias.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/MultipleCommandAlias.java b/eSpigot-API/src/main/java/org/bukkit/command/MultipleCommandAlias.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/MultipleCommandAlias.java rename to eSpigot-API/src/main/java/org/bukkit/command/MultipleCommandAlias.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/PluginCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/PluginCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/PluginCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/PluginCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/PluginCommandYamlParser.java b/eSpigot-API/src/main/java/org/bukkit/command/PluginCommandYamlParser.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/PluginCommandYamlParser.java rename to eSpigot-API/src/main/java/org/bukkit/command/PluginCommandYamlParser.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/PluginIdentifiableCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/PluginIdentifiableCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/PluginIdentifiableCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/PluginIdentifiableCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/ProxiedCommandSender.java b/eSpigot-API/src/main/java/org/bukkit/command/ProxiedCommandSender.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/ProxiedCommandSender.java rename to eSpigot-API/src/main/java/org/bukkit/command/ProxiedCommandSender.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/RemoteConsoleCommandSender.java b/eSpigot-API/src/main/java/org/bukkit/command/RemoteConsoleCommandSender.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/RemoteConsoleCommandSender.java rename to eSpigot-API/src/main/java/org/bukkit/command/RemoteConsoleCommandSender.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/SimpleCommandMap.java b/eSpigot-API/src/main/java/org/bukkit/command/SimpleCommandMap.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/SimpleCommandMap.java rename to eSpigot-API/src/main/java/org/bukkit/command/SimpleCommandMap.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/TabCommandExecutor.java b/eSpigot-API/src/main/java/org/bukkit/command/TabCommandExecutor.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/TabCommandExecutor.java rename to eSpigot-API/src/main/java/org/bukkit/command/TabCommandExecutor.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/TabCompleter.java b/eSpigot-API/src/main/java/org/bukkit/command/TabCompleter.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/TabCompleter.java rename to eSpigot-API/src/main/java/org/bukkit/command/TabCompleter.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/TabExecutor.java b/eSpigot-API/src/main/java/org/bukkit/command/TabExecutor.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/TabExecutor.java rename to eSpigot-API/src/main/java/org/bukkit/command/TabExecutor.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/AchievementCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/AchievementCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/AchievementCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/AchievementCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/BanCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/BanCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/BanCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/BanCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/BanIpCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/BanIpCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/BanIpCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/BanIpCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/BanListCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/BanListCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/BanListCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/BanListCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/BukkitCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/BukkitCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/BukkitCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/BukkitCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/ClearCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/ClearCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/ClearCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/ClearCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/DefaultGameModeCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/DefaultGameModeCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/DefaultGameModeCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/DefaultGameModeCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/DeopCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/DeopCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/DeopCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/DeopCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/DifficultyCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/DifficultyCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/DifficultyCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/DifficultyCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/EffectCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/EffectCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/EffectCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/EffectCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/EnchantCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/EnchantCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/EnchantCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/EnchantCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/ExpCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/ExpCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/ExpCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/ExpCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/GameModeCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/GameModeCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/GameModeCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/GameModeCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/GameRuleCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/GameRuleCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/GameRuleCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/GameRuleCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/GiveCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/GiveCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/GiveCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/GiveCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/HelpCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/HelpCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/HelpCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/HelpCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/KickCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/KickCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/KickCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/KickCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/KillCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/KillCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/KillCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/KillCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/ListCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/ListCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/ListCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/ListCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/MeCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/MeCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/MeCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/MeCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/OpCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/OpCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/OpCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/OpCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/PardonCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/PardonCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/PardonCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/PardonCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/PardonIpCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/PardonIpCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/PardonIpCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/PardonIpCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/PlaySoundCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/PlaySoundCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/PlaySoundCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/PlaySoundCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/PluginsCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/PluginsCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/PluginsCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/PluginsCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/ReloadCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/ReloadCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/ReloadCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/ReloadCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/SaveCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/SaveCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/SaveCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/SaveCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/SaveOffCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/SaveOffCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/SaveOffCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/SaveOffCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/SaveOnCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/SaveOnCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/SaveOnCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/SaveOnCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/SayCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/SayCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/SayCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/SayCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/ScoreboardCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/ScoreboardCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/ScoreboardCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/ScoreboardCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/SeedCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/SeedCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/SeedCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/SeedCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/SetIdleTimeoutCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/SetIdleTimeoutCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/SetIdleTimeoutCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/SetIdleTimeoutCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/SetWorldSpawnCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/SetWorldSpawnCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/SetWorldSpawnCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/SetWorldSpawnCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/SpawnpointCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/SpawnpointCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/SpawnpointCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/SpawnpointCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/SpreadPlayersCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/SpreadPlayersCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/SpreadPlayersCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/SpreadPlayersCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/StopCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/StopCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/StopCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/StopCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/TeleportCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/TeleportCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/TeleportCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/TeleportCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/TellCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/TellCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/TellCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/TellCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/TestForCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/TestForCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/TestForCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/TestForCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/TimeCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/TimeCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/TimeCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/TimeCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/TimingsCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/TimingsCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/TimingsCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/TimingsCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/ToggleDownfallCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/ToggleDownfallCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/ToggleDownfallCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/ToggleDownfallCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/VanillaCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/VanillaCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/VanillaCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/VanillaCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/VersionCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/VersionCommand.java similarity index 92% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/VersionCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/VersionCommand.java index ff02ff6..f708c81 100644 --- a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/VersionCommand.java +++ b/eSpigot-API/src/main/java/org/bukkit/command/defaults/VersionCommand.java @@ -31,11 +31,7 @@ public class VersionCommand extends BukkitCommand { } if (args.length == 0) { - String[] message = new String[] { - "§3This server is running §b§leSpigot§3 by the ElevateMC development team. Version §b§l1.8.9", - }; - - sender.sendMessage(message); + sender.sendMessage(ChatColor.DARK_AQUA + "This server is running " + ChatColor.AQUA + ChatColor.BOLD + "eSpigot" + ChatColor.DARK_AQUA +" by the ElevateMC development team. Version " + ChatColor.AQUA + ChatColor.BOLD + "1.8.9"); } else { StringBuilder name = new StringBuilder(); @@ -76,7 +72,7 @@ public class VersionCommand extends BukkitCommand { sender.sendMessage(ChatColor.AQUA + desc.getName() + ChatColor.DARK_AQUA + " version " + ChatColor.AQUA + desc.getVersion()); if (desc.getDescription() != null) { - sender.sendMessage(desc.getDescription()); + sender.sendMessage(ChatColor.DARK_AQUA + "Description: " + ChatColor.AQUA + desc.getDescription()); } if (desc.getWebsite() != null) { diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/WeatherCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/WeatherCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/WeatherCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/WeatherCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/command/defaults/WhitelistCommand.java b/eSpigot-API/src/main/java/org/bukkit/command/defaults/WhitelistCommand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/command/defaults/WhitelistCommand.java rename to eSpigot-API/src/main/java/org/bukkit/command/defaults/WhitelistCommand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/configuration/Configuration.java b/eSpigot-API/src/main/java/org/bukkit/configuration/Configuration.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/configuration/Configuration.java rename to eSpigot-API/src/main/java/org/bukkit/configuration/Configuration.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/configuration/ConfigurationOptions.java b/eSpigot-API/src/main/java/org/bukkit/configuration/ConfigurationOptions.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/configuration/ConfigurationOptions.java rename to eSpigot-API/src/main/java/org/bukkit/configuration/ConfigurationOptions.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/configuration/ConfigurationSection.java b/eSpigot-API/src/main/java/org/bukkit/configuration/ConfigurationSection.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/configuration/ConfigurationSection.java rename to eSpigot-API/src/main/java/org/bukkit/configuration/ConfigurationSection.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/configuration/InvalidConfigurationException.java b/eSpigot-API/src/main/java/org/bukkit/configuration/InvalidConfigurationException.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/configuration/InvalidConfigurationException.java rename to eSpigot-API/src/main/java/org/bukkit/configuration/InvalidConfigurationException.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/configuration/MemoryConfiguration.java b/eSpigot-API/src/main/java/org/bukkit/configuration/MemoryConfiguration.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/configuration/MemoryConfiguration.java rename to eSpigot-API/src/main/java/org/bukkit/configuration/MemoryConfiguration.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/configuration/MemoryConfigurationOptions.java b/eSpigot-API/src/main/java/org/bukkit/configuration/MemoryConfigurationOptions.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/configuration/MemoryConfigurationOptions.java rename to eSpigot-API/src/main/java/org/bukkit/configuration/MemoryConfigurationOptions.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/configuration/MemorySection.java b/eSpigot-API/src/main/java/org/bukkit/configuration/MemorySection.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/configuration/MemorySection.java rename to eSpigot-API/src/main/java/org/bukkit/configuration/MemorySection.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/configuration/file/FileConfiguration.java b/eSpigot-API/src/main/java/org/bukkit/configuration/file/FileConfiguration.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/configuration/file/FileConfiguration.java rename to eSpigot-API/src/main/java/org/bukkit/configuration/file/FileConfiguration.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/configuration/file/FileConfigurationOptions.java b/eSpigot-API/src/main/java/org/bukkit/configuration/file/FileConfigurationOptions.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/configuration/file/FileConfigurationOptions.java rename to eSpigot-API/src/main/java/org/bukkit/configuration/file/FileConfigurationOptions.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/configuration/file/YamlConfiguration.java b/eSpigot-API/src/main/java/org/bukkit/configuration/file/YamlConfiguration.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/configuration/file/YamlConfiguration.java rename to eSpigot-API/src/main/java/org/bukkit/configuration/file/YamlConfiguration.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/configuration/file/YamlConfigurationOptions.java b/eSpigot-API/src/main/java/org/bukkit/configuration/file/YamlConfigurationOptions.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/configuration/file/YamlConfigurationOptions.java rename to eSpigot-API/src/main/java/org/bukkit/configuration/file/YamlConfigurationOptions.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/configuration/file/YamlConstructor.java b/eSpigot-API/src/main/java/org/bukkit/configuration/file/YamlConstructor.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/configuration/file/YamlConstructor.java rename to eSpigot-API/src/main/java/org/bukkit/configuration/file/YamlConstructor.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/configuration/file/YamlRepresenter.java b/eSpigot-API/src/main/java/org/bukkit/configuration/file/YamlRepresenter.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/configuration/file/YamlRepresenter.java rename to eSpigot-API/src/main/java/org/bukkit/configuration/file/YamlRepresenter.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/configuration/serialization/ConfigurationSerializable.java b/eSpigot-API/src/main/java/org/bukkit/configuration/serialization/ConfigurationSerializable.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/configuration/serialization/ConfigurationSerializable.java rename to eSpigot-API/src/main/java/org/bukkit/configuration/serialization/ConfigurationSerializable.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/configuration/serialization/ConfigurationSerialization.java b/eSpigot-API/src/main/java/org/bukkit/configuration/serialization/ConfigurationSerialization.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/configuration/serialization/ConfigurationSerialization.java rename to eSpigot-API/src/main/java/org/bukkit/configuration/serialization/ConfigurationSerialization.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/configuration/serialization/DelegateDeserialization.java b/eSpigot-API/src/main/java/org/bukkit/configuration/serialization/DelegateDeserialization.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/configuration/serialization/DelegateDeserialization.java rename to eSpigot-API/src/main/java/org/bukkit/configuration/serialization/DelegateDeserialization.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/configuration/serialization/SerializableAs.java b/eSpigot-API/src/main/java/org/bukkit/configuration/serialization/SerializableAs.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/configuration/serialization/SerializableAs.java rename to eSpigot-API/src/main/java/org/bukkit/configuration/serialization/SerializableAs.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/conversations/BooleanPrompt.java b/eSpigot-API/src/main/java/org/bukkit/conversations/BooleanPrompt.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/conversations/BooleanPrompt.java rename to eSpigot-API/src/main/java/org/bukkit/conversations/BooleanPrompt.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/conversations/Conversable.java b/eSpigot-API/src/main/java/org/bukkit/conversations/Conversable.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/conversations/Conversable.java rename to eSpigot-API/src/main/java/org/bukkit/conversations/Conversable.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/conversations/Conversation.java b/eSpigot-API/src/main/java/org/bukkit/conversations/Conversation.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/conversations/Conversation.java rename to eSpigot-API/src/main/java/org/bukkit/conversations/Conversation.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/conversations/ConversationAbandonedEvent.java b/eSpigot-API/src/main/java/org/bukkit/conversations/ConversationAbandonedEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/conversations/ConversationAbandonedEvent.java rename to eSpigot-API/src/main/java/org/bukkit/conversations/ConversationAbandonedEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/conversations/ConversationAbandonedListener.java b/eSpigot-API/src/main/java/org/bukkit/conversations/ConversationAbandonedListener.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/conversations/ConversationAbandonedListener.java rename to eSpigot-API/src/main/java/org/bukkit/conversations/ConversationAbandonedListener.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/conversations/ConversationCanceller.java b/eSpigot-API/src/main/java/org/bukkit/conversations/ConversationCanceller.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/conversations/ConversationCanceller.java rename to eSpigot-API/src/main/java/org/bukkit/conversations/ConversationCanceller.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/conversations/ConversationContext.java b/eSpigot-API/src/main/java/org/bukkit/conversations/ConversationContext.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/conversations/ConversationContext.java rename to eSpigot-API/src/main/java/org/bukkit/conversations/ConversationContext.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/conversations/ConversationFactory.java b/eSpigot-API/src/main/java/org/bukkit/conversations/ConversationFactory.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/conversations/ConversationFactory.java rename to eSpigot-API/src/main/java/org/bukkit/conversations/ConversationFactory.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/conversations/ConversationPrefix.java b/eSpigot-API/src/main/java/org/bukkit/conversations/ConversationPrefix.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/conversations/ConversationPrefix.java rename to eSpigot-API/src/main/java/org/bukkit/conversations/ConversationPrefix.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/conversations/ExactMatchConversationCanceller.java b/eSpigot-API/src/main/java/org/bukkit/conversations/ExactMatchConversationCanceller.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/conversations/ExactMatchConversationCanceller.java rename to eSpigot-API/src/main/java/org/bukkit/conversations/ExactMatchConversationCanceller.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/conversations/FixedSetPrompt.java b/eSpigot-API/src/main/java/org/bukkit/conversations/FixedSetPrompt.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/conversations/FixedSetPrompt.java rename to eSpigot-API/src/main/java/org/bukkit/conversations/FixedSetPrompt.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/conversations/InactivityConversationCanceller.java b/eSpigot-API/src/main/java/org/bukkit/conversations/InactivityConversationCanceller.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/conversations/InactivityConversationCanceller.java rename to eSpigot-API/src/main/java/org/bukkit/conversations/InactivityConversationCanceller.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/conversations/ManuallyAbandonedConversationCanceller.java b/eSpigot-API/src/main/java/org/bukkit/conversations/ManuallyAbandonedConversationCanceller.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/conversations/ManuallyAbandonedConversationCanceller.java rename to eSpigot-API/src/main/java/org/bukkit/conversations/ManuallyAbandonedConversationCanceller.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/conversations/MessagePrompt.java b/eSpigot-API/src/main/java/org/bukkit/conversations/MessagePrompt.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/conversations/MessagePrompt.java rename to eSpigot-API/src/main/java/org/bukkit/conversations/MessagePrompt.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/conversations/NullConversationPrefix.java b/eSpigot-API/src/main/java/org/bukkit/conversations/NullConversationPrefix.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/conversations/NullConversationPrefix.java rename to eSpigot-API/src/main/java/org/bukkit/conversations/NullConversationPrefix.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/conversations/NumericPrompt.java b/eSpigot-API/src/main/java/org/bukkit/conversations/NumericPrompt.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/conversations/NumericPrompt.java rename to eSpigot-API/src/main/java/org/bukkit/conversations/NumericPrompt.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/conversations/PlayerNamePrompt.java b/eSpigot-API/src/main/java/org/bukkit/conversations/PlayerNamePrompt.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/conversations/PlayerNamePrompt.java rename to eSpigot-API/src/main/java/org/bukkit/conversations/PlayerNamePrompt.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/conversations/PluginNameConversationPrefix.java b/eSpigot-API/src/main/java/org/bukkit/conversations/PluginNameConversationPrefix.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/conversations/PluginNameConversationPrefix.java rename to eSpigot-API/src/main/java/org/bukkit/conversations/PluginNameConversationPrefix.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/conversations/Prompt.java b/eSpigot-API/src/main/java/org/bukkit/conversations/Prompt.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/conversations/Prompt.java rename to eSpigot-API/src/main/java/org/bukkit/conversations/Prompt.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/conversations/RegexPrompt.java b/eSpigot-API/src/main/java/org/bukkit/conversations/RegexPrompt.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/conversations/RegexPrompt.java rename to eSpigot-API/src/main/java/org/bukkit/conversations/RegexPrompt.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/conversations/StringPrompt.java b/eSpigot-API/src/main/java/org/bukkit/conversations/StringPrompt.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/conversations/StringPrompt.java rename to eSpigot-API/src/main/java/org/bukkit/conversations/StringPrompt.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/conversations/ValidatingPrompt.java b/eSpigot-API/src/main/java/org/bukkit/conversations/ValidatingPrompt.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/conversations/ValidatingPrompt.java rename to eSpigot-API/src/main/java/org/bukkit/conversations/ValidatingPrompt.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/enchantments/Enchantment.java b/eSpigot-API/src/main/java/org/bukkit/enchantments/Enchantment.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/enchantments/Enchantment.java rename to eSpigot-API/src/main/java/org/bukkit/enchantments/Enchantment.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/enchantments/EnchantmentTarget.java b/eSpigot-API/src/main/java/org/bukkit/enchantments/EnchantmentTarget.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/enchantments/EnchantmentTarget.java rename to eSpigot-API/src/main/java/org/bukkit/enchantments/EnchantmentTarget.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/enchantments/EnchantmentWrapper.java b/eSpigot-API/src/main/java/org/bukkit/enchantments/EnchantmentWrapper.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/enchantments/EnchantmentWrapper.java rename to eSpigot-API/src/main/java/org/bukkit/enchantments/EnchantmentWrapper.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Ageable.java b/eSpigot-API/src/main/java/org/bukkit/entity/Ageable.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Ageable.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Ageable.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Ambient.java b/eSpigot-API/src/main/java/org/bukkit/entity/Ambient.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Ambient.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Ambient.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/AnimalTamer.java b/eSpigot-API/src/main/java/org/bukkit/entity/AnimalTamer.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/AnimalTamer.java rename to eSpigot-API/src/main/java/org/bukkit/entity/AnimalTamer.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Animals.java b/eSpigot-API/src/main/java/org/bukkit/entity/Animals.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Animals.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Animals.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/ArmorStand.java b/eSpigot-API/src/main/java/org/bukkit/entity/ArmorStand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/ArmorStand.java rename to eSpigot-API/src/main/java/org/bukkit/entity/ArmorStand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Arrow.java b/eSpigot-API/src/main/java/org/bukkit/entity/Arrow.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Arrow.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Arrow.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Bat.java b/eSpigot-API/src/main/java/org/bukkit/entity/Bat.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Bat.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Bat.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Blaze.java b/eSpigot-API/src/main/java/org/bukkit/entity/Blaze.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Blaze.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Blaze.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Boat.java b/eSpigot-API/src/main/java/org/bukkit/entity/Boat.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Boat.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Boat.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/CaveSpider.java b/eSpigot-API/src/main/java/org/bukkit/entity/CaveSpider.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/CaveSpider.java rename to eSpigot-API/src/main/java/org/bukkit/entity/CaveSpider.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Chicken.java b/eSpigot-API/src/main/java/org/bukkit/entity/Chicken.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Chicken.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Chicken.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/ComplexEntityPart.java b/eSpigot-API/src/main/java/org/bukkit/entity/ComplexEntityPart.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/ComplexEntityPart.java rename to eSpigot-API/src/main/java/org/bukkit/entity/ComplexEntityPart.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/ComplexLivingEntity.java b/eSpigot-API/src/main/java/org/bukkit/entity/ComplexLivingEntity.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/ComplexLivingEntity.java rename to eSpigot-API/src/main/java/org/bukkit/entity/ComplexLivingEntity.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Cow.java b/eSpigot-API/src/main/java/org/bukkit/entity/Cow.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Cow.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Cow.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Creature.java b/eSpigot-API/src/main/java/org/bukkit/entity/Creature.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Creature.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Creature.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/CreatureType.java b/eSpigot-API/src/main/java/org/bukkit/entity/CreatureType.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/CreatureType.java rename to eSpigot-API/src/main/java/org/bukkit/entity/CreatureType.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Creeper.java b/eSpigot-API/src/main/java/org/bukkit/entity/Creeper.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Creeper.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Creeper.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Damageable.java b/eSpigot-API/src/main/java/org/bukkit/entity/Damageable.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Damageable.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Damageable.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Egg.java b/eSpigot-API/src/main/java/org/bukkit/entity/Egg.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Egg.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Egg.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/EnderCrystal.java b/eSpigot-API/src/main/java/org/bukkit/entity/EnderCrystal.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/EnderCrystal.java rename to eSpigot-API/src/main/java/org/bukkit/entity/EnderCrystal.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/EnderDragon.java b/eSpigot-API/src/main/java/org/bukkit/entity/EnderDragon.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/EnderDragon.java rename to eSpigot-API/src/main/java/org/bukkit/entity/EnderDragon.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/EnderDragonPart.java b/eSpigot-API/src/main/java/org/bukkit/entity/EnderDragonPart.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/EnderDragonPart.java rename to eSpigot-API/src/main/java/org/bukkit/entity/EnderDragonPart.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/EnderPearl.java b/eSpigot-API/src/main/java/org/bukkit/entity/EnderPearl.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/EnderPearl.java rename to eSpigot-API/src/main/java/org/bukkit/entity/EnderPearl.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/EnderSignal.java b/eSpigot-API/src/main/java/org/bukkit/entity/EnderSignal.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/EnderSignal.java rename to eSpigot-API/src/main/java/org/bukkit/entity/EnderSignal.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Enderman.java b/eSpigot-API/src/main/java/org/bukkit/entity/Enderman.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Enderman.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Enderman.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Endermite.java b/eSpigot-API/src/main/java/org/bukkit/entity/Endermite.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Endermite.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Endermite.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Entity.java b/eSpigot-API/src/main/java/org/bukkit/entity/Entity.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Entity.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Entity.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/EntityType.java b/eSpigot-API/src/main/java/org/bukkit/entity/EntityType.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/EntityType.java rename to eSpigot-API/src/main/java/org/bukkit/entity/EntityType.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/ExperienceOrb.java b/eSpigot-API/src/main/java/org/bukkit/entity/ExperienceOrb.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/ExperienceOrb.java rename to eSpigot-API/src/main/java/org/bukkit/entity/ExperienceOrb.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Explosive.java b/eSpigot-API/src/main/java/org/bukkit/entity/Explosive.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Explosive.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Explosive.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/FallingBlock.java b/eSpigot-API/src/main/java/org/bukkit/entity/FallingBlock.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/FallingBlock.java rename to eSpigot-API/src/main/java/org/bukkit/entity/FallingBlock.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/FallingSand.java b/eSpigot-API/src/main/java/org/bukkit/entity/FallingSand.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/FallingSand.java rename to eSpigot-API/src/main/java/org/bukkit/entity/FallingSand.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Fireball.java b/eSpigot-API/src/main/java/org/bukkit/entity/Fireball.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Fireball.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Fireball.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Firework.java b/eSpigot-API/src/main/java/org/bukkit/entity/Firework.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Firework.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Firework.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Fish.java b/eSpigot-API/src/main/java/org/bukkit/entity/Fish.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Fish.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Fish.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/FishHook.java b/eSpigot-API/src/main/java/org/bukkit/entity/FishHook.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/FishHook.java rename to eSpigot-API/src/main/java/org/bukkit/entity/FishHook.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Flying.java b/eSpigot-API/src/main/java/org/bukkit/entity/Flying.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Flying.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Flying.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Ghast.java b/eSpigot-API/src/main/java/org/bukkit/entity/Ghast.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Ghast.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Ghast.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Giant.java b/eSpigot-API/src/main/java/org/bukkit/entity/Giant.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Giant.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Giant.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Golem.java b/eSpigot-API/src/main/java/org/bukkit/entity/Golem.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Golem.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Golem.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Guardian.java b/eSpigot-API/src/main/java/org/bukkit/entity/Guardian.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Guardian.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Guardian.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Hanging.java b/eSpigot-API/src/main/java/org/bukkit/entity/Hanging.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Hanging.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Hanging.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Horse.java b/eSpigot-API/src/main/java/org/bukkit/entity/Horse.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Horse.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Horse.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/HumanEntity.java b/eSpigot-API/src/main/java/org/bukkit/entity/HumanEntity.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/HumanEntity.java rename to eSpigot-API/src/main/java/org/bukkit/entity/HumanEntity.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/IronGolem.java b/eSpigot-API/src/main/java/org/bukkit/entity/IronGolem.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/IronGolem.java rename to eSpigot-API/src/main/java/org/bukkit/entity/IronGolem.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Item.java b/eSpigot-API/src/main/java/org/bukkit/entity/Item.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Item.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Item.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/ItemFrame.java b/eSpigot-API/src/main/java/org/bukkit/entity/ItemFrame.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/ItemFrame.java rename to eSpigot-API/src/main/java/org/bukkit/entity/ItemFrame.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/LargeFireball.java b/eSpigot-API/src/main/java/org/bukkit/entity/LargeFireball.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/LargeFireball.java rename to eSpigot-API/src/main/java/org/bukkit/entity/LargeFireball.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/LeashHitch.java b/eSpigot-API/src/main/java/org/bukkit/entity/LeashHitch.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/LeashHitch.java rename to eSpigot-API/src/main/java/org/bukkit/entity/LeashHitch.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/LightningStrike.java b/eSpigot-API/src/main/java/org/bukkit/entity/LightningStrike.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/LightningStrike.java rename to eSpigot-API/src/main/java/org/bukkit/entity/LightningStrike.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/LivingEntity.java b/eSpigot-API/src/main/java/org/bukkit/entity/LivingEntity.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/LivingEntity.java rename to eSpigot-API/src/main/java/org/bukkit/entity/LivingEntity.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/MagmaCube.java b/eSpigot-API/src/main/java/org/bukkit/entity/MagmaCube.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/MagmaCube.java rename to eSpigot-API/src/main/java/org/bukkit/entity/MagmaCube.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Minecart.java b/eSpigot-API/src/main/java/org/bukkit/entity/Minecart.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Minecart.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Minecart.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Monster.java b/eSpigot-API/src/main/java/org/bukkit/entity/Monster.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Monster.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Monster.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/MushroomCow.java b/eSpigot-API/src/main/java/org/bukkit/entity/MushroomCow.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/MushroomCow.java rename to eSpigot-API/src/main/java/org/bukkit/entity/MushroomCow.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/NPC.java b/eSpigot-API/src/main/java/org/bukkit/entity/NPC.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/NPC.java rename to eSpigot-API/src/main/java/org/bukkit/entity/NPC.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Ocelot.java b/eSpigot-API/src/main/java/org/bukkit/entity/Ocelot.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Ocelot.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Ocelot.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Painting.java b/eSpigot-API/src/main/java/org/bukkit/entity/Painting.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Painting.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Painting.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Pig.java b/eSpigot-API/src/main/java/org/bukkit/entity/Pig.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Pig.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Pig.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/PigZombie.java b/eSpigot-API/src/main/java/org/bukkit/entity/PigZombie.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/PigZombie.java rename to eSpigot-API/src/main/java/org/bukkit/entity/PigZombie.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Player.java b/eSpigot-API/src/main/java/org/bukkit/entity/Player.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Player.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Player.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/PoweredMinecart.java b/eSpigot-API/src/main/java/org/bukkit/entity/PoweredMinecart.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/PoweredMinecart.java rename to eSpigot-API/src/main/java/org/bukkit/entity/PoweredMinecart.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Projectile.java b/eSpigot-API/src/main/java/org/bukkit/entity/Projectile.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Projectile.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Projectile.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Rabbit.java b/eSpigot-API/src/main/java/org/bukkit/entity/Rabbit.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Rabbit.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Rabbit.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Sheep.java b/eSpigot-API/src/main/java/org/bukkit/entity/Sheep.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Sheep.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Sheep.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Silverfish.java b/eSpigot-API/src/main/java/org/bukkit/entity/Silverfish.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Silverfish.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Silverfish.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Skeleton.java b/eSpigot-API/src/main/java/org/bukkit/entity/Skeleton.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Skeleton.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Skeleton.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Slime.java b/eSpigot-API/src/main/java/org/bukkit/entity/Slime.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Slime.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Slime.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/SmallFireball.java b/eSpigot-API/src/main/java/org/bukkit/entity/SmallFireball.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/SmallFireball.java rename to eSpigot-API/src/main/java/org/bukkit/entity/SmallFireball.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Snowball.java b/eSpigot-API/src/main/java/org/bukkit/entity/Snowball.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Snowball.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Snowball.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Snowman.java b/eSpigot-API/src/main/java/org/bukkit/entity/Snowman.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Snowman.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Snowman.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Spider.java b/eSpigot-API/src/main/java/org/bukkit/entity/Spider.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Spider.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Spider.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Squid.java b/eSpigot-API/src/main/java/org/bukkit/entity/Squid.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Squid.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Squid.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/StorageMinecart.java b/eSpigot-API/src/main/java/org/bukkit/entity/StorageMinecart.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/StorageMinecart.java rename to eSpigot-API/src/main/java/org/bukkit/entity/StorageMinecart.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/TNTPrimed.java b/eSpigot-API/src/main/java/org/bukkit/entity/TNTPrimed.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/TNTPrimed.java rename to eSpigot-API/src/main/java/org/bukkit/entity/TNTPrimed.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Tameable.java b/eSpigot-API/src/main/java/org/bukkit/entity/Tameable.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Tameable.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Tameable.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/ThrownExpBottle.java b/eSpigot-API/src/main/java/org/bukkit/entity/ThrownExpBottle.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/ThrownExpBottle.java rename to eSpigot-API/src/main/java/org/bukkit/entity/ThrownExpBottle.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/ThrownPotion.java b/eSpigot-API/src/main/java/org/bukkit/entity/ThrownPotion.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/ThrownPotion.java rename to eSpigot-API/src/main/java/org/bukkit/entity/ThrownPotion.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Vehicle.java b/eSpigot-API/src/main/java/org/bukkit/entity/Vehicle.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Vehicle.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Vehicle.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Villager.java b/eSpigot-API/src/main/java/org/bukkit/entity/Villager.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Villager.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Villager.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/WaterMob.java b/eSpigot-API/src/main/java/org/bukkit/entity/WaterMob.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/WaterMob.java rename to eSpigot-API/src/main/java/org/bukkit/entity/WaterMob.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Weather.java b/eSpigot-API/src/main/java/org/bukkit/entity/Weather.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Weather.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Weather.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Witch.java b/eSpigot-API/src/main/java/org/bukkit/entity/Witch.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Witch.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Witch.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Wither.java b/eSpigot-API/src/main/java/org/bukkit/entity/Wither.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Wither.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Wither.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/WitherSkull.java b/eSpigot-API/src/main/java/org/bukkit/entity/WitherSkull.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/WitherSkull.java rename to eSpigot-API/src/main/java/org/bukkit/entity/WitherSkull.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Wolf.java b/eSpigot-API/src/main/java/org/bukkit/entity/Wolf.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Wolf.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Wolf.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/Zombie.java b/eSpigot-API/src/main/java/org/bukkit/entity/Zombie.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/Zombie.java rename to eSpigot-API/src/main/java/org/bukkit/entity/Zombie.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/minecart/CommandMinecart.java b/eSpigot-API/src/main/java/org/bukkit/entity/minecart/CommandMinecart.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/minecart/CommandMinecart.java rename to eSpigot-API/src/main/java/org/bukkit/entity/minecart/CommandMinecart.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/minecart/ExplosiveMinecart.java b/eSpigot-API/src/main/java/org/bukkit/entity/minecart/ExplosiveMinecart.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/minecart/ExplosiveMinecart.java rename to eSpigot-API/src/main/java/org/bukkit/entity/minecart/ExplosiveMinecart.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/minecart/HopperMinecart.java b/eSpigot-API/src/main/java/org/bukkit/entity/minecart/HopperMinecart.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/minecart/HopperMinecart.java rename to eSpigot-API/src/main/java/org/bukkit/entity/minecart/HopperMinecart.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/minecart/PoweredMinecart.java b/eSpigot-API/src/main/java/org/bukkit/entity/minecart/PoweredMinecart.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/minecart/PoweredMinecart.java rename to eSpigot-API/src/main/java/org/bukkit/entity/minecart/PoweredMinecart.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/minecart/RideableMinecart.java b/eSpigot-API/src/main/java/org/bukkit/entity/minecart/RideableMinecart.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/minecart/RideableMinecart.java rename to eSpigot-API/src/main/java/org/bukkit/entity/minecart/RideableMinecart.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/minecart/SpawnerMinecart.java b/eSpigot-API/src/main/java/org/bukkit/entity/minecart/SpawnerMinecart.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/minecart/SpawnerMinecart.java rename to eSpigot-API/src/main/java/org/bukkit/entity/minecart/SpawnerMinecart.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/entity/minecart/StorageMinecart.java b/eSpigot-API/src/main/java/org/bukkit/entity/minecart/StorageMinecart.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/entity/minecart/StorageMinecart.java rename to eSpigot-API/src/main/java/org/bukkit/entity/minecart/StorageMinecart.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/Cancellable.java b/eSpigot-API/src/main/java/org/bukkit/event/Cancellable.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/Cancellable.java rename to eSpigot-API/src/main/java/org/bukkit/event/Cancellable.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/Event.java b/eSpigot-API/src/main/java/org/bukkit/event/Event.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/Event.java rename to eSpigot-API/src/main/java/org/bukkit/event/Event.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/EventException.java b/eSpigot-API/src/main/java/org/bukkit/event/EventException.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/EventException.java rename to eSpigot-API/src/main/java/org/bukkit/event/EventException.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/EventHandler.java b/eSpigot-API/src/main/java/org/bukkit/event/EventHandler.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/EventHandler.java rename to eSpigot-API/src/main/java/org/bukkit/event/EventHandler.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/EventPriority.java b/eSpigot-API/src/main/java/org/bukkit/event/EventPriority.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/EventPriority.java rename to eSpigot-API/src/main/java/org/bukkit/event/EventPriority.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/HandlerList.java b/eSpigot-API/src/main/java/org/bukkit/event/HandlerList.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/HandlerList.java rename to eSpigot-API/src/main/java/org/bukkit/event/HandlerList.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/Listener.java b/eSpigot-API/src/main/java/org/bukkit/event/Listener.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/Listener.java rename to eSpigot-API/src/main/java/org/bukkit/event/Listener.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/block/Action.java b/eSpigot-API/src/main/java/org/bukkit/event/block/Action.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/block/Action.java rename to eSpigot-API/src/main/java/org/bukkit/event/block/Action.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockBreakEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/block/BlockBreakEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockBreakEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/block/BlockBreakEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockBurnEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/block/BlockBurnEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockBurnEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/block/BlockBurnEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockCanBuildEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/block/BlockCanBuildEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockCanBuildEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/block/BlockCanBuildEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockDamageEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/block/BlockDamageEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockDamageEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/block/BlockDamageEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockDispenseEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/block/BlockDispenseEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockDispenseEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/block/BlockDispenseEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/block/BlockEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/block/BlockEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockExpEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/block/BlockExpEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockExpEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/block/BlockExpEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockExplodeEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/block/BlockExplodeEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockExplodeEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/block/BlockExplodeEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockFadeEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/block/BlockFadeEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockFadeEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/block/BlockFadeEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockFormEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/block/BlockFormEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockFormEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/block/BlockFormEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockFromToEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/block/BlockFromToEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockFromToEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/block/BlockFromToEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockGrowEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/block/BlockGrowEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockGrowEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/block/BlockGrowEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockIgniteEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/block/BlockIgniteEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockIgniteEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/block/BlockIgniteEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockMultiPlaceEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/block/BlockMultiPlaceEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockMultiPlaceEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/block/BlockMultiPlaceEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockPhysicsEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/block/BlockPhysicsEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockPhysicsEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/block/BlockPhysicsEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockPistonEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/block/BlockPistonEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockPistonEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/block/BlockPistonEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockPistonExtendEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/block/BlockPistonExtendEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockPistonExtendEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/block/BlockPistonExtendEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockPistonRetractEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/block/BlockPistonRetractEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockPistonRetractEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/block/BlockPistonRetractEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockPlaceEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/block/BlockPlaceEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockPlaceEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/block/BlockPlaceEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockRedstoneEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/block/BlockRedstoneEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockRedstoneEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/block/BlockRedstoneEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockSpreadEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/block/BlockSpreadEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/block/BlockSpreadEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/block/BlockSpreadEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/block/EntityBlockFormEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/block/EntityBlockFormEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/block/EntityBlockFormEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/block/EntityBlockFormEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/block/LeavesDecayEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/block/LeavesDecayEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/block/LeavesDecayEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/block/LeavesDecayEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/block/NotePlayEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/block/NotePlayEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/block/NotePlayEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/block/NotePlayEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/block/SignChangeEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/block/SignChangeEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/block/SignChangeEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/block/SignChangeEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/enchantment/EnchantItemEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/enchantment/EnchantItemEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/enchantment/EnchantItemEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/enchantment/EnchantItemEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/enchantment/PrepareItemEnchantEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/enchantment/PrepareItemEnchantEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/enchantment/PrepareItemEnchantEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/enchantment/PrepareItemEnchantEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/CreatureSpawnEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/CreatureSpawnEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/CreatureSpawnEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/CreatureSpawnEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/CreeperPowerEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/CreeperPowerEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/CreeperPowerEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/CreeperPowerEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityBreakDoorEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/EntityBreakDoorEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityBreakDoorEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/EntityBreakDoorEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityChangeBlockEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/EntityChangeBlockEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityChangeBlockEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/EntityChangeBlockEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityCombustByBlockEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/EntityCombustByBlockEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityCombustByBlockEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/EntityCombustByBlockEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityCombustByEntityEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/EntityCombustByEntityEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityCombustByEntityEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/EntityCombustByEntityEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityCombustEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/EntityCombustEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityCombustEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/EntityCombustEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityCreatePortalEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/EntityCreatePortalEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityCreatePortalEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/EntityCreatePortalEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityDamageByBlockEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/EntityDamageByBlockEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityDamageByBlockEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/EntityDamageByBlockEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityDamageByEntityEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/EntityDamageByEntityEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityDamageByEntityEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/EntityDamageByEntityEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityDamageEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/EntityDamageEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityDamageEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/EntityDamageEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityDeathEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/EntityDeathEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityDeathEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/EntityDeathEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/EntityEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/EntityEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityExplodeEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/EntityExplodeEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityExplodeEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/EntityExplodeEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityInteractEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/EntityInteractEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityInteractEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/EntityInteractEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityPortalEnterEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/EntityPortalEnterEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityPortalEnterEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/EntityPortalEnterEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityPortalEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/EntityPortalEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityPortalEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/EntityPortalEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityPortalExitEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/EntityPortalExitEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityPortalExitEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/EntityPortalExitEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityRegainHealthEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/EntityRegainHealthEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityRegainHealthEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/EntityRegainHealthEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityShootBowEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/EntityShootBowEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityShootBowEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/EntityShootBowEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntitySpawnEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/EntitySpawnEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntitySpawnEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/EntitySpawnEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityTameEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/EntityTameEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityTameEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/EntityTameEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityTargetEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/EntityTargetEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityTargetEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/EntityTargetEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityTargetLivingEntityEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/EntityTargetLivingEntityEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityTargetLivingEntityEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/EntityTargetLivingEntityEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityTeleportEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/EntityTeleportEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityTeleportEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/EntityTeleportEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityUnleashEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/EntityUnleashEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/EntityUnleashEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/EntityUnleashEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/ExpBottleEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/ExpBottleEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/ExpBottleEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/ExpBottleEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/ExplosionPrimeEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/ExplosionPrimeEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/ExplosionPrimeEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/ExplosionPrimeEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/FireworkExplodeEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/FireworkExplodeEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/FireworkExplodeEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/FireworkExplodeEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/FoodLevelChangeEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/FoodLevelChangeEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/FoodLevelChangeEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/FoodLevelChangeEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/HorseJumpEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/HorseJumpEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/HorseJumpEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/HorseJumpEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/ItemDespawnEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/ItemDespawnEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/ItemDespawnEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/ItemDespawnEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/ItemMergeEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/ItemMergeEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/ItemMergeEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/ItemMergeEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/ItemSpawnEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/ItemSpawnEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/ItemSpawnEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/ItemSpawnEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/PigZapEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/PigZapEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/PigZapEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/PigZapEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/PlayerDeathEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/PlayerDeathEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/PlayerDeathEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/PlayerDeathEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/PlayerLeashEntityEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/PlayerLeashEntityEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/PlayerLeashEntityEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/PlayerLeashEntityEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/PotionEffectAddEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/PotionEffectAddEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/PotionEffectAddEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/PotionEffectAddEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/PotionEffectEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/PotionEffectEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/PotionEffectEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/PotionEffectEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/PotionEffectExpireEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/PotionEffectExpireEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/PotionEffectExpireEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/PotionEffectExpireEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/PotionEffectExtendEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/PotionEffectExtendEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/PotionEffectExtendEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/PotionEffectExtendEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/PotionEffectRemoveEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/PotionEffectRemoveEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/PotionEffectRemoveEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/PotionEffectRemoveEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/PotionSplashEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/PotionSplashEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/PotionSplashEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/PotionSplashEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/ProjectileHitEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/ProjectileHitEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/ProjectileHitEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/ProjectileHitEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/ProjectileLaunchEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/ProjectileLaunchEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/ProjectileLaunchEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/ProjectileLaunchEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/SheepDyeWoolEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/SheepDyeWoolEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/SheepDyeWoolEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/SheepDyeWoolEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/SheepRegrowWoolEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/SheepRegrowWoolEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/SheepRegrowWoolEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/SheepRegrowWoolEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/SlimeSplitEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/SlimeSplitEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/SlimeSplitEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/SlimeSplitEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/entity/SpawnerSpawnEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/entity/SpawnerSpawnEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/entity/SpawnerSpawnEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/entity/SpawnerSpawnEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/hanging/HangingBreakByEntityEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/hanging/HangingBreakByEntityEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/hanging/HangingBreakByEntityEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/hanging/HangingBreakByEntityEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/hanging/HangingBreakEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/hanging/HangingBreakEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/hanging/HangingBreakEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/hanging/HangingBreakEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/hanging/HangingEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/hanging/HangingEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/hanging/HangingEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/hanging/HangingEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/hanging/HangingPlaceEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/hanging/HangingPlaceEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/hanging/HangingPlaceEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/hanging/HangingPlaceEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/inventory/BrewEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/inventory/BrewEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/inventory/BrewEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/inventory/BrewEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/inventory/ClickType.java b/eSpigot-API/src/main/java/org/bukkit/event/inventory/ClickType.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/inventory/ClickType.java rename to eSpigot-API/src/main/java/org/bukkit/event/inventory/ClickType.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/inventory/CraftItemEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/inventory/CraftItemEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/inventory/CraftItemEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/inventory/CraftItemEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/inventory/DragType.java b/eSpigot-API/src/main/java/org/bukkit/event/inventory/DragType.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/inventory/DragType.java rename to eSpigot-API/src/main/java/org/bukkit/event/inventory/DragType.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/inventory/FurnaceBurnEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/inventory/FurnaceBurnEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/inventory/FurnaceBurnEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/inventory/FurnaceBurnEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/inventory/FurnaceExtractEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/inventory/FurnaceExtractEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/inventory/FurnaceExtractEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/inventory/FurnaceExtractEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/inventory/FurnaceSmeltEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/inventory/FurnaceSmeltEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/inventory/FurnaceSmeltEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/inventory/FurnaceSmeltEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryAction.java b/eSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryAction.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryAction.java rename to eSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryAction.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryClickEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryClickEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryClickEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryClickEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryCloseEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryCloseEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryCloseEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryCloseEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryCreativeEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryCreativeEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryCreativeEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryCreativeEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryDragEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryDragEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryDragEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryDragEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryInteractEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryInteractEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryInteractEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryInteractEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryMoveItemEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryMoveItemEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryMoveItemEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryMoveItemEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryOpenEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryOpenEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryOpenEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryOpenEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryPickupItemEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryPickupItemEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryPickupItemEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryPickupItemEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryType.java b/eSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryType.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryType.java rename to eSpigot-API/src/main/java/org/bukkit/event/inventory/InventoryType.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/inventory/PrepareItemCraftEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/inventory/PrepareItemCraftEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/inventory/PrepareItemCraftEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/inventory/PrepareItemCraftEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/painting/PaintingBreakByEntityEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/painting/PaintingBreakByEntityEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/painting/PaintingBreakByEntityEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/painting/PaintingBreakByEntityEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/painting/PaintingBreakEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/painting/PaintingBreakEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/painting/PaintingBreakEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/painting/PaintingBreakEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/painting/PaintingEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/painting/PaintingEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/painting/PaintingEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/painting/PaintingEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/painting/PaintingPlaceEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/painting/PaintingPlaceEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/painting/PaintingPlaceEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/painting/PaintingPlaceEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/AsyncPlayerChatEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/AsyncPlayerChatEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/AsyncPlayerChatEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/AsyncPlayerChatEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/AsyncPlayerPreLoginEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/AsyncPlayerPreLoginEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/AsyncPlayerPreLoginEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/AsyncPlayerPreLoginEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerAchievementAwardedEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerAchievementAwardedEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerAchievementAwardedEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerAchievementAwardedEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerAnimationEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerAnimationEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerAnimationEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerAnimationEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerAnimationType.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerAnimationType.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerAnimationType.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerAnimationType.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerArmorStandManipulateEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerArmorStandManipulateEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerArmorStandManipulateEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerArmorStandManipulateEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerBedEnterEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerBedEnterEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerBedEnterEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerBedEnterEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerBedLeaveEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerBedLeaveEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerBedLeaveEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerBedLeaveEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerBucketEmptyEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerBucketEmptyEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerBucketEmptyEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerBucketEmptyEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerBucketEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerBucketEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerBucketEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerBucketEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerBucketFillEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerBucketFillEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerBucketFillEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerBucketFillEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerChangedWorldEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerChangedWorldEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerChangedWorldEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerChangedWorldEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerChannelEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerChannelEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerChannelEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerChannelEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerChatEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerChatEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerChatEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerChatEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerChatTabCompleteEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerChatTabCompleteEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerChatTabCompleteEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerChatTabCompleteEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerCommandPreprocessEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerCommandPreprocessEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerCommandPreprocessEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerCommandPreprocessEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerDropItemEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerDropItemEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerDropItemEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerDropItemEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerEditBookEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerEditBookEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerEditBookEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerEditBookEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerEggThrowEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerEggThrowEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerEggThrowEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerEggThrowEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerExpChangeEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerExpChangeEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerExpChangeEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerExpChangeEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerFishEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerFishEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerFishEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerFishEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerGameModeChangeEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerGameModeChangeEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerGameModeChangeEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerGameModeChangeEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerInitialSpawnEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerInitialSpawnEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerInitialSpawnEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerInitialSpawnEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerInteractAtEntityEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerInteractAtEntityEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerInteractAtEntityEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerInteractAtEntityEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerInteractEntityEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerInteractEntityEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerInteractEntityEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerInteractEntityEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerInteractEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerInteractEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerInteractEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerInteractEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerInventoryEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerInventoryEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerInventoryEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerInventoryEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerItemBreakEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerItemBreakEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerItemBreakEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerItemBreakEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerItemConsumeEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerItemConsumeEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerItemConsumeEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerItemConsumeEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerItemDamageEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerItemDamageEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerItemDamageEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerItemDamageEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerItemHeldEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerItemHeldEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerItemHeldEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerItemHeldEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerJoinEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerJoinEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerJoinEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerJoinEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerKickEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerKickEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerKickEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerKickEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerLevelChangeEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerLevelChangeEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerLevelChangeEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerLevelChangeEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerLocaleChangeEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerLocaleChangeEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerLocaleChangeEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerLocaleChangeEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerLoginEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerLoginEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerLoginEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerLoginEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerMoveEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerMoveEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerMoveEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerMoveEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerPickupItemEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerPickupItemEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerPickupItemEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerPickupItemEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerPortalEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerPortalEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerPortalEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerPortalEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerPreLoginEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerPreLoginEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerPreLoginEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerPreLoginEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerQuitEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerQuitEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerQuitEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerQuitEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerRegisterChannelEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerRegisterChannelEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerRegisterChannelEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerRegisterChannelEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerResourcePackStatusEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerResourcePackStatusEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerResourcePackStatusEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerResourcePackStatusEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerRespawnEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerRespawnEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerRespawnEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerRespawnEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerShearEntityEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerShearEntityEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerShearEntityEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerShearEntityEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerStatisticIncrementEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerStatisticIncrementEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerStatisticIncrementEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerStatisticIncrementEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerTeleportEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerTeleportEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerTeleportEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerTeleportEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerToggleFlightEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerToggleFlightEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerToggleFlightEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerToggleFlightEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerToggleSneakEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerToggleSneakEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerToggleSneakEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerToggleSneakEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerToggleSprintEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerToggleSprintEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerToggleSprintEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerToggleSprintEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerUnleashEntityEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerUnleashEntityEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerUnleashEntityEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerUnleashEntityEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerUnregisterChannelEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerUnregisterChannelEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerUnregisterChannelEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerUnregisterChannelEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerVelocityEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/player/PlayerVelocityEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/player/PlayerVelocityEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/player/PlayerVelocityEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/server/MapInitializeEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/server/MapInitializeEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/server/MapInitializeEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/server/MapInitializeEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/server/PluginDisableEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/server/PluginDisableEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/server/PluginDisableEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/server/PluginDisableEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/server/PluginEnableEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/server/PluginEnableEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/server/PluginEnableEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/server/PluginEnableEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/server/PluginEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/server/PluginEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/server/PluginEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/server/PluginEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/server/RemoteServerCommandEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/server/RemoteServerCommandEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/server/RemoteServerCommandEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/server/RemoteServerCommandEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/server/ServerCommandEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/server/ServerCommandEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/server/ServerCommandEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/server/ServerCommandEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/server/ServerEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/server/ServerEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/server/ServerEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/server/ServerEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/server/ServerListPingEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/server/ServerListPingEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/server/ServerListPingEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/server/ServerListPingEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/server/ServiceEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/server/ServiceEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/server/ServiceEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/server/ServiceEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/server/ServiceRegisterEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/server/ServiceRegisterEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/server/ServiceRegisterEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/server/ServiceRegisterEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/server/ServiceUnregisterEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/server/ServiceUnregisterEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/server/ServiceUnregisterEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/server/ServiceUnregisterEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleBlockCollisionEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleBlockCollisionEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleBlockCollisionEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleBlockCollisionEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleCollisionEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleCollisionEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleCollisionEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleCollisionEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleCreateEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleCreateEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleCreateEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleCreateEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleDamageEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleDamageEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleDamageEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleDamageEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleDestroyEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleDestroyEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleDestroyEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleDestroyEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleEnterEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleEnterEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleEnterEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleEnterEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleEntityCollisionEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleEntityCollisionEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleEntityCollisionEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleEntityCollisionEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleExitEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleExitEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleExitEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleExitEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleMoveEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleMoveEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleMoveEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleMoveEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleUpdateEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleUpdateEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleUpdateEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/vehicle/VehicleUpdateEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/weather/LightningStrikeEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/weather/LightningStrikeEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/weather/LightningStrikeEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/weather/LightningStrikeEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/weather/ThunderChangeEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/weather/ThunderChangeEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/weather/ThunderChangeEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/weather/ThunderChangeEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/weather/WeatherChangeEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/weather/WeatherChangeEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/weather/WeatherChangeEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/weather/WeatherChangeEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/weather/WeatherEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/weather/WeatherEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/weather/WeatherEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/weather/WeatherEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/world/ChunkEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/world/ChunkEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/world/ChunkEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/world/ChunkEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/world/ChunkLoadEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/world/ChunkLoadEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/world/ChunkLoadEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/world/ChunkLoadEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/world/ChunkPopulateEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/world/ChunkPopulateEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/world/ChunkPopulateEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/world/ChunkPopulateEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/world/ChunkUnloadEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/world/ChunkUnloadEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/world/ChunkUnloadEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/world/ChunkUnloadEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/world/PortalCreateEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/world/PortalCreateEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/world/PortalCreateEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/world/PortalCreateEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/world/SpawnChangeEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/world/SpawnChangeEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/world/SpawnChangeEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/world/SpawnChangeEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/world/StructureGrowEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/world/StructureGrowEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/world/StructureGrowEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/world/StructureGrowEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/world/WorldEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/world/WorldEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/world/WorldEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/world/WorldEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/world/WorldInitEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/world/WorldInitEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/world/WorldInitEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/world/WorldInitEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/world/WorldLoadEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/world/WorldLoadEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/world/WorldLoadEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/world/WorldLoadEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/world/WorldSaveEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/world/WorldSaveEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/world/WorldSaveEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/world/WorldSaveEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/event/world/WorldUnloadEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/world/WorldUnloadEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/event/world/WorldUnloadEvent.java rename to eSpigot-API/src/main/java/org/bukkit/event/world/WorldUnloadEvent.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/generator/BlockPopulator.java b/eSpigot-API/src/main/java/org/bukkit/generator/BlockPopulator.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/generator/BlockPopulator.java rename to eSpigot-API/src/main/java/org/bukkit/generator/BlockPopulator.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/generator/ChunkGenerator.java b/eSpigot-API/src/main/java/org/bukkit/generator/ChunkGenerator.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/generator/ChunkGenerator.java rename to eSpigot-API/src/main/java/org/bukkit/generator/ChunkGenerator.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/help/GenericCommandHelpTopic.java b/eSpigot-API/src/main/java/org/bukkit/help/GenericCommandHelpTopic.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/help/GenericCommandHelpTopic.java rename to eSpigot-API/src/main/java/org/bukkit/help/GenericCommandHelpTopic.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/help/HelpMap.java b/eSpigot-API/src/main/java/org/bukkit/help/HelpMap.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/help/HelpMap.java rename to eSpigot-API/src/main/java/org/bukkit/help/HelpMap.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/help/HelpTopic.java b/eSpigot-API/src/main/java/org/bukkit/help/HelpTopic.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/help/HelpTopic.java rename to eSpigot-API/src/main/java/org/bukkit/help/HelpTopic.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/help/HelpTopicComparator.java b/eSpigot-API/src/main/java/org/bukkit/help/HelpTopicComparator.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/help/HelpTopicComparator.java rename to eSpigot-API/src/main/java/org/bukkit/help/HelpTopicComparator.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/help/HelpTopicFactory.java b/eSpigot-API/src/main/java/org/bukkit/help/HelpTopicFactory.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/help/HelpTopicFactory.java rename to eSpigot-API/src/main/java/org/bukkit/help/HelpTopicFactory.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/help/IndexHelpTopic.java b/eSpigot-API/src/main/java/org/bukkit/help/IndexHelpTopic.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/help/IndexHelpTopic.java rename to eSpigot-API/src/main/java/org/bukkit/help/IndexHelpTopic.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/inventory/AnvilInventory.java b/eSpigot-API/src/main/java/org/bukkit/inventory/AnvilInventory.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/inventory/AnvilInventory.java rename to eSpigot-API/src/main/java/org/bukkit/inventory/AnvilInventory.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/inventory/BeaconInventory.java b/eSpigot-API/src/main/java/org/bukkit/inventory/BeaconInventory.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/inventory/BeaconInventory.java rename to eSpigot-API/src/main/java/org/bukkit/inventory/BeaconInventory.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/inventory/BrewerInventory.java b/eSpigot-API/src/main/java/org/bukkit/inventory/BrewerInventory.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/inventory/BrewerInventory.java rename to eSpigot-API/src/main/java/org/bukkit/inventory/BrewerInventory.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/inventory/CraftingInventory.java b/eSpigot-API/src/main/java/org/bukkit/inventory/CraftingInventory.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/inventory/CraftingInventory.java rename to eSpigot-API/src/main/java/org/bukkit/inventory/CraftingInventory.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/inventory/DoubleChestInventory.java b/eSpigot-API/src/main/java/org/bukkit/inventory/DoubleChestInventory.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/inventory/DoubleChestInventory.java rename to eSpigot-API/src/main/java/org/bukkit/inventory/DoubleChestInventory.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/inventory/EnchantingInventory.java b/eSpigot-API/src/main/java/org/bukkit/inventory/EnchantingInventory.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/inventory/EnchantingInventory.java rename to eSpigot-API/src/main/java/org/bukkit/inventory/EnchantingInventory.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/inventory/EntityEquipment.java b/eSpigot-API/src/main/java/org/bukkit/inventory/EntityEquipment.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/inventory/EntityEquipment.java rename to eSpigot-API/src/main/java/org/bukkit/inventory/EntityEquipment.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/inventory/EquipmentSlot.java b/eSpigot-API/src/main/java/org/bukkit/inventory/EquipmentSlot.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/inventory/EquipmentSlot.java rename to eSpigot-API/src/main/java/org/bukkit/inventory/EquipmentSlot.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/inventory/FurnaceInventory.java b/eSpigot-API/src/main/java/org/bukkit/inventory/FurnaceInventory.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/inventory/FurnaceInventory.java rename to eSpigot-API/src/main/java/org/bukkit/inventory/FurnaceInventory.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/inventory/FurnaceRecipe.java b/eSpigot-API/src/main/java/org/bukkit/inventory/FurnaceRecipe.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/inventory/FurnaceRecipe.java rename to eSpigot-API/src/main/java/org/bukkit/inventory/FurnaceRecipe.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/inventory/HorseInventory.java b/eSpigot-API/src/main/java/org/bukkit/inventory/HorseInventory.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/inventory/HorseInventory.java rename to eSpigot-API/src/main/java/org/bukkit/inventory/HorseInventory.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/inventory/Inventory.java b/eSpigot-API/src/main/java/org/bukkit/inventory/Inventory.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/inventory/Inventory.java rename to eSpigot-API/src/main/java/org/bukkit/inventory/Inventory.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/inventory/InventoryHolder.java b/eSpigot-API/src/main/java/org/bukkit/inventory/InventoryHolder.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/inventory/InventoryHolder.java rename to eSpigot-API/src/main/java/org/bukkit/inventory/InventoryHolder.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/inventory/InventoryView.java b/eSpigot-API/src/main/java/org/bukkit/inventory/InventoryView.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/inventory/InventoryView.java rename to eSpigot-API/src/main/java/org/bukkit/inventory/InventoryView.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/inventory/ItemFactory.java b/eSpigot-API/src/main/java/org/bukkit/inventory/ItemFactory.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/inventory/ItemFactory.java rename to eSpigot-API/src/main/java/org/bukkit/inventory/ItemFactory.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/inventory/ItemFlag.java b/eSpigot-API/src/main/java/org/bukkit/inventory/ItemFlag.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/inventory/ItemFlag.java rename to eSpigot-API/src/main/java/org/bukkit/inventory/ItemFlag.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/inventory/ItemStack.java b/eSpigot-API/src/main/java/org/bukkit/inventory/ItemStack.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/inventory/ItemStack.java rename to eSpigot-API/src/main/java/org/bukkit/inventory/ItemStack.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/inventory/MerchantInventory.java b/eSpigot-API/src/main/java/org/bukkit/inventory/MerchantInventory.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/inventory/MerchantInventory.java rename to eSpigot-API/src/main/java/org/bukkit/inventory/MerchantInventory.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/inventory/PlayerInventory.java b/eSpigot-API/src/main/java/org/bukkit/inventory/PlayerInventory.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/inventory/PlayerInventory.java rename to eSpigot-API/src/main/java/org/bukkit/inventory/PlayerInventory.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/inventory/Recipe.java b/eSpigot-API/src/main/java/org/bukkit/inventory/Recipe.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/inventory/Recipe.java rename to eSpigot-API/src/main/java/org/bukkit/inventory/Recipe.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/inventory/ShapedRecipe.java b/eSpigot-API/src/main/java/org/bukkit/inventory/ShapedRecipe.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/inventory/ShapedRecipe.java rename to eSpigot-API/src/main/java/org/bukkit/inventory/ShapedRecipe.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/inventory/ShapelessRecipe.java b/eSpigot-API/src/main/java/org/bukkit/inventory/ShapelessRecipe.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/inventory/ShapelessRecipe.java rename to eSpigot-API/src/main/java/org/bukkit/inventory/ShapelessRecipe.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/inventory/meta/BannerMeta.java b/eSpigot-API/src/main/java/org/bukkit/inventory/meta/BannerMeta.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/inventory/meta/BannerMeta.java rename to eSpigot-API/src/main/java/org/bukkit/inventory/meta/BannerMeta.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/inventory/meta/BlockStateMeta.java b/eSpigot-API/src/main/java/org/bukkit/inventory/meta/BlockStateMeta.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/inventory/meta/BlockStateMeta.java rename to eSpigot-API/src/main/java/org/bukkit/inventory/meta/BlockStateMeta.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/inventory/meta/BookMeta.java b/eSpigot-API/src/main/java/org/bukkit/inventory/meta/BookMeta.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/inventory/meta/BookMeta.java rename to eSpigot-API/src/main/java/org/bukkit/inventory/meta/BookMeta.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/inventory/meta/EnchantmentStorageMeta.java b/eSpigot-API/src/main/java/org/bukkit/inventory/meta/EnchantmentStorageMeta.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/inventory/meta/EnchantmentStorageMeta.java rename to eSpigot-API/src/main/java/org/bukkit/inventory/meta/EnchantmentStorageMeta.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/inventory/meta/FireworkEffectMeta.java b/eSpigot-API/src/main/java/org/bukkit/inventory/meta/FireworkEffectMeta.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/inventory/meta/FireworkEffectMeta.java rename to eSpigot-API/src/main/java/org/bukkit/inventory/meta/FireworkEffectMeta.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/inventory/meta/FireworkMeta.java b/eSpigot-API/src/main/java/org/bukkit/inventory/meta/FireworkMeta.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/inventory/meta/FireworkMeta.java rename to eSpigot-API/src/main/java/org/bukkit/inventory/meta/FireworkMeta.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/inventory/meta/ItemMeta.java b/eSpigot-API/src/main/java/org/bukkit/inventory/meta/ItemMeta.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/inventory/meta/ItemMeta.java rename to eSpigot-API/src/main/java/org/bukkit/inventory/meta/ItemMeta.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/inventory/meta/LeatherArmorMeta.java b/eSpigot-API/src/main/java/org/bukkit/inventory/meta/LeatherArmorMeta.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/inventory/meta/LeatherArmorMeta.java rename to eSpigot-API/src/main/java/org/bukkit/inventory/meta/LeatherArmorMeta.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/inventory/meta/MapMeta.java b/eSpigot-API/src/main/java/org/bukkit/inventory/meta/MapMeta.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/inventory/meta/MapMeta.java rename to eSpigot-API/src/main/java/org/bukkit/inventory/meta/MapMeta.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/inventory/meta/PotionMeta.java b/eSpigot-API/src/main/java/org/bukkit/inventory/meta/PotionMeta.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/inventory/meta/PotionMeta.java rename to eSpigot-API/src/main/java/org/bukkit/inventory/meta/PotionMeta.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/inventory/meta/Repairable.java b/eSpigot-API/src/main/java/org/bukkit/inventory/meta/Repairable.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/inventory/meta/Repairable.java rename to eSpigot-API/src/main/java/org/bukkit/inventory/meta/Repairable.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/inventory/meta/SkullMeta.java b/eSpigot-API/src/main/java/org/bukkit/inventory/meta/SkullMeta.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/inventory/meta/SkullMeta.java rename to eSpigot-API/src/main/java/org/bukkit/inventory/meta/SkullMeta.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/map/MapCanvas.java b/eSpigot-API/src/main/java/org/bukkit/map/MapCanvas.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/map/MapCanvas.java rename to eSpigot-API/src/main/java/org/bukkit/map/MapCanvas.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/map/MapCursor.java b/eSpigot-API/src/main/java/org/bukkit/map/MapCursor.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/map/MapCursor.java rename to eSpigot-API/src/main/java/org/bukkit/map/MapCursor.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/map/MapCursorCollection.java b/eSpigot-API/src/main/java/org/bukkit/map/MapCursorCollection.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/map/MapCursorCollection.java rename to eSpigot-API/src/main/java/org/bukkit/map/MapCursorCollection.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/map/MapFont.java b/eSpigot-API/src/main/java/org/bukkit/map/MapFont.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/map/MapFont.java rename to eSpigot-API/src/main/java/org/bukkit/map/MapFont.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/map/MapPalette.java b/eSpigot-API/src/main/java/org/bukkit/map/MapPalette.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/map/MapPalette.java rename to eSpigot-API/src/main/java/org/bukkit/map/MapPalette.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/map/MapRenderer.java b/eSpigot-API/src/main/java/org/bukkit/map/MapRenderer.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/map/MapRenderer.java rename to eSpigot-API/src/main/java/org/bukkit/map/MapRenderer.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/map/MapView.java b/eSpigot-API/src/main/java/org/bukkit/map/MapView.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/map/MapView.java rename to eSpigot-API/src/main/java/org/bukkit/map/MapView.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/map/MinecraftFont.java b/eSpigot-API/src/main/java/org/bukkit/map/MinecraftFont.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/map/MinecraftFont.java rename to eSpigot-API/src/main/java/org/bukkit/map/MinecraftFont.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/Attachable.java b/eSpigot-API/src/main/java/org/bukkit/material/Attachable.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/Attachable.java rename to eSpigot-API/src/main/java/org/bukkit/material/Attachable.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/Banner.java b/eSpigot-API/src/main/java/org/bukkit/material/Banner.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/Banner.java rename to eSpigot-API/src/main/java/org/bukkit/material/Banner.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/Bed.java b/eSpigot-API/src/main/java/org/bukkit/material/Bed.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/Bed.java rename to eSpigot-API/src/main/java/org/bukkit/material/Bed.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/Button.java b/eSpigot-API/src/main/java/org/bukkit/material/Button.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/Button.java rename to eSpigot-API/src/main/java/org/bukkit/material/Button.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/Cake.java b/eSpigot-API/src/main/java/org/bukkit/material/Cake.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/Cake.java rename to eSpigot-API/src/main/java/org/bukkit/material/Cake.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/Cauldron.java b/eSpigot-API/src/main/java/org/bukkit/material/Cauldron.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/Cauldron.java rename to eSpigot-API/src/main/java/org/bukkit/material/Cauldron.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/Chest.java b/eSpigot-API/src/main/java/org/bukkit/material/Chest.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/Chest.java rename to eSpigot-API/src/main/java/org/bukkit/material/Chest.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/Coal.java b/eSpigot-API/src/main/java/org/bukkit/material/Coal.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/Coal.java rename to eSpigot-API/src/main/java/org/bukkit/material/Coal.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/CocoaPlant.java b/eSpigot-API/src/main/java/org/bukkit/material/CocoaPlant.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/CocoaPlant.java rename to eSpigot-API/src/main/java/org/bukkit/material/CocoaPlant.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/Colorable.java b/eSpigot-API/src/main/java/org/bukkit/material/Colorable.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/Colorable.java rename to eSpigot-API/src/main/java/org/bukkit/material/Colorable.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/Command.java b/eSpigot-API/src/main/java/org/bukkit/material/Command.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/Command.java rename to eSpigot-API/src/main/java/org/bukkit/material/Command.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/Crops.java b/eSpigot-API/src/main/java/org/bukkit/material/Crops.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/Crops.java rename to eSpigot-API/src/main/java/org/bukkit/material/Crops.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/DetectorRail.java b/eSpigot-API/src/main/java/org/bukkit/material/DetectorRail.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/DetectorRail.java rename to eSpigot-API/src/main/java/org/bukkit/material/DetectorRail.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/Diode.java b/eSpigot-API/src/main/java/org/bukkit/material/Diode.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/Diode.java rename to eSpigot-API/src/main/java/org/bukkit/material/Diode.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/Directional.java b/eSpigot-API/src/main/java/org/bukkit/material/Directional.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/Directional.java rename to eSpigot-API/src/main/java/org/bukkit/material/Directional.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/DirectionalContainer.java b/eSpigot-API/src/main/java/org/bukkit/material/DirectionalContainer.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/DirectionalContainer.java rename to eSpigot-API/src/main/java/org/bukkit/material/DirectionalContainer.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/Dispenser.java b/eSpigot-API/src/main/java/org/bukkit/material/Dispenser.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/Dispenser.java rename to eSpigot-API/src/main/java/org/bukkit/material/Dispenser.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/Door.java b/eSpigot-API/src/main/java/org/bukkit/material/Door.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/Door.java rename to eSpigot-API/src/main/java/org/bukkit/material/Door.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/Dye.java b/eSpigot-API/src/main/java/org/bukkit/material/Dye.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/Dye.java rename to eSpigot-API/src/main/java/org/bukkit/material/Dye.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/EnderChest.java b/eSpigot-API/src/main/java/org/bukkit/material/EnderChest.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/EnderChest.java rename to eSpigot-API/src/main/java/org/bukkit/material/EnderChest.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/ExtendedRails.java b/eSpigot-API/src/main/java/org/bukkit/material/ExtendedRails.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/ExtendedRails.java rename to eSpigot-API/src/main/java/org/bukkit/material/ExtendedRails.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/FlowerPot.java b/eSpigot-API/src/main/java/org/bukkit/material/FlowerPot.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/FlowerPot.java rename to eSpigot-API/src/main/java/org/bukkit/material/FlowerPot.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/Furnace.java b/eSpigot-API/src/main/java/org/bukkit/material/Furnace.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/Furnace.java rename to eSpigot-API/src/main/java/org/bukkit/material/Furnace.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/FurnaceAndDispenser.java b/eSpigot-API/src/main/java/org/bukkit/material/FurnaceAndDispenser.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/FurnaceAndDispenser.java rename to eSpigot-API/src/main/java/org/bukkit/material/FurnaceAndDispenser.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/Gate.java b/eSpigot-API/src/main/java/org/bukkit/material/Gate.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/Gate.java rename to eSpigot-API/src/main/java/org/bukkit/material/Gate.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/Ladder.java b/eSpigot-API/src/main/java/org/bukkit/material/Ladder.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/Ladder.java rename to eSpigot-API/src/main/java/org/bukkit/material/Ladder.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/Leaves.java b/eSpigot-API/src/main/java/org/bukkit/material/Leaves.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/Leaves.java rename to eSpigot-API/src/main/java/org/bukkit/material/Leaves.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/Lever.java b/eSpigot-API/src/main/java/org/bukkit/material/Lever.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/Lever.java rename to eSpigot-API/src/main/java/org/bukkit/material/Lever.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/LongGrass.java b/eSpigot-API/src/main/java/org/bukkit/material/LongGrass.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/LongGrass.java rename to eSpigot-API/src/main/java/org/bukkit/material/LongGrass.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/MaterialData.java b/eSpigot-API/src/main/java/org/bukkit/material/MaterialData.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/MaterialData.java rename to eSpigot-API/src/main/java/org/bukkit/material/MaterialData.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/MonsterEggs.java b/eSpigot-API/src/main/java/org/bukkit/material/MonsterEggs.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/MonsterEggs.java rename to eSpigot-API/src/main/java/org/bukkit/material/MonsterEggs.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/Mushroom.java b/eSpigot-API/src/main/java/org/bukkit/material/Mushroom.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/Mushroom.java rename to eSpigot-API/src/main/java/org/bukkit/material/Mushroom.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/NetherWarts.java b/eSpigot-API/src/main/java/org/bukkit/material/NetherWarts.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/NetherWarts.java rename to eSpigot-API/src/main/java/org/bukkit/material/NetherWarts.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/Openable.java b/eSpigot-API/src/main/java/org/bukkit/material/Openable.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/Openable.java rename to eSpigot-API/src/main/java/org/bukkit/material/Openable.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/PistonBaseMaterial.java b/eSpigot-API/src/main/java/org/bukkit/material/PistonBaseMaterial.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/PistonBaseMaterial.java rename to eSpigot-API/src/main/java/org/bukkit/material/PistonBaseMaterial.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/PistonExtensionMaterial.java b/eSpigot-API/src/main/java/org/bukkit/material/PistonExtensionMaterial.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/PistonExtensionMaterial.java rename to eSpigot-API/src/main/java/org/bukkit/material/PistonExtensionMaterial.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/PoweredRail.java b/eSpigot-API/src/main/java/org/bukkit/material/PoweredRail.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/PoweredRail.java rename to eSpigot-API/src/main/java/org/bukkit/material/PoweredRail.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/PressurePlate.java b/eSpigot-API/src/main/java/org/bukkit/material/PressurePlate.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/PressurePlate.java rename to eSpigot-API/src/main/java/org/bukkit/material/PressurePlate.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/PressureSensor.java b/eSpigot-API/src/main/java/org/bukkit/material/PressureSensor.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/PressureSensor.java rename to eSpigot-API/src/main/java/org/bukkit/material/PressureSensor.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/Pumpkin.java b/eSpigot-API/src/main/java/org/bukkit/material/Pumpkin.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/Pumpkin.java rename to eSpigot-API/src/main/java/org/bukkit/material/Pumpkin.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/Rails.java b/eSpigot-API/src/main/java/org/bukkit/material/Rails.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/Rails.java rename to eSpigot-API/src/main/java/org/bukkit/material/Rails.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/Redstone.java b/eSpigot-API/src/main/java/org/bukkit/material/Redstone.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/Redstone.java rename to eSpigot-API/src/main/java/org/bukkit/material/Redstone.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/RedstoneTorch.java b/eSpigot-API/src/main/java/org/bukkit/material/RedstoneTorch.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/RedstoneTorch.java rename to eSpigot-API/src/main/java/org/bukkit/material/RedstoneTorch.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/RedstoneWire.java b/eSpigot-API/src/main/java/org/bukkit/material/RedstoneWire.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/RedstoneWire.java rename to eSpigot-API/src/main/java/org/bukkit/material/RedstoneWire.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/Sandstone.java b/eSpigot-API/src/main/java/org/bukkit/material/Sandstone.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/Sandstone.java rename to eSpigot-API/src/main/java/org/bukkit/material/Sandstone.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/Sign.java b/eSpigot-API/src/main/java/org/bukkit/material/Sign.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/Sign.java rename to eSpigot-API/src/main/java/org/bukkit/material/Sign.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/SimpleAttachableMaterialData.java b/eSpigot-API/src/main/java/org/bukkit/material/SimpleAttachableMaterialData.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/SimpleAttachableMaterialData.java rename to eSpigot-API/src/main/java/org/bukkit/material/SimpleAttachableMaterialData.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/Skull.java b/eSpigot-API/src/main/java/org/bukkit/material/Skull.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/Skull.java rename to eSpigot-API/src/main/java/org/bukkit/material/Skull.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/SmoothBrick.java b/eSpigot-API/src/main/java/org/bukkit/material/SmoothBrick.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/SmoothBrick.java rename to eSpigot-API/src/main/java/org/bukkit/material/SmoothBrick.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/SpawnEgg.java b/eSpigot-API/src/main/java/org/bukkit/material/SpawnEgg.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/SpawnEgg.java rename to eSpigot-API/src/main/java/org/bukkit/material/SpawnEgg.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/Stairs.java b/eSpigot-API/src/main/java/org/bukkit/material/Stairs.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/Stairs.java rename to eSpigot-API/src/main/java/org/bukkit/material/Stairs.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/Step.java b/eSpigot-API/src/main/java/org/bukkit/material/Step.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/Step.java rename to eSpigot-API/src/main/java/org/bukkit/material/Step.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/TexturedMaterial.java b/eSpigot-API/src/main/java/org/bukkit/material/TexturedMaterial.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/TexturedMaterial.java rename to eSpigot-API/src/main/java/org/bukkit/material/TexturedMaterial.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/Torch.java b/eSpigot-API/src/main/java/org/bukkit/material/Torch.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/Torch.java rename to eSpigot-API/src/main/java/org/bukkit/material/Torch.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/TrapDoor.java b/eSpigot-API/src/main/java/org/bukkit/material/TrapDoor.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/TrapDoor.java rename to eSpigot-API/src/main/java/org/bukkit/material/TrapDoor.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/Tree.java b/eSpigot-API/src/main/java/org/bukkit/material/Tree.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/Tree.java rename to eSpigot-API/src/main/java/org/bukkit/material/Tree.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/Tripwire.java b/eSpigot-API/src/main/java/org/bukkit/material/Tripwire.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/Tripwire.java rename to eSpigot-API/src/main/java/org/bukkit/material/Tripwire.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/TripwireHook.java b/eSpigot-API/src/main/java/org/bukkit/material/TripwireHook.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/TripwireHook.java rename to eSpigot-API/src/main/java/org/bukkit/material/TripwireHook.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/Vine.java b/eSpigot-API/src/main/java/org/bukkit/material/Vine.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/Vine.java rename to eSpigot-API/src/main/java/org/bukkit/material/Vine.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/WoodenStep.java b/eSpigot-API/src/main/java/org/bukkit/material/WoodenStep.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/WoodenStep.java rename to eSpigot-API/src/main/java/org/bukkit/material/WoodenStep.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/material/Wool.java b/eSpigot-API/src/main/java/org/bukkit/material/Wool.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/material/Wool.java rename to eSpigot-API/src/main/java/org/bukkit/material/Wool.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/metadata/FixedMetadataValue.java b/eSpigot-API/src/main/java/org/bukkit/metadata/FixedMetadataValue.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/metadata/FixedMetadataValue.java rename to eSpigot-API/src/main/java/org/bukkit/metadata/FixedMetadataValue.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/metadata/LazyMetadataValue.java b/eSpigot-API/src/main/java/org/bukkit/metadata/LazyMetadataValue.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/metadata/LazyMetadataValue.java rename to eSpigot-API/src/main/java/org/bukkit/metadata/LazyMetadataValue.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/metadata/MetadataConversionException.java b/eSpigot-API/src/main/java/org/bukkit/metadata/MetadataConversionException.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/metadata/MetadataConversionException.java rename to eSpigot-API/src/main/java/org/bukkit/metadata/MetadataConversionException.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/metadata/MetadataEvaluationException.java b/eSpigot-API/src/main/java/org/bukkit/metadata/MetadataEvaluationException.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/metadata/MetadataEvaluationException.java rename to eSpigot-API/src/main/java/org/bukkit/metadata/MetadataEvaluationException.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/metadata/MetadataStore.java b/eSpigot-API/src/main/java/org/bukkit/metadata/MetadataStore.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/metadata/MetadataStore.java rename to eSpigot-API/src/main/java/org/bukkit/metadata/MetadataStore.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/metadata/MetadataStoreBase.java b/eSpigot-API/src/main/java/org/bukkit/metadata/MetadataStoreBase.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/metadata/MetadataStoreBase.java rename to eSpigot-API/src/main/java/org/bukkit/metadata/MetadataStoreBase.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/metadata/MetadataValue.java b/eSpigot-API/src/main/java/org/bukkit/metadata/MetadataValue.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/metadata/MetadataValue.java rename to eSpigot-API/src/main/java/org/bukkit/metadata/MetadataValue.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/metadata/MetadataValueAdapter.java b/eSpigot-API/src/main/java/org/bukkit/metadata/MetadataValueAdapter.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/metadata/MetadataValueAdapter.java rename to eSpigot-API/src/main/java/org/bukkit/metadata/MetadataValueAdapter.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/metadata/Metadatable.java b/eSpigot-API/src/main/java/org/bukkit/metadata/Metadatable.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/metadata/Metadatable.java rename to eSpigot-API/src/main/java/org/bukkit/metadata/Metadatable.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/permissions/Permissible.java b/eSpigot-API/src/main/java/org/bukkit/permissions/Permissible.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/permissions/Permissible.java rename to eSpigot-API/src/main/java/org/bukkit/permissions/Permissible.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/permissions/PermissibleBase.java b/eSpigot-API/src/main/java/org/bukkit/permissions/PermissibleBase.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/permissions/PermissibleBase.java rename to eSpigot-API/src/main/java/org/bukkit/permissions/PermissibleBase.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/permissions/Permission.java b/eSpigot-API/src/main/java/org/bukkit/permissions/Permission.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/permissions/Permission.java rename to eSpigot-API/src/main/java/org/bukkit/permissions/Permission.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/permissions/PermissionAttachment.java b/eSpigot-API/src/main/java/org/bukkit/permissions/PermissionAttachment.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/permissions/PermissionAttachment.java rename to eSpigot-API/src/main/java/org/bukkit/permissions/PermissionAttachment.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/permissions/PermissionAttachmentInfo.java b/eSpigot-API/src/main/java/org/bukkit/permissions/PermissionAttachmentInfo.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/permissions/PermissionAttachmentInfo.java rename to eSpigot-API/src/main/java/org/bukkit/permissions/PermissionAttachmentInfo.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/permissions/PermissionDefault.java b/eSpigot-API/src/main/java/org/bukkit/permissions/PermissionDefault.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/permissions/PermissionDefault.java rename to eSpigot-API/src/main/java/org/bukkit/permissions/PermissionDefault.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/permissions/PermissionRemovedExecutor.java b/eSpigot-API/src/main/java/org/bukkit/permissions/PermissionRemovedExecutor.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/permissions/PermissionRemovedExecutor.java rename to eSpigot-API/src/main/java/org/bukkit/permissions/PermissionRemovedExecutor.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/permissions/ServerOperator.java b/eSpigot-API/src/main/java/org/bukkit/permissions/ServerOperator.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/permissions/ServerOperator.java rename to eSpigot-API/src/main/java/org/bukkit/permissions/ServerOperator.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/plugin/AuthorNagException.java b/eSpigot-API/src/main/java/org/bukkit/plugin/AuthorNagException.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/plugin/AuthorNagException.java rename to eSpigot-API/src/main/java/org/bukkit/plugin/AuthorNagException.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/plugin/EventExecutor.java b/eSpigot-API/src/main/java/org/bukkit/plugin/EventExecutor.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/plugin/EventExecutor.java rename to eSpigot-API/src/main/java/org/bukkit/plugin/EventExecutor.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/plugin/IllegalPluginAccessException.java b/eSpigot-API/src/main/java/org/bukkit/plugin/IllegalPluginAccessException.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/plugin/IllegalPluginAccessException.java rename to eSpigot-API/src/main/java/org/bukkit/plugin/IllegalPluginAccessException.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/plugin/InvalidDescriptionException.java b/eSpigot-API/src/main/java/org/bukkit/plugin/InvalidDescriptionException.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/plugin/InvalidDescriptionException.java rename to eSpigot-API/src/main/java/org/bukkit/plugin/InvalidDescriptionException.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/plugin/InvalidPluginException.java b/eSpigot-API/src/main/java/org/bukkit/plugin/InvalidPluginException.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/plugin/InvalidPluginException.java rename to eSpigot-API/src/main/java/org/bukkit/plugin/InvalidPluginException.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/plugin/Plugin.java b/eSpigot-API/src/main/java/org/bukkit/plugin/Plugin.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/plugin/Plugin.java rename to eSpigot-API/src/main/java/org/bukkit/plugin/Plugin.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/plugin/PluginAwareness.java b/eSpigot-API/src/main/java/org/bukkit/plugin/PluginAwareness.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/plugin/PluginAwareness.java rename to eSpigot-API/src/main/java/org/bukkit/plugin/PluginAwareness.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/plugin/PluginBase.java b/eSpigot-API/src/main/java/org/bukkit/plugin/PluginBase.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/plugin/PluginBase.java rename to eSpigot-API/src/main/java/org/bukkit/plugin/PluginBase.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/plugin/PluginDescriptionFile.java b/eSpigot-API/src/main/java/org/bukkit/plugin/PluginDescriptionFile.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/plugin/PluginDescriptionFile.java rename to eSpigot-API/src/main/java/org/bukkit/plugin/PluginDescriptionFile.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/plugin/PluginLoadOrder.java b/eSpigot-API/src/main/java/org/bukkit/plugin/PluginLoadOrder.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/plugin/PluginLoadOrder.java rename to eSpigot-API/src/main/java/org/bukkit/plugin/PluginLoadOrder.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/plugin/PluginLoader.java b/eSpigot-API/src/main/java/org/bukkit/plugin/PluginLoader.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/plugin/PluginLoader.java rename to eSpigot-API/src/main/java/org/bukkit/plugin/PluginLoader.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/plugin/PluginLogger.java b/eSpigot-API/src/main/java/org/bukkit/plugin/PluginLogger.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/plugin/PluginLogger.java rename to eSpigot-API/src/main/java/org/bukkit/plugin/PluginLogger.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/plugin/PluginManager.java b/eSpigot-API/src/main/java/org/bukkit/plugin/PluginManager.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/plugin/PluginManager.java rename to eSpigot-API/src/main/java/org/bukkit/plugin/PluginManager.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/plugin/RegisteredListener.java b/eSpigot-API/src/main/java/org/bukkit/plugin/RegisteredListener.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/plugin/RegisteredListener.java rename to eSpigot-API/src/main/java/org/bukkit/plugin/RegisteredListener.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/plugin/RegisteredServiceProvider.java b/eSpigot-API/src/main/java/org/bukkit/plugin/RegisteredServiceProvider.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/plugin/RegisteredServiceProvider.java rename to eSpigot-API/src/main/java/org/bukkit/plugin/RegisteredServiceProvider.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/plugin/ServicePriority.java b/eSpigot-API/src/main/java/org/bukkit/plugin/ServicePriority.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/plugin/ServicePriority.java rename to eSpigot-API/src/main/java/org/bukkit/plugin/ServicePriority.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/plugin/ServicesManager.java b/eSpigot-API/src/main/java/org/bukkit/plugin/ServicesManager.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/plugin/ServicesManager.java rename to eSpigot-API/src/main/java/org/bukkit/plugin/ServicesManager.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/plugin/SimplePluginManager.java b/eSpigot-API/src/main/java/org/bukkit/plugin/SimplePluginManager.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/plugin/SimplePluginManager.java rename to eSpigot-API/src/main/java/org/bukkit/plugin/SimplePluginManager.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/plugin/SimpleServicesManager.java b/eSpigot-API/src/main/java/org/bukkit/plugin/SimpleServicesManager.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/plugin/SimpleServicesManager.java rename to eSpigot-API/src/main/java/org/bukkit/plugin/SimpleServicesManager.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/plugin/TimedRegisteredListener.java b/eSpigot-API/src/main/java/org/bukkit/plugin/TimedRegisteredListener.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/plugin/TimedRegisteredListener.java rename to eSpigot-API/src/main/java/org/bukkit/plugin/TimedRegisteredListener.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/plugin/UnknownDependencyException.java b/eSpigot-API/src/main/java/org/bukkit/plugin/UnknownDependencyException.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/plugin/UnknownDependencyException.java rename to eSpigot-API/src/main/java/org/bukkit/plugin/UnknownDependencyException.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/plugin/java/JavaPlugin.java b/eSpigot-API/src/main/java/org/bukkit/plugin/java/JavaPlugin.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/plugin/java/JavaPlugin.java rename to eSpigot-API/src/main/java/org/bukkit/plugin/java/JavaPlugin.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java b/eSpigot-API/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java rename to eSpigot-API/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java b/eSpigot-API/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java rename to eSpigot-API/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/plugin/messaging/ChannelNameTooLongException.java b/eSpigot-API/src/main/java/org/bukkit/plugin/messaging/ChannelNameTooLongException.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/plugin/messaging/ChannelNameTooLongException.java rename to eSpigot-API/src/main/java/org/bukkit/plugin/messaging/ChannelNameTooLongException.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/plugin/messaging/ChannelNotRegisteredException.java b/eSpigot-API/src/main/java/org/bukkit/plugin/messaging/ChannelNotRegisteredException.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/plugin/messaging/ChannelNotRegisteredException.java rename to eSpigot-API/src/main/java/org/bukkit/plugin/messaging/ChannelNotRegisteredException.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/plugin/messaging/MessageTooLargeException.java b/eSpigot-API/src/main/java/org/bukkit/plugin/messaging/MessageTooLargeException.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/plugin/messaging/MessageTooLargeException.java rename to eSpigot-API/src/main/java/org/bukkit/plugin/messaging/MessageTooLargeException.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/plugin/messaging/Messenger.java b/eSpigot-API/src/main/java/org/bukkit/plugin/messaging/Messenger.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/plugin/messaging/Messenger.java rename to eSpigot-API/src/main/java/org/bukkit/plugin/messaging/Messenger.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/plugin/messaging/PluginChannelDirection.java b/eSpigot-API/src/main/java/org/bukkit/plugin/messaging/PluginChannelDirection.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/plugin/messaging/PluginChannelDirection.java rename to eSpigot-API/src/main/java/org/bukkit/plugin/messaging/PluginChannelDirection.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/plugin/messaging/PluginMessageListener.java b/eSpigot-API/src/main/java/org/bukkit/plugin/messaging/PluginMessageListener.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/plugin/messaging/PluginMessageListener.java rename to eSpigot-API/src/main/java/org/bukkit/plugin/messaging/PluginMessageListener.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/plugin/messaging/PluginMessageListenerRegistration.java b/eSpigot-API/src/main/java/org/bukkit/plugin/messaging/PluginMessageListenerRegistration.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/plugin/messaging/PluginMessageListenerRegistration.java rename to eSpigot-API/src/main/java/org/bukkit/plugin/messaging/PluginMessageListenerRegistration.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/plugin/messaging/PluginMessageRecipient.java b/eSpigot-API/src/main/java/org/bukkit/plugin/messaging/PluginMessageRecipient.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/plugin/messaging/PluginMessageRecipient.java rename to eSpigot-API/src/main/java/org/bukkit/plugin/messaging/PluginMessageRecipient.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/plugin/messaging/ReservedChannelException.java b/eSpigot-API/src/main/java/org/bukkit/plugin/messaging/ReservedChannelException.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/plugin/messaging/ReservedChannelException.java rename to eSpigot-API/src/main/java/org/bukkit/plugin/messaging/ReservedChannelException.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/plugin/messaging/StandardMessenger.java b/eSpigot-API/src/main/java/org/bukkit/plugin/messaging/StandardMessenger.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/plugin/messaging/StandardMessenger.java rename to eSpigot-API/src/main/java/org/bukkit/plugin/messaging/StandardMessenger.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/potion/Potion.java b/eSpigot-API/src/main/java/org/bukkit/potion/Potion.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/potion/Potion.java rename to eSpigot-API/src/main/java/org/bukkit/potion/Potion.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/potion/PotionBrewer.java b/eSpigot-API/src/main/java/org/bukkit/potion/PotionBrewer.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/potion/PotionBrewer.java rename to eSpigot-API/src/main/java/org/bukkit/potion/PotionBrewer.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/potion/PotionEffect.java b/eSpigot-API/src/main/java/org/bukkit/potion/PotionEffect.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/potion/PotionEffect.java rename to eSpigot-API/src/main/java/org/bukkit/potion/PotionEffect.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/potion/PotionEffectType.java b/eSpigot-API/src/main/java/org/bukkit/potion/PotionEffectType.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/potion/PotionEffectType.java rename to eSpigot-API/src/main/java/org/bukkit/potion/PotionEffectType.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/potion/PotionEffectTypeWrapper.java b/eSpigot-API/src/main/java/org/bukkit/potion/PotionEffectTypeWrapper.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/potion/PotionEffectTypeWrapper.java rename to eSpigot-API/src/main/java/org/bukkit/potion/PotionEffectTypeWrapper.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/potion/PotionType.java b/eSpigot-API/src/main/java/org/bukkit/potion/PotionType.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/potion/PotionType.java rename to eSpigot-API/src/main/java/org/bukkit/potion/PotionType.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/projectiles/BlockProjectileSource.java b/eSpigot-API/src/main/java/org/bukkit/projectiles/BlockProjectileSource.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/projectiles/BlockProjectileSource.java rename to eSpigot-API/src/main/java/org/bukkit/projectiles/BlockProjectileSource.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/projectiles/ProjectileSource.java b/eSpigot-API/src/main/java/org/bukkit/projectiles/ProjectileSource.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/projectiles/ProjectileSource.java rename to eSpigot-API/src/main/java/org/bukkit/projectiles/ProjectileSource.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/scheduler/BukkitRunnable.java b/eSpigot-API/src/main/java/org/bukkit/scheduler/BukkitRunnable.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/scheduler/BukkitRunnable.java rename to eSpigot-API/src/main/java/org/bukkit/scheduler/BukkitRunnable.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/scheduler/BukkitScheduler.java b/eSpigot-API/src/main/java/org/bukkit/scheduler/BukkitScheduler.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/scheduler/BukkitScheduler.java rename to eSpigot-API/src/main/java/org/bukkit/scheduler/BukkitScheduler.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/scheduler/BukkitTask.java b/eSpigot-API/src/main/java/org/bukkit/scheduler/BukkitTask.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/scheduler/BukkitTask.java rename to eSpigot-API/src/main/java/org/bukkit/scheduler/BukkitTask.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/scheduler/BukkitWorker.java b/eSpigot-API/src/main/java/org/bukkit/scheduler/BukkitWorker.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/scheduler/BukkitWorker.java rename to eSpigot-API/src/main/java/org/bukkit/scheduler/BukkitWorker.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/scoreboard/Criterias.java b/eSpigot-API/src/main/java/org/bukkit/scoreboard/Criterias.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/scoreboard/Criterias.java rename to eSpigot-API/src/main/java/org/bukkit/scoreboard/Criterias.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/scoreboard/DisplaySlot.java b/eSpigot-API/src/main/java/org/bukkit/scoreboard/DisplaySlot.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/scoreboard/DisplaySlot.java rename to eSpigot-API/src/main/java/org/bukkit/scoreboard/DisplaySlot.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/scoreboard/NameTagVisibility.java b/eSpigot-API/src/main/java/org/bukkit/scoreboard/NameTagVisibility.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/scoreboard/NameTagVisibility.java rename to eSpigot-API/src/main/java/org/bukkit/scoreboard/NameTagVisibility.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/scoreboard/Objective.java b/eSpigot-API/src/main/java/org/bukkit/scoreboard/Objective.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/scoreboard/Objective.java rename to eSpigot-API/src/main/java/org/bukkit/scoreboard/Objective.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/scoreboard/Score.java b/eSpigot-API/src/main/java/org/bukkit/scoreboard/Score.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/scoreboard/Score.java rename to eSpigot-API/src/main/java/org/bukkit/scoreboard/Score.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/scoreboard/Scoreboard.java b/eSpigot-API/src/main/java/org/bukkit/scoreboard/Scoreboard.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/scoreboard/Scoreboard.java rename to eSpigot-API/src/main/java/org/bukkit/scoreboard/Scoreboard.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/scoreboard/ScoreboardManager.java b/eSpigot-API/src/main/java/org/bukkit/scoreboard/ScoreboardManager.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/scoreboard/ScoreboardManager.java rename to eSpigot-API/src/main/java/org/bukkit/scoreboard/ScoreboardManager.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/scoreboard/Team.java b/eSpigot-API/src/main/java/org/bukkit/scoreboard/Team.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/scoreboard/Team.java rename to eSpigot-API/src/main/java/org/bukkit/scoreboard/Team.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/util/BlockIterator.java b/eSpigot-API/src/main/java/org/bukkit/util/BlockIterator.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/util/BlockIterator.java rename to eSpigot-API/src/main/java/org/bukkit/util/BlockIterator.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/util/BlockVector.java b/eSpigot-API/src/main/java/org/bukkit/util/BlockVector.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/util/BlockVector.java rename to eSpigot-API/src/main/java/org/bukkit/util/BlockVector.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/util/CachedServerIcon.java b/eSpigot-API/src/main/java/org/bukkit/util/CachedServerIcon.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/util/CachedServerIcon.java rename to eSpigot-API/src/main/java/org/bukkit/util/CachedServerIcon.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/util/ChatPaginator.java b/eSpigot-API/src/main/java/org/bukkit/util/ChatPaginator.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/util/ChatPaginator.java rename to eSpigot-API/src/main/java/org/bukkit/util/ChatPaginator.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/util/EulerAngle.java b/eSpigot-API/src/main/java/org/bukkit/util/EulerAngle.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/util/EulerAngle.java rename to eSpigot-API/src/main/java/org/bukkit/util/EulerAngle.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/util/FileUtil.java b/eSpigot-API/src/main/java/org/bukkit/util/FileUtil.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/util/FileUtil.java rename to eSpigot-API/src/main/java/org/bukkit/util/FileUtil.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/util/Java15Compat.java b/eSpigot-API/src/main/java/org/bukkit/util/Java15Compat.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/util/Java15Compat.java rename to eSpigot-API/src/main/java/org/bukkit/util/Java15Compat.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/util/NumberConversions.java b/eSpigot-API/src/main/java/org/bukkit/util/NumberConversions.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/util/NumberConversions.java rename to eSpigot-API/src/main/java/org/bukkit/util/NumberConversions.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/util/StringUtil.java b/eSpigot-API/src/main/java/org/bukkit/util/StringUtil.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/util/StringUtil.java rename to eSpigot-API/src/main/java/org/bukkit/util/StringUtil.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/util/Vector.java b/eSpigot-API/src/main/java/org/bukkit/util/Vector.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/util/Vector.java rename to eSpigot-API/src/main/java/org/bukkit/util/Vector.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/util/io/BukkitObjectInputStream.java b/eSpigot-API/src/main/java/org/bukkit/util/io/BukkitObjectInputStream.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/util/io/BukkitObjectInputStream.java rename to eSpigot-API/src/main/java/org/bukkit/util/io/BukkitObjectInputStream.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/util/io/BukkitObjectOutputStream.java b/eSpigot-API/src/main/java/org/bukkit/util/io/BukkitObjectOutputStream.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/util/io/BukkitObjectOutputStream.java rename to eSpigot-API/src/main/java/org/bukkit/util/io/BukkitObjectOutputStream.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/util/io/Wrapper.java b/eSpigot-API/src/main/java/org/bukkit/util/io/Wrapper.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/util/io/Wrapper.java rename to eSpigot-API/src/main/java/org/bukkit/util/io/Wrapper.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/util/noise/NoiseGenerator.java b/eSpigot-API/src/main/java/org/bukkit/util/noise/NoiseGenerator.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/util/noise/NoiseGenerator.java rename to eSpigot-API/src/main/java/org/bukkit/util/noise/NoiseGenerator.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/util/noise/OctaveGenerator.java b/eSpigot-API/src/main/java/org/bukkit/util/noise/OctaveGenerator.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/util/noise/OctaveGenerator.java rename to eSpigot-API/src/main/java/org/bukkit/util/noise/OctaveGenerator.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/util/noise/PerlinNoiseGenerator.java b/eSpigot-API/src/main/java/org/bukkit/util/noise/PerlinNoiseGenerator.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/util/noise/PerlinNoiseGenerator.java rename to eSpigot-API/src/main/java/org/bukkit/util/noise/PerlinNoiseGenerator.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/util/noise/PerlinOctaveGenerator.java b/eSpigot-API/src/main/java/org/bukkit/util/noise/PerlinOctaveGenerator.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/util/noise/PerlinOctaveGenerator.java rename to eSpigot-API/src/main/java/org/bukkit/util/noise/PerlinOctaveGenerator.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/util/noise/SimplexNoiseGenerator.java b/eSpigot-API/src/main/java/org/bukkit/util/noise/SimplexNoiseGenerator.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/util/noise/SimplexNoiseGenerator.java rename to eSpigot-API/src/main/java/org/bukkit/util/noise/SimplexNoiseGenerator.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/util/noise/SimplexOctaveGenerator.java b/eSpigot-API/src/main/java/org/bukkit/util/noise/SimplexOctaveGenerator.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/util/noise/SimplexOctaveGenerator.java rename to eSpigot-API/src/main/java/org/bukkit/util/noise/SimplexOctaveGenerator.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/util/permissions/BroadcastPermissions.java b/eSpigot-API/src/main/java/org/bukkit/util/permissions/BroadcastPermissions.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/util/permissions/BroadcastPermissions.java rename to eSpigot-API/src/main/java/org/bukkit/util/permissions/BroadcastPermissions.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/util/permissions/CommandPermissions.java b/eSpigot-API/src/main/java/org/bukkit/util/permissions/CommandPermissions.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/util/permissions/CommandPermissions.java rename to eSpigot-API/src/main/java/org/bukkit/util/permissions/CommandPermissions.java diff --git a/TacoSpigot-API/src/main/java/org/bukkit/util/permissions/DefaultPermissions.java b/eSpigot-API/src/main/java/org/bukkit/util/permissions/DefaultPermissions.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/bukkit/util/permissions/DefaultPermissions.java rename to eSpigot-API/src/main/java/org/bukkit/util/permissions/DefaultPermissions.java diff --git a/TacoSpigot-API/src/main/java/org/github/paperspigot/Title.java b/eSpigot-API/src/main/java/org/github/paperspigot/Title.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/github/paperspigot/Title.java rename to eSpigot-API/src/main/java/org/github/paperspigot/Title.java diff --git a/TacoSpigot-API/src/main/java/org/github/paperspigot/event/ServerExceptionEvent.java b/eSpigot-API/src/main/java/org/github/paperspigot/event/ServerExceptionEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/github/paperspigot/event/ServerExceptionEvent.java rename to eSpigot-API/src/main/java/org/github/paperspigot/event/ServerExceptionEvent.java diff --git a/TacoSpigot-API/src/main/java/org/github/paperspigot/event/block/BeaconEffectEvent.java b/eSpigot-API/src/main/java/org/github/paperspigot/event/block/BeaconEffectEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/github/paperspigot/event/block/BeaconEffectEvent.java rename to eSpigot-API/src/main/java/org/github/paperspigot/event/block/BeaconEffectEvent.java diff --git a/TacoSpigot-API/src/main/java/org/github/paperspigot/exception/ServerCommandException.java b/eSpigot-API/src/main/java/org/github/paperspigot/exception/ServerCommandException.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/github/paperspigot/exception/ServerCommandException.java rename to eSpigot-API/src/main/java/org/github/paperspigot/exception/ServerCommandException.java diff --git a/TacoSpigot-API/src/main/java/org/github/paperspigot/exception/ServerEventException.java b/eSpigot-API/src/main/java/org/github/paperspigot/exception/ServerEventException.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/github/paperspigot/exception/ServerEventException.java rename to eSpigot-API/src/main/java/org/github/paperspigot/exception/ServerEventException.java diff --git a/TacoSpigot-API/src/main/java/org/github/paperspigot/exception/ServerException.java b/eSpigot-API/src/main/java/org/github/paperspigot/exception/ServerException.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/github/paperspigot/exception/ServerException.java rename to eSpigot-API/src/main/java/org/github/paperspigot/exception/ServerException.java diff --git a/TacoSpigot-API/src/main/java/org/github/paperspigot/exception/ServerInternalException.java b/eSpigot-API/src/main/java/org/github/paperspigot/exception/ServerInternalException.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/github/paperspigot/exception/ServerInternalException.java rename to eSpigot-API/src/main/java/org/github/paperspigot/exception/ServerInternalException.java diff --git a/TacoSpigot-API/src/main/java/org/github/paperspigot/exception/ServerPluginEnableDisableException.java b/eSpigot-API/src/main/java/org/github/paperspigot/exception/ServerPluginEnableDisableException.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/github/paperspigot/exception/ServerPluginEnableDisableException.java rename to eSpigot-API/src/main/java/org/github/paperspigot/exception/ServerPluginEnableDisableException.java diff --git a/TacoSpigot-API/src/main/java/org/github/paperspigot/exception/ServerPluginException.java b/eSpigot-API/src/main/java/org/github/paperspigot/exception/ServerPluginException.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/github/paperspigot/exception/ServerPluginException.java rename to eSpigot-API/src/main/java/org/github/paperspigot/exception/ServerPluginException.java diff --git a/TacoSpigot-API/src/main/java/org/github/paperspigot/exception/ServerPluginMessageException.java b/eSpigot-API/src/main/java/org/github/paperspigot/exception/ServerPluginMessageException.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/github/paperspigot/exception/ServerPluginMessageException.java rename to eSpigot-API/src/main/java/org/github/paperspigot/exception/ServerPluginMessageException.java diff --git a/TacoSpigot-API/src/main/java/org/github/paperspigot/exception/ServerSchedulerException.java b/eSpigot-API/src/main/java/org/github/paperspigot/exception/ServerSchedulerException.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/github/paperspigot/exception/ServerSchedulerException.java rename to eSpigot-API/src/main/java/org/github/paperspigot/exception/ServerSchedulerException.java diff --git a/TacoSpigot-API/src/main/java/org/github/paperspigot/exception/ServerTabCompleteException.java b/eSpigot-API/src/main/java/org/github/paperspigot/exception/ServerTabCompleteException.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/github/paperspigot/exception/ServerTabCompleteException.java rename to eSpigot-API/src/main/java/org/github/paperspigot/exception/ServerTabCompleteException.java diff --git a/TacoSpigot-API/src/main/java/org/spigotmc/CustomTimingsHandler.java b/eSpigot-API/src/main/java/org/spigotmc/CustomTimingsHandler.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/spigotmc/CustomTimingsHandler.java rename to eSpigot-API/src/main/java/org/spigotmc/CustomTimingsHandler.java diff --git a/TacoSpigot-API/src/main/java/org/spigotmc/event/entity/EntityDismountEvent.java b/eSpigot-API/src/main/java/org/spigotmc/event/entity/EntityDismountEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/spigotmc/event/entity/EntityDismountEvent.java rename to eSpigot-API/src/main/java/org/spigotmc/event/entity/EntityDismountEvent.java diff --git a/TacoSpigot-API/src/main/java/org/spigotmc/event/entity/EntityMountEvent.java b/eSpigot-API/src/main/java/org/spigotmc/event/entity/EntityMountEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/spigotmc/event/entity/EntityMountEvent.java rename to eSpigot-API/src/main/java/org/spigotmc/event/entity/EntityMountEvent.java diff --git a/TacoSpigot-API/src/main/java/org/spigotmc/event/player/PlayerSpawnLocationEvent.java b/eSpigot-API/src/main/java/org/spigotmc/event/player/PlayerSpawnLocationEvent.java similarity index 100% rename from TacoSpigot-API/src/main/java/org/spigotmc/event/player/PlayerSpawnLocationEvent.java rename to eSpigot-API/src/main/java/org/spigotmc/event/player/PlayerSpawnLocationEvent.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/block/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/block/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/block/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/block/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/command/defaults/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/command/defaults/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/command/defaults/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/command/defaults/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/command/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/command/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/command/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/command/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/configuration/file/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/configuration/file/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/configuration/file/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/configuration/file/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/configuration/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/configuration/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/configuration/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/configuration/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/configuration/serialization/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/configuration/serialization/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/configuration/serialization/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/configuration/serialization/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/conversations/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/conversations/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/conversations/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/conversations/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/enchantments/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/enchantments/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/enchantments/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/enchantments/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/entity/minecart/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/entity/minecart/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/entity/minecart/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/entity/minecart/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/entity/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/entity/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/entity/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/entity/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/event/block/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/event/block/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/event/block/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/event/block/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/event/enchantment/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/event/enchantment/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/event/enchantment/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/event/enchantment/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/event/entity/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/event/entity/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/event/entity/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/event/entity/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/event/hanging/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/event/hanging/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/event/hanging/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/event/hanging/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/event/inventory/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/event/inventory/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/event/inventory/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/event/inventory/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/event/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/event/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/event/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/event/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/event/painting/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/event/painting/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/event/painting/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/event/painting/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/event/player/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/event/player/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/event/player/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/event/player/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/event/server/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/event/server/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/event/server/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/event/server/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/event/vehicle/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/event/vehicle/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/event/vehicle/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/event/vehicle/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/event/weather/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/event/weather/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/event/weather/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/event/weather/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/event/world/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/event/world/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/event/world/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/event/world/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/generator/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/generator/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/generator/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/generator/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/help/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/help/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/help/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/help/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/inventory/meta/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/inventory/meta/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/inventory/meta/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/inventory/meta/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/inventory/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/inventory/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/inventory/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/inventory/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/map/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/map/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/map/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/map/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/material/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/material/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/material/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/material/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/metadata/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/metadata/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/metadata/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/metadata/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/permissions/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/permissions/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/permissions/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/permissions/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/plugin/doc-files/permissions-example_plugin.yml b/eSpigot-API/src/main/javadoc/org/bukkit/plugin/doc-files/permissions-example_plugin.yml similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/plugin/doc-files/permissions-example_plugin.yml rename to eSpigot-API/src/main/javadoc/org/bukkit/plugin/doc-files/permissions-example_plugin.yml diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/plugin/java/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/plugin/java/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/plugin/java/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/plugin/java/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/plugin/messaging/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/plugin/messaging/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/plugin/messaging/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/plugin/messaging/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/plugin/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/plugin/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/plugin/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/plugin/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/potion/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/potion/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/potion/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/potion/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/projectiles/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/projectiles/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/projectiles/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/projectiles/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/scheduler/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/scheduler/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/scheduler/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/scheduler/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/scoreboard/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/scoreboard/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/scoreboard/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/scoreboard/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/util/io/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/util/io/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/util/io/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/util/io/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/util/noise/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/util/noise/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/util/noise/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/util/noise/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/util/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/util/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/util/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/util/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/org/bukkit/util/permissions/package-info.java b/eSpigot-API/src/main/javadoc/org/bukkit/util/permissions/package-info.java similarity index 100% rename from TacoSpigot-API/src/main/javadoc/org/bukkit/util/permissions/package-info.java rename to eSpigot-API/src/main/javadoc/org/bukkit/util/permissions/package-info.java diff --git a/TacoSpigot-API/src/main/javadoc/overview.html b/eSpigot-API/src/main/javadoc/overview.html similarity index 100% rename from TacoSpigot-API/src/main/javadoc/overview.html rename to eSpigot-API/src/main/javadoc/overview.html diff --git a/TacoSpigot-API/src/test/java/org/bukkit/ArtTest.java b/eSpigot-API/src/test/java/org/bukkit/ArtTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/ArtTest.java rename to eSpigot-API/src/test/java/org/bukkit/ArtTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/BukkitMirrorTest.java b/eSpigot-API/src/test/java/org/bukkit/BukkitMirrorTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/BukkitMirrorTest.java rename to eSpigot-API/src/test/java/org/bukkit/BukkitMirrorTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/ChatColorTest.java b/eSpigot-API/src/test/java/org/bukkit/ChatColorTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/ChatColorTest.java rename to eSpigot-API/src/test/java/org/bukkit/ChatColorTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/ChatPaginatorTest.java b/eSpigot-API/src/test/java/org/bukkit/ChatPaginatorTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/ChatPaginatorTest.java rename to eSpigot-API/src/test/java/org/bukkit/ChatPaginatorTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/CoalTypeTest.java b/eSpigot-API/src/test/java/org/bukkit/CoalTypeTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/CoalTypeTest.java rename to eSpigot-API/src/test/java/org/bukkit/CoalTypeTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/ColorTest.java b/eSpigot-API/src/test/java/org/bukkit/ColorTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/ColorTest.java rename to eSpigot-API/src/test/java/org/bukkit/ColorTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/CropStateTest.java b/eSpigot-API/src/test/java/org/bukkit/CropStateTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/CropStateTest.java rename to eSpigot-API/src/test/java/org/bukkit/CropStateTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/DifficultyTest.java b/eSpigot-API/src/test/java/org/bukkit/DifficultyTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/DifficultyTest.java rename to eSpigot-API/src/test/java/org/bukkit/DifficultyTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/DyeColorTest.java b/eSpigot-API/src/test/java/org/bukkit/DyeColorTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/DyeColorTest.java rename to eSpigot-API/src/test/java/org/bukkit/DyeColorTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/EffectTest.java b/eSpigot-API/src/test/java/org/bukkit/EffectTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/EffectTest.java rename to eSpigot-API/src/test/java/org/bukkit/EffectTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/EntityEffectTest.java b/eSpigot-API/src/test/java/org/bukkit/EntityEffectTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/EntityEffectTest.java rename to eSpigot-API/src/test/java/org/bukkit/EntityEffectTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/GameModeTest.java b/eSpigot-API/src/test/java/org/bukkit/GameModeTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/GameModeTest.java rename to eSpigot-API/src/test/java/org/bukkit/GameModeTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/GrassSpeciesTest.java b/eSpigot-API/src/test/java/org/bukkit/GrassSpeciesTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/GrassSpeciesTest.java rename to eSpigot-API/src/test/java/org/bukkit/GrassSpeciesTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/InstrumentTest.java b/eSpigot-API/src/test/java/org/bukkit/InstrumentTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/InstrumentTest.java rename to eSpigot-API/src/test/java/org/bukkit/InstrumentTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/LocationTest.java b/eSpigot-API/src/test/java/org/bukkit/LocationTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/LocationTest.java rename to eSpigot-API/src/test/java/org/bukkit/LocationTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/MaterialTest.java b/eSpigot-API/src/test/java/org/bukkit/MaterialTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/MaterialTest.java rename to eSpigot-API/src/test/java/org/bukkit/MaterialTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/NoteTest.java b/eSpigot-API/src/test/java/org/bukkit/NoteTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/NoteTest.java rename to eSpigot-API/src/test/java/org/bukkit/NoteTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/TestServer.java b/eSpigot-API/src/test/java/org/bukkit/TestServer.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/TestServer.java rename to eSpigot-API/src/test/java/org/bukkit/TestServer.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/TreeSpeciesTest.java b/eSpigot-API/src/test/java/org/bukkit/TreeSpeciesTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/TreeSpeciesTest.java rename to eSpigot-API/src/test/java/org/bukkit/TreeSpeciesTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/WorldTypeTest.java b/eSpigot-API/src/test/java/org/bukkit/WorldTypeTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/WorldTypeTest.java rename to eSpigot-API/src/test/java/org/bukkit/WorldTypeTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/configuration/ConfigurationSectionTest.java b/eSpigot-API/src/test/java/org/bukkit/configuration/ConfigurationSectionTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/configuration/ConfigurationSectionTest.java rename to eSpigot-API/src/test/java/org/bukkit/configuration/ConfigurationSectionTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/configuration/ConfigurationTest.java b/eSpigot-API/src/test/java/org/bukkit/configuration/ConfigurationTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/configuration/ConfigurationTest.java rename to eSpigot-API/src/test/java/org/bukkit/configuration/ConfigurationTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/configuration/MemoryConfigurationTest.java b/eSpigot-API/src/test/java/org/bukkit/configuration/MemoryConfigurationTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/configuration/MemoryConfigurationTest.java rename to eSpigot-API/src/test/java/org/bukkit/configuration/MemoryConfigurationTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/configuration/MemorySectionTest.java b/eSpigot-API/src/test/java/org/bukkit/configuration/MemorySectionTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/configuration/MemorySectionTest.java rename to eSpigot-API/src/test/java/org/bukkit/configuration/MemorySectionTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/configuration/file/FileConfigurationTest.java b/eSpigot-API/src/test/java/org/bukkit/configuration/file/FileConfigurationTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/configuration/file/FileConfigurationTest.java rename to eSpigot-API/src/test/java/org/bukkit/configuration/file/FileConfigurationTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/configuration/file/YamlConfigurationTest.java b/eSpigot-API/src/test/java/org/bukkit/configuration/file/YamlConfigurationTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/configuration/file/YamlConfigurationTest.java rename to eSpigot-API/src/test/java/org/bukkit/configuration/file/YamlConfigurationTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/conversations/ConversationContextTest.java b/eSpigot-API/src/test/java/org/bukkit/conversations/ConversationContextTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/conversations/ConversationContextTest.java rename to eSpigot-API/src/test/java/org/bukkit/conversations/ConversationContextTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/conversations/ConversationTest.java b/eSpigot-API/src/test/java/org/bukkit/conversations/ConversationTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/conversations/ConversationTest.java rename to eSpigot-API/src/test/java/org/bukkit/conversations/ConversationTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/conversations/FakeConversable.java b/eSpigot-API/src/test/java/org/bukkit/conversations/FakeConversable.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/conversations/FakeConversable.java rename to eSpigot-API/src/test/java/org/bukkit/conversations/FakeConversable.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/conversations/ValidatingPromptTest.java b/eSpigot-API/src/test/java/org/bukkit/conversations/ValidatingPromptTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/conversations/ValidatingPromptTest.java rename to eSpigot-API/src/test/java/org/bukkit/conversations/ValidatingPromptTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/event/PlayerChatTabCompleteEventTest.java b/eSpigot-API/src/test/java/org/bukkit/event/PlayerChatTabCompleteEventTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/event/PlayerChatTabCompleteEventTest.java rename to eSpigot-API/src/test/java/org/bukkit/event/PlayerChatTabCompleteEventTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/event/SyntheticEventTest.java b/eSpigot-API/src/test/java/org/bukkit/event/SyntheticEventTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/event/SyntheticEventTest.java rename to eSpigot-API/src/test/java/org/bukkit/event/SyntheticEventTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/event/TestEvent.java b/eSpigot-API/src/test/java/org/bukkit/event/TestEvent.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/event/TestEvent.java rename to eSpigot-API/src/test/java/org/bukkit/event/TestEvent.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/materials/MaterialDataTest.java b/eSpigot-API/src/test/java/org/bukkit/materials/MaterialDataTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/materials/MaterialDataTest.java rename to eSpigot-API/src/test/java/org/bukkit/materials/MaterialDataTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/metadata/FixedMetadataValueTest.java b/eSpigot-API/src/test/java/org/bukkit/metadata/FixedMetadataValueTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/metadata/FixedMetadataValueTest.java rename to eSpigot-API/src/test/java/org/bukkit/metadata/FixedMetadataValueTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/metadata/LazyMetadataValueTest.java b/eSpigot-API/src/test/java/org/bukkit/metadata/LazyMetadataValueTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/metadata/LazyMetadataValueTest.java rename to eSpigot-API/src/test/java/org/bukkit/metadata/LazyMetadataValueTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/metadata/MetadataConversionTest.java b/eSpigot-API/src/test/java/org/bukkit/metadata/MetadataConversionTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/metadata/MetadataConversionTest.java rename to eSpigot-API/src/test/java/org/bukkit/metadata/MetadataConversionTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/metadata/MetadataStoreTest.java b/eSpigot-API/src/test/java/org/bukkit/metadata/MetadataStoreTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/metadata/MetadataStoreTest.java rename to eSpigot-API/src/test/java/org/bukkit/metadata/MetadataStoreTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/metadata/MetadataValueAdapterTest.java b/eSpigot-API/src/test/java/org/bukkit/metadata/MetadataValueAdapterTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/metadata/MetadataValueAdapterTest.java rename to eSpigot-API/src/test/java/org/bukkit/metadata/MetadataValueAdapterTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/plugin/PluginManagerTest.java b/eSpigot-API/src/test/java/org/bukkit/plugin/PluginManagerTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/plugin/PluginManagerTest.java rename to eSpigot-API/src/test/java/org/bukkit/plugin/PluginManagerTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/plugin/TestPlugin.java b/eSpigot-API/src/test/java/org/bukkit/plugin/TestPlugin.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/plugin/TestPlugin.java rename to eSpigot-API/src/test/java/org/bukkit/plugin/TestPlugin.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/plugin/TimedRegisteredListenerTest.java b/eSpigot-API/src/test/java/org/bukkit/plugin/TimedRegisteredListenerTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/plugin/TimedRegisteredListenerTest.java rename to eSpigot-API/src/test/java/org/bukkit/plugin/TimedRegisteredListenerTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/plugin/messaging/StandardMessengerTest.java b/eSpigot-API/src/test/java/org/bukkit/plugin/messaging/StandardMessengerTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/plugin/messaging/StandardMessengerTest.java rename to eSpigot-API/src/test/java/org/bukkit/plugin/messaging/StandardMessengerTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/plugin/messaging/TestMessageListener.java b/eSpigot-API/src/test/java/org/bukkit/plugin/messaging/TestMessageListener.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/plugin/messaging/TestMessageListener.java rename to eSpigot-API/src/test/java/org/bukkit/plugin/messaging/TestMessageListener.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/plugin/messaging/TestPlayer.java b/eSpigot-API/src/test/java/org/bukkit/plugin/messaging/TestPlayer.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/plugin/messaging/TestPlayer.java rename to eSpigot-API/src/test/java/org/bukkit/plugin/messaging/TestPlayer.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/potion/PotionTest.java b/eSpigot-API/src/test/java/org/bukkit/potion/PotionTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/potion/PotionTest.java rename to eSpigot-API/src/test/java/org/bukkit/potion/PotionTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/util/StringUtilStartsWithTest.java b/eSpigot-API/src/test/java/org/bukkit/util/StringUtilStartsWithTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/util/StringUtilStartsWithTest.java rename to eSpigot-API/src/test/java/org/bukkit/util/StringUtilStartsWithTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/util/StringUtilTest.java b/eSpigot-API/src/test/java/org/bukkit/util/StringUtilTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/util/StringUtilTest.java rename to eSpigot-API/src/test/java/org/bukkit/util/StringUtilTest.java diff --git a/TacoSpigot-API/src/test/java/org/bukkit/util/io/BukkitObjectStreamTest.java b/eSpigot-API/src/test/java/org/bukkit/util/io/BukkitObjectStreamTest.java similarity index 100% rename from TacoSpigot-API/src/test/java/org/bukkit/util/io/BukkitObjectStreamTest.java rename to eSpigot-API/src/test/java/org/bukkit/util/io/BukkitObjectStreamTest.java diff --git a/TacoSpigot-Server/.gitignore b/eSpigot-Server/.gitignore similarity index 100% rename from TacoSpigot-Server/.gitignore rename to eSpigot-Server/.gitignore diff --git a/eSpigot-Server/build.gradle.kts b/eSpigot-Server/build.gradle.kts new file mode 100644 index 0000000..5a92e5a --- /dev/null +++ b/eSpigot-Server/build.gradle.kts @@ -0,0 +1,154 @@ +import java.util.Date +import java.text.SimpleDateFormat + +plugins { + java + `java-library` + id("com.github.johnrengelman.shadow") version "7.1.0" +} + +repositories { + mavenCentral() + gradlePluginPortal() + maven(url = "https://libraries.minecraft.net") + maven(url = "https://oss.sonatype.org/content/groups/public") + maven(url = "https://hub.spigotmc.org/nexus/content/groups/public") + maven(url = "https://repo.velocitypowered.com/snapshots/") +} + +val minecraftVersion = "1_8_R3" + +group = "com.elevatemc.espigot" +version = "1.8.8-R0.1-SNAPSHOT" + +repositories { + maven(url = "https://libraries.minecraft.net") +} + +dependencies { + implementation(project(":espigot-api")) + + implementation("io.netty:netty-all:4.1.69.Final") // eSpigot - Update Netty to 4.1.x + implementation("com.mojang:authlib:1.5.21") + implementation("org.apache.logging.log4j:log4j-api:2.17.2") + implementation("org.apache.logging.log4j:log4j-core:2.17.2") + implementation("org.apache.commons:commons-lang3:3.12.0") + implementation("commons-io:commons-io:2.4") + implementation("commons-codec:commons-codec:1.9") + implementation("com.google.guava:guava:31.1-jre") + implementation("com.google.code.gson:gson:2.2.4") + implementation("net.sf.trove4j:trove4j:3.0.3") + implementation("net.sf.jopt-simple:jopt-simple:3.2") + implementation("org.xerial:sqlite-jdbc:3.7.2") + implementation("mysql:mysql-connector-java:5.1.14") + implementation("net.minecrell:terminalconsoleappender:1.3.0") + implementation("org.jline:jline-terminal-jansi:3.20.0") + implementation("it.unimi.dsi:fastutil:8.5.8") + implementation("com.velocitypowered:velocity-native:1.1.0-SNAPSHOT") + implementation("org.lz4:lz4-java:1.8.0") + implementation("com.github.luben:zstd-jni:1.5.2-3") + implementation("net.openhft:affinity:3.20.0") + implementation("net.jafama:jafama:2.3.2") + + + testImplementation("junit:junit:4.11") + testImplementation("org.hamcrest:hamcrest-library:1.3") + + compileOnly("org.projectlombok:lombok:1.18.24") + annotationProcessor("org.projectlombok:lombok:1.18.24") +} + +fun TaskContainer.registerRunTask( + name: String, block: JavaExec.() -> Unit +): TaskProvider = register(name) { + group = "espigot" + standardInput = System.`in` + workingDir = rootProject.layout.projectDirectory.dir( + providers.gradleProperty("runWorkDir").forUseAtConfigurationTime().orElse("run") + ).get().asFile + + if (project.hasProperty("disableWatchdog")) { + systemProperty("disable.watchdog", true) + } + doFirst { + workingDir.mkdirs() + } + block(this) +} + +tasks { + withType().configureEach { + options.encoding = "UTF-8" + } + + java { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + val prepareTestServerDir by registering { + doLast { + mkdir("$buildDir/test-server") + } + } + + test { + workingDir = file("$buildDir/test-server/") + + dependsOn(prepareTestServerDir) + } + + shadowJar { + mergeServiceFiles() + append("META-INF/io.netty.versions.properties") + transform(com.github.jengelman.gradle.plugins.shadow.transformers.Log4j2PluginsCacheFileTransformer()) // eSpigot - Use TerminalConsoleAppender + archiveBaseName.set("espigot") + archiveClassifier.set("") // without "-all" + val cbLibsPkg = "org.bukkit.craftbukkit.libs" + + relocate("joptsimple", "$cbLibsPkg.joptsimple") + relocate("jline", "$cbLibsPkg.jline") + relocate("org.ibex", "$cbLibsPkg.org.ibex") + relocate("org.gjt", "$cbLibsPkg.org.gjt") + + relocate("org.bukkit.craftbukkit", "org.bukkit.craftbukkit.v${minecraftVersion}") { + exclude("org.bukkit.craftbukkit.Main*") // don't relocate main class + } + relocate("net.minecraft.server", "net.minecraft.server.v${minecraftVersion}") + } + + named("build") { + dependsOn(named("shadowJar")) + } + + test { + exclude("org/bukkit/craftbukkit/inventory/ItemStack*Test.class", "org/bukkit/craftbukkit/inventory/ItemFactoryTest.class") + } + + jar { + manifest { + val date = SimpleDateFormat("yyyy-MM-dd-HH:mm:ss").format(Date()) + attributes( + "Main-Class" to "org.bukkit.craftbukkit.Main", + "Implementation-Title" to "CraftBukkit", + "Implementation-Version" to "git-eSpigot-1.8.9", + "Implementation-Vendor" to date, + "Specification-Title" to "Bukkit", + "Specification-Version" to project.version, + "Specification-Vendor" to "Bukkit Team", + "Multi-Release" to true + ) + } + } + + registerRunTask("runShadow") { + description = "Spin up a test server from the shadowJar archiveFile" + classpath(shadowJar.flatMap { it.archiveFile }) + } + + registerRunTask("runDev") { + description = "Spin up a non-shaded non-relocated test server" + classpath = java.sourceSets.main.get().runtimeClasspath + mainClass.set("org.bukkit.craftbukkit.Main") + } +} diff --git a/TacoSpigot-Server/src/main/java/co/aikar/timings/SpigotTimings.java b/eSpigot-Server/src/main/java/co/aikar/timings/SpigotTimings.java similarity index 100% rename from TacoSpigot-Server/src/main/java/co/aikar/timings/SpigotTimings.java rename to eSpigot-Server/src/main/java/co/aikar/timings/SpigotTimings.java diff --git a/TacoSpigot-Server/src/main/java/co/aikar/timings/WorldTimingsHandler.java b/eSpigot-Server/src/main/java/co/aikar/timings/WorldTimingsHandler.java similarity index 100% rename from TacoSpigot-Server/src/main/java/co/aikar/timings/WorldTimingsHandler.java rename to eSpigot-Server/src/main/java/co/aikar/timings/WorldTimingsHandler.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/chunk/ChunkSectionSnapshot.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/chunk/ChunkSectionSnapshot.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/chunk/ChunkSectionSnapshot.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/chunk/ChunkSectionSnapshot.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/chunk/CraftChunkSnapshot.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/chunk/CraftChunkSnapshot.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/chunk/CraftChunkSnapshot.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/chunk/CraftChunkSnapshot.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/chunk/WeakChunkCache.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/chunk/WeakChunkCache.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/chunk/WeakChunkCache.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/chunk/WeakChunkCache.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/command/KnockbackCommand.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/command/KnockbackCommand.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/command/KnockbackCommand.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/command/KnockbackCommand.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/command/TicksPerSecondCommand.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/command/TicksPerSecondCommand.java similarity index 62% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/command/TicksPerSecondCommand.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/command/TicksPerSecondCommand.java index cd1829f..578e01b 100644 --- a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/command/TicksPerSecondCommand.java +++ b/eSpigot-Server/src/main/java/com/elevatemc/spigot/command/TicksPerSecondCommand.java @@ -1,22 +1,12 @@ package com.elevatemc.spigot.command; -import com.elevatemc.spigot.util.DateUtil; import com.velocitypowered.natives.util.Natives; import net.minecraft.server.MinecraftServer; import net.minecraft.server.WorldServer; import org.apache.commons.lang.StringUtils; -import org.bukkit.Bukkit; import org.bukkit.ChatColor; -import org.bukkit.World; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; -import org.bukkit.craftbukkit.entity.CraftEntity; -import org.bukkit.entity.Entity; -import org.spigotmc.ActivationRange; - -import java.lang.management.ManagementFactory; -import java.math.RoundingMode; -import java.text.DecimalFormat; public class TicksPerSecondCommand extends Command { @@ -59,19 +49,28 @@ public class TicksPerSecondCommand extends Command { totalEntities += server.entityList.size(); } - sb.append(ChatColor.WHITE).append("TPS from last 5s, 1m, 5m, 15m: ") - .append(StringUtils.join(tpsAvg, ", ")).append("\n"); - sb.append(ChatColor.WHITE).append("Full Tick: ") - .append(formatMs(MinecraftServer.getLastTickTime())).append(" ms").append("\n"); - sb.append(ChatColor.WHITE) - .append("Online Players: ").append(ChatColor.AQUA).append(totalPlayers).append(ChatColor.WHITE) - .append(" ❘ Total Entities: ").append(ChatColor.AQUA).append(totalEntities).append(ChatColor.WHITE) - .append(" ❘ Chunks: ").append(ChatColor.AQUA).append(totalChunks).append("\n"); - sb.append(ChatColor.WHITE).append("Active Threads: ").append(ChatColor.AQUA).append(Thread.activeCount()) - .append(ChatColor.WHITE).append(" ❘ Daemon Threads: ").append(ChatColor.AQUA) - .append(Thread.getAllStackTraces().keySet().stream().filter(Thread::isDaemon).count()) + sb.append(ChatColor.DARK_AQUA).append("TPS from last 5s, 1m, 5m, 15m: ") + .append(StringUtils.join(tpsAvg, ", ")) .append("\n"); - sb.append(ChatColor.WHITE).append("Memory Usage: ").append(ChatColor.AQUA) + sb.append(ChatColor.DARK_AQUA).append("Full Tick: ") + .append(formatMs(MinecraftServer.getLastTickTime())).append(" ms") + .append("\n"); + sb.append(ChatColor.DARK_AQUA) + .append("Online Players: ").append(ChatColor.AQUA).append(totalPlayers).append(ChatColor.DARK_AQUA) + .append(" ❘ Total Entities: ").append(ChatColor.AQUA).append(totalEntities).append(ChatColor.DARK_AQUA) + .append(" ❘ Chunks: ").append(ChatColor.AQUA).append(totalChunks) + .append("\n"); + sb.append(ChatColor.DARK_AQUA) + .append("Java Version: ").append(ChatColor.AQUA).append(getJavaVersion()).append(ChatColor.DARK_AQUA) + .append(" ❘ Compression: ").append(ChatColor.AQUA).append(Natives.compress.getLoadedVariant()).append(ChatColor.DARK_AQUA) + .append(" ❘ Cipher: ").append(ChatColor.AQUA).append(Natives.cipher.getLoadedVariant()) + .append("\n"); + sb.append(ChatColor.DARK_AQUA) + .append("Active Threads: ").append(ChatColor.AQUA).append(Thread.activeCount()).append(ChatColor.DARK_AQUA) + .append(" ❘ Daemon Threads: ").append(ChatColor.AQUA).append(Thread.getAllStackTraces().keySet().stream().filter(Thread::isDaemon).count()) + .append("\n"); + sb.append(ChatColor.DARK_AQUA) + .append("Memory Usage: ").append(ChatColor.AQUA) .append(formatMem(usedMemory)).append("/").append(formatMem(maxMemory)) .append(" MB ").append("(").append(formatMem(freeMemory)) .append(" MB free)"); @@ -80,6 +79,18 @@ public class TicksPerSecondCommand extends Command { return true; } + private int getJavaVersion() { + String[] versionElements = System.getProperty("java.version").split("\\."); + int discard = Integer.parseInt(versionElements[0]); + int version; + if (discard == 1) { + version = Integer.parseInt(versionElements[1]); + } else { + version = discard; + } + return version; + } + private static String formatTps(double tps) // PaperSpigot - made static { return String.format("%s%s%s", (tps > 18.0 ? ChatColor.AQUA : tps > 16.0 ? ChatColor.YELLOW : ChatColor.RED), tps > 20.0 ? "*" : "", Math.min(Math.round(tps * 100.0) / 100.0, 20.0)); diff --git a/eSpigot-Server/src/main/java/com/elevatemc/spigot/console/PandaConsole.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/console/PandaConsole.java new file mode 100644 index 0000000..3bed5d7 --- /dev/null +++ b/eSpigot-Server/src/main/java/com/elevatemc/spigot/console/PandaConsole.java @@ -0,0 +1,39 @@ +package com.elevatemc.spigot.console; + +import net.minecraft.server.DedicatedServer; +import net.minecrell.terminalconsole.SimpleTerminalConsole; +import org.jline.reader.LineReader; +import org.jline.reader.LineReaderBuilder; + +import java.nio.file.Paths; + +public class PandaConsole extends SimpleTerminalConsole { + private final DedicatedServer server; + + public PandaConsole(DedicatedServer server) { + this.server = server; + } + + @Override + protected boolean isRunning() { + return !this.server.isStopped() && this.server.isRunning(); + } + + @Override + protected void runCommand(String command) { + this.server.issueCommand(command, this.server); + } + + @Override + protected void shutdown() { + this.server.safeShutdown(); + } + + @Override + protected LineReader buildReader(LineReaderBuilder builder) { + return super.buildReader(builder + .appName("eSpigot") + .variable(LineReader.HISTORY_FILE, Paths.get(".console_history")) + .completer(new PandaConsoleCompleter(this.server))); + } +} diff --git a/eSpigot-Server/src/main/java/com/elevatemc/spigot/console/PandaConsoleCommandSender.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/console/PandaConsoleCommandSender.java new file mode 100644 index 0000000..550edf4 --- /dev/null +++ b/eSpigot-Server/src/main/java/com/elevatemc/spigot/console/PandaConsoleCommandSender.java @@ -0,0 +1,15 @@ +package com.elevatemc.spigot.console; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.bukkit.craftbukkit.command.CraftConsoleCommandSender; + +public class PandaConsoleCommandSender extends CraftConsoleCommandSender { + private static final Logger LOGGER = LogManager.getRootLogger(); + + @Override + public void sendRawMessage(String message) { + // TerminalConsoleAppender supports color codes directly in log messages + LOGGER.info(message); + } +} diff --git a/eSpigot-Server/src/main/java/com/elevatemc/spigot/console/PandaConsoleCompleter.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/console/PandaConsoleCompleter.java new file mode 100644 index 0000000..17de12a --- /dev/null +++ b/eSpigot-Server/src/main/java/com/elevatemc/spigot/console/PandaConsoleCompleter.java @@ -0,0 +1,56 @@ +package com.elevatemc.spigot.console; + +import net.minecraft.server.DedicatedServer; +import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.util.Waitable; +import org.jline.reader.Candidate; +import org.jline.reader.Completer; +import org.jline.reader.LineReader; +import org.jline.reader.ParsedLine; + +import java.util.List; +import java.util.concurrent.ExecutionException; +import java.util.logging.Level; + +public class PandaConsoleCompleter implements Completer { + private final DedicatedServer server; + + public PandaConsoleCompleter(DedicatedServer server) { + this.server = server; + } + + @Override + public void complete(LineReader reader, ParsedLine line, List candidates) { + CompletionWaiter waiter = new CompletionWaiter(line.line()); + this.server.addMainThreadTask(waiter); + + try { + List offers = waiter.get(); // wait until completions get processed on main thread + + for (String offer : offers) { + if (offer.isEmpty()) continue; + + candidates.add(new Candidate(offer)); + } + } catch (ExecutionException e) { + this.server.server.getLogger().log(Level.WARNING, "Unhandled exception when tab completing", e); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + } + + private class CompletionWaiter extends Waitable> { + private final String buffer; + + private CompletionWaiter(String buffer) { + this.buffer = buffer; + } + + @Override + protected List evaluate() { + final CraftServer server = PandaConsoleCompleter.this.server.server; + + return server.getCommandMap().tabComplete(server.getConsoleSender(), this.buffer); + } + } +} diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/eSpigot.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/eSpigot.java similarity index 97% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/eSpigot.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/eSpigot.java index fbcfdd9..6b05c49 100644 --- a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/eSpigot.java +++ b/eSpigot-Server/src/main/java/com/elevatemc/spigot/eSpigot.java @@ -46,7 +46,7 @@ public class eSpigot { server.getCommandMap() .register(command.getLabel(), "eSpigot", command); - EXECUTOR_SERVICE.scheduleAtFixedRate(() -> MinecraftServer.getServer().aq().processFastPackets(), 5L, 5L, TimeUnit.MILLISECONDS); + EXECUTOR_SERVICE.scheduleAtFixedRate(() -> MinecraftServer.getServer().aq().processFastPackets(), 5L, 3L, TimeUnit.MILLISECONDS); } public void addPacketHandler(PacketHandler handler) { diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/eSpigotFeature.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/eSpigotFeature.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/eSpigotFeature.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/eSpigotFeature.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/event/BlockDropItemsEvent.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/event/BlockDropItemsEvent.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/event/BlockDropItemsEvent.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/event/BlockDropItemsEvent.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/event/PlayerHealthChangeEvent.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/event/PlayerHealthChangeEvent.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/event/PlayerHealthChangeEvent.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/event/PlayerHealthChangeEvent.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/event/PlayerPearlRefundEvent.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/event/PlayerPearlRefundEvent.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/event/PlayerPearlRefundEvent.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/event/PlayerPearlRefundEvent.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/handler/MovementHandler.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/handler/MovementHandler.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/handler/MovementHandler.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/handler/MovementHandler.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/handler/PacketHandler.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/handler/PacketHandler.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/handler/PacketHandler.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/handler/PacketHandler.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/knockback/KnockbackHandler.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/knockback/KnockbackHandler.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/knockback/KnockbackHandler.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/knockback/KnockbackHandler.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/knockback/KnockbackModifier.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/knockback/KnockbackModifier.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/knockback/KnockbackModifier.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/knockback/KnockbackModifier.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/knockback/KnockbackProfile.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/knockback/KnockbackProfile.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/knockback/KnockbackProfile.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/knockback/KnockbackProfile.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/knockback/impl/AdvancedKnockbackProfile.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/knockback/impl/AdvancedKnockbackProfile.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/knockback/impl/AdvancedKnockbackProfile.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/knockback/impl/AdvancedKnockbackProfile.java diff --git a/eSpigot-Server/src/main/java/com/elevatemc/spigot/network/VarIntByteDecoder.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/network/VarIntByteDecoder.java new file mode 100644 index 0000000..141ae45 --- /dev/null +++ b/eSpigot-Server/src/main/java/com/elevatemc/spigot/network/VarIntByteDecoder.java @@ -0,0 +1,51 @@ +// Original source: velocity +package com.elevatemc.spigot.network; + +import io.netty.util.ByteProcessor; + +public class VarIntByteDecoder implements ByteProcessor { + private int readVarint; + private int bytesRead; + private DecodeResult result = DecodeResult.TOO_SHORT; + + @Override + public boolean process(byte k) { + if (k == 0 && bytesRead == 0) { + // tentatively say it's invalid, but there's a possibility of redemption + result = DecodeResult.RUN_OF_ZEROES; + return true; + } + if (result == DecodeResult.RUN_OF_ZEROES) { + return false; + } + readVarint |= (k & 0x7F) << bytesRead++ * 7; + if (bytesRead > 3) { + result = DecodeResult.TOO_BIG; + return false; + } + if ((k & 0x80) != 128) { + result = DecodeResult.SUCCESS; + return false; + } + return true; + } + + public int getReadVarint() { + return readVarint; + } + + public int getBytesRead() { + return bytesRead; + } + + public DecodeResult getResult() { + return result; + } + + public enum DecodeResult { + SUCCESS, + TOO_SHORT, + TOO_BIG, + RUN_OF_ZEROES + } +} diff --git a/eSpigot-Server/src/main/java/com/elevatemc/spigot/network/VarIntUtil.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/network/VarIntUtil.java new file mode 100644 index 0000000..4013383 --- /dev/null +++ b/eSpigot-Server/src/main/java/com/elevatemc/spigot/network/VarIntUtil.java @@ -0,0 +1,114 @@ +package com.elevatemc.spigot.network; + +import io.netty.buffer.ByteBuf; +import io.netty.handler.codec.CorruptedFrameException; + +public class VarIntUtil { + private static final int[] VARINT_EXACT_BYTE_LENGTHS = new int[33]; + + static { + for (int i = 0; i <= 32; ++i) { + VARINT_EXACT_BYTE_LENGTHS[i] = (int) Math.ceil((31d - (i - 1)) / 7d); + } + VARINT_EXACT_BYTE_LENGTHS[32] = 1; // Special case for the number 0. + } + + /** + * Reads a Minecraft-style VarInt from the specified {@code buf}. + * + * @param buf the buffer to read from + * @return the decoded VarInt + */ + public static int readVarInt(ByteBuf buf) { + int read = readVarIntSafely(buf); + if (read == Integer.MIN_VALUE) { + throw new CorruptedFrameException("Bad VarInt decoded"); + } + return read; + } + + /** + * Reads a Minecraft-style VarInt from the specified {@code buf}. The difference between this + * method and {@link #readVarInt(ByteBuf)} is that this function returns a sentinel value if the + * varint is invalid. + * + * @param buf the buffer to read from + * @return the decoded VarInt, or {@code Integer.MIN_VALUE} if the varint is invalid + */ + public static int readVarIntSafely(ByteBuf buf) { + int i = 0; + int maxRead = Math.min(5, buf.readableBytes()); + for (int j = 0; j < maxRead; j++) { + int k = buf.readByte(); + i |= (k & 0x7F) << j * 7; + if ((k & 0x80) != 128) { + return i; + } + } + return Integer.MIN_VALUE; + } + + /** + * Returns the exact byte size of {@code value} if it were encoded as a VarInt. + * + * @param value the value to encode + * @return the byte size of {@code value} if encoded as a VarInt + */ + public static int varIntBytes(int value) { + return VARINT_EXACT_BYTE_LENGTHS[Integer.numberOfLeadingZeros(value)]; + } + + /** + * Writes a Minecraft-style VarInt to the specified {@code buf}. + * + * @param buf the buffer to read from + * @param value the integer to write + */ + public static void writeVarInt(ByteBuf buf, int value) { + // Peel the one and two byte count cases explicitly as they are the most common VarInt sizes + // that the proxy will write, to improve inlining. + if ((value & (0xFFFFFFFF << 7)) == 0) { + buf.writeByte(value); + } else if ((value & (0xFFFFFFFF << 14)) == 0) { + int w = (value & 0x7F | 0x80) << 8 | (value >>> 7); + buf.writeShort(w); + } else { + writeVarIntFull(buf, value); + } + } + + private static void writeVarIntFull(ByteBuf buf, int value) { + // See https://steinborn.me/posts/performance/how-fast-can-you-write-a-varint/ + if ((value & (0xFFFFFFFF << 7)) == 0) { + buf.writeByte(value); + } else if ((value & (0xFFFFFFFF << 14)) == 0) { + int w = (value & 0x7F | 0x80) << 8 | (value >>> 7); + buf.writeShort(w); + } else if ((value & (0xFFFFFFFF << 21)) == 0) { + int w = (value & 0x7F | 0x80) << 16 | ((value >>> 7) & 0x7F | 0x80) << 8 | (value >>> 14); + buf.writeMedium(w); + } else if ((value & (0xFFFFFFFF << 28)) == 0) { + int w = (value & 0x7F | 0x80) << 24 | (((value >>> 7) & 0x7F | 0x80) << 16) + | ((value >>> 14) & 0x7F | 0x80) << 8 | (value >>> 21); + buf.writeInt(w); + } else { + int w = (value & 0x7F | 0x80) << 24 | ((value >>> 7) & 0x7F | 0x80) << 16 + | ((value >>> 14) & 0x7F | 0x80) << 8 | ((value >>> 21) & 0x7F | 0x80); + buf.writeInt(w); + buf.writeByte(value >>> 28); + } + } + + /** + * Writes the specified {@code value} as a 21-bit Minecraft VarInt to the specified {@code buf}. + * The upper 11 bits will be discarded. + * + * @param buf the buffer to read from + * @param value the integer to write + */ + public static void write21BitVarInt(ByteBuf buf, int value) { + // See https://steinborn.me/posts/performance/how-fast-can-you-write-a-varint/ + int w = (value & 0x7F | 0x80) << 16 | ((value >>> 7) & 0x7F | 0x80) << 8 | (value >>> 14); + buf.writeMedium(w); + } +} diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/AsyncNavigation.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/AsyncNavigation.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/AsyncNavigation.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/AsyncNavigation.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/AsyncPathfinder.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/AsyncPathfinder.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/AsyncPathfinder.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/AsyncPathfinder.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/AsyncPathfinderNormal.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/AsyncPathfinderNormal.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/AsyncPathfinderNormal.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/AsyncPathfinderNormal.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/PathSearchThrottlerThread.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/PathSearchThrottlerThread.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/PathSearchThrottlerThread.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/PathSearchThrottlerThread.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/PositionPathSearchType.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/PositionPathSearchType.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/PositionPathSearchType.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/PositionPathSearchType.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/cache/SearchCacheEntry.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/cache/SearchCacheEntry.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/cache/SearchCacheEntry.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/cache/SearchCacheEntry.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/cache/SearchCacheEntryEntity.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/cache/SearchCacheEntryEntity.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/cache/SearchCacheEntryEntity.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/cache/SearchCacheEntryEntity.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/cache/SearchCacheEntryPosition.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/cache/SearchCacheEntryPosition.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/cache/SearchCacheEntryPosition.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/cache/SearchCacheEntryPosition.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/jobs/PathSearchJob.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/jobs/PathSearchJob.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/jobs/PathSearchJob.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/jobs/PathSearchJob.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/jobs/PathSearchJobEntity.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/jobs/PathSearchJobEntity.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/jobs/PathSearchJobEntity.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/jobs/PathSearchJobEntity.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/jobs/PathSearchJobNavigationEntity.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/jobs/PathSearchJobNavigationEntity.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/jobs/PathSearchJobNavigationEntity.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/jobs/PathSearchJobNavigationEntity.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/jobs/PathSearchJobNavigationPosition.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/jobs/PathSearchJobNavigationPosition.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/jobs/PathSearchJobNavigationPosition.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/jobs/PathSearchJobNavigationPosition.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/jobs/PathSearchJobPosition.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/jobs/PathSearchJobPosition.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/jobs/PathSearchJobPosition.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/jobs/PathSearchJobPosition.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/jobs/PathSearchQueuingManager.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/jobs/PathSearchQueuingManager.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/jobs/PathSearchQueuingManager.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/pathsearch/jobs/PathSearchQueuingManager.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/threading/NamePriorityThreadFactory.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/threading/NamePriorityThreadFactory.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/threading/NamePriorityThreadFactory.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/threading/NamePriorityThreadFactory.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/threading/ThreadingManager.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/threading/ThreadingManager.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/threading/ThreadingManager.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/threading/ThreadingManager.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/util/CryptException.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/util/CryptException.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/util/CryptException.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/util/CryptException.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/util/Cuboid.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/util/Cuboid.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/util/Cuboid.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/util/Cuboid.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/util/DateUtil.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/util/DateUtil.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/util/DateUtil.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/util/DateUtil.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/util/Dictionary.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/util/Dictionary.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/util/Dictionary.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/util/Dictionary.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/util/FastRandom.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/util/FastRandom.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/util/FastRandom.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/util/FastRandom.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/util/SynchronizedIntHashMap.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/util/SynchronizedIntHashMap.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/util/SynchronizedIntHashMap.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/util/SynchronizedIntHashMap.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/util/YamlConfig.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/util/YamlConfig.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/util/YamlConfig.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/util/YamlConfig.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/util/task/AbstractTaskExecutor.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/util/task/AbstractTaskExecutor.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/util/task/AbstractTaskExecutor.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/util/task/AbstractTaskExecutor.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/util/task/Task.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/util/task/Task.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/util/task/Task.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/util/task/Task.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/util/task/TaskExecutor.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/util/task/TaskExecutor.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/util/task/TaskExecutor.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/util/task/TaskExecutor.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/util/task/impl/ThreadTaskExecutor.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/util/task/impl/ThreadTaskExecutor.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/util/task/impl/ThreadTaskExecutor.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/util/task/impl/ThreadTaskExecutor.java diff --git a/TacoSpigot-Server/src/main/java/com/elevatemc/spigot/world/AutoSaveJob.java b/eSpigot-Server/src/main/java/com/elevatemc/spigot/world/AutoSaveJob.java similarity index 100% rename from TacoSpigot-Server/src/main/java/com/elevatemc/spigot/world/AutoSaveJob.java rename to eSpigot-Server/src/main/java/com/elevatemc/spigot/world/AutoSaveJob.java diff --git a/eSpigot-Server/src/main/java/com/google/common/base/Objects.java b/eSpigot-Server/src/main/java/com/google/common/base/Objects.java new file mode 100644 index 0000000..0101907 --- /dev/null +++ b/eSpigot-Server/src/main/java/com/google/common/base/Objects.java @@ -0,0 +1,451 @@ +/* + * Copyright (C) 2007 The Guava Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.common.base; + +import com.google.common.annotations.GwtCompatible; + +import javax.annotation.CheckReturnValue; +import javax.annotation.Nullable; +import java.util.Arrays; + +import static com.google.common.base.Preconditions.checkNotNull; + +/** + * Helper functions that can operate on any {@code Object}. + * + *

      See the Guava User Guide on writing + * {@code Object} methods with {@code Objects}. + * + * @author Laurence Gonsalves + * @since 2.0 (imported from Google Collections Library) + */ +@GwtCompatible +public final class Objects { + private Objects() {} + + /** + * Determines whether two possibly-null objects are equal. Returns: + * + *

        + *
      • {@code true} if {@code a} and {@code b} are both null. + *
      • {@code true} if {@code a} and {@code b} are both non-null and they are + * equal according to {@link Object#equals(Object)}. + *
      • {@code false} in all other situations. + *
      + * + *

      This assumes that any non-null objects passed to this function conform + * to the {@code equals()} contract. + */ + @CheckReturnValue + public static boolean equal(@Nullable Object a, @Nullable Object b) { + return java.util.Objects.equals(a, b); // Nacho + } + + /** + * Generates a hash code for multiple values. The hash code is generated by + * calling {@link Arrays#hashCode(Object[])}. Note that array arguments to + * this method, with the exception of a single Object array, do not get any + * special handling; their hash codes are based on identity and not contents. + * + *

      This is useful for implementing {@link Object#hashCode()}. For example, + * in an object that has three properties, {@code x}, {@code y}, and + * {@code z}, one could write: + *

         {@code
      +     *   public int hashCode() {
      +     *     return Objects.hashCode(getX(), getY(), getZ());
      +     *   }}
      + * + *

      Warning: When a single object is supplied, the returned hash code + * does not equal the hash code of that object. + */ + public static int hashCode(@Nullable Object... objects) { + return Arrays.hashCode(objects); + } + + // Nacho start + /** + * Creates an instance of {@link ToStringHelper}. + * + *

      This is helpful for implementing {@link Object#toString()}. + * Specification by example:

         {@code
      +     *   // Returns "ClassName{}"
      +     *   Objects.toStringHelper(this)
      +     *       .toString();
      +     *
      +     *   // Returns "ClassName{x=1}"
      +     *   Objects.toStringHelper(this)
      +     *       .add("x", 1)
      +     *       .toString();
      +     *
      +     *   // Returns "MyObject{x=1}"
      +     *   Objects.toStringHelper("MyObject")
      +     *       .add("x", 1)
      +     *       .toString();
      +     *
      +     *   // Returns "ClassName{x=1, y=foo}"
      +     *   Objects.toStringHelper(this)
      +     *       .add("x", 1)
      +     *       .add("y", "foo")
      +     *       .toString();
      +     *
      +     *   // Returns "ClassName{x=1}"
      +     *   Objects.toStringHelper(this)
      +     *       .omitNullValues()
      +     *       .add("x", 1)
      +     *       .add("y", null)
      +     *       .toString();
      +     *   }}
      + * + *

      Note that in GWT, class names are often obfuscated. + * + * @param self the object to generate the string for (typically {@code this}), + * used only for its class name + * @since 2.0 + * @deprecated replaced by {@link MoreObjects#toStringHelper(Object)} + * @see MoreObjects#toStringHelper(Object) + */ + @Deprecated + public static ToStringHelper toStringHelper(Object self) { + return new ToStringHelper(simpleName(self.getClass())); + } + + /** + * Creates an instance of {@link ToStringHelper} in the same manner as + * {@link Objects#toStringHelper(Object)}, but using the name of {@code clazz} + * instead of using an instance's {@link Object#getClass()}. + * + *

      Note that in GWT, class names are often obfuscated. + * + * @param clazz the {@link Class} of the instance + * @since 7.0 (source-compatible since 2.0) + * @deprecated replaced by {@link MoreObjects#toStringHelper(Class)} + * @see MoreObjects#toStringHelper(Class) + */ + @Deprecated + public static ToStringHelper toStringHelper(Class clazz) { + return new ToStringHelper(simpleName(clazz)); + } + + /** + * Creates an instance of {@link ToStringHelper} in the same manner as + * {@link Objects#toStringHelper(Object)}, but using {@code className} instead + * of using an instance's {@link Object#getClass()}. + * + * @param className the name of the instance type + * @since 7.0 (source-compatible since 2.0) + * @deprecated replaced by {@link MoreObjects#toStringHelper(String)} + * @see MoreObjects#toStringHelper(String) + */ + @Deprecated + public static ToStringHelper toStringHelper(String className) { + return new ToStringHelper(className); + } + + /** + * {@link Class#getSimpleName()} is not GWT compatible yet, so we + * provide our own implementation. + * @deprecated {@link Class#getSimpleName()} is now GWT compatible, use it instead + * @see Class#getSimpleName() + */ + @Deprecated + private static String simpleName(Class clazz) { + String name = clazz.getName(); + + // the nth anonymous class has a class name ending in "Outer$n" + // and local inner classes have names ending in "Outer.$1Inner" + name = name.replaceAll("\\$[0-9]+", "\\$"); + + // we want the name of the inner class all by its lonesome + int start = name.lastIndexOf('$'); + + // if this isn't an inner class, just find the start of the + // top level class name. + if (start == -1) { + start = name.lastIndexOf('.'); + } + return name.substring(start + 1); + } + + /** + * Returns the first of two given parameters that is not {@code null}, if + * either is, or otherwise throws a {@link NullPointerException}. + * + *

      Note: if {@code first} is represented as an {@link Optional}, + * this can be accomplished with + * {@linkplain Optional#or(Object) first.or(second)}. + * That approach also allows for lazy evaluation of the fallback instance, + * using {@linkplain Optional#or(Supplier) first.or(Supplier)}. + * + * @return {@code first} if {@code first} is not {@code null}, or + * {@code second} if {@code first} is {@code null} and {@code second} is + * not {@code null} + * @throws NullPointerException if both {@code first} and {@code second} were + * {@code null} + * @since 3.0 + * @deprecated replaced by {@link MoreObjects#firstNonNull(Object, Object)} + * @see MoreObjects#firstNonNull(Object, Object) + */ + @Deprecated + public static T firstNonNull(@Nullable T first, @Nullable T second) { + return first != null ? first : checkNotNull(second); + } + + /** + * Support class for {@link Objects#toStringHelper}. + * + * @author Jason Lee + * @since 2.0 + * @deprecated replaced by {@link MoreObjects.ToStringHelper} + * @see MoreObjects.ToStringHelper + */ + @Deprecated + public static final class ToStringHelper { + private final String className; + private ValueHolder holderHead = new ValueHolder(); + private ValueHolder holderTail = holderHead; + private boolean omitNullValues = false; + + /** + * Use {@link Objects#toStringHelper(Object)} to create an instance. + */ + private ToStringHelper(String className) { + this.className = checkNotNull(className); + } + + /** + * Configures the {@link ToStringHelper} so {@link #toString()} will ignore + * properties with null value. The order of calling this method, relative + * to the {@code add()}/{@code addValue()} methods, is not significant. + * + * @since 12.0 + */ + public ToStringHelper omitNullValues() { + omitNullValues = true; + return this; + } + + /** + * Adds a name/value pair to the formatted output in {@code name=value} + * format. If {@code value} is {@code null}, the string {@code "null"} + * is used, unless {@link #omitNullValues()} is called, in which case this + * name/value pair will not be added. + */ + public ToStringHelper add(String name, @Nullable Object value) { + return addHolder(name, value); + } + + /** + * Adds a name/value pair to the formatted output in {@code name=value} + * format. + * + * @since 11.0 (source-compatible since 2.0) + */ + public ToStringHelper add(String name, boolean value) { + return addHolder(name, String.valueOf(value)); + } + + /** + * Adds a name/value pair to the formatted output in {@code name=value} + * format. + * + * @since 11.0 (source-compatible since 2.0) + */ + public ToStringHelper add(String name, char value) { + return addHolder(name, String.valueOf(value)); + } + + /** + * Adds a name/value pair to the formatted output in {@code name=value} + * format. + * + * @since 11.0 (source-compatible since 2.0) + */ + public ToStringHelper add(String name, double value) { + return addHolder(name, String.valueOf(value)); + } + + /** + * Adds a name/value pair to the formatted output in {@code name=value} + * format. + * + * @since 11.0 (source-compatible since 2.0) + */ + public ToStringHelper add(String name, float value) { + return addHolder(name, String.valueOf(value)); + } + + /** + * Adds a name/value pair to the formatted output in {@code name=value} + * format. + * + * @since 11.0 (source-compatible since 2.0) + */ + public ToStringHelper add(String name, int value) { + return addHolder(name, String.valueOf(value)); + } + + /** + * Adds a name/value pair to the formatted output in {@code name=value} + * format. + * + * @since 11.0 (source-compatible since 2.0) + */ + public ToStringHelper add(String name, long value) { + return addHolder(name, String.valueOf(value)); + } + + /** + * Adds an unnamed value to the formatted output. + * + *

      It is strongly encouraged to use {@link #add(String, Object)} instead + * and give value a readable name. + */ + public ToStringHelper addValue(@Nullable Object value) { + return addHolder(value); + } + + /** + * Adds an unnamed value to the formatted output. + * + *

      It is strongly encouraged to use {@link #add(String, boolean)} instead + * and give value a readable name. + * + * @since 11.0 (source-compatible since 2.0) + */ + public ToStringHelper addValue(boolean value) { + return addHolder(String.valueOf(value)); + } + + /** + * Adds an unnamed value to the formatted output. + * + *

      It is strongly encouraged to use {@link #add(String, char)} instead + * and give value a readable name. + * + * @since 11.0 (source-compatible since 2.0) + */ + public ToStringHelper addValue(char value) { + return addHolder(String.valueOf(value)); + } + + /** + * Adds an unnamed value to the formatted output. + * + *

      It is strongly encouraged to use {@link #add(String, double)} instead + * and give value a readable name. + * + * @since 11.0 (source-compatible since 2.0) + */ + public ToStringHelper addValue(double value) { + return addHolder(String.valueOf(value)); + } + + /** + * Adds an unnamed value to the formatted output. + * + *

      It is strongly encouraged to use {@link #add(String, float)} instead + * and give value a readable name. + * + * @since 11.0 (source-compatible since 2.0) + */ + public ToStringHelper addValue(float value) { + return addHolder(String.valueOf(value)); + } + + /** + * Adds an unnamed value to the formatted output. + * + *

      It is strongly encouraged to use {@link #add(String, int)} instead + * and give value a readable name. + * + * @since 11.0 (source-compatible since 2.0) + */ + public ToStringHelper addValue(int value) { + return addHolder(String.valueOf(value)); + } + + /** + * Adds an unnamed value to the formatted output. + * + *

      It is strongly encouraged to use {@link #add(String, long)} instead + * and give value a readable name. + * + * @since 11.0 (source-compatible since 2.0) + */ + public ToStringHelper addValue(long value) { + return addHolder(String.valueOf(value)); + } + + /** + * Returns a string in the format specified by {@link + * Objects#toStringHelper(Object)}. + * + *

      After calling this method, you can keep adding more properties to later + * call toString() again and get a more complete representation of the + * same object; but properties cannot be removed, so this only allows + * limited reuse of the helper instance. The helper allows duplication of + * properties (multiple name/value pairs with the same name can be added). + */ + @Override public String toString() { + // create a copy to keep it consistent in case value changes + boolean omitNullValuesSnapshot = omitNullValues; + String nextSeparator = ""; + StringBuilder builder = new StringBuilder(32).append(className) + .append('{'); + for (ValueHolder valueHolder = holderHead.next; valueHolder != null; + valueHolder = valueHolder.next) { + if (!omitNullValuesSnapshot || valueHolder.value != null) { + builder.append(nextSeparator); + nextSeparator = ", "; + + if (valueHolder.name != null) { + builder.append(valueHolder.name).append('='); + } + builder.append(valueHolder.value); + } + } + return builder.append('}').toString(); + } + + private ValueHolder addHolder() { + ValueHolder valueHolder = new ValueHolder(); + holderTail = holderTail.next = valueHolder; + return valueHolder; + } + + private ToStringHelper addHolder(@Nullable Object value) { + ValueHolder valueHolder = addHolder(); + valueHolder.value = value; + return this; + } + + private ToStringHelper addHolder(String name, @Nullable Object value) { + ValueHolder valueHolder = addHolder(); + valueHolder.value = value; + valueHolder.name = checkNotNull(name); + return this; + } + + private static final class ValueHolder { + String name; + Object value; + ValueHolder next; + } + } + // Nacho end +} \ No newline at end of file diff --git a/eSpigot-Server/src/main/java/com/google/common/util/concurrent/MoreExecutors.java b/eSpigot-Server/src/main/java/com/google/common/util/concurrent/MoreExecutors.java new file mode 100644 index 0000000..24b84d3 --- /dev/null +++ b/eSpigot-Server/src/main/java/com/google/common/util/concurrent/MoreExecutors.java @@ -0,0 +1,1172 @@ +/* + * Copyright (C) 2007 The Guava Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package com.google.common.util.concurrent; + +import static com.google.common.base.Preconditions.checkArgument; +import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.util.concurrent.Internal.toNanosSaturated; + +import com.google.common.annotations.Beta; +import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Supplier; +import com.google.common.base.Throwables; +import com.google.common.collect.Lists; +import com.google.common.collect.Queues; +import com.google.common.util.concurrent.ForwardingListenableFuture.SimpleForwardingListenableFuture; +import com.google.errorprone.annotations.CanIgnoreReturnValue; +import com.google.errorprone.annotations.concurrent.GuardedBy; +import java.lang.reflect.InvocationTargetException; +import java.time.Duration; +import java.util.Collection; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.Callable; +import java.util.concurrent.Delayed; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Executor; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.RejectedExecutionException; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import org.checkerframework.checker.nullness.qual.Nullable; + +/** + * Factory and utility methods for {@link java.util.concurrent.Executor}, {@link ExecutorService}, + * and {@link java.util.concurrent.ThreadFactory}. + * + * @author Eric Fellheimer + * @author Kyle Littlefield + * @author Justin Mahoney + * @since 3.0 + */ +@GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault +public final class MoreExecutors { + private MoreExecutors() {} + + /** + * Converts the given ThreadPoolExecutor into an ExecutorService that exits when the application + * is complete. It does so by using daemon threads and adding a shutdown hook to wait for their + * completion. + * + *

      This is mainly for fixed thread pools. See {@link Executors#newFixedThreadPool(int)}. + * + * @param executor the executor to modify to make sure it exits when the application is finished + * @param terminationTimeout how long to wait for the executor to finish before terminating the + * JVM + * @return an unmodifiable version of the input which will not hang the JVM + * @since 28.0 + */ + @Beta + @GwtIncompatible // TODO + public static ExecutorService getExitingExecutorService( + ThreadPoolExecutor executor, Duration terminationTimeout) { + return getExitingExecutorService( + executor, toNanosSaturated(terminationTimeout), TimeUnit.NANOSECONDS); + } + + /** + * Converts the given ThreadPoolExecutor into an ExecutorService that exits when the application + * is complete. It does so by using daemon threads and adding a shutdown hook to wait for their + * completion. + * + *

      This is mainly for fixed thread pools. See {@link Executors#newFixedThreadPool(int)}. + * + * @param executor the executor to modify to make sure it exits when the application is finished + * @param terminationTimeout how long to wait for the executor to finish before terminating the + * JVM + * @param timeUnit unit of time for the time parameter + * @return an unmodifiable version of the input which will not hang the JVM + */ + @Beta + @GwtIncompatible // TODO + @SuppressWarnings("GoodTime") // should accept a java.time.Duration + public static ExecutorService getExitingExecutorService( + ThreadPoolExecutor executor, long terminationTimeout, TimeUnit timeUnit) { + return new Application().getExitingExecutorService(executor, terminationTimeout, timeUnit); + } + + /** + * Converts the given ThreadPoolExecutor into an ExecutorService that exits when the application + * is complete. It does so by using daemon threads and adding a shutdown hook to wait for their + * completion. + * + *

      This method waits 120 seconds before continuing with JVM termination, even if the executor + * has not finished its work. + * + *

      This is mainly for fixed thread pools. See {@link Executors#newFixedThreadPool(int)}. + * + * @param executor the executor to modify to make sure it exits when the application is finished + * @return an unmodifiable version of the input which will not hang the JVM + */ + @Beta + @GwtIncompatible // concurrency + public static ExecutorService getExitingExecutorService(ThreadPoolExecutor executor) { + return new Application().getExitingExecutorService(executor); + } + + /** + * Converts the given ScheduledThreadPoolExecutor into a ScheduledExecutorService that exits when + * the application is complete. It does so by using daemon threads and adding a shutdown hook to + * wait for their completion. + * + *

      This is mainly for fixed thread pools. See {@link Executors#newScheduledThreadPool(int)}. + * + * @param executor the executor to modify to make sure it exits when the application is finished + * @param terminationTimeout how long to wait for the executor to finish before terminating the + * JVM + * @return an unmodifiable version of the input which will not hang the JVM + * @since 28.0 + */ + @Beta + @GwtIncompatible // java.time.Duration + public static ScheduledExecutorService getExitingScheduledExecutorService( + ScheduledThreadPoolExecutor executor, Duration terminationTimeout) { + return getExitingScheduledExecutorService( + executor, toNanosSaturated(terminationTimeout), TimeUnit.NANOSECONDS); + } + + /** + * Converts the given ScheduledThreadPoolExecutor into a ScheduledExecutorService that exits when + * the application is complete. It does so by using daemon threads and adding a shutdown hook to + * wait for their completion. + * + *

      This is mainly for fixed thread pools. See {@link Executors#newScheduledThreadPool(int)}. + * + * @param executor the executor to modify to make sure it exits when the application is finished + * @param terminationTimeout how long to wait for the executor to finish before terminating the + * JVM + * @param timeUnit unit of time for the time parameter + * @return an unmodifiable version of the input which will not hang the JVM + */ + @Beta + @GwtIncompatible // TODO + @SuppressWarnings("GoodTime") // should accept a java.time.Duration + public static ScheduledExecutorService getExitingScheduledExecutorService( + ScheduledThreadPoolExecutor executor, long terminationTimeout, TimeUnit timeUnit) { + return new Application() + .getExitingScheduledExecutorService(executor, terminationTimeout, timeUnit); + } + + /** + * Converts the given ScheduledThreadPoolExecutor into a ScheduledExecutorService that exits when + * the application is complete. It does so by using daemon threads and adding a shutdown hook to + * wait for their completion. + * + *

      This method waits 120 seconds before continuing with JVM termination, even if the executor + * has not finished its work. + * + *

      This is mainly for fixed thread pools. See {@link Executors#newScheduledThreadPool(int)}. + * + * @param executor the executor to modify to make sure it exits when the application is finished + * @return an unmodifiable version of the input which will not hang the JVM + */ + @Beta + @GwtIncompatible // TODO + public static ScheduledExecutorService getExitingScheduledExecutorService( + ScheduledThreadPoolExecutor executor) { + return new Application().getExitingScheduledExecutorService(executor); + } + + /** + * Add a shutdown hook to wait for thread completion in the given {@link ExecutorService service}. + * This is useful if the given service uses daemon threads, and we want to keep the JVM from + * exiting immediately on shutdown, instead giving these daemon threads a chance to terminate + * normally. + * + * @param service ExecutorService which uses daemon threads + * @param terminationTimeout how long to wait for the executor to finish before terminating the + * JVM + * @since 28.0 + */ + @Beta + @GwtIncompatible // java.time.Duration + public static void addDelayedShutdownHook(ExecutorService service, Duration terminationTimeout) { + addDelayedShutdownHook(service, toNanosSaturated(terminationTimeout), TimeUnit.NANOSECONDS); + } + + /** + * Add a shutdown hook to wait for thread completion in the given {@link ExecutorService service}. + * This is useful if the given service uses daemon threads, and we want to keep the JVM from + * exiting immediately on shutdown, instead giving these daemon threads a chance to terminate + * normally. + * + * @param service ExecutorService which uses daemon threads + * @param terminationTimeout how long to wait for the executor to finish before terminating the + * JVM + * @param timeUnit unit of time for the time parameter + */ + @Beta + @GwtIncompatible // TODO + @SuppressWarnings("GoodTime") // should accept a java.time.Duration + public static void addDelayedShutdownHook( + ExecutorService service, long terminationTimeout, TimeUnit timeUnit) { + new Application().addDelayedShutdownHook(service, terminationTimeout, timeUnit); + } + + /** Represents the current application to register shutdown hooks. */ + @GwtIncompatible // TODO + @VisibleForTesting + static class Application { + + final ExecutorService getExitingExecutorService( + ThreadPoolExecutor executor, long terminationTimeout, TimeUnit timeUnit) { + useDaemonThreadFactory(executor); + ExecutorService service = Executors.unconfigurableExecutorService(executor); + addDelayedShutdownHook(executor, terminationTimeout, timeUnit); + return service; + } + + final ExecutorService getExitingExecutorService(ThreadPoolExecutor executor) { + return getExitingExecutorService(executor, 120, TimeUnit.SECONDS); + } + + final ScheduledExecutorService getExitingScheduledExecutorService( + ScheduledThreadPoolExecutor executor, long terminationTimeout, TimeUnit timeUnit) { + useDaemonThreadFactory(executor); + ScheduledExecutorService service = Executors.unconfigurableScheduledExecutorService(executor); + addDelayedShutdownHook(executor, terminationTimeout, timeUnit); + return service; + } + + final ScheduledExecutorService getExitingScheduledExecutorService( + ScheduledThreadPoolExecutor executor) { + return getExitingScheduledExecutorService(executor, 120, TimeUnit.SECONDS); + } + + final void addDelayedShutdownHook( + final ExecutorService service, final long terminationTimeout, final TimeUnit timeUnit) { + checkNotNull(service); + checkNotNull(timeUnit); + addShutdownHook( + MoreExecutors.newThread( + "DelayedShutdownHook-for-" + service, + new Runnable() { + @Override + public void run() { + try { + // We'd like to log progress and failures that may arise in the + // following code, but unfortunately the behavior of logging + // is undefined in shutdown hooks. + // This is because the logging code installs a shutdown hook of its + // own. See Cleaner class inside {@link LogManager}. + service.shutdown(); + service.awaitTermination(terminationTimeout, timeUnit); + } catch (InterruptedException ignored) { + // We're shutting down anyway, so just ignore. + } + } + })); + } + + @VisibleForTesting + void addShutdownHook(Thread hook) { + Runtime.getRuntime().addShutdownHook(hook); + } + } + + @GwtIncompatible // TODO + private static void useDaemonThreadFactory(ThreadPoolExecutor executor) { + executor.setThreadFactory( + new ThreadFactoryBuilder() + .setDaemon(true) + .setThreadFactory(executor.getThreadFactory()) + .build()); + } + + // See newDirectExecutorService javadoc for behavioral notes. + @GwtIncompatible // TODO + private static final class DirectExecutorService extends AbstractListeningExecutorService { + /** Lock used whenever accessing the state variables (runningTasks, shutdown) of the executor */ + private final Object lock = new Object(); + + /* + * Conceptually, these two variables describe the executor being in + * one of three states: + * - Active: shutdown == false + * - Shutdown: runningTasks > 0 and shutdown == true + * - Terminated: runningTasks == 0 and shutdown == true + */ + @GuardedBy("lock") + private int runningTasks = 0; + + @GuardedBy("lock") + private boolean shutdown = false; + + @Override + public void execute(Runnable command) { + startTask(); + try { + command.run(); + } finally { + endTask(); + } + } + + @Override + public boolean isShutdown() { + synchronized (lock) { + return shutdown; + } + } + + @Override + public void shutdown() { + synchronized (lock) { + shutdown = true; + if (runningTasks == 0) { + lock.notifyAll(); + } + } + } + + // See newDirectExecutorService javadoc for unusual behavior of this method. + @Override + public List shutdownNow() { + shutdown(); + return Collections.emptyList(); + } + + @Override + public boolean isTerminated() { + synchronized (lock) { + return shutdown && runningTasks == 0; + } + } + + @Override + public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException { + long nanos = unit.toNanos(timeout); + synchronized (lock) { + while (true) { + if (shutdown && runningTasks == 0) { + return true; + } else if (nanos <= 0) { + return false; + } else { + long now = System.nanoTime(); + TimeUnit.NANOSECONDS.timedWait(lock, nanos); + nanos -= System.nanoTime() - now; // subtract the actual time we waited + } + } + } + } + + /** + * Checks if the executor has been shut down and increments the running task count. + * + * @throws RejectedExecutionException if the executor has been previously shutdown + */ + private void startTask() { + synchronized (lock) { + if (shutdown) { + throw new RejectedExecutionException("Executor already shutdown"); + } + runningTasks++; + } + } + + /** Decrements the running task count. */ + private void endTask() { + synchronized (lock) { + int numRunning = --runningTasks; + if (numRunning == 0) { + lock.notifyAll(); + } + } + } + } + + /** + * Creates an executor service that runs each task in the thread that invokes {@code + * execute/submit}, as in {@code ThreadPoolExecutor.CallerRunsPolicy}. This applies both to + * individually submitted tasks and to collections of tasks submitted via {@code invokeAll} or + * {@code invokeAny}. In the latter case, tasks will run serially on the calling thread. Tasks are + * run to completion before a {@code Future} is returned to the caller (unless the executor has + * been shutdown). + * + *

      Although all tasks are immediately executed in the thread that submitted the task, this + * {@code ExecutorService} imposes a small locking overhead on each task submission in order to + * implement shutdown and termination behavior. + * + *

      The implementation deviates from the {@code ExecutorService} specification with regards to + * the {@code shutdownNow} method. First, "best-effort" with regards to canceling running tasks is + * implemented as "no-effort". No interrupts or other attempts are made to stop threads executing + * tasks. Second, the returned list will always be empty, as any submitted task is considered to + * have started execution. This applies also to tasks given to {@code invokeAll} or {@code + * invokeAny} which are pending serial execution, even the subset of the tasks that have not yet + * started execution. It is unclear from the {@code ExecutorService} specification if these should + * be included, and it's much easier to implement the interpretation that they not be. Finally, a + * call to {@code shutdown} or {@code shutdownNow} may result in concurrent calls to {@code + * invokeAll/invokeAny} throwing RejectedExecutionException, although a subset of the tasks may + * already have been executed. + * + * @since 18.0 (present as MoreExecutors.sameThreadExecutor() since 10.0) + */ + @GwtIncompatible // TODO + public static ListeningExecutorService newDirectExecutorService() { + return new DirectExecutorService(); + } + + /** + * Returns an {@link Executor} that runs each task in the thread that invokes {@link + * Executor#execute execute}, as in {@code ThreadPoolExecutor.CallerRunsPolicy}. + * + *

      This executor is appropriate for tasks that are lightweight and not deeply chained. + * Inappropriate {@code directExecutor} usage can cause problems, and these problems can be + * difficult to reproduce because they depend on timing. For example: + * + *

        + *
      • A call like {@code future.transform(function, directExecutor())} may execute the function + * immediately in the thread that is calling {@code transform}. (This specific case happens + * if the future is already completed.) If {@code transform} call was made from a UI thread + * or other latency-sensitive thread, a heavyweight function can harm responsiveness. + *
      • If the task will be executed later, consider which thread will trigger the execution -- + * since that thread will execute the task inline. If the thread is a shared system thread + * like an RPC network thread, a heavyweight task can stall progress of the whole system or + * even deadlock it. + *
      • If many tasks will be triggered by the same event, one heavyweight task may delay other + * tasks -- even tasks that are not themselves {@code directExecutor} tasks. + *
      • If many such tasks are chained together (such as with {@code + * future.transform(...).transform(...).transform(...)....}), they may overflow the stack. + * (In simple cases, callers can avoid this by registering all tasks with the same {@link + * MoreExecutors#newSequentialExecutor} wrapper around {@code directExecutor()}. More + * complex cases may require using thread pools or making deeper changes.) + *
      • If an exception propagates out of a {@code Runnable}, it is not necessarily seen by any + * {@code UncaughtExceptionHandler} for the thread. For example, if the callback passed to + * {@link Futures#addCallback} throws an exception, that exception will be typically be + * logged by the {@link ListenableFuture} implementation, even if the thread is configured + * to do something different. In other cases, no code will catch the exception, and it may + * terminate whichever thread happens to trigger the execution. + *
      + * + * Additionally, beware of executing tasks with {@code directExecutor} while holding a lock. Since + * the task you submit to the executor (or any other arbitrary work the executor does) may do slow + * work or acquire other locks, you risk deadlocks. + * + *

      This instance is equivalent to: + * + *

      {@code
      +     * final class DirectExecutor implements Executor {
      +     *   public void execute(Runnable r) {
      +     *     r.run();
      +     *   }
      +     * }
      +     * }
      + * + *

      This should be preferred to {@link #newDirectExecutorService()} because implementing the + * {@link ExecutorService} subinterface necessitates significant performance overhead. + * + * @since 18.0 + */ + public static Executor directExecutor() { + return DirectExecutor.INSTANCE; + } + + /** + * Returns an {@link Executor} that runs each task executed sequentially, such that no two tasks + * are running concurrently. Submitted tasks have a happens-before order as defined in the Java + * Language Specification. + * + *

      The executor uses {@code delegate} in order to {@link Executor#execute execute} each task in + * turn, and does not create any threads of its own. + * + *

      After execution begins on a thread from the {@code delegate} {@link Executor}, tasks are + * polled and executed from a task queue until there are no more tasks. The thread will not be + * released until there are no more tasks to run. + * + *

      If a task is submitted while a thread is executing tasks from the task queue, the thread + * will not be released until that submitted task is also complete. + * + *

      If a task is {@linkplain Thread#interrupt interrupted} while a task is running: + * + *

        + *
      1. execution will not stop until the task queue is empty. + *
      2. tasks will begin execution with the thread marked as not interrupted - any interruption + * applies only to the task that was running at the point of interruption. + *
      3. if the thread was interrupted before the SequentialExecutor's worker begins execution, + * the interrupt will be restored to the thread after it completes so that its {@code + * delegate} Executor may process the interrupt. + *
      4. subtasks are run with the thread uninterrupted and interrupts received during execution + * of a task are ignored. + *
      + * + *

      {@code RuntimeException}s thrown by tasks are simply logged and the executor keeps trucking. + * If an {@code Error} is thrown, the error will propagate and execution will stop until the next + * time a task is submitted. + * + *

      When an {@code Error} is thrown by an executed task, previously submitted tasks may never + * run. An attempt will be made to restart execution on the next call to {@code execute}. If the + * {@code delegate} has begun to reject execution, the previously submitted tasks may never run, + * despite not throwing a RejectedExecutionException synchronously with the call to {@code + * execute}. If this behaviour is problematic, use an Executor with a single thread (e.g. {@link + * Executors#newSingleThreadExecutor}). + * + * @since 23.3 (since 23.1 as {@code sequentialExecutor}) + */ + @Beta + @GwtIncompatible + public static Executor newSequentialExecutor(Executor delegate) { + return new SequentialExecutor(delegate); + } + + /** + * Creates an {@link ExecutorService} whose {@code submit} and {@code invokeAll} methods submit + * {@link ListenableFutureTask} instances to the given delegate executor. Those methods, as well + * as {@code execute} and {@code invokeAny}, are implemented in terms of calls to {@code + * delegate.execute}. All other methods are forwarded unchanged to the delegate. This implies that + * the returned {@code ListeningExecutorService} never calls the delegate's {@code submit}, {@code + * invokeAll}, and {@code invokeAny} methods, so any special handling of tasks must be implemented + * in the delegate's {@code execute} method or by wrapping the returned {@code + * ListeningExecutorService}. + * + *

      If the delegate executor was already an instance of {@code ListeningExecutorService}, it is + * returned untouched, and the rest of this documentation does not apply. + * + * @since 10.0 + */ + @GwtIncompatible // TODO + public static ListeningExecutorService listeningDecorator(ExecutorService delegate) { + return (delegate instanceof ListeningExecutorService) + ? (ListeningExecutorService) delegate + : (delegate instanceof ScheduledExecutorService) + ? new ScheduledListeningDecorator((ScheduledExecutorService) delegate) + : new ListeningDecorator(delegate); + } + + /** + * Creates a {@link ScheduledExecutorService} whose {@code submit} and {@code invokeAll} methods + * submit {@link ListenableFutureTask} instances to the given delegate executor. Those methods, as + * well as {@code execute} and {@code invokeAny}, are implemented in terms of calls to {@code + * delegate.execute}. All other methods are forwarded unchanged to the delegate. This implies that + * the returned {@code ListeningScheduledExecutorService} never calls the delegate's {@code + * submit}, {@code invokeAll}, and {@code invokeAny} methods, so any special handling of tasks + * must be implemented in the delegate's {@code execute} method or by wrapping the returned {@code + * ListeningScheduledExecutorService}. + * + *

      If the delegate executor was already an instance of {@code + * ListeningScheduledExecutorService}, it is returned untouched, and the rest of this + * documentation does not apply. + * + * @since 10.0 + */ + @GwtIncompatible // TODO + public static ListeningScheduledExecutorService listeningDecorator( + ScheduledExecutorService delegate) { + return (delegate instanceof ListeningScheduledExecutorService) + ? (ListeningScheduledExecutorService) delegate + : new ScheduledListeningDecorator(delegate); + } + + @GwtIncompatible // TODO + private static class ListeningDecorator extends AbstractListeningExecutorService { + private final ExecutorService delegate; + + ListeningDecorator(ExecutorService delegate) { + this.delegate = checkNotNull(delegate); + } + + @Override + public final boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException { + return delegate.awaitTermination(timeout, unit); + } + + @Override + public final boolean isShutdown() { + return delegate.isShutdown(); + } + + @Override + public final boolean isTerminated() { + return delegate.isTerminated(); + } + + @Override + public final void shutdown() { + delegate.shutdown(); + } + + @Override + public final List shutdownNow() { + return delegate.shutdownNow(); + } + + @Override + public final void execute(Runnable command) { + delegate.execute(command); + } + + @Override + public final String toString() { + return super.toString() + "[" + delegate + "]"; + } + } + + @GwtIncompatible // TODO + private static final class ScheduledListeningDecorator extends ListeningDecorator + implements ListeningScheduledExecutorService { + @SuppressWarnings("hiding") + final ScheduledExecutorService delegate; + + ScheduledListeningDecorator(ScheduledExecutorService delegate) { + super(delegate); + this.delegate = checkNotNull(delegate); + } + + @Override + public ListenableScheduledFuture schedule(Runnable command, long delay, TimeUnit unit) { + TrustedListenableFutureTask<@Nullable Void> task = + TrustedListenableFutureTask.create(command, null); + ScheduledFuture scheduled = delegate.schedule(task, delay, unit); + return new ListenableScheduledTask<@Nullable Void>(task, scheduled); + } + + @Override + public ListenableScheduledFuture schedule( + Callable callable, long delay, TimeUnit unit) { + TrustedListenableFutureTask task = TrustedListenableFutureTask.create(callable); + ScheduledFuture scheduled = delegate.schedule(task, delay, unit); + return new ListenableScheduledTask(task, scheduled); + } + + @Override + public ListenableScheduledFuture scheduleAtFixedRate( + Runnable command, long initialDelay, long period, TimeUnit unit) { + NeverSuccessfulListenableFutureTask task = new NeverSuccessfulListenableFutureTask(command); + ScheduledFuture scheduled = delegate.scheduleAtFixedRate(task, initialDelay, period, unit); + return new ListenableScheduledTask<@Nullable Void>(task, scheduled); + } + + @Override + public ListenableScheduledFuture scheduleWithFixedDelay( + Runnable command, long initialDelay, long delay, TimeUnit unit) { + NeverSuccessfulListenableFutureTask task = new NeverSuccessfulListenableFutureTask(command); + ScheduledFuture scheduled = + delegate.scheduleWithFixedDelay(task, initialDelay, delay, unit); + return new ListenableScheduledTask<@Nullable Void>(task, scheduled); + } + + private static final class ListenableScheduledTask + extends SimpleForwardingListenableFuture implements ListenableScheduledFuture { + + private final ScheduledFuture scheduledDelegate; + + public ListenableScheduledTask( + ListenableFuture listenableDelegate, ScheduledFuture scheduledDelegate) { + super(listenableDelegate); + this.scheduledDelegate = scheduledDelegate; + } + + @Override + public boolean cancel(boolean mayInterruptIfRunning) { + boolean cancelled = super.cancel(mayInterruptIfRunning); + if (cancelled) { + // Unless it is cancelled, the delegate may continue being scheduled + scheduledDelegate.cancel(mayInterruptIfRunning); + + // TODO(user): Cancel "this" if "scheduledDelegate" is cancelled. + } + return cancelled; + } + + @Override + public long getDelay(TimeUnit unit) { + return scheduledDelegate.getDelay(unit); + } + + @Override + public int compareTo(Delayed other) { + return scheduledDelegate.compareTo(other); + } + } + + @GwtIncompatible // TODO + private static final class NeverSuccessfulListenableFutureTask + extends AbstractFuture.TrustedFuture<@Nullable Void> implements Runnable { + private final Runnable delegate; + + public NeverSuccessfulListenableFutureTask(Runnable delegate) { + this.delegate = checkNotNull(delegate); + } + + @Override + public void run() { + try { + delegate.run(); + } catch (Throwable t) { + setException(t); + throw Throwables.propagate(t); + } + } + + @Override + protected String pendingToString() { + return "task=[" + delegate + "]"; + } + } + } + + /* + * This following method is a modified version of one found in + * http://gee.cs.oswego.edu/cgi-bin/viewcvs.cgi/jsr166/src/test/tck/AbstractExecutorServiceTest.java?revision=1.30 + * which contained the following notice: + * + * Written by Doug Lea with assistance from members of JCP JSR-166 Expert Group and released to + * the public domain, as explained at http://creativecommons.org/publicdomain/zero/1.0/ + * + * Other contributors include Andrew Wright, Jeffrey Hayes, Pat Fisher, Mike Judd. + */ + + /** + * An implementation of {@link ExecutorService#invokeAny} for {@link ListeningExecutorService} + * implementations. + */ + @GwtIncompatible + @ParametricNullness + static T invokeAnyImpl( + ListeningExecutorService executorService, + Collection> tasks, + boolean timed, + Duration timeout) + throws InterruptedException, ExecutionException, TimeoutException { + return invokeAnyImpl( + executorService, tasks, timed, toNanosSaturated(timeout), TimeUnit.NANOSECONDS); + } + + /** + * An implementation of {@link ExecutorService#invokeAny} for {@link ListeningExecutorService} + * implementations. + */ + @SuppressWarnings("GoodTime") // should accept a java.time.Duration + @GwtIncompatible + @ParametricNullness + static T invokeAnyImpl( + ListeningExecutorService executorService, + Collection> tasks, + boolean timed, + long timeout, + TimeUnit unit) + throws InterruptedException, ExecutionException, TimeoutException { + checkNotNull(executorService); + checkNotNull(unit); + int ntasks = tasks.size(); + checkArgument(ntasks > 0); + List> futures = Lists.newArrayListWithCapacity(ntasks); + BlockingQueue> futureQueue = Queues.newLinkedBlockingQueue(); + long timeoutNanos = unit.toNanos(timeout); + + // For efficiency, especially in executors with limited + // parallelism, check to see if previously submitted tasks are + // done before submitting more of them. This interleaving + // plus the exception mechanics account for messiness of main + // loop. + + try { + // Record exceptions so that if we fail to obtain any + // result, we can throw the last exception we got. + ExecutionException ee = null; + long lastTime = timed ? System.nanoTime() : 0; + Iterator> it = tasks.iterator(); + + futures.add(submitAndAddQueueListener(executorService, it.next(), futureQueue)); + --ntasks; + int active = 1; + + while (true) { + Future f = futureQueue.poll(); + if (f == null) { + if (ntasks > 0) { + --ntasks; + futures.add(submitAndAddQueueListener(executorService, it.next(), futureQueue)); + ++active; + } else if (active == 0) { + break; + } else if (timed) { + f = futureQueue.poll(timeoutNanos, TimeUnit.NANOSECONDS); + if (f == null) { + throw new TimeoutException(); + } + long now = System.nanoTime(); + timeoutNanos -= now - lastTime; + lastTime = now; + } else { + f = futureQueue.take(); + } + } + if (f != null) { + --active; + try { + return f.get(); + } catch (ExecutionException eex) { + ee = eex; + } catch (RuntimeException rex) { + ee = new ExecutionException(rex); + } + } + } + + if (ee == null) { + ee = new ExecutionException(null); + } + throw ee; + } finally { + for (Future f : futures) { + f.cancel(true); + } + } + } + + /** + * Submits the task and adds a listener that adds the future to {@code queue} when it completes. + */ + @GwtIncompatible // TODO + private static ListenableFuture submitAndAddQueueListener( + ListeningExecutorService executorService, + Callable task, + final BlockingQueue> queue) { + final ListenableFuture future = executorService.submit(task); + future.addListener( + new Runnable() { + @Override + public void run() { + queue.add(future); + } + }, + directExecutor()); + return future; + } + + /** + * Returns a default thread factory used to create new threads. + * + *

      When running on AppEngine with access to AppEngine legacy + * APIs, this method returns {@code ThreadManager.currentRequestThreadFactory()}. Otherwise, + * it returns {@link Executors#defaultThreadFactory()}. + * + * @since 14.0 + */ + @Beta + @GwtIncompatible // concurrency + public static ThreadFactory platformThreadFactory() { + if (!isAppEngineWithApiClasses()) { + return Executors.defaultThreadFactory(); + } + try { + return (ThreadFactory) + Class.forName("com.google.appengine.api.ThreadManager") + .getMethod("currentRequestThreadFactory") + .invoke(null); + /* + * Do not merge the 3 catch blocks below. javac would infer a type of + * ReflectiveOperationException, which Animal Sniffer would reject. (Old versions of Android + * don't *seem* to mind, but there might be edge cases of which we're unaware.) + */ + } catch (IllegalAccessException e) { + throw new RuntimeException("Couldn't invoke ThreadManager.currentRequestThreadFactory", e); + } catch (ClassNotFoundException e) { + throw new RuntimeException("Couldn't invoke ThreadManager.currentRequestThreadFactory", e); + } catch (NoSuchMethodException e) { + throw new RuntimeException("Couldn't invoke ThreadManager.currentRequestThreadFactory", e); + } catch (InvocationTargetException e) { + throw Throwables.propagate(e.getCause()); + } + } + + @GwtIncompatible // TODO + private static boolean isAppEngineWithApiClasses() { + if (System.getProperty("com.google.appengine.runtime.environment") == null) { + return false; + } + try { + Class.forName("com.google.appengine.api.utils.SystemProperty"); + } catch (ClassNotFoundException e) { + return false; + } + try { + // If the current environment is null, we're not inside AppEngine. + return Class.forName("com.google.apphosting.api.ApiProxy") + .getMethod("getCurrentEnvironment") + .invoke(null) + != null; + } catch (ClassNotFoundException e) { + // If ApiProxy doesn't exist, we're not on AppEngine at all. + return false; + } catch (InvocationTargetException e) { + // If ApiProxy throws an exception, we're not in a proper AppEngine environment. + return false; + } catch (IllegalAccessException e) { + // If the method isn't accessible, we're not on a supported version of AppEngine; + return false; + } catch (NoSuchMethodException e) { + // If the method doesn't exist, we're not on a supported version of AppEngine; + return false; + } + } + + /** + * Creates a thread using {@link #platformThreadFactory}, and sets its name to {@code name} unless + * changing the name is forbidden by the security manager. + */ + @GwtIncompatible // concurrency + static Thread newThread(String name, Runnable runnable) { + checkNotNull(name); + checkNotNull(runnable); + Thread result = platformThreadFactory().newThread(runnable); + try { + result.setName(name); + } catch (SecurityException e) { + // OK if we can't set the name in this environment. + } + return result; + } + + // TODO(lukes): provide overloads for ListeningExecutorService? ListeningScheduledExecutorService? + // TODO(lukes): provide overloads that take constant strings? Functions to + // calculate names? + + /** + * Creates an {@link Executor} that renames the {@link Thread threads} that its tasks run in. + * + *

      The names are retrieved from the {@code nameSupplier} on the thread that is being renamed + * right before each task is run. The renaming is best effort, if a {@link SecurityManager} + * prevents the renaming then it will be skipped but the tasks will still execute. + * + * @param executor The executor to decorate + * @param nameSupplier The source of names for each task + */ + @GwtIncompatible // concurrency + static Executor renamingDecorator(final Executor executor, final Supplier nameSupplier) { + checkNotNull(executor); + checkNotNull(nameSupplier); + return new Executor() { + @Override + public void execute(Runnable command) { + executor.execute(Callables.threadRenaming(command, nameSupplier)); + } + }; + } + + /** + * Creates an {@link ExecutorService} that renames the {@link Thread threads} that its tasks run + * in. + * + *

      The names are retrieved from the {@code nameSupplier} on the thread that is being renamed + * right before each task is run. The renaming is best effort, if a {@link SecurityManager} + * prevents the renaming then it will be skipped but the tasks will still execute. + * + * @param service The executor to decorate + * @param nameSupplier The source of names for each task + */ + @GwtIncompatible // concurrency + static ExecutorService renamingDecorator( + final ExecutorService service, final Supplier nameSupplier) { + checkNotNull(service); + checkNotNull(nameSupplier); + return new WrappingExecutorService(service) { + @Override + protected Callable wrapTask(Callable callable) { + return Callables.threadRenaming(callable, nameSupplier); + } + + @Override + protected Runnable wrapTask(Runnable command) { + return Callables.threadRenaming(command, nameSupplier); + } + }; + } + + /** + * Creates a {@link ScheduledExecutorService} that renames the {@link Thread threads} that its + * tasks run in. + * + *

      The names are retrieved from the {@code nameSupplier} on the thread that is being renamed + * right before each task is run. The renaming is best effort, if a {@link SecurityManager} + * prevents the renaming then it will be skipped but the tasks will still execute. + * + * @param service The executor to decorate + * @param nameSupplier The source of names for each task + */ + @GwtIncompatible // concurrency + static ScheduledExecutorService renamingDecorator( + final ScheduledExecutorService service, final Supplier nameSupplier) { + checkNotNull(service); + checkNotNull(nameSupplier); + return new WrappingScheduledExecutorService(service) { + @Override + protected Callable wrapTask(Callable callable) { + return Callables.threadRenaming(callable, nameSupplier); + } + + @Override + protected Runnable wrapTask(Runnable command) { + return Callables.threadRenaming(command, nameSupplier); + } + }; + } + + /** + * Shuts down the given executor service gradually, first disabling new submissions and later, if + * necessary, cancelling remaining tasks. + * + *

      The method takes the following steps: + * + *

        + *
      1. calls {@link ExecutorService#shutdown()}, disabling acceptance of new submitted tasks. + *
      2. awaits executor service termination for half of the specified timeout. + *
      3. if the timeout expires, it calls {@link ExecutorService#shutdownNow()}, cancelling + * pending tasks and interrupting running tasks. + *
      4. awaits executor service termination for the other half of the specified timeout. + *
      + * + *

      If, at any step of the process, the calling thread is interrupted, the method calls {@link + * ExecutorService#shutdownNow()} and returns. + * + * @param service the {@code ExecutorService} to shut down + * @param timeout the maximum time to wait for the {@code ExecutorService} to terminate + * @return {@code true} if the {@code ExecutorService} was terminated successfully, {@code false} + * if the call timed out or was interrupted + * @since 28.0 + */ + @Beta + @CanIgnoreReturnValue + @GwtIncompatible // java.time.Duration + public static boolean shutdownAndAwaitTermination(ExecutorService service, Duration timeout) { + return shutdownAndAwaitTermination(service, toNanosSaturated(timeout), TimeUnit.NANOSECONDS); + } + + /** + * Shuts down the given executor service gradually, first disabling new submissions and later, if + * necessary, cancelling remaining tasks. + * + *

      The method takes the following steps: + * + *

        + *
      1. calls {@link ExecutorService#shutdown()}, disabling acceptance of new submitted tasks. + *
      2. awaits executor service termination for half of the specified timeout. + *
      3. if the timeout expires, it calls {@link ExecutorService#shutdownNow()}, cancelling + * pending tasks and interrupting running tasks. + *
      4. awaits executor service termination for the other half of the specified timeout. + *
      + * + *

      If, at any step of the process, the calling thread is interrupted, the method calls {@link + * ExecutorService#shutdownNow()} and returns. + * + * @param service the {@code ExecutorService} to shut down + * @param timeout the maximum time to wait for the {@code ExecutorService} to terminate + * @param unit the time unit of the timeout argument + * @return {@code true} if the {@code ExecutorService} was terminated successfully, {@code false} + * if the call timed out or was interrupted + * @since 17.0 + */ + @Beta + @CanIgnoreReturnValue + @GwtIncompatible // concurrency + @SuppressWarnings("GoodTime") // should accept a java.time.Duration + public static boolean shutdownAndAwaitTermination( + ExecutorService service, long timeout, TimeUnit unit) { + long halfTimeoutNanos = unit.toNanos(timeout) / 2; + // Disable new tasks from being submitted + service.shutdown(); + try { + // Wait for half the duration of the timeout for existing tasks to terminate + if (!service.awaitTermination(halfTimeoutNanos, TimeUnit.NANOSECONDS)) { + // Cancel currently executing tasks + service.shutdownNow(); + // Wait the other half of the timeout for tasks to respond to being cancelled + service.awaitTermination(halfTimeoutNanos, TimeUnit.NANOSECONDS); + } + } catch (InterruptedException ie) { + // Preserve interrupt status + Thread.currentThread().interrupt(); + // (Re-)Cancel if current thread also interrupted + service.shutdownNow(); + } + return service.isTerminated(); + } + + /** + * Returns an Executor that will propagate {@link RejectedExecutionException} from the delegate + * executor to the given {@code future}. + * + *

      Note, the returned executor can only be used once. + */ + static Executor rejectionPropagatingExecutor( + final Executor delegate, final AbstractFuture future) { + checkNotNull(delegate); + checkNotNull(future); + if (delegate == directExecutor()) { + // directExecutor() cannot throw RejectedExecutionException + return delegate; + } + return new Executor() { + @Override + public void execute(Runnable command) { + try { + delegate.execute(command); + } catch (RejectedExecutionException e) { + future.setException(e); + } + } + }; + } + + // Nacho start + /** + * Creates an executor service that runs each task in the thread that invokes {@code + * execute/submit}, as in {@code ThreadPoolExecutor.CallerRunsPolicy}. This applies both to + * individually submitted tasks and to collections of tasks submitted via {@code invokeAll} or + * {@code invokeAny}. In the latter case, tasks will run serially on the calling thread. Tasks are + * run to completion before a {@code Future} is returned to the caller (unless the executor has + * been shutdown). + * + *

      Although all tasks are immediately executed in the thread that submitted the task, this + * {@code ExecutorService} imposes a small locking overhead on each task submission in order to + * implement shutdown and termination behavior. + * + *

      The implementation deviates from the {@code ExecutorService} specification with regards to + * the {@code shutdownNow} method. First, "best-effort" with regards to canceling running tasks is + * implemented as "no-effort". No interrupts or other attempts are made to stop threads executing + * tasks. Second, the returned list will always be empty, as any submitted task is considered to + * have started execution. This applies also to tasks given to {@code invokeAll} or {@code + * invokeAny} which are pending serial execution, even the subset of the tasks that have not yet + * started execution. It is unclear from the {@code ExecutorService} specification if these should + * be included, and it's much easier to implement the interpretation that they not be. Finally, a + * call to {@code shutdown} or {@code shutdownNow} may result in concurrent calls to {@code + * invokeAll/invokeAny} throwing RejectedExecutionException, although a subset of the tasks may + * already have been executed. + * + * @since 10.0 + * @deprecated replaced by {@link MoreExecutors#sameThreadExecutor()} + * @see MoreExecutors#sameThreadExecutor() + */ + @Deprecated + @GwtIncompatible + public static ListeningExecutorService sameThreadExecutor() { + return newDirectExecutorService(); + } + // Nacho end +} \ No newline at end of file diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/Achievement.java b/eSpigot-Server/src/main/java/net/minecraft/server/Achievement.java new file mode 100644 index 0000000..09b69bb --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/Achievement.java @@ -0,0 +1,84 @@ +package net.minecraft.server; + +public class Achievement extends Statistic { + + public final int a; + public final int b; + public final Achievement c; + private final String k; + public final ItemStack d; + private boolean m; + + public Achievement(String s, String s1, int i, int j, Item item, Achievement achievement) { + this(s, s1, i, j, new ItemStack(item), achievement); + } + + public Achievement(String s, String s1, int i, int j, Block block, Achievement achievement) { + this(s, s1, i, j, new ItemStack(block), achievement); + } + + public Achievement(String s, String s1, int i, int j, ItemStack itemstack, Achievement achievement) { + super(s, new ChatMessage("achievement." + s1, new Object[0])); + this.d = itemstack; + this.k = "achievement." + s1 + ".desc"; + this.a = i; + this.b = j; + + if (i > AchievementList.c) { + AchievementList.c = i; + } + + if (j > AchievementList.d) { + AchievementList.d = j; + } + + this.c = achievement; + } + + public Achievement a() { + this.f = true; + return this; + } + + public Achievement b() { + this.m = true; + return this; + } + + public Achievement c() { + super.h(); + AchievementList.e.add(this); + return this; + } + + public boolean d() { + return true; + } + + public IChatBaseComponent e() { + IChatBaseComponent ichatbasecomponent = super.e(); + + ichatbasecomponent.getChatModifier().setColor(this.g() ? EnumChatFormat.DARK_PURPLE : EnumChatFormat.GREEN); + return ichatbasecomponent; + } + + public Achievement a(Class oclass) { + return (Achievement) super.b(oclass); + } + + public boolean g() { + return this.m; + } + + public Statistic b(Class oclass) { + return this.a(oclass); + } + + public Statistic h() { + return this.c(); + } + + public Statistic i() { + return this.a(); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/AchievementList.java b/eSpigot-Server/src/main/java/net/minecraft/server/AchievementList.java new file mode 100644 index 0000000..4c92425 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/AchievementList.java @@ -0,0 +1,49 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import java.util.List; + +public class AchievementList { + + public static int a; + public static int b; + public static int c; + public static int d; + public static List e = Lists.newArrayList(); + public static Achievement f = (new Achievement("achievement.openInventory", "openInventory", 0, 0, Items.BOOK, (Achievement) null)).a().c(); + public static Achievement g = (new Achievement("achievement.mineWood", "mineWood", 2, 1, Blocks.LOG, AchievementList.f)).c(); + public static Achievement h = (new Achievement("achievement.buildWorkBench", "buildWorkBench", 4, -1, Blocks.CRAFTING_TABLE, AchievementList.g)).c(); + public static Achievement i = (new Achievement("achievement.buildPickaxe", "buildPickaxe", 4, 2, Items.WOODEN_PICKAXE, AchievementList.h)).c(); + public static Achievement j = (new Achievement("achievement.buildFurnace", "buildFurnace", 3, 4, Blocks.FURNACE, AchievementList.i)).c(); + public static Achievement k = (new Achievement("achievement.acquireIron", "acquireIron", 1, 4, Items.IRON_INGOT, AchievementList.j)).c(); + public static Achievement l = (new Achievement("achievement.buildHoe", "buildHoe", 2, -3, Items.WOODEN_HOE, AchievementList.h)).c(); + public static Achievement m = (new Achievement("achievement.makeBread", "makeBread", -1, -3, Items.BREAD, AchievementList.l)).c(); + public static Achievement n = (new Achievement("achievement.bakeCake", "bakeCake", 0, -5, Items.CAKE, AchievementList.l)).c(); + public static Achievement o = (new Achievement("achievement.buildBetterPickaxe", "buildBetterPickaxe", 6, 2, Items.STONE_PICKAXE, AchievementList.i)).c(); + public static Achievement p = (new Achievement("achievement.cookFish", "cookFish", 2, 6, Items.COOKED_FISH, AchievementList.j)).c(); + public static Achievement q = (new Achievement("achievement.onARail", "onARail", 2, 3, Blocks.RAIL, AchievementList.k)).b().c(); + public static Achievement r = (new Achievement("achievement.buildSword", "buildSword", 6, -1, Items.WOODEN_SWORD, AchievementList.h)).c(); + public static Achievement s = (new Achievement("achievement.killEnemy", "killEnemy", 8, -1, Items.BONE, AchievementList.r)).c(); + public static Achievement t = (new Achievement("achievement.killCow", "killCow", 7, -3, Items.LEATHER, AchievementList.r)).c(); + public static Achievement u = (new Achievement("achievement.flyPig", "flyPig", 9, -3, Items.SADDLE, AchievementList.t)).b().c(); + public static Achievement v = (new Achievement("achievement.snipeSkeleton", "snipeSkeleton", 7, 0, Items.BOW, AchievementList.s)).b().c(); + public static Achievement w = (new Achievement("achievement.diamonds", "diamonds", -1, 5, Blocks.DIAMOND_ORE, AchievementList.k)).c(); + public static Achievement x = (new Achievement("achievement.diamondsToYou", "diamondsToYou", -1, 2, Items.DIAMOND, AchievementList.w)).c(); + public static Achievement y = (new Achievement("achievement.portal", "portal", -1, 7, Blocks.OBSIDIAN, AchievementList.w)).c(); + public static Achievement z = (new Achievement("achievement.ghast", "ghast", -4, 8, Items.GHAST_TEAR, AchievementList.y)).b().c(); + public static Achievement A = (new Achievement("achievement.blazeRod", "blazeRod", 0, 9, Items.BLAZE_ROD, AchievementList.y)).c(); + public static Achievement B = (new Achievement("achievement.potion", "potion", 2, 8, Items.POTION, AchievementList.A)).c(); + public static Achievement C = (new Achievement("achievement.theEnd", "theEnd", 3, 10, Items.ENDER_EYE, AchievementList.A)).b().c(); + public static Achievement D = (new Achievement("achievement.theEnd2", "theEnd2", 4, 13, Blocks.DRAGON_EGG, AchievementList.C)).b().c(); + public static Achievement E = (new Achievement("achievement.enchantments", "enchantments", -4, 4, Blocks.ENCHANTING_TABLE, AchievementList.w)).c(); + public static Achievement F = (new Achievement("achievement.overkill", "overkill", -4, 1, Items.DIAMOND_SWORD, AchievementList.E)).b().c(); + public static Achievement G = (new Achievement("achievement.bookcase", "bookcase", -3, 6, Blocks.BOOKSHELF, AchievementList.E)).c(); + public static Achievement H = (new Achievement("achievement.breedCow", "breedCow", 7, -5, Items.WHEAT, AchievementList.t)).c(); + public static Achievement I = (new Achievement("achievement.spawnWither", "spawnWither", 7, 12, new ItemStack(Items.SKULL, 1, 1), AchievementList.D)).c(); + public static Achievement J = (new Achievement("achievement.killWither", "killWither", 7, 10, Items.NETHER_STAR, AchievementList.I)).c(); + public static Achievement K = (new Achievement("achievement.fullBeacon", "fullBeacon", 7, 8, Blocks.BEACON, AchievementList.J)).b().c(); + public static Achievement L = (new Achievement("achievement.exploreAllBiomes", "exploreAllBiomes", 4, 8, Items.DIAMOND_BOOTS, AchievementList.C)).a(AchievementSet.class).b().c(); + public static Achievement M = (new Achievement("achievement.overpowered", "overpowered", 6, 4, new ItemStack(Items.GOLDEN_APPLE, 1, 1), AchievementList.o)).b().c(); + + public static void a() {} +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/AchievementSet.java b/eSpigot-Server/src/main/java/net/minecraft/server/AchievementSet.java new file mode 100644 index 0000000..ad2d9dc --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/AchievementSet.java @@ -0,0 +1,47 @@ +package net.minecraft.server; + +import com.google.common.collect.ForwardingSet; +import com.google.common.collect.Sets; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonPrimitive; +import java.util.Collection; +import java.util.Iterator; +import java.util.Set; + +public class AchievementSet extends ForwardingSet implements IJsonStatistic { + + private final Set a = Sets.newHashSet(); + + public AchievementSet() {} + + public void a(JsonElement jsonelement) { + if (jsonelement.isJsonArray()) { + Iterator iterator = jsonelement.getAsJsonArray().iterator(); + + while (iterator.hasNext()) { + JsonElement jsonelement1 = (JsonElement) iterator.next(); + + this.add(jsonelement1.getAsString()); + } + } + + } + + public JsonElement a() { + JsonArray jsonarray = new JsonArray(); + Iterator iterator = this.iterator(); + + while (iterator.hasNext()) { + String s = (String) iterator.next(); + + jsonarray.add(new JsonPrimitive(s)); + } + + return jsonarray; + } + + protected Set delegate() { + return this.a; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/AttributeBase.java b/eSpigot-Server/src/main/java/net/minecraft/server/AttributeBase.java new file mode 100644 index 0000000..9ef9bfe --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/AttributeBase.java @@ -0,0 +1,47 @@ +package net.minecraft.server; + +public abstract class AttributeBase implements IAttribute { + + private final IAttribute a; + private final String b; + private final double c; + private boolean d; + + protected AttributeBase(IAttribute iattribute, String s, double d0) { + this.a = iattribute; + this.b = s; + this.c = d0; + if (s == null) { + throw new IllegalArgumentException("Name cannot be null!"); + } + } + + public String getName() { + return this.b; + } + + public double b() { + return this.c; + } + + public boolean c() { + return this.d; + } + + public AttributeBase a(boolean flag) { + this.d = flag; + return this; + } + + public IAttribute d() { + return this.a; + } + + public int hashCode() { + return this.b.hashCode(); + } + + public boolean equals(Object object) { + return object instanceof IAttribute && this.b.equals(((IAttribute) object).getName()); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/AttributeInstance.java b/eSpigot-Server/src/main/java/net/minecraft/server/AttributeInstance.java new file mode 100644 index 0000000..c730d77 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/AttributeInstance.java @@ -0,0 +1,27 @@ +package net.minecraft.server; + +import java.util.Collection; +import java.util.UUID; + +public interface AttributeInstance { + + IAttribute getAttribute(); + + double b(); + + void setValue(double d0); + + Collection a(int i); + + Collection c(); + + boolean a(AttributeModifier attributemodifier); + + AttributeModifier a(UUID uuid); + + void b(AttributeModifier attributemodifier); + + void c(AttributeModifier attributemodifier); + + double getValue(); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/AttributeMapBase.java b/eSpigot-Server/src/main/java/net/minecraft/server/AttributeMapBase.java new file mode 100644 index 0000000..6b7aabc --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/AttributeMapBase.java @@ -0,0 +1,80 @@ +package net.minecraft.server; + +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Maps; +import com.google.common.collect.Multimap; +import java.util.Collection; +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; + +public abstract class AttributeMapBase { + + protected final Map a = Maps.newHashMap(); + protected final Map b = new InsensitiveStringMap(); + protected final Multimap c = HashMultimap.create(); + + public AttributeMapBase() {} + + public AttributeInstance a(IAttribute iattribute) { + return (AttributeInstance) this.a.get(iattribute); + } + + public AttributeInstance a(String s) { + return (AttributeInstance) this.b.get(s); + } + + public AttributeInstance b(IAttribute iattribute) { + if (this.b.containsKey(iattribute.getName())) { + throw new IllegalArgumentException("Attribute is already registered!"); + } else { + AttributeInstance attributeinstance = this.c(iattribute); + + this.b.put(iattribute.getName(), attributeinstance); + this.a.put(iattribute, attributeinstance); + + for (IAttribute iattribute1 = iattribute.d(); iattribute1 != null; iattribute1 = iattribute1.d()) { + this.c.put(iattribute1, iattribute); + } + + return attributeinstance; + } + } + + protected abstract AttributeInstance c(IAttribute iattribute); + + public Collection a() { + return this.b.values(); + } + + public void a(AttributeInstance attributeinstance) {} + + public void a(Multimap multimap) { + Iterator iterator = multimap.entries().iterator(); + + while (iterator.hasNext()) { + Entry entry = (Entry) iterator.next(); + AttributeInstance attributeinstance = this.a((String) entry.getKey()); + + if (attributeinstance != null) { + attributeinstance.c((AttributeModifier) entry.getValue()); + } + } + + } + + public void b(Multimap multimap) { + Iterator iterator = multimap.entries().iterator(); + + while (iterator.hasNext()) { + Entry entry = (Entry) iterator.next(); + AttributeInstance attributeinstance = this.a((String) entry.getKey()); + + if (attributeinstance != null) { + attributeinstance.c((AttributeModifier) entry.getValue()); + attributeinstance.b((AttributeModifier) entry.getValue()); + } + } + + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/AttributeMapServer.java b/eSpigot-Server/src/main/java/net/minecraft/server/AttributeMapServer.java new file mode 100644 index 0000000..97726c9 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/AttributeMapServer.java @@ -0,0 +1,89 @@ +package net.minecraft.server; + +import com.google.common.collect.Sets; +import java.util.Collection; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; + +public class AttributeMapServer extends AttributeMapBase { + + private final Set e = Sets.newHashSet(); + protected final Map d = new InsensitiveStringMap(); + + public AttributeMapServer() {} + + public AttributeModifiable e(IAttribute iattribute) { + return (AttributeModifiable) super.a(iattribute); + } + + public AttributeModifiable b(String s) { + AttributeInstance attributeinstance = super.a(s); + + if (attributeinstance == null) { + attributeinstance = (AttributeInstance) this.d.get(s); + } + + return (AttributeModifiable) attributeinstance; + } + + public AttributeInstance b(IAttribute iattribute) { + AttributeInstance attributeinstance = super.b(iattribute); + + if (iattribute instanceof AttributeRanged && ((AttributeRanged) iattribute).g() != null) { + this.d.put(((AttributeRanged) iattribute).g(), attributeinstance); + } + + return attributeinstance; + } + + protected AttributeInstance c(IAttribute iattribute) { + return new AttributeModifiable(this, iattribute); + } + + public void a(AttributeInstance attributeinstance) { + if (attributeinstance.getAttribute().c()) { + this.e.add(attributeinstance); + } + + Iterator iterator = this.c.get(attributeinstance.getAttribute()).iterator(); + + while (iterator.hasNext()) { + IAttribute iattribute = (IAttribute) iterator.next(); + AttributeModifiable attributemodifiable = this.e(iattribute); + + if (attributemodifiable != null) { + attributemodifiable.f(); + } + } + + } + + public Set getAttributes() { + return this.e; + } + + public Collection c() { + HashSet hashset = Sets.newHashSet(); + Iterator iterator = this.a().iterator(); + + while (iterator.hasNext()) { + AttributeInstance attributeinstance = (AttributeInstance) iterator.next(); + + if (attributeinstance.getAttribute().c()) { + hashset.add(attributeinstance); + } + } + + return hashset; + } + + public AttributeInstance a(String s) { + return this.b(s); + } + + public AttributeInstance a(IAttribute iattribute) { + return this.e(iattribute); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/AttributeModifiable.java b/eSpigot-Server/src/main/java/net/minecraft/server/AttributeModifiable.java new file mode 100644 index 0000000..58c9d00 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/AttributeModifiable.java @@ -0,0 +1,156 @@ +package net.minecraft.server; + +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import java.util.Collection; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import java.util.UUID; + +public class AttributeModifiable implements AttributeInstance { + + private final AttributeMapBase a; + private final IAttribute b; + private final Map> c = Maps.newHashMap(); + private final Map> d = Maps.newHashMap(); + private final Map e = Maps.newHashMap(); + private double f; + private boolean g = true; + private double h; + + public AttributeModifiable(AttributeMapBase attributemapbase, IAttribute iattribute) { + this.a = attributemapbase; + this.b = iattribute; + this.f = iattribute.b(); + + for (int i = 0; i < 3; ++i) { + this.c.put(Integer.valueOf(i), Sets.newHashSet()); + } + + } + + public IAttribute getAttribute() { + return this.b; + } + + public double b() { + return this.f; + } + + public void setValue(double d0) { + if (d0 != this.b()) { + this.f = d0; + this.f(); + } + } + + public Collection a(int i) { + return (Collection) this.c.get(Integer.valueOf(i)); + } + + public Collection c() { + HashSet hashset = Sets.newHashSet(); + + for (int i = 0; i < 3; ++i) { + hashset.addAll(this.a(i)); + } + + return hashset; + } + + public AttributeModifier a(UUID uuid) { + return (AttributeModifier) this.e.get(uuid); + } + + public boolean a(AttributeModifier attributemodifier) { + return this.e.get(attributemodifier.a()) != null; + } + + public void b(AttributeModifier attributemodifier) { + if (this.a(attributemodifier.a()) != null) { + throw new IllegalArgumentException("Modifier is already applied on this attribute!"); + } else { + Set object = this.d.computeIfAbsent(attributemodifier.b(), k -> Sets.newHashSet()); + + this.c.get(attributemodifier.c()).add(attributemodifier); + object.add(attributemodifier); + this.e.put(attributemodifier.a(), attributemodifier); + this.f(); + } + } + + protected void f() { + this.g = true; + this.a.a((AttributeInstance) this); + } + + public void c(AttributeModifier attributemodifier) { + for (int i = 0; i < 3; ++i) { + Set set = (Set) this.c.get(Integer.valueOf(i)); + + set.remove(attributemodifier); + } + + Set set1 = (Set) this.d.get(attributemodifier.b()); + + if (set1 != null) { + set1.remove(attributemodifier); + if (set1.isEmpty()) { + this.d.remove(attributemodifier.b()); + } + } + + this.e.remove(attributemodifier.a()); + this.f(); + } + + public double getValue() { + if (this.g) { + this.h = this.g(); + this.g = false; + } + + return this.h; + } + + private double g() { + double d0 = this.b(); + + AttributeModifier attributemodifier; + + for (Iterator iterator = this.b(0).iterator(); iterator.hasNext(); d0 += attributemodifier.d()) { + attributemodifier = (AttributeModifier) iterator.next(); + } + + double d1 = d0; + + Iterator iterator1; + AttributeModifier attributemodifier1; + + for (iterator1 = this.b(1).iterator(); iterator1.hasNext(); d1 += d0 * attributemodifier1.d()) { + attributemodifier1 = (AttributeModifier) iterator1.next(); + } + + for (iterator1 = this.b(2).iterator(); iterator1.hasNext(); d1 *= 1.0D + attributemodifier1.d()) { + attributemodifier1 = (AttributeModifier) iterator1.next(); + } + + return this.b.a(d1); + } + + private Collection b(int i) { + HashSet hashset = Sets.newHashSet(this.a(i)); + + for (IAttribute iattribute = this.b.d(); iattribute != null; iattribute = iattribute.d()) { + AttributeInstance attributeinstance = this.a.a(iattribute); + + if (attributeinstance != null) { + hashset.addAll(attributeinstance.a(i)); + } + } + + return hashset; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/AttributeModifier.java b/eSpigot-Server/src/main/java/net/minecraft/server/AttributeModifier.java new file mode 100644 index 0000000..da33bb6 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/AttributeModifier.java @@ -0,0 +1,82 @@ +package net.minecraft.server; + +import io.netty.util.internal.ThreadLocalRandom; +import java.util.Random; +import java.util.UUID; +import org.apache.commons.lang3.Validate; + +public class AttributeModifier { + + private final double a; + private final int b; + private final String c; + private final UUID d; + private boolean e; + + public AttributeModifier(String s, double d0, int i) { + this(MathHelper.a((Random) ThreadLocalRandom.current()), s, d0, i); + } + + public AttributeModifier(UUID uuid, String s, double d0, int i) { + this.e = true; + this.d = uuid; + this.c = s; + this.a = d0; + this.b = i; + Validate.notEmpty(s, "Modifier name cannot be empty", new Object[0]); + Validate.inclusiveBetween(0L, 2L, (long) i, "Invalid operation"); + } + + public UUID a() { + return this.d; + } + + public String b() { + return this.c; + } + + public int c() { + return this.b; + } + + public double d() { + return this.a; + } + + public boolean e() { + return this.e; + } + + public AttributeModifier a(boolean flag) { + this.e = flag; + return this; + } + + public boolean equals(Object object) { + if (this == object) { + return true; + } else if (object != null && this.getClass() == object.getClass()) { + AttributeModifier attributemodifier = (AttributeModifier) object; + + if (this.d != null) { + if (!this.d.equals(attributemodifier.d)) { + return false; + } + } else if (attributemodifier.d != null) { + return false; + } + + return true; + } else { + return false; + } + } + + public int hashCode() { + return this.d != null ? this.d.hashCode() : 0; + } + + public String toString() { + return "AttributeModifier{amount=" + this.a + ", operation=" + this.b + ", name=\'" + this.c + '\'' + ", id=" + this.d + ", serialize=" + this.e + '}'; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/AttributeRanged.java b/eSpigot-Server/src/main/java/net/minecraft/server/AttributeRanged.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/AttributeRanged.java rename to eSpigot-Server/src/main/java/net/minecraft/server/AttributeRanged.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/AxisAlignedBB.java b/eSpigot-Server/src/main/java/net/minecraft/server/AxisAlignedBB.java new file mode 100644 index 0000000..88b6fe5 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/AxisAlignedBB.java @@ -0,0 +1,285 @@ +package net.minecraft.server; + +public class AxisAlignedBB { + + public final double a; + public final double b; + public final double c; + public final double d; + public final double e; + public final double f; + + public AxisAlignedBB(double d0, double d1, double d2, double d3, double d4, double d5) { + this.a = Math.min(d0, d3); + this.b = Math.min(d1, d4); + this.c = Math.min(d2, d5); + this.d = Math.max(d0, d3); + this.e = Math.max(d1, d4); + this.f = Math.max(d2, d5); + } + + public AxisAlignedBB(BlockPosition blockposition, BlockPosition blockposition1) { + this.a = (double) blockposition.getX(); + this.b = (double) blockposition.getY(); + this.c = (double) blockposition.getZ(); + this.d = (double) blockposition1.getX(); + this.e = (double) blockposition1.getY(); + this.f = (double) blockposition1.getZ(); + } + + public AxisAlignedBB a(double d0, double d1, double d2) { + double d3 = this.a; + double d4 = this.b; + double d5 = this.c; + double d6 = this.d; + double d7 = this.e; + double d8 = this.f; + + if (d0 < 0.0D) { + d3 += d0; + } else if (d0 > 0.0D) { + d6 += d0; + } + + if (d1 < 0.0D) { + d4 += d1; + } else if (d1 > 0.0D) { + d7 += d1; + } + + if (d2 < 0.0D) { + d5 += d2; + } else if (d2 > 0.0D) { + d8 += d2; + } + + return new AxisAlignedBB(d3, d4, d5, d6, d7, d8); + } + + public AxisAlignedBB grow(double d0, double d1, double d2) { + double d3 = this.a - d0; + double d4 = this.b - d1; + double d5 = this.c - d2; + double d6 = this.d + d0; + double d7 = this.e + d1; + double d8 = this.f + d2; + + return new AxisAlignedBB(d3, d4, d5, d6, d7, d8); + } + + public AxisAlignedBB a(AxisAlignedBB axisalignedbb) { + double d0 = Math.min(this.a, axisalignedbb.a); + double d1 = Math.min(this.b, axisalignedbb.b); + double d2 = Math.min(this.c, axisalignedbb.c); + double d3 = Math.max(this.d, axisalignedbb.d); + double d4 = Math.max(this.e, axisalignedbb.e); + double d5 = Math.max(this.f, axisalignedbb.f); + + return new AxisAlignedBB(d0, d1, d2, d3, d4, d5); + } + + public static AxisAlignedBB a(double d0, double d1, double d2, double d3, double d4, double d5) { + double d6 = Math.min(d0, d3); + double d7 = Math.min(d1, d4); + double d8 = Math.min(d2, d5); + double d9 = Math.max(d0, d3); + double d10 = Math.max(d1, d4); + double d11 = Math.max(d2, d5); + + return new AxisAlignedBB(d6, d7, d8, d9, d10, d11); + } + + public AxisAlignedBB c(double d0, double d1, double d2) { + return new AxisAlignedBB(this.a + d0, this.b + d1, this.c + d2, this.d + d0, this.e + d1, this.f + d2); + } + + public double a(AxisAlignedBB axisalignedbb, double d0) { + if (axisalignedbb.e > this.b && axisalignedbb.b < this.e && axisalignedbb.f > this.c && axisalignedbb.c < this.f) { + double d1; + + if (d0 > 0.0D && axisalignedbb.d <= this.a) { + d1 = this.a - axisalignedbb.d; + if (d1 < d0) { + d0 = d1; + } + } else if (d0 < 0.0D && axisalignedbb.a >= this.d) { + d1 = this.d - axisalignedbb.a; + if (d1 > d0) { + d0 = d1; + } + } + + return d0; + } else { + return d0; + } + } + + public double b(AxisAlignedBB axisalignedbb, double d0) { + if (axisalignedbb.d > this.a && axisalignedbb.a < this.d && axisalignedbb.f > this.c && axisalignedbb.c < this.f) { + double d1; + + if (d0 > 0.0D && axisalignedbb.e <= this.b) { + d1 = this.b - axisalignedbb.e; + if (d1 < d0) { + d0 = d1; + } + } else if (d0 < 0.0D && axisalignedbb.b >= this.e) { + d1 = this.e - axisalignedbb.b; + if (d1 > d0) { + d0 = d1; + } + } + + return d0; + } else { + return d0; + } + } + + public double c(AxisAlignedBB axisalignedbb, double d0) { + if (axisalignedbb.d > this.a && axisalignedbb.a < this.d && axisalignedbb.e > this.b && axisalignedbb.b < this.e) { + double d1; + + if (d0 > 0.0D && axisalignedbb.f <= this.c) { + d1 = this.c - axisalignedbb.f; + if (d1 < d0) { + d0 = d1; + } + } else if (d0 < 0.0D && axisalignedbb.c >= this.f) { + d1 = this.f - axisalignedbb.c; + if (d1 > d0) { + d0 = d1; + } + } + + return d0; + } else { + return d0; + } + } + + public boolean b(AxisAlignedBB axisalignedbb) { + return axisalignedbb.d > this.a && axisalignedbb.a < this.d ? (axisalignedbb.e > this.b && axisalignedbb.b < this.e ? axisalignedbb.f > this.c && axisalignedbb.c < this.f : false) : false; + } + + public boolean a(Vec3D vec3d) { + return vec3d.a > this.a && vec3d.a < this.d ? (vec3d.b > this.b && vec3d.b < this.e ? vec3d.c > this.c && vec3d.c < this.f : false) : false; + } + + public double a() { + double d0 = this.d - this.a; + double d1 = this.e - this.b; + double d2 = this.f - this.c; + + return (d0 + d1 + d2) / 3.0D; + } + + public AxisAlignedBB shrink(double d0, double d1, double d2) { + double d3 = this.a + d0; + double d4 = this.b + d1; + double d5 = this.c + d2; + double d6 = this.d - d0; + double d7 = this.e - d1; + double d8 = this.f - d2; + + return new AxisAlignedBB(d3, d4, d5, d6, d7, d8); + } + + public MovingObjectPosition a(Vec3D vec3d, Vec3D vec3d1) { + Vec3D vec3d2 = vec3d.a(vec3d1, this.a); + Vec3D vec3d3 = vec3d.a(vec3d1, this.d); + Vec3D vec3d4 = vec3d.b(vec3d1, this.b); + Vec3D vec3d5 = vec3d.b(vec3d1, this.e); + Vec3D vec3d6 = vec3d.c(vec3d1, this.c); + Vec3D vec3d7 = vec3d.c(vec3d1, this.f); + + if (!this.b(vec3d2)) { + vec3d2 = null; + } + + if (!this.b(vec3d3)) { + vec3d3 = null; + } + + if (!this.c(vec3d4)) { + vec3d4 = null; + } + + if (!this.c(vec3d5)) { + vec3d5 = null; + } + + if (!this.d(vec3d6)) { + vec3d6 = null; + } + + if (!this.d(vec3d7)) { + vec3d7 = null; + } + + Vec3D vec3d8 = null; + + if (vec3d2 != null) { + vec3d8 = vec3d2; + } + + if (vec3d3 != null && (vec3d8 == null || vec3d.distanceSquared(vec3d3) < vec3d.distanceSquared(vec3d8))) { + vec3d8 = vec3d3; + } + + if (vec3d4 != null && (vec3d8 == null || vec3d.distanceSquared(vec3d4) < vec3d.distanceSquared(vec3d8))) { + vec3d8 = vec3d4; + } + + if (vec3d5 != null && (vec3d8 == null || vec3d.distanceSquared(vec3d5) < vec3d.distanceSquared(vec3d8))) { + vec3d8 = vec3d5; + } + + if (vec3d6 != null && (vec3d8 == null || vec3d.distanceSquared(vec3d6) < vec3d.distanceSquared(vec3d8))) { + vec3d8 = vec3d6; + } + + if (vec3d7 != null && (vec3d8 == null || vec3d.distanceSquared(vec3d7) < vec3d.distanceSquared(vec3d8))) { + vec3d8 = vec3d7; + } + + if (vec3d8 == null) { + return null; + } else { + EnumDirection enumdirection = null; + + if (vec3d8 == vec3d2) { + enumdirection = EnumDirection.WEST; + } else if (vec3d8 == vec3d3) { + enumdirection = EnumDirection.EAST; + } else if (vec3d8 == vec3d4) { + enumdirection = EnumDirection.DOWN; + } else if (vec3d8 == vec3d5) { + enumdirection = EnumDirection.UP; + } else if (vec3d8 == vec3d6) { + enumdirection = EnumDirection.NORTH; + } else { + enumdirection = EnumDirection.SOUTH; + } + + return new MovingObjectPosition(vec3d8, enumdirection); + } + } + + private boolean b(Vec3D vec3d) { + return vec3d == null ? false : vec3d.b >= this.b && vec3d.b <= this.e && vec3d.c >= this.c && vec3d.c <= this.f; + } + + private boolean c(Vec3D vec3d) { + return vec3d == null ? false : vec3d.a >= this.a && vec3d.a <= this.d && vec3d.c >= this.c && vec3d.c <= this.f; + } + + private boolean d(Vec3D vec3d) { + return vec3d == null ? false : vec3d.a >= this.a && vec3d.a <= this.d && vec3d.b >= this.b && vec3d.b <= this.e; + } + + public String toString() { + return "box[" + this.a + ", " + this.b + ", " + this.c + " -> " + this.d + ", " + this.e + ", " + this.f + "]"; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BaseBlockPosition.java b/eSpigot-Server/src/main/java/net/minecraft/server/BaseBlockPosition.java similarity index 94% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BaseBlockPosition.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BaseBlockPosition.java index 54f9c32..f86c12f 100644 --- a/TacoSpigot-Server/src/main/java/net/minecraft/server/BaseBlockPosition.java +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BaseBlockPosition.java @@ -1,6 +1,6 @@ package net.minecraft.server; -import com.google.common.base.Objects; +import com.google.common.base.MoreObjects; public class BaseBlockPosition implements Comparable { @@ -80,7 +80,7 @@ public class BaseBlockPosition implements Comparable { } public String toString() { - return Objects.toStringHelper(this).add("x", this.getX()).add("y", this.getY()).add("z", this.getZ()).toString(); + return MoreObjects.toStringHelper(this).add("x", this.getX()).add("y", this.getY()).add("z", this.getZ()).toString(); } // Paperspigot - Signature change, Object -> BaseBlockPosition diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BiomeBase.java b/eSpigot-Server/src/main/java/net/minecraft/server/BiomeBase.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BiomeBase.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BiomeBase.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BiomeBaseSub.java b/eSpigot-Server/src/main/java/net/minecraft/server/BiomeBaseSub.java new file mode 100644 index 0000000..e2280a4 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BiomeBaseSub.java @@ -0,0 +1,62 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import java.util.Random; + +public class BiomeBaseSub extends BiomeBase { + + protected BiomeBase aE; + + public BiomeBaseSub(int i, BiomeBase biomebase) { + super(i); + this.aE = biomebase; + this.a(biomebase.ai, true); + this.ah = biomebase.ah + " M"; + this.ak = biomebase.ak; + this.al = biomebase.al; + this.am = biomebase.am; + this.an = biomebase.an; + this.ao = biomebase.ao; + this.temperature = biomebase.temperature; + this.humidity = biomebase.humidity; + this.ar = biomebase.ar; + this.ax = biomebase.ax; + this.ay = biomebase.ay; + this.au = Lists.newArrayList(biomebase.au); + this.at = Lists.newArrayList(biomebase.at); + this.aw = Lists.newArrayList(biomebase.aw); + this.av = Lists.newArrayList(biomebase.av); + this.temperature = biomebase.temperature; + this.humidity = biomebase.humidity; + this.an = biomebase.an + 0.1F; + this.ao = biomebase.ao + 0.2F; + } + + public void a(World world, Random random, BlockPosition blockposition) { + this.aE.as.a(world, random, this, blockposition); + } + + public void a(World world, Random random, ChunkSnapshot chunksnapshot, int i, int j, double d0) { + this.aE.a(world, random, chunksnapshot, i, j, d0); + } + + public float g() { + return this.aE.g(); + } + + public WorldGenTreeAbstract a(Random random) { + return this.aE.a(random); + } + + public Class l() { + return this.aE.l(); + } + + public boolean a(BiomeBase biomebase) { + return this.aE.a(biomebase); + } + + public BiomeBase.EnumTemperature m() { + return this.aE.m(); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BiomeBeach.java b/eSpigot-Server/src/main/java/net/minecraft/server/BiomeBeach.java new file mode 100644 index 0000000..ba9285d --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BiomeBeach.java @@ -0,0 +1,15 @@ +package net.minecraft.server; + +public class BiomeBeach extends BiomeBase { + + public BiomeBeach(int i) { + super(i); + this.au.clear(); + this.ak = Blocks.SAND.getBlockData(); + this.al = Blocks.SAND.getBlockData(); + this.as.A = -999; + this.as.D = 0; + this.as.F = 0; + this.as.G = 0; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BiomeBigHills.java b/eSpigot-Server/src/main/java/net/minecraft/server/BiomeBigHills.java new file mode 100644 index 0000000..90c4992 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BiomeBigHills.java @@ -0,0 +1,87 @@ +package net.minecraft.server; + +import java.util.Random; + +public class BiomeBigHills extends BiomeBase { + + private WorldGenerator aD; + private WorldGenTaiga2 aE; + private int aF; + private int aG; + private int aH; + private int aI; + + protected BiomeBigHills(int i, boolean flag) { + super(i); + this.aD = new WorldGenMinable(Blocks.MONSTER_EGG.getBlockData().set(BlockMonsterEggs.VARIANT, BlockMonsterEggs.EnumMonsterEggVarient.STONE), 9); + this.aE = new WorldGenTaiga2(false); + this.aF = 0; + this.aG = 1; + this.aH = 2; + this.aI = this.aF; + if (flag) { + this.as.A = 3; + this.aI = this.aG; + } + + } + + public WorldGenTreeAbstract a(Random random) { + return (WorldGenTreeAbstract) (random.nextInt(3) > 0 ? this.aE : super.a(random)); + } + + public void a(World world, Random random, BlockPosition blockposition) { + super.a(world, random, blockposition); + int i = 3 + random.nextInt(6); + + int j; + int k; + int l; + + for (j = 0; j < i; ++j) { + k = random.nextInt(16); + l = random.nextInt(28) + 4; + int i1 = random.nextInt(16); + BlockPosition blockposition1 = blockposition.a(k, l, i1); + + if (world.getType(blockposition1).getBlock() == Blocks.STONE) { + world.setTypeAndData(blockposition1, Blocks.EMERALD_ORE.getBlockData(), 2); + } + } + + for (i = 0; i < 7; ++i) { + j = random.nextInt(16); + k = random.nextInt(64); + l = random.nextInt(16); + this.aD.generate(world, random, blockposition.a(j, k, l)); + } + + } + + public void a(World world, Random random, ChunkSnapshot chunksnapshot, int i, int j, double d0) { + this.ak = Blocks.GRASS.getBlockData(); + this.al = Blocks.DIRT.getBlockData(); + if ((d0 < -1.0D || d0 > 2.0D) && this.aI == this.aH) { + this.ak = Blocks.GRAVEL.getBlockData(); + this.al = Blocks.GRAVEL.getBlockData(); + } else if (d0 > 1.0D && this.aI != this.aG) { + this.ak = Blocks.STONE.getBlockData(); + this.al = Blocks.STONE.getBlockData(); + } + + this.b(world, random, chunksnapshot, i, j, d0); + } + + private BiomeBigHills b(BiomeBase biomebase) { + this.aI = this.aH; + this.a(biomebase.ai, true); + this.a(biomebase.ah + " M"); + this.a(new BiomeBase.BiomeTemperature(biomebase.an, biomebase.ao)); + this.a(biomebase.temperature, biomebase.humidity); + return this; + } + + protected BiomeBase d(int i) { + return (new BiomeBigHills(i, false)).b((BiomeBase) this); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BiomeCache.java b/eSpigot-Server/src/main/java/net/minecraft/server/BiomeCache.java new file mode 100644 index 0000000..d1c0634 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BiomeCache.java @@ -0,0 +1,84 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import java.util.List; + +public class BiomeCache { + + private final WorldChunkManager a; + private long b; + private LongHashMap c = new LongHashMap(); + private List d = Lists.newArrayList(); + + public BiomeCache(WorldChunkManager worldchunkmanager) { + this.a = worldchunkmanager; + } + + public BiomeCache.BiomeCacheBlock a(int i, int j) { + i >>= 4; + j >>= 4; + long k = (long) i & 4294967295L | ((long) j & 4294967295L) << 32; + BiomeCache.BiomeCacheBlock biomecache_biomecacheblock = (BiomeCache.BiomeCacheBlock) this.c.getEntry(k); + + if (biomecache_biomecacheblock == null) { + biomecache_biomecacheblock = new BiomeCache.BiomeCacheBlock(i, j); + this.c.put(k, biomecache_biomecacheblock); + this.d.add(biomecache_biomecacheblock); + } + + biomecache_biomecacheblock.e = MinecraftServer.az(); + return biomecache_biomecacheblock; + } + + public BiomeBase a(int i, int j, BiomeBase biomebase) { + BiomeBase biomebase1 = this.a(i, j).a(i, j); + + return biomebase1 == null ? biomebase : biomebase1; + } + + public void a() { + long i = MinecraftServer.az(); + long j = i - this.b; + + if (j > 7500L || j < 0L) { + this.b = i; + + for (int k = 0; k < this.d.size(); ++k) { + BiomeCache.BiomeCacheBlock biomecache_biomecacheblock = (BiomeCache.BiomeCacheBlock) this.d.get(k); + long l = i - biomecache_biomecacheblock.e; + + if (l > 30000L || l < 0L) { + this.d.remove(k--); + long i1 = (long) biomecache_biomecacheblock.c & 4294967295L | ((long) biomecache_biomecacheblock.d & 4294967295L) << 32; + + this.c.remove(i1); + } + } + } + + } + + public BiomeBase[] c(int i, int j) { + return this.a(i, j).b; + } + + public class BiomeCacheBlock { + + public float[] a = new float[256]; + public BiomeBase[] b = new BiomeBase[256]; + public int c; + public int d; + public long e; + + public BiomeCacheBlock(int i, int j) { + this.c = i; + this.d = j; + BiomeCache.this.a.getWetness(this.a, i << 4, j << 4, 16, 16); + BiomeCache.this.a.a(this.b, i << 4, j << 4, 16, 16, false); + } + + public BiomeBase a(int i, int j) { + return this.b[i & 15 | (j & 15) << 4]; + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BiomeDecorator.java b/eSpigot-Server/src/main/java/net/minecraft/server/BiomeDecorator.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BiomeDecorator.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BiomeDecorator.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BiomeDesert.java b/eSpigot-Server/src/main/java/net/minecraft/server/BiomeDesert.java new file mode 100644 index 0000000..59bea06 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BiomeDesert.java @@ -0,0 +1,30 @@ +package net.minecraft.server; + +import java.util.Random; + +public class BiomeDesert extends BiomeBase { + + public BiomeDesert(int i) { + super(i); + this.au.clear(); + this.ak = Blocks.SAND.getBlockData(); + this.al = Blocks.SAND.getBlockData(); + this.as.A = -999; + this.as.D = 2; + this.as.F = 50; + this.as.G = 10; + this.au.clear(); + } + + public void a(World world, Random random, BlockPosition blockposition) { + super.a(world, random, blockposition); + if (random.nextInt(1000) == 0) { + int i = random.nextInt(16) + 8; + int j = random.nextInt(16) + 8; + BlockPosition blockposition1 = world.getHighestBlockYAt(blockposition.a(i, 0, j)).up(); + + (new WorldGenDesertWell()).generate(world, random, blockposition1); + } + + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BiomeForest.java b/eSpigot-Server/src/main/java/net/minecraft/server/BiomeForest.java new file mode 100644 index 0000000..022c626 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BiomeForest.java @@ -0,0 +1,159 @@ +package net.minecraft.server; + +import java.util.Random; + +public class BiomeForest extends BiomeBase { + + private int aG; + protected static final WorldGenForest aD = new WorldGenForest(false, true); + protected static final WorldGenForest aE = new WorldGenForest(false, false); + protected static final WorldGenForestTree aF = new WorldGenForestTree(false); + + public BiomeForest(int i, int j) { + super(i); + this.aG = j; + this.as.A = 10; + this.as.C = 2; + if (this.aG == 1) { + this.as.A = 6; + this.as.B = 100; + this.as.C = 1; + } + + this.a(5159473); + this.a(0.7F, 0.8F); + if (this.aG == 2) { + this.aj = 353825; + this.ai = 3175492; + this.a(0.6F, 0.6F); + } + + if (this.aG == 0) { + this.au.add(new BiomeBase.BiomeMeta(EntityWolf.class, 5, 4, 4)); + } + + if (this.aG == 3) { + this.as.A = -999; + } + + } + + protected BiomeBase a(int i, boolean flag) { + if (this.aG == 2) { + this.aj = 353825; + this.ai = i; + if (flag) { + this.aj = (this.aj & 16711422) >> 1; + } + + return this; + } else { + return super.a(i, flag); + } + } + + public WorldGenTreeAbstract a(Random random) { + return (WorldGenTreeAbstract) (this.aG == 3 && random.nextInt(3) > 0 ? BiomeForest.aF : (this.aG != 2 && random.nextInt(5) != 0 ? this.aA : BiomeForest.aE)); + } + + public BlockFlowers.EnumFlowerVarient a(Random random, BlockPosition blockposition) { + if (this.aG == 1) { + double d0 = MathHelper.a((1.0D + BiomeForest.af.a((double) blockposition.getX() / 48.0D, (double) blockposition.getZ() / 48.0D)) / 2.0D, 0.0D, 0.9999D); + BlockFlowers.EnumFlowerVarient blockflowers_enumflowervarient = BlockFlowers.EnumFlowerVarient.values()[(int) (d0 * (double) BlockFlowers.EnumFlowerVarient.values().length)]; + + return blockflowers_enumflowervarient == BlockFlowers.EnumFlowerVarient.BLUE_ORCHID ? BlockFlowers.EnumFlowerVarient.POPPY : blockflowers_enumflowervarient; + } else { + return super.a(random, blockposition); + } + } + + public void a(World world, Random random, BlockPosition blockposition) { + int i; + int j; + int k; + int l; + + if (this.aG == 3) { + for (i = 0; i < 4; ++i) { + for (j = 0; j < 4; ++j) { + k = i * 4 + 1 + 8 + random.nextInt(3); + l = j * 4 + 1 + 8 + random.nextInt(3); + BlockPosition blockposition1 = world.getHighestBlockYAt(blockposition.a(k, 0, l)); + + if (random.nextInt(20) == 0) { + WorldGenHugeMushroom worldgenhugemushroom = new WorldGenHugeMushroom(); + + worldgenhugemushroom.generate(world, random, blockposition1); + } else { + WorldGenTreeAbstract worldgentreeabstract = this.a(random); + + worldgentreeabstract.e(); + if (worldgentreeabstract.generate(world, random, blockposition1)) { + worldgentreeabstract.a(world, random, blockposition1); + } + } + } + } + } + + i = random.nextInt(5) - 3; + if (this.aG == 1) { + i += 2; + } + + j = 0; + + while (j < i) { + k = random.nextInt(3); + if (k == 0) { + BiomeForest.ag.a(BlockTallPlant.EnumTallFlowerVariants.SYRINGA); + } else if (k == 1) { + BiomeForest.ag.a(BlockTallPlant.EnumTallFlowerVariants.ROSE); + } else if (k == 2) { + BiomeForest.ag.a(BlockTallPlant.EnumTallFlowerVariants.PAEONIA); + } + + l = 0; + + while (true) { + if (l < 5) { + int i1 = random.nextInt(16) + 8; + int j1 = random.nextInt(16) + 8; + int k1 = random.nextInt(world.getHighestBlockYAt(blockposition.a(i1, 0, j1)).getY() + 32); + + if (!BiomeForest.ag.generate(world, random, new BlockPosition(blockposition.getX() + i1, k1, blockposition.getZ() + j1))) { + ++l; + continue; + } + } + + ++j; + break; + } + } + + super.a(world, random, blockposition); + } + + protected BiomeBase d(final int i) { + if (this.id == BiomeBase.FOREST.id) { + BiomeForest biomeforest = new BiomeForest(i, 1); + + biomeforest.a(new BiomeBase.BiomeTemperature(this.an, this.ao + 0.2F)); + biomeforest.a("Flower Forest"); + biomeforest.a(6976549, true); + biomeforest.a(8233509); + return biomeforest; + } else { + return this.id != BiomeBase.BIRCH_FOREST.id && this.id != BiomeBase.BIRCH_FOREST_HILLS.id ? new BiomeBaseSub(i, this) { + public void a(World world, Random random, BlockPosition blockposition) { + this.aE.a(world, random, blockposition); + } + } : new BiomeBaseSub(i, this) { + public WorldGenTreeAbstract a(Random random) { + return random.nextBoolean() ? BiomeForest.aD : BiomeForest.aE; + } + }; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BiomeHell.java b/eSpigot-Server/src/main/java/net/minecraft/server/BiomeHell.java new file mode 100644 index 0000000..d2845b5 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BiomeHell.java @@ -0,0 +1,15 @@ +package net.minecraft.server; + +public class BiomeHell extends BiomeBase { + + public BiomeHell(int i) { + super(i); + this.at.clear(); + this.au.clear(); + this.av.clear(); + this.aw.clear(); + this.at.add(new BiomeBase.BiomeMeta(EntityGhast.class, 50, 4, 4)); + this.at.add(new BiomeBase.BiomeMeta(EntityPigZombie.class, 100, 4, 4)); + this.at.add(new BiomeBase.BiomeMeta(EntityMagmaCube.class, 1, 4, 4)); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BiomeIcePlains.java b/eSpigot-Server/src/main/java/net/minecraft/server/BiomeIcePlains.java new file mode 100644 index 0000000..b5a5850 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BiomeIcePlains.java @@ -0,0 +1,54 @@ +package net.minecraft.server; + +import java.util.Random; + +public class BiomeIcePlains extends BiomeBase { + + private boolean aD; + private WorldGenPackedIce2 aE = new WorldGenPackedIce2(); + private WorldGenPackedIce1 aF = new WorldGenPackedIce1(4); + + public BiomeIcePlains(int i, boolean flag) { + super(i); + this.aD = flag; + if (flag) { + this.ak = Blocks.SNOW.getBlockData(); + } + + this.au.clear(); + } + + public void a(World world, Random random, BlockPosition blockposition) { + if (this.aD) { + int i; + int j; + int k; + + for (i = 0; i < 3; ++i) { + j = random.nextInt(16) + 8; + k = random.nextInt(16) + 8; + this.aE.generate(world, random, world.getHighestBlockYAt(blockposition.a(j, 0, k))); + } + + for (i = 0; i < 2; ++i) { + j = random.nextInt(16) + 8; + k = random.nextInt(16) + 8; + this.aF.generate(world, random, world.getHighestBlockYAt(blockposition.a(j, 0, k))); + } + } + + super.a(world, random, blockposition); + } + + public WorldGenTreeAbstract a(Random random) { + return new WorldGenTaiga2(false); + } + + protected BiomeBase d(int i) { + BiomeBase biomebase = (new BiomeIcePlains(i, true)).a(13828095, true).a(this.ah + " Spikes").c().a(0.0F, 0.5F).a(new BiomeBase.BiomeTemperature(this.an + 0.1F, this.ao + 0.1F)); + + biomebase.an = this.an + 0.3F; + biomebase.ao = this.ao + 0.4F; + return biomebase; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BiomeJungle.java b/eSpigot-Server/src/main/java/net/minecraft/server/BiomeJungle.java new file mode 100644 index 0000000..1d069d9 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BiomeJungle.java @@ -0,0 +1,56 @@ +package net.minecraft.server; + +import java.util.Random; + +public class BiomeJungle extends BiomeBase { + + private boolean aD; + private static final IBlockData aE = Blocks.LOG.getBlockData().set(BlockLog1.VARIANT, BlockWood.EnumLogVariant.JUNGLE); + private static final IBlockData aF = Blocks.LEAVES.getBlockData().set(BlockLeaves1.VARIANT, BlockWood.EnumLogVariant.JUNGLE).set(BlockLeaves.CHECK_DECAY, Boolean.valueOf(false)); + private static final IBlockData aG = Blocks.LEAVES.getBlockData().set(BlockLeaves1.VARIANT, BlockWood.EnumLogVariant.OAK).set(BlockLeaves.CHECK_DECAY, Boolean.valueOf(false)); + + public BiomeJungle(int i, boolean flag) { + super(i); + this.aD = flag; + if (flag) { + this.as.A = 2; + } else { + this.as.A = 50; + } + + this.as.C = 25; + this.as.B = 4; + if (!flag) { + this.at.add(new BiomeBase.BiomeMeta(EntityOcelot.class, 2, 1, 1)); + } + + this.au.add(new BiomeBase.BiomeMeta(EntityChicken.class, 10, 4, 4)); + } + + public WorldGenTreeAbstract a(Random random) { + return (WorldGenTreeAbstract) (random.nextInt(10) == 0 ? this.aB : (random.nextInt(2) == 0 ? new WorldGenGroundBush(BiomeJungle.aE, BiomeJungle.aG) : (!this.aD && random.nextInt(3) == 0 ? new WorldGenJungleTree(false, 10, 20, BiomeJungle.aE, BiomeJungle.aF) : new WorldGenTrees(false, 4 + random.nextInt(7), BiomeJungle.aE, BiomeJungle.aF, true)))); + } + + public WorldGenerator b(Random random) { + return random.nextInt(4) == 0 ? new WorldGenGrass(BlockLongGrass.EnumTallGrassType.FERN) : new WorldGenGrass(BlockLongGrass.EnumTallGrassType.GRASS); + } + + public void a(World world, Random random, BlockPosition blockposition) { + super.a(world, random, blockposition); + int i = random.nextInt(16) + 8; + int j = random.nextInt(16) + 8; + int k = random.nextInt(world.getHighestBlockYAt(blockposition.a(i, 0, j)).getY() * 2); + + (new WorldGenMelon()).generate(world, random, blockposition.a(i, k, j)); + WorldGenVines worldgenvines = new WorldGenVines(); + + for (j = 0; j < 50; ++j) { + k = random.nextInt(16) + 8; + boolean flag = true; + int l = random.nextInt(16) + 8; + + worldgenvines.generate(world, random, blockposition.a(k, 128, l)); + } + + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BiomeMesa.java b/eSpigot-Server/src/main/java/net/minecraft/server/BiomeMesa.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BiomeMesa.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BiomeMesa.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BiomeMushrooms.java b/eSpigot-Server/src/main/java/net/minecraft/server/BiomeMushrooms.java new file mode 100644 index 0000000..5e61e18 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BiomeMushrooms.java @@ -0,0 +1,18 @@ +package net.minecraft.server; + +public class BiomeMushrooms extends BiomeBase { + + public BiomeMushrooms(int i) { + super(i); + this.as.A = -100; + this.as.B = -100; + this.as.C = -100; + this.as.E = 1; + this.as.K = 1; + this.ak = Blocks.MYCELIUM.getBlockData(); + this.at.clear(); + this.au.clear(); + this.av.clear(); + this.au.add(new BiomeBase.BiomeMeta(EntityMushroomCow.class, 8, 4, 8)); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BiomeOcean.java b/eSpigot-Server/src/main/java/net/minecraft/server/BiomeOcean.java new file mode 100644 index 0000000..1ddc21c --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BiomeOcean.java @@ -0,0 +1,19 @@ +package net.minecraft.server; + +import java.util.Random; + +public class BiomeOcean extends BiomeBase { + + public BiomeOcean(int i) { + super(i); + this.au.clear(); + } + + public BiomeBase.EnumTemperature m() { + return BiomeBase.EnumTemperature.OCEAN; + } + + public void a(World world, Random random, ChunkSnapshot chunksnapshot, int i, int j, double d0) { + super.a(world, random, chunksnapshot, i, j, d0); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BiomePlains.java b/eSpigot-Server/src/main/java/net/minecraft/server/BiomePlains.java new file mode 100644 index 0000000..50d8e6a --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BiomePlains.java @@ -0,0 +1,93 @@ +package net.minecraft.server; + +import java.util.Random; + +public class BiomePlains extends BiomeBase { + + protected boolean aD; + + protected BiomePlains(int i) { + super(i); + this.a(0.8F, 0.4F); + this.a(BiomePlains.e); + this.au.add(new BiomeBase.BiomeMeta(EntityHorse.class, 5, 2, 6)); + this.as.A = -999; + this.as.B = 4; + this.as.C = 10; + } + + public BlockFlowers.EnumFlowerVarient a(Random random, BlockPosition blockposition) { + double d0 = BiomePlains.af.a((double) blockposition.getX() / 200.0D, (double) blockposition.getZ() / 200.0D); + int i; + + if (d0 < -0.8D) { + i = random.nextInt(4); + switch (i) { + case 0: + return BlockFlowers.EnumFlowerVarient.ORANGE_TULIP; + + case 1: + return BlockFlowers.EnumFlowerVarient.RED_TULIP; + + case 2: + return BlockFlowers.EnumFlowerVarient.PINK_TULIP; + + case 3: + default: + return BlockFlowers.EnumFlowerVarient.WHITE_TULIP; + } + } else if (random.nextInt(3) > 0) { + i = random.nextInt(3); + return i == 0 ? BlockFlowers.EnumFlowerVarient.POPPY : (i == 1 ? BlockFlowers.EnumFlowerVarient.HOUSTONIA : BlockFlowers.EnumFlowerVarient.OXEYE_DAISY); + } else { + return BlockFlowers.EnumFlowerVarient.DANDELION; + } + } + + public void a(World world, Random random, BlockPosition blockposition) { + double d0 = BiomePlains.af.a((double) (blockposition.getX() + 8) / 200.0D, (double) (blockposition.getZ() + 8) / 200.0D); + int i; + int j; + int k; + int l; + + if (d0 < -0.8D) { + this.as.B = 15; + this.as.C = 5; + } else { + this.as.B = 4; + this.as.C = 10; + BiomePlains.ag.a(BlockTallPlant.EnumTallFlowerVariants.GRASS); + + for (i = 0; i < 7; ++i) { + j = random.nextInt(16) + 8; + k = random.nextInt(16) + 8; + l = random.nextInt(world.getHighestBlockYAt(blockposition.a(j, 0, k)).getY() + 32); + BiomePlains.ag.generate(world, random, blockposition.a(j, l, k)); + } + } + + if (this.aD) { + BiomePlains.ag.a(BlockTallPlant.EnumTallFlowerVariants.SUNFLOWER); + + for (i = 0; i < 10; ++i) { + j = random.nextInt(16) + 8; + k = random.nextInt(16) + 8; + l = random.nextInt(world.getHighestBlockYAt(blockposition.a(j, 0, k)).getY() + 32); + BiomePlains.ag.generate(world, random, blockposition.a(j, l, k)); + } + } + + super.a(world, random, blockposition); + } + + protected BiomeBase d(int i) { + BiomePlains biomeplains = new BiomePlains(i); + + biomeplains.a("Sunflower Plains"); + biomeplains.aD = true; + biomeplains.b(9286496); + biomeplains.aj = 14273354; + return biomeplains; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BiomeRiver.java b/eSpigot-Server/src/main/java/net/minecraft/server/BiomeRiver.java new file mode 100644 index 0000000..e0a0a79 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BiomeRiver.java @@ -0,0 +1,9 @@ +package net.minecraft.server; + +public class BiomeRiver extends BiomeBase { + + public BiomeRiver(int i) { + super(i); + this.au.clear(); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BiomeSavanna.java b/eSpigot-Server/src/main/java/net/minecraft/server/BiomeSavanna.java new file mode 100644 index 0000000..4d3d38a --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BiomeSavanna.java @@ -0,0 +1,70 @@ +package net.minecraft.server; + +import java.util.Random; + +public class BiomeSavanna extends BiomeBase { + + private static final WorldGenAcaciaTree aD = new WorldGenAcaciaTree(false); + + protected BiomeSavanna(int i) { + super(i); + this.au.add(new BiomeBase.BiomeMeta(EntityHorse.class, 1, 2, 6)); + this.as.A = 1; + this.as.B = 4; + this.as.C = 20; + } + + public WorldGenTreeAbstract a(Random random) { + return (WorldGenTreeAbstract) (random.nextInt(5) > 0 ? BiomeSavanna.aD : this.aA); + } + + protected BiomeBase d(int i) { + BiomeSavanna.BiomeSavannaSub biomesavanna_biomesavannasub = new BiomeSavanna.BiomeSavannaSub(i, this); + + biomesavanna_biomesavannasub.temperature = (this.temperature + 1.0F) * 0.5F; + biomesavanna_biomesavannasub.an = this.an * 0.5F + 0.3F; + biomesavanna_biomesavannasub.ao = this.ao * 0.5F + 1.2F; + return biomesavanna_biomesavannasub; + } + + public void a(World world, Random random, BlockPosition blockposition) { + BiomeSavanna.ag.a(BlockTallPlant.EnumTallFlowerVariants.GRASS); + + for (int i = 0; i < 7; ++i) { + int j = random.nextInt(16) + 8; + int k = random.nextInt(16) + 8; + int l = random.nextInt(world.getHighestBlockYAt(blockposition.a(j, 0, k)).getY() + 32); + + BiomeSavanna.ag.generate(world, random, blockposition.a(j, l, k)); + } + + super.a(world, random, blockposition); + } + + public static class BiomeSavannaSub extends BiomeBaseSub { + + public BiomeSavannaSub(int i, BiomeBase biomebase) { + super(i, biomebase); + this.as.A = 2; + this.as.B = 2; + this.as.C = 5; + } + + public void a(World world, Random random, ChunkSnapshot chunksnapshot, int i, int j, double d0) { + this.ak = Blocks.GRASS.getBlockData(); + this.al = Blocks.DIRT.getBlockData(); + if (d0 > 1.75D) { + this.ak = Blocks.STONE.getBlockData(); + this.al = Blocks.STONE.getBlockData(); + } else if (d0 > -0.5D) { + this.ak = Blocks.DIRT.getBlockData().set(BlockDirt.VARIANT, BlockDirt.EnumDirtVariant.COARSE_DIRT); + } + + this.b(world, random, chunksnapshot, i, j, d0); + } + + public void a(World world, Random random, BlockPosition blockposition) { + this.as.a(world, random, this, blockposition); + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BiomeStoneBeach.java b/eSpigot-Server/src/main/java/net/minecraft/server/BiomeStoneBeach.java new file mode 100644 index 0000000..453033f --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BiomeStoneBeach.java @@ -0,0 +1,15 @@ +package net.minecraft.server; + +public class BiomeStoneBeach extends BiomeBase { + + public BiomeStoneBeach(int i) { + super(i); + this.au.clear(); + this.ak = Blocks.STONE.getBlockData(); + this.al = Blocks.STONE.getBlockData(); + this.as.A = -999; + this.as.D = 0; + this.as.F = 0; + this.as.G = 0; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BiomeSwamp.java b/eSpigot-Server/src/main/java/net/minecraft/server/BiomeSwamp.java new file mode 100644 index 0000000..29959fd --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BiomeSwamp.java @@ -0,0 +1,53 @@ +package net.minecraft.server; + +import java.util.Random; + +public class BiomeSwamp extends BiomeBase { + + protected BiomeSwamp(int i) { + super(i); + this.as.A = 2; + this.as.B = 1; + this.as.D = 1; + this.as.E = 8; + this.as.F = 10; + this.as.J = 1; + this.as.z = 4; + this.as.I = 0; + this.as.H = 0; + this.as.C = 5; + this.ar = 14745518; + this.at.add(new BiomeBase.BiomeMeta(EntitySlime.class, 1, 1, 1)); + } + + public WorldGenTreeAbstract a(Random random) { + return this.aC; + } + + public BlockFlowers.EnumFlowerVarient a(Random random, BlockPosition blockposition) { + return BlockFlowers.EnumFlowerVarient.BLUE_ORCHID; + } + + public void a(World world, Random random, ChunkSnapshot chunksnapshot, int i, int j, double d0) { + double d1 = BiomeSwamp.af.a((double) i * 0.25D, (double) j * 0.25D); + + if (d1 > 0.0D) { + int k = i & 15; + int l = j & 15; + + for (int i1 = 255; i1 >= 0; --i1) { + if (chunksnapshot.a(l, i1, k).getBlock().getMaterial() != Material.AIR) { + if (i1 == 62 && chunksnapshot.a(l, i1, k).getBlock() != Blocks.WATER) { + chunksnapshot.a(l, i1, k, Blocks.WATER.getBlockData()); + if (d1 < 0.12D) { + chunksnapshot.a(l, i1 + 1, k, Blocks.WATERLILY.getBlockData()); + } + } + break; + } + } + } + + this.b(world, random, chunksnapshot, i, j, d0); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BiomeTaiga.java b/eSpigot-Server/src/main/java/net/minecraft/server/BiomeTaiga.java new file mode 100644 index 0000000..314dfed --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BiomeTaiga.java @@ -0,0 +1,85 @@ +package net.minecraft.server; + +import java.util.Random; + +public class BiomeTaiga extends BiomeBase { + + private static final WorldGenTaiga1 aD = new WorldGenTaiga1(); + private static final WorldGenTaiga2 aE = new WorldGenTaiga2(false); + private static final WorldGenMegaTree aF = new WorldGenMegaTree(false, false); + private static final WorldGenMegaTree aG = new WorldGenMegaTree(false, true); + private static final WorldGenTaigaStructure aH = new WorldGenTaigaStructure(Blocks.MOSSY_COBBLESTONE, 0); + private int aI; + + public BiomeTaiga(int i, int j) { + super(i); + this.aI = j; + this.au.add(new BiomeBase.BiomeMeta(EntityWolf.class, 8, 4, 4)); + this.as.A = 10; + if (j != 1 && j != 2) { + this.as.C = 1; + this.as.E = 1; + } else { + this.as.C = 7; + this.as.D = 1; + this.as.E = 3; + } + + } + + public WorldGenTreeAbstract a(Random random) { + return (WorldGenTreeAbstract) ((this.aI == 1 || this.aI == 2) && random.nextInt(3) == 0 ? (this.aI != 2 && random.nextInt(13) != 0 ? BiomeTaiga.aF : BiomeTaiga.aG) : (random.nextInt(3) == 0 ? BiomeTaiga.aD : BiomeTaiga.aE)); + } + + public WorldGenerator b(Random random) { + return random.nextInt(5) > 0 ? new WorldGenGrass(BlockLongGrass.EnumTallGrassType.FERN) : new WorldGenGrass(BlockLongGrass.EnumTallGrassType.GRASS); + } + + public void a(World world, Random random, BlockPosition blockposition) { + int i; + int j; + int k; + int l; + + if (this.aI == 1 || this.aI == 2) { + i = random.nextInt(3); + + for (j = 0; j < i; ++j) { + k = random.nextInt(16) + 8; + l = random.nextInt(16) + 8; + BlockPosition blockposition1 = world.getHighestBlockYAt(blockposition.a(k, 0, l)); + + BiomeTaiga.aH.generate(world, random, blockposition1); + } + } + + BiomeTaiga.ag.a(BlockTallPlant.EnumTallFlowerVariants.FERN); + + for (i = 0; i < 7; ++i) { + j = random.nextInt(16) + 8; + k = random.nextInt(16) + 8; + l = random.nextInt(world.getHighestBlockYAt(blockposition.a(j, 0, k)).getY() + 32); + BiomeTaiga.ag.generate(world, random, blockposition.a(j, l, k)); + } + + super.a(world, random, blockposition); + } + + public void a(World world, Random random, ChunkSnapshot chunksnapshot, int i, int j, double d0) { + if (this.aI == 1 || this.aI == 2) { + this.ak = Blocks.GRASS.getBlockData(); + this.al = Blocks.DIRT.getBlockData(); + if (d0 > 1.75D) { + this.ak = Blocks.DIRT.getBlockData().set(BlockDirt.VARIANT, BlockDirt.EnumDirtVariant.COARSE_DIRT); + } else if (d0 > -0.95D) { + this.ak = Blocks.DIRT.getBlockData().set(BlockDirt.VARIANT, BlockDirt.EnumDirtVariant.PODZOL); + } + } + + this.b(world, random, chunksnapshot, i, j, d0); + } + + protected BiomeBase d(int i) { + return this.id == BiomeBase.MEGA_TAIGA.id ? (new BiomeTaiga(i, 2)).a(5858897, true).a("Mega Spruce Taiga").a(5159473).a(0.25F, 0.8F).a(new BiomeBase.BiomeTemperature(this.an, this.ao)) : super.d(i); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BiomeTheEnd.java b/eSpigot-Server/src/main/java/net/minecraft/server/BiomeTheEnd.java new file mode 100644 index 0000000..24fb34d --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BiomeTheEnd.java @@ -0,0 +1,16 @@ +package net.minecraft.server; + +public class BiomeTheEnd extends BiomeBase { + + public BiomeTheEnd(int i) { + super(i); + this.at.clear(); + this.au.clear(); + this.av.clear(); + this.aw.clear(); + this.at.add(new BiomeBase.BiomeMeta(EntityEnderman.class, 10, 4, 4)); + this.ak = Blocks.DIRT.getBlockData(); + this.al = Blocks.DIRT.getBlockData(); + this.as = new BiomeTheEndDecorator(); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BiomeTheEndDecorator.java b/eSpigot-Server/src/main/java/net/minecraft/server/BiomeTheEndDecorator.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BiomeTheEndDecorator.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BiomeTheEndDecorator.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/Block.java b/eSpigot-Server/src/main/java/net/minecraft/server/Block.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/Block.java rename to eSpigot-Server/src/main/java/net/minecraft/server/Block.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockActionData.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockActionData.java new file mode 100644 index 0000000..6fb62f2 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockActionData.java @@ -0,0 +1,46 @@ +package net.minecraft.server; + +public class BlockActionData { + + private BlockPosition a; + private Block b; + private int c; + private int d; + + public BlockActionData(BlockPosition blockposition, Block block, int i, int j) { + this.a = blockposition; + this.c = i; + this.d = j; + this.b = block; + } + + public BlockPosition a() { + return this.a; + } + + public int b() { + return this.c; + } + + public int c() { + return this.d; + } + + public Block d() { + return this.b; + } + + public boolean equals(Object object) { + if (!(object instanceof BlockActionData)) { + return false; + } else { + BlockActionData blockactiondata = (BlockActionData) object; + + return this.a.equals(blockactiondata.a) && this.c == blockactiondata.c && this.d == blockactiondata.d && this.b == blockactiondata.b; + } + } + + public String toString() { + return "TE(" + this.a + ")," + this.c + "," + this.d + "," + this.b; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockAir.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockAir.java new file mode 100644 index 0000000..58b6eeb --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockAir.java @@ -0,0 +1,30 @@ +package net.minecraft.server; + +public class BlockAir extends Block { + + protected BlockAir() { + super(Material.AIR); + } + + public int b() { + return -1; + } + + public AxisAlignedBB a(World world, BlockPosition blockposition, IBlockData iblockdata) { + return null; + } + + public boolean c() { + return false; + } + + public boolean a(IBlockData iblockdata, boolean flag) { + return false; + } + + public void dropNaturally(World world, BlockPosition blockposition, IBlockData iblockdata, float f, int i) {} + + public boolean a(World world, BlockPosition blockposition) { + return true; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockAnvil.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockAnvil.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockAnvil.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockAnvil.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockBanner.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockBanner.java new file mode 100644 index 0000000..e1fe30f --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockBanner.java @@ -0,0 +1,214 @@ +package net.minecraft.server; + +import com.google.common.base.Predicate; +import java.util.Random; + +public class BlockBanner extends BlockContainer { + + public static final BlockStateDirection FACING = BlockStateDirection.of("facing", (Predicate) EnumDirection.EnumDirectionLimit.HORIZONTAL); + public static final BlockStateInteger ROTATION = BlockStateInteger.of("rotation", 0, 15); + + protected BlockBanner() { + super(Material.WOOD); + float f = 0.25F; + float f1 = 1.0F; + + this.a(0.5F - f, 0.0F, 0.5F - f, 0.5F + f, f1, 0.5F + f); + } + + public String getName() { + return LocaleI18n.get("item.banner.white.name"); + } + + public AxisAlignedBB a(World world, BlockPosition blockposition, IBlockData iblockdata) { + return null; + } + + public boolean d() { + return false; + } + + public boolean b(IBlockAccess iblockaccess, BlockPosition blockposition) { + return true; + } + + public boolean c() { + return false; + } + + public boolean g() { + return true; + } + + public TileEntity a(World world, int i) { + return new TileEntityBanner(); + } + + public Item getDropType(IBlockData iblockdata, Random random, int i) { + return Items.BANNER; + } + + public void dropNaturally(World world, BlockPosition blockposition, IBlockData iblockdata, float f, int i) { + TileEntity tileentity = world.getTileEntity(blockposition); + + if (tileentity instanceof TileEntityBanner) { + ItemStack itemstack = new ItemStack(Items.BANNER, 1, ((TileEntityBanner) tileentity).b()); + NBTTagCompound nbttagcompound = new NBTTagCompound(); + + tileentity.b(nbttagcompound); + nbttagcompound.remove("x"); + nbttagcompound.remove("y"); + nbttagcompound.remove("z"); + nbttagcompound.remove("id"); + itemstack.a("BlockEntityTag", (NBTBase) nbttagcompound); + a(world, blockposition, itemstack); + } else { + super.dropNaturally(world, blockposition, iblockdata, f, i); + } + + } + + public boolean canPlace(World world, BlockPosition blockposition) { + return !this.e(world, blockposition) && super.canPlace(world, blockposition); + } + + public void a(World world, EntityHuman entityhuman, BlockPosition blockposition, IBlockData iblockdata, TileEntity tileentity) { + if (tileentity instanceof TileEntityBanner) { + TileEntityBanner tileentitybanner = (TileEntityBanner) tileentity; + ItemStack itemstack = new ItemStack(Items.BANNER, 1, ((TileEntityBanner) tileentity).b()); + NBTTagCompound nbttagcompound = new NBTTagCompound(); + + TileEntityBanner.a(nbttagcompound, tileentitybanner.b(), tileentitybanner.d()); + itemstack.a("BlockEntityTag", (NBTBase) nbttagcompound); + a(world, blockposition, itemstack); + } else { + super.a(world, entityhuman, blockposition, iblockdata, (TileEntity) null); + } + + } + + static class SyntheticClass_1 { + + static final int[] a = new int[EnumDirection.values().length]; + + static { + try { + BlockBanner.SyntheticClass_1.a[EnumDirection.NORTH.ordinal()] = 1; + } catch (NoSuchFieldError nosuchfielderror) { + ; + } + + try { + BlockBanner.SyntheticClass_1.a[EnumDirection.SOUTH.ordinal()] = 2; + } catch (NoSuchFieldError nosuchfielderror1) { + ; + } + + try { + BlockBanner.SyntheticClass_1.a[EnumDirection.WEST.ordinal()] = 3; + } catch (NoSuchFieldError nosuchfielderror2) { + ; + } + + try { + BlockBanner.SyntheticClass_1.a[EnumDirection.EAST.ordinal()] = 4; + } catch (NoSuchFieldError nosuchfielderror3) { + ; + } + + } + } + + public static class BlockStandingBanner extends BlockBanner { + + public BlockStandingBanner() { + this.j(this.blockStateList.getBlockData().set(BlockBanner.BlockStandingBanner.ROTATION, Integer.valueOf(0))); + } + + public void doPhysics(World world, BlockPosition blockposition, IBlockData iblockdata, Block block) { + if (!world.getType(blockposition.down()).getBlock().getMaterial().isBuildable()) { + this.b(world, blockposition, iblockdata, 0); + world.setAir(blockposition); + } + + super.doPhysics(world, blockposition, iblockdata, block); + } + + public IBlockData fromLegacyData(int i) { + return this.getBlockData().set(BlockBanner.BlockStandingBanner.ROTATION, Integer.valueOf(i)); + } + + public int toLegacyData(IBlockData iblockdata) { + return ((Integer) iblockdata.get(BlockBanner.BlockStandingBanner.ROTATION)).intValue(); + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockBanner.BlockStandingBanner.ROTATION}); + } + } + + public static class BlockWallBanner extends BlockBanner { + + public BlockWallBanner() { + this.j(this.blockStateList.getBlockData().set(BlockBanner.BlockWallBanner.FACING, EnumDirection.NORTH)); + } + + public void updateShape(IBlockAccess iblockaccess, BlockPosition blockposition) { + EnumDirection enumdirection = (EnumDirection) iblockaccess.getType(blockposition).get(BlockBanner.BlockWallBanner.FACING); + float f = 0.0F; + float f1 = 0.78125F; + float f2 = 0.0F; + float f3 = 1.0F; + float f4 = 0.125F; + + this.a(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + switch (BlockBanner.SyntheticClass_1.a[enumdirection.ordinal()]) { + case 1: + default: + this.a(f2, f, 1.0F - f4, f3, f1, 1.0F); + break; + + case 2: + this.a(f2, f, 0.0F, f3, f1, f4); + break; + + case 3: + this.a(1.0F - f4, f, f2, 1.0F, f1, f3); + break; + + case 4: + this.a(0.0F, f, f2, f4, f1, f3); + } + + } + + public void doPhysics(World world, BlockPosition blockposition, IBlockData iblockdata, Block block) { + EnumDirection enumdirection = (EnumDirection) iblockdata.get(BlockBanner.BlockWallBanner.FACING); + + if (!world.getType(blockposition.shift(enumdirection.opposite())).getBlock().getMaterial().isBuildable()) { + this.b(world, blockposition, iblockdata, 0); + world.setAir(blockposition); + } + + super.doPhysics(world, blockposition, iblockdata, block); + } + + public IBlockData fromLegacyData(int i) { + EnumDirection enumdirection = EnumDirection.fromType1(i); + + if (enumdirection.k() == EnumDirection.EnumAxis.Y) { + enumdirection = EnumDirection.NORTH; + } + + return this.getBlockData().set(BlockBanner.BlockWallBanner.FACING, enumdirection); + } + + public int toLegacyData(IBlockData iblockdata) { + return ((EnumDirection) iblockdata.get(BlockBanner.BlockWallBanner.FACING)).a(); + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockBanner.BlockWallBanner.FACING}); + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockBarrier.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockBarrier.java new file mode 100644 index 0000000..6571694 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockBarrier.java @@ -0,0 +1,22 @@ +package net.minecraft.server; + +public class BlockBarrier extends Block { + + protected BlockBarrier() { + super(Material.BANNER); + this.x(); + this.b(6000001.0F); + this.K(); + this.t = true; + } + + public int b() { + return -1; + } + + public boolean c() { + return false; + } + + public void dropNaturally(World world, BlockPosition blockposition, IBlockData iblockdata, float f, int i) {} +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockBeacon.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockBeacon.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockBeacon.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockBeacon.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockBed.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockBed.java new file mode 100644 index 0000000..42d137e --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockBed.java @@ -0,0 +1,233 @@ +package net.minecraft.server; + +import java.util.Iterator; +import java.util.Random; + +public class BlockBed extends BlockDirectional { + + public static final BlockStateEnum PART = BlockStateEnum.of("part", BlockBed.EnumBedPart.class); + public static final BlockStateBoolean OCCUPIED = BlockStateBoolean.of("occupied"); + + public BlockBed() { + super(Material.CLOTH); + this.j(this.blockStateList.getBlockData().set(BlockBed.PART, BlockBed.EnumBedPart.FOOT).set(BlockBed.OCCUPIED, Boolean.valueOf(false))); + this.l(); + } + + public boolean interact(World world, BlockPosition blockposition, IBlockData iblockdata, EntityHuman entityhuman, EnumDirection enumdirection, float f, float f1, float f2) { + if (world.isClientSide) { + return true; + } else { + if (iblockdata.get(BlockBed.PART) != BlockBed.EnumBedPart.HEAD) { + blockposition = blockposition.shift((EnumDirection) iblockdata.get(BlockBed.FACING)); + iblockdata = world.getType(blockposition); + if (iblockdata.getBlock() != this) { + return true; + } + } + + if (world.worldProvider.e() && world.getBiome(blockposition) != BiomeBase.HELL) { + if (((Boolean) iblockdata.get(BlockBed.OCCUPIED)).booleanValue()) { + EntityHuman entityhuman1 = this.f(world, blockposition); + + if (entityhuman1 != null) { + entityhuman.b((IChatBaseComponent) (new ChatMessage("tile.bed.occupied", new Object[0]))); + return true; + } + + iblockdata = iblockdata.set(BlockBed.OCCUPIED, Boolean.valueOf(false)); + world.setTypeAndData(blockposition, iblockdata, 4); + } + + EntityHuman.EnumBedResult entityhuman_enumbedresult = entityhuman.a(blockposition); + + if (entityhuman_enumbedresult == EntityHuman.EnumBedResult.OK) { + iblockdata = iblockdata.set(BlockBed.OCCUPIED, Boolean.valueOf(true)); + world.setTypeAndData(blockposition, iblockdata, 4); + return true; + } else { + if (entityhuman_enumbedresult == EntityHuman.EnumBedResult.NOT_POSSIBLE_NOW) { + entityhuman.b((IChatBaseComponent) (new ChatMessage("tile.bed.noSleep", new Object[0]))); + } else if (entityhuman_enumbedresult == EntityHuman.EnumBedResult.NOT_SAFE) { + entityhuman.b((IChatBaseComponent) (new ChatMessage("tile.bed.notSafe", new Object[0]))); + } + + return true; + } + } else { + world.setAir(blockposition); + BlockPosition blockposition1 = blockposition.shift(((EnumDirection) iblockdata.get(BlockBed.FACING)).opposite()); + + if (world.getType(blockposition1).getBlock() == this) { + world.setAir(blockposition1); + } + + world.createExplosion((Entity) null, (double) blockposition.getX() + 0.5D, (double) blockposition.getY() + 0.5D, (double) blockposition.getZ() + 0.5D, 5.0F, true, true); + return true; + } + } + } + + private EntityHuman f(World world, BlockPosition blockposition) { + Iterator iterator = world.players.iterator(); + + EntityHuman entityhuman; + + do { + if (!iterator.hasNext()) { + return null; + } + + entityhuman = (EntityHuman) iterator.next(); + } while (!entityhuman.isSleeping() || !entityhuman.bx.equals(blockposition)); + + return entityhuman; + } + + public boolean d() { + return false; + } + + public boolean c() { + return false; + } + + public void updateShape(IBlockAccess iblockaccess, BlockPosition blockposition) { + this.l(); + } + + public void doPhysics(World world, BlockPosition blockposition, IBlockData iblockdata, Block block) { + EnumDirection enumdirection = (EnumDirection) iblockdata.get(BlockBed.FACING); + + if (iblockdata.get(BlockBed.PART) == BlockBed.EnumBedPart.HEAD) { + if (world.getType(blockposition.shift(enumdirection.opposite())).getBlock() != this) { + world.setAir(blockposition); + } + } else if (world.getType(blockposition.shift(enumdirection)).getBlock() != this) { + world.setAir(blockposition); + if (!world.isClientSide) { + this.b(world, blockposition, iblockdata, 0); + } + } + + } + + public Item getDropType(IBlockData iblockdata, Random random, int i) { + return iblockdata.get(BlockBed.PART) == BlockBed.EnumBedPart.HEAD ? null : Items.BED; + } + + private void l() { + this.a(0.0F, 0.0F, 0.0F, 1.0F, 0.5625F, 1.0F); + } + + public static BlockPosition a(World world, BlockPosition blockposition, int i) { + EnumDirection enumdirection = (EnumDirection) world.getType(blockposition).get(BlockBed.FACING); + int j = blockposition.getX(); + int k = blockposition.getY(); + int l = blockposition.getZ(); + + for (int i1 = 0; i1 <= 1; ++i1) { + int j1 = j - enumdirection.getAdjacentX() * i1 - 1; + int k1 = l - enumdirection.getAdjacentZ() * i1 - 1; + int l1 = j1 + 2; + int i2 = k1 + 2; + + for (int j2 = j1; j2 <= l1; ++j2) { + for (int k2 = k1; k2 <= i2; ++k2) { + BlockPosition blockposition1 = new BlockPosition(j2, k, k2); + + if (e(world, blockposition1)) { + if (i <= 0) { + return blockposition1; + } + + --i; + } + } + } + } + + return null; + } + + protected static boolean e(World world, BlockPosition blockposition) { + return World.a((IBlockAccess) world, blockposition.down()) && !world.getType(blockposition).getBlock().getMaterial().isBuildable() && !world.getType(blockposition.up()).getBlock().getMaterial().isBuildable(); + } + + public void dropNaturally(World world, BlockPosition blockposition, IBlockData iblockdata, float f, int i) { + if (iblockdata.get(BlockBed.PART) == BlockBed.EnumBedPart.FOOT) { + super.dropNaturally(world, blockposition, iblockdata, f, 0); + } + + } + + public int k() { + return 1; + } + + public void a(World world, BlockPosition blockposition, IBlockData iblockdata, EntityHuman entityhuman) { + if (entityhuman.abilities.canInstantlyBuild && iblockdata.get(BlockBed.PART) == BlockBed.EnumBedPart.HEAD) { + BlockPosition blockposition1 = blockposition.shift(((EnumDirection) iblockdata.get(BlockBed.FACING)).opposite()); + + if (world.getType(blockposition1).getBlock() == this) { + world.setAir(blockposition1); + } + } + + } + + public IBlockData fromLegacyData(int i) { + EnumDirection enumdirection = EnumDirection.fromType2(i); + + return (i & 8) > 0 ? this.getBlockData().set(BlockBed.PART, BlockBed.EnumBedPart.HEAD).set(BlockBed.FACING, enumdirection).set(BlockBed.OCCUPIED, Boolean.valueOf((i & 4) > 0)) : this.getBlockData().set(BlockBed.PART, BlockBed.EnumBedPart.FOOT).set(BlockBed.FACING, enumdirection); + } + + public IBlockData updateState(IBlockData iblockdata, IBlockAccess iblockaccess, BlockPosition blockposition) { + if (iblockdata.get(BlockBed.PART) == BlockBed.EnumBedPart.FOOT) { + IBlockData iblockdata1 = iblockaccess.getType(blockposition.shift((EnumDirection) iblockdata.get(BlockBed.FACING))); + + if (iblockdata1.getBlock() == this) { + iblockdata = iblockdata.set(BlockBed.OCCUPIED, iblockdata1.get(BlockBed.OCCUPIED)); + } + } + + return iblockdata; + } + + public int toLegacyData(IBlockData iblockdata) { + byte b0 = 0; + int i = b0 | ((EnumDirection) iblockdata.get(BlockBed.FACING)).b(); + + if (iblockdata.get(BlockBed.PART) == BlockBed.EnumBedPart.HEAD) { + i |= 8; + if (((Boolean) iblockdata.get(BlockBed.OCCUPIED)).booleanValue()) { + i |= 4; + } + } + + return i; + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockBed.FACING, BlockBed.PART, BlockBed.OCCUPIED}); + } + + public static enum EnumBedPart implements INamable { + + HEAD("head"), FOOT("foot"); + + private final String c; + + private EnumBedPart(String s) { + this.c = s; + } + + public String toString() { + return this.c; + } + + public String getName() { + return this.c; + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockBloodStone.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockBloodStone.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockBloodStone.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockBloodStone.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockBookshelf.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockBookshelf.java new file mode 100644 index 0000000..37f43e9 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockBookshelf.java @@ -0,0 +1,19 @@ +package net.minecraft.server; + +import java.util.Random; + +public class BlockBookshelf extends Block { + + public BlockBookshelf() { + super(Material.WOOD); + this.a(CreativeModeTab.b); + } + + public int a(Random random) { + return 3; + } + + public Item getDropType(IBlockData iblockdata, Random random, int i) { + return Items.BOOK; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockBrewingStand.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockBrewingStand.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockBrewingStand.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockBrewingStand.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockButtonAbstract.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockButtonAbstract.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockButtonAbstract.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockButtonAbstract.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockCactus.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockCactus.java similarity index 97% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockCactus.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockCactus.java index 2758fd8..e67d4ee 100644 --- a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockCactus.java +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockCactus.java @@ -63,7 +63,7 @@ public class BlockCactus extends Block { } public void doPhysics(World world, BlockPosition blockposition, IBlockData iblockdata, Block block) { - if (!this.e(world, blockposition)) { + if (!this.e(world, blockposition) && ((WorldServer) world).hasPhysicsEvent) { org.bukkit.block.Block bukkit = world.getWorld().getBlockAt(blockposition.getX(), blockposition.getY(), blockposition.getZ()); BlockPhysicsEvent event = new BlockPhysicsEvent(bukkit, bukkit.getTypeId()); world.getServer().getPluginManager().callEvent(event); diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockCake.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockCake.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockCake.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockCake.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockCarpet.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockCarpet.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockCarpet.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockCarpet.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockCarrots.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockCarrots.java new file mode 100644 index 0000000..3bdc67a --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockCarrots.java @@ -0,0 +1,14 @@ +package net.minecraft.server; + +public class BlockCarrots extends BlockCrops { + + public BlockCarrots() {} + + protected Item l() { + return Items.CARROT; + } + + protected Item n() { + return Items.CARROT; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockCauldron.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockCauldron.java new file mode 100644 index 0000000..5a4d5f7 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockCauldron.java @@ -0,0 +1,185 @@ +package net.minecraft.server; + +import java.util.List; +import java.util.Random; + +public class BlockCauldron extends Block { + + public static final BlockStateInteger LEVEL = BlockStateInteger.of("level", 0, 3); + + public BlockCauldron() { + super(Material.ORE, MaterialMapColor.m); + this.j(this.blockStateList.getBlockData().set(BlockCauldron.LEVEL, Integer.valueOf(0))); + } + + public void a(World world, BlockPosition blockposition, IBlockData iblockdata, AxisAlignedBB axisalignedbb, List list, Entity entity) { + this.a(0.0F, 0.0F, 0.0F, 1.0F, 0.3125F, 1.0F); + super.a(world, blockposition, iblockdata, axisalignedbb, list, entity); + float f = 0.125F; + + this.a(0.0F, 0.0F, 0.0F, f, 1.0F, 1.0F); + super.a(world, blockposition, iblockdata, axisalignedbb, list, entity); + this.a(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, f); + super.a(world, blockposition, iblockdata, axisalignedbb, list, entity); + this.a(1.0F - f, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + super.a(world, blockposition, iblockdata, axisalignedbb, list, entity); + this.a(0.0F, 0.0F, 1.0F - f, 1.0F, 1.0F, 1.0F); + super.a(world, blockposition, iblockdata, axisalignedbb, list, entity); + this.j(); + } + + public void j() { + this.a(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + + public boolean c() { + return false; + } + + public boolean d() { + return false; + } + + public void a(World world, BlockPosition blockposition, IBlockData iblockdata, Entity entity) { + int i = ((Integer) iblockdata.get(BlockCauldron.LEVEL)).intValue(); + float f = (float) blockposition.getY() + (6.0F + (float) (3 * i)) / 16.0F; + + if (!world.isClientSide && entity.isBurning() && i > 0 && entity.getBoundingBox().b <= (double) f) { + entity.extinguish(); + this.a(world, blockposition, iblockdata, i - 1); + } + + } + + public boolean interact(World world, BlockPosition blockposition, IBlockData iblockdata, EntityHuman entityhuman, EnumDirection enumdirection, float f, float f1, float f2) { + if (world.isClientSide) { + return true; + } else { + ItemStack itemstack = entityhuman.inventory.getItemInHand(); + + if (itemstack == null) { + return true; + } else { + int i = ((Integer) iblockdata.get(BlockCauldron.LEVEL)).intValue(); + Item item = itemstack.getItem(); + + if (item == Items.WATER_BUCKET) { + if (i < 3) { + if (!entityhuman.abilities.canInstantlyBuild) { + entityhuman.inventory.setItem(entityhuman.inventory.itemInHandIndex, new ItemStack(Items.BUCKET)); + } + + entityhuman.b(StatisticList.I); + this.a(world, blockposition, iblockdata, 3); + } + + return true; + } else { + ItemStack itemstack1; + + if (item == Items.GLASS_BOTTLE) { + if (i > 0) { + if (!entityhuman.abilities.canInstantlyBuild) { + itemstack1 = new ItemStack(Items.POTION, 1, 0); + if (!entityhuman.inventory.pickup(itemstack1)) { + world.addEntity(new EntityItem(world, (double) blockposition.getX() + 0.5D, (double) blockposition.getY() + 1.5D, (double) blockposition.getZ() + 0.5D, itemstack1)); + } else if (entityhuman instanceof EntityPlayer) { + ((EntityPlayer) entityhuman).updateInventory(entityhuman.defaultContainer); + } + + entityhuman.b(StatisticList.J); + --itemstack.count; + if (itemstack.count <= 0) { + entityhuman.inventory.setItem(entityhuman.inventory.itemInHandIndex, (ItemStack) null); + } + } + + this.a(world, blockposition, iblockdata, i - 1); + } + + return true; + } else { + if (i > 0 && item instanceof ItemArmor) { + ItemArmor itemarmor = (ItemArmor) item; + + if (itemarmor.x_() == ItemArmor.EnumArmorMaterial.LEATHER && itemarmor.d_(itemstack)) { + itemarmor.c(itemstack); + this.a(world, blockposition, iblockdata, i - 1); + entityhuman.b(StatisticList.K); + return true; + } + } + + if (i > 0 && item instanceof ItemBanner && TileEntityBanner.c(itemstack) > 0) { + itemstack1 = itemstack.cloneItemStack(); + itemstack1.count = 1; + TileEntityBanner.e(itemstack1); + if (itemstack.count <= 1 && !entityhuman.abilities.canInstantlyBuild) { + entityhuman.inventory.setItem(entityhuman.inventory.itemInHandIndex, itemstack1); + } else { + if (!entityhuman.inventory.pickup(itemstack1)) { + world.addEntity(new EntityItem(world, (double) blockposition.getX() + 0.5D, (double) blockposition.getY() + 1.5D, (double) blockposition.getZ() + 0.5D, itemstack1)); + } else if (entityhuman instanceof EntityPlayer) { + ((EntityPlayer) entityhuman).updateInventory(entityhuman.defaultContainer); + } + + entityhuman.b(StatisticList.L); + if (!entityhuman.abilities.canInstantlyBuild) { + --itemstack.count; + } + } + + if (!entityhuman.abilities.canInstantlyBuild) { + this.a(world, blockposition, iblockdata, i - 1); + } + + return true; + } else { + return false; + } + } + } + } + } + } + + public void a(World world, BlockPosition blockposition, IBlockData iblockdata, int i) { + world.setTypeAndData(blockposition, iblockdata.set(BlockCauldron.LEVEL, Integer.valueOf(MathHelper.clamp(i, 0, 3))), 2); + world.updateAdjacentComparators(blockposition, this); + } + + public void k(World world, BlockPosition blockposition) { + if (world.random.nextInt(20) == 1) { + IBlockData iblockdata = world.getType(blockposition); + + if (((Integer) iblockdata.get(BlockCauldron.LEVEL)).intValue() < 3) { + world.setTypeAndData(blockposition, iblockdata.a(BlockCauldron.LEVEL), 2); + } + + } + } + + public Item getDropType(IBlockData iblockdata, Random random, int i) { + return Items.CAULDRON; + } + + public boolean isComplexRedstone() { + return true; + } + + public int l(World world, BlockPosition blockposition) { + return ((Integer) world.getType(blockposition).get(BlockCauldron.LEVEL)).intValue(); + } + + public IBlockData fromLegacyData(int i) { + return this.getBlockData().set(BlockCauldron.LEVEL, Integer.valueOf(i)); + } + + public int toLegacyData(IBlockData iblockdata) { + return ((Integer) iblockdata.get(BlockCauldron.LEVEL)).intValue(); + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockCauldron.LEVEL}); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockChest.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockChest.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockChest.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockChest.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockClay.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockClay.java new file mode 100644 index 0000000..dbbe36b --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockClay.java @@ -0,0 +1,19 @@ +package net.minecraft.server; + +import java.util.Random; + +public class BlockClay extends Block { + + public BlockClay() { + super(Material.CLAY); + this.a(CreativeModeTab.b); + } + + public Item getDropType(IBlockData iblockdata, Random random, int i) { + return Items.CLAY_BALL; + } + + public int a(Random random) { + return 4; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockCloth.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockCloth.java new file mode 100644 index 0000000..a834bd4 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockCloth.java @@ -0,0 +1,32 @@ +package net.minecraft.server; + +public class BlockCloth extends Block { + + public static final BlockStateEnum COLOR = BlockStateEnum.of("color", EnumColor.class); + + public BlockCloth(Material material) { + super(material); + this.j(this.blockStateList.getBlockData().set(BlockCloth.COLOR, EnumColor.WHITE)); + this.a(CreativeModeTab.b); + } + + public int getDropData(IBlockData iblockdata) { + return ((EnumColor) iblockdata.get(BlockCloth.COLOR)).getColorIndex(); + } + + public MaterialMapColor g(IBlockData iblockdata) { + return ((EnumColor) iblockdata.get(BlockCloth.COLOR)).e(); + } + + public IBlockData fromLegacyData(int i) { + return this.getBlockData().set(BlockCloth.COLOR, EnumColor.fromColorIndex(i)); + } + + public int toLegacyData(IBlockData iblockdata) { + return ((EnumColor) iblockdata.get(BlockCloth.COLOR)).getColorIndex(); + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockCloth.COLOR}); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockCobbleWall.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockCobbleWall.java new file mode 100644 index 0000000..08f8b5e --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockCobbleWall.java @@ -0,0 +1,160 @@ +package net.minecraft.server; + +public class BlockCobbleWall extends Block { + + public static final BlockStateBoolean UP = BlockStateBoolean.of("up"); + public static final BlockStateBoolean NORTH = BlockStateBoolean.of("north"); + public static final BlockStateBoolean EAST = BlockStateBoolean.of("east"); + public static final BlockStateBoolean SOUTH = BlockStateBoolean.of("south"); + public static final BlockStateBoolean WEST = BlockStateBoolean.of("west"); + public static final BlockStateEnum VARIANT = BlockStateEnum.of("variant", BlockCobbleWall.EnumCobbleVariant.class); + + public BlockCobbleWall(Block block) { + super(block.material); + this.j(this.blockStateList.getBlockData().set(BlockCobbleWall.UP, Boolean.valueOf(false)).set(BlockCobbleWall.NORTH, Boolean.valueOf(false)).set(BlockCobbleWall.EAST, Boolean.valueOf(false)).set(BlockCobbleWall.SOUTH, Boolean.valueOf(false)).set(BlockCobbleWall.WEST, Boolean.valueOf(false)).set(BlockCobbleWall.VARIANT, BlockCobbleWall.EnumCobbleVariant.NORMAL)); + this.c(block.strength); + this.b(block.durability / 3.0F); + this.a(block.stepSound); + this.a(CreativeModeTab.b); + } + + public String getName() { + return LocaleI18n.get(this.a() + "." + BlockCobbleWall.EnumCobbleVariant.NORMAL.c() + ".name"); + } + + public boolean d() { + return false; + } + + public boolean b(IBlockAccess iblockaccess, BlockPosition blockposition) { + return false; + } + + public boolean c() { + return false; + } + + public void updateShape(IBlockAccess iblockaccess, BlockPosition blockposition) { + boolean flag = this.e(iblockaccess, blockposition.north()); + boolean flag1 = this.e(iblockaccess, blockposition.south()); + boolean flag2 = this.e(iblockaccess, blockposition.west()); + boolean flag3 = this.e(iblockaccess, blockposition.east()); + float f = 0.25F; + float f1 = 0.75F; + float f2 = 0.25F; + float f3 = 0.75F; + float f4 = 1.0F; + + if (flag) { + f2 = 0.0F; + } + + if (flag1) { + f3 = 1.0F; + } + + if (flag2) { + f = 0.0F; + } + + if (flag3) { + f1 = 1.0F; + } + + if (flag && flag1 && !flag2 && !flag3) { + f4 = 0.8125F; + f = 0.3125F; + f1 = 0.6875F; + } else if (!flag && !flag1 && flag2 && flag3) { + f4 = 0.8125F; + f2 = 0.3125F; + f3 = 0.6875F; + } + + this.a(f, 0.0F, f2, f1, f4, f3); + } + + public AxisAlignedBB a(World world, BlockPosition blockposition, IBlockData iblockdata) { + this.updateShape(world, blockposition); + this.maxY = 1.5D; + return super.a(world, blockposition, iblockdata); + } + + public boolean e(IBlockAccess iblockaccess, BlockPosition blockposition) { + Block block = iblockaccess.getType(blockposition).getBlock(); + + return block == Blocks.BARRIER ? false : (block != this && !(block instanceof BlockFenceGate) ? (block.material.k() && block.d() ? block.material != Material.PUMPKIN : false) : true); + } + + public int getDropData(IBlockData iblockdata) { + return ((BlockCobbleWall.EnumCobbleVariant) iblockdata.get(BlockCobbleWall.VARIANT)).a(); + } + + public IBlockData fromLegacyData(int i) { + return this.getBlockData().set(BlockCobbleWall.VARIANT, BlockCobbleWall.EnumCobbleVariant.a(i)); + } + + public int toLegacyData(IBlockData iblockdata) { + return ((BlockCobbleWall.EnumCobbleVariant) iblockdata.get(BlockCobbleWall.VARIANT)).a(); + } + + public IBlockData updateState(IBlockData iblockdata, IBlockAccess iblockaccess, BlockPosition blockposition) { + return iblockdata.set(BlockCobbleWall.UP, Boolean.valueOf(!iblockaccess.isEmpty(blockposition.up()))).set(BlockCobbleWall.NORTH, Boolean.valueOf(this.e(iblockaccess, blockposition.north()))).set(BlockCobbleWall.EAST, Boolean.valueOf(this.e(iblockaccess, blockposition.east()))).set(BlockCobbleWall.SOUTH, Boolean.valueOf(this.e(iblockaccess, blockposition.south()))).set(BlockCobbleWall.WEST, Boolean.valueOf(this.e(iblockaccess, blockposition.west()))); + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockCobbleWall.UP, BlockCobbleWall.NORTH, BlockCobbleWall.EAST, BlockCobbleWall.WEST, BlockCobbleWall.SOUTH, BlockCobbleWall.VARIANT}); + } + + public static enum EnumCobbleVariant implements INamable { + + NORMAL(0, "cobblestone", "normal"), MOSSY(1, "mossy_cobblestone", "mossy"); + + private static final BlockCobbleWall.EnumCobbleVariant[] c = new BlockCobbleWall.EnumCobbleVariant[values().length]; + private final int d; + private final String e; + private String f; + + private EnumCobbleVariant(int i, String s, String s1) { + this.d = i; + this.e = s; + this.f = s1; + } + + public int a() { + return this.d; + } + + public String toString() { + return this.e; + } + + public static BlockCobbleWall.EnumCobbleVariant a(int i) { + if (i < 0 || i >= BlockCobbleWall.EnumCobbleVariant.c.length) { + i = 0; + } + + return BlockCobbleWall.EnumCobbleVariant.c[i]; + } + + public String getName() { + return this.e; + } + + public String c() { + return this.f; + } + + static { + BlockCobbleWall.EnumCobbleVariant[] ablockcobblewall_enumcobblevariant = values(); + int i = ablockcobblewall_enumcobblevariant.length; + + for (int j = 0; j < i; ++j) { + BlockCobbleWall.EnumCobbleVariant blockcobblewall_enumcobblevariant = ablockcobblewall_enumcobblevariant[j]; + + BlockCobbleWall.EnumCobbleVariant.c[blockcobblewall_enumcobblevariant.a()] = blockcobblewall_enumcobblevariant; + } + + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockCocoa.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockCocoa.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockCocoa.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockCocoa.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockCommand.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockCommand.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockCommand.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockCommand.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockContainer.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockContainer.java new file mode 100644 index 0000000..c51f6c6 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockContainer.java @@ -0,0 +1,37 @@ +package net.minecraft.server; + +public abstract class BlockContainer extends Block implements IContainer { + + protected BlockContainer(Material material) { + this(material, material.r()); + } + + protected BlockContainer(Material material, MaterialMapColor materialmapcolor) { + super(material, materialmapcolor); + this.isTileEntity = true; + } + + protected boolean a(World world, BlockPosition blockposition, EnumDirection enumdirection) { + return world.getType(blockposition.shift(enumdirection)).getBlock().getMaterial() == Material.CACTUS; + } + + protected boolean e(World world, BlockPosition blockposition) { + return this.a(world, blockposition, EnumDirection.NORTH) || this.a(world, blockposition, EnumDirection.SOUTH) || this.a(world, blockposition, EnumDirection.WEST) || this.a(world, blockposition, EnumDirection.EAST); + } + + public int b() { + return -1; + } + + public void remove(World world, BlockPosition blockposition, IBlockData iblockdata) { + super.remove(world, blockposition, iblockdata); + world.t(blockposition); + } + + public boolean a(World world, BlockPosition blockposition, IBlockData iblockdata, int i, int j) { + super.a(world, blockposition, iblockdata, i, j); + TileEntity tileentity = world.getTileEntity(blockposition); + + return tileentity == null ? false : tileentity.c(i, j); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockCrops.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockCrops.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockCrops.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockCrops.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockDataAbstract.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockDataAbstract.java new file mode 100644 index 0000000..77d2a07 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockDataAbstract.java @@ -0,0 +1,63 @@ +package net.minecraft.server; + +import com.google.common.base.Function; +import com.google.common.base.Joiner; +import com.google.common.collect.Iterables; +import java.util.Collection; +import java.util.Iterator; +import java.util.Map.Entry; + +public abstract class BlockDataAbstract implements IBlockData { + + private static final Joiner a = Joiner.on(','); + private static final Function, String> b = new Function() { + public String a(Entry entry) { + if (entry == null) { + return ""; + } else { + IBlockState iblockstate = (IBlockState) entry.getKey(); + + return iblockstate.a() + "=" + iblockstate.a((Comparable) entry.getValue()); + } + } + + public Object apply(Object object) { + return this.a((Entry) object); + } + }; + + public BlockDataAbstract() {} + + public > IBlockData a(IBlockState iblockstate) { + return this.set(iblockstate, a(iblockstate.c(), this.get(iblockstate))); + } + + protected static T a(Collection collection, T t0) { + Iterator iterator = collection.iterator(); + + do { + if (!iterator.hasNext()) { + return iterator.next(); + } + } while (!iterator.next().equals(t0)); + + if (iterator.hasNext()) { + return iterator.next(); + } else { + return collection.iterator().next(); + } + } + + public String toString() { + StringBuilder stringbuilder = new StringBuilder(); + + stringbuilder.append(Block.REGISTRY.c(this.getBlock())); + if (!this.b().isEmpty()) { + stringbuilder.append("["); + BlockDataAbstract.a.appendTo(stringbuilder, Iterables.transform(this.b().entrySet(), BlockDataAbstract.b)); + stringbuilder.append("]"); + } + + return stringbuilder.toString(); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockDaylightDetector.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockDaylightDetector.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockDaylightDetector.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockDaylightDetector.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockDeadBush.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockDeadBush.java new file mode 100644 index 0000000..98c3304 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockDeadBush.java @@ -0,0 +1,39 @@ +package net.minecraft.server; + +import java.util.Random; + +public class BlockDeadBush extends BlockPlant { + + protected BlockDeadBush() { + super(Material.REPLACEABLE_PLANT); + float f = 0.4F; + + this.a(0.5F - f, 0.0F, 0.5F - f, 0.5F + f, 0.8F, 0.5F + f); + } + + public MaterialMapColor g(IBlockData iblockdata) { + return MaterialMapColor.o; + } + + protected boolean c(Block block) { + return block == Blocks.SAND || block == Blocks.HARDENED_CLAY || block == Blocks.STAINED_HARDENED_CLAY || block == Blocks.DIRT; + } + + public boolean a(World world, BlockPosition blockposition) { + return true; + } + + public Item getDropType(IBlockData iblockdata, Random random, int i) { + return null; + } + + public void a(World world, EntityHuman entityhuman, BlockPosition blockposition, IBlockData iblockdata, TileEntity tileentity) { + if (!world.isClientSide && entityhuman.bZ() != null && entityhuman.bZ().getItem() == Items.SHEARS) { + entityhuman.b(StatisticList.MINE_BLOCK_COUNT[Block.getId(this)]); + a(world, blockposition, new ItemStack(Blocks.DEADBUSH, 1, 0)); + } else { + super.a(world, entityhuman, blockposition, iblockdata, tileentity); + } + + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockDiodeAbstract.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockDiodeAbstract.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockDiodeAbstract.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockDiodeAbstract.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockDirectional.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockDirectional.java new file mode 100644 index 0000000..2005bc1 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockDirectional.java @@ -0,0 +1,16 @@ +package net.minecraft.server; + +import com.google.common.base.Predicate; + +public abstract class BlockDirectional extends Block { + + public static final BlockStateDirection FACING = BlockStateDirection.of("facing", (Predicate) EnumDirection.EnumDirectionLimit.HORIZONTAL); + + protected BlockDirectional(Material material) { + super(material); + } + + protected BlockDirectional(Material material, MaterialMapColor materialmapcolor) { + super(material, materialmapcolor); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockDirt.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockDirt.java new file mode 100644 index 0000000..ced74e1 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockDirt.java @@ -0,0 +1,117 @@ +package net.minecraft.server; + +public class BlockDirt extends Block { + + public static final BlockStateEnum VARIANT = BlockStateEnum.of("variant", BlockDirt.EnumDirtVariant.class); + public static final BlockStateBoolean SNOWY = BlockStateBoolean.of("snowy"); + + protected BlockDirt() { + super(Material.EARTH); + this.j(this.blockStateList.getBlockData().set(BlockDirt.VARIANT, BlockDirt.EnumDirtVariant.DIRT).set(BlockDirt.SNOWY, Boolean.valueOf(false))); + this.a(CreativeModeTab.b); + } + + public MaterialMapColor g(IBlockData iblockdata) { + return ((BlockDirt.EnumDirtVariant) iblockdata.get(BlockDirt.VARIANT)).d(); + } + + public IBlockData updateState(IBlockData iblockdata, IBlockAccess iblockaccess, BlockPosition blockposition) { + if (iblockdata.get(BlockDirt.VARIANT) == BlockDirt.EnumDirtVariant.PODZOL) { + Block block = iblockaccess.getType(blockposition.up()).getBlock(); + + iblockdata = iblockdata.set(BlockDirt.SNOWY, Boolean.valueOf(block == Blocks.SNOW || block == Blocks.SNOW_LAYER)); + } + + return iblockdata; + } + + public int getDropData(World world, BlockPosition blockposition) { + IBlockData iblockdata = world.getType(blockposition); + + return iblockdata.getBlock() != this ? 0 : ((BlockDirt.EnumDirtVariant) iblockdata.get(BlockDirt.VARIANT)).a(); + } + + public IBlockData fromLegacyData(int i) { + return this.getBlockData().set(BlockDirt.VARIANT, BlockDirt.EnumDirtVariant.a(i)); + } + + public int toLegacyData(IBlockData iblockdata) { + return ((BlockDirt.EnumDirtVariant) iblockdata.get(BlockDirt.VARIANT)).a(); + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockDirt.VARIANT, BlockDirt.SNOWY}); + } + + public int getDropData(IBlockData iblockdata) { + BlockDirt.EnumDirtVariant blockdirt_enumdirtvariant = (BlockDirt.EnumDirtVariant) iblockdata.get(BlockDirt.VARIANT); + + if (blockdirt_enumdirtvariant == BlockDirt.EnumDirtVariant.PODZOL) { + blockdirt_enumdirtvariant = BlockDirt.EnumDirtVariant.DIRT; + } + + return blockdirt_enumdirtvariant.a(); + } + + public static enum EnumDirtVariant implements INamable { + + DIRT(0, "dirt", "default", MaterialMapColor.l), COARSE_DIRT(1, "coarse_dirt", "coarse", MaterialMapColor.l), PODZOL(2, "podzol", MaterialMapColor.J); + + private static final BlockDirt.EnumDirtVariant[] d = new BlockDirt.EnumDirtVariant[values().length]; + private final int e; + private final String f; + private final String g; + private final MaterialMapColor h; + + private EnumDirtVariant(int i, String s, MaterialMapColor materialmapcolor) { + this(i, s, s, materialmapcolor); + } + + private EnumDirtVariant(int i, String s, String s1, MaterialMapColor materialmapcolor) { + this.e = i; + this.f = s; + this.g = s1; + this.h = materialmapcolor; + } + + public int a() { + return this.e; + } + + public String c() { + return this.g; + } + + public MaterialMapColor d() { + return this.h; + } + + public String toString() { + return this.f; + } + + public static BlockDirt.EnumDirtVariant a(int i) { + if (i < 0 || i >= BlockDirt.EnumDirtVariant.d.length) { + i = 0; + } + + return BlockDirt.EnumDirtVariant.d[i]; + } + + public String getName() { + return this.f; + } + + static { + BlockDirt.EnumDirtVariant[] ablockdirt_enumdirtvariant = values(); + int i = ablockdirt_enumdirtvariant.length; + + for (int j = 0; j < i; ++j) { + BlockDirt.EnumDirtVariant blockdirt_enumdirtvariant = ablockdirt_enumdirtvariant[j]; + + BlockDirt.EnumDirtVariant.d[blockdirt_enumdirtvariant.a()] = blockdirt_enumdirtvariant; + } + + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockDispenser.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockDispenser.java similarity index 97% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockDispenser.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockDispenser.java index 4f10902..0acce70 100644 --- a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockDispenser.java +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockDispenser.java @@ -20,6 +20,7 @@ public class BlockDispenser extends BlockContainer { return 4; } + /* // PandaSpigot - comment out - SPIGOT-1401 public void onPlace(World world, BlockPosition blockposition, IBlockData iblockdata) { super.onPlace(world, blockposition, iblockdata); this.e(world, blockposition, iblockdata); @@ -27,7 +28,7 @@ public class BlockDispenser extends BlockContainer { private void e(World world, BlockPosition blockposition, IBlockData iblockdata) { if (!world.isClientSide) { - EnumDirection enumdirection = iblockdata.get(BlockDispenser.FACING); + EnumDirection enumdirection = (EnumDirection) iblockdata.get(BlockDispenser.FACING); boolean flag = world.getType(blockposition.north()).getBlock().o(); boolean flag1 = world.getType(blockposition.south()).getBlock().o(); @@ -46,9 +47,10 @@ public class BlockDispenser extends BlockContainer { } } - world.setTypeAndData(blockposition, iblockdata.set(BlockDispenser.FACING, enumdirection).set(BlockDispenser.TRIGGERED, Boolean.FALSE), 2); + world.setTypeAndData(blockposition, iblockdata.set(BlockDispenser.FACING, enumdirection).set(BlockDispenser.TRIGGERED, Boolean.valueOf(false)), 2); } } + */ // PandaSpigot public boolean interact(World world, BlockPosition blockposition, IBlockData iblockdata, EntityHuman entityhuman, EnumDirection enumdirection, float f, float f1, float f2) { if (world.isClientSide) { diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockDoor.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockDoor.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockDoor.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockDoor.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockDoubleStep.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockDoubleStep.java new file mode 100644 index 0000000..46b853d --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockDoubleStep.java @@ -0,0 +1,10 @@ +package net.minecraft.server; + +public class BlockDoubleStep extends BlockDoubleStepAbstract { + + public BlockDoubleStep() {} + + public boolean l() { + return true; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockDoubleStepAbstract.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockDoubleStepAbstract.java new file mode 100644 index 0000000..4d75099 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockDoubleStepAbstract.java @@ -0,0 +1,140 @@ +package net.minecraft.server; + +import java.util.Random; + +public abstract class BlockDoubleStepAbstract extends BlockStepAbstract { + + public static final BlockStateBoolean SEAMLESS = BlockStateBoolean.of("seamless"); + public static final BlockStateEnum VARIANT = BlockStateEnum.of("variant", BlockDoubleStepAbstract.EnumStoneSlabVariant.class); + + public BlockDoubleStepAbstract() { + super(Material.STONE); + IBlockData iblockdata = this.blockStateList.getBlockData(); + + if (this.l()) { + iblockdata = iblockdata.set(BlockDoubleStepAbstract.SEAMLESS, Boolean.valueOf(false)); + } else { + iblockdata = iblockdata.set(BlockDoubleStepAbstract.HALF, BlockStepAbstract.EnumSlabHalf.BOTTOM); + } + + this.j(iblockdata.set(BlockDoubleStepAbstract.VARIANT, BlockDoubleStepAbstract.EnumStoneSlabVariant.STONE)); + this.a(CreativeModeTab.b); + } + + public Item getDropType(IBlockData iblockdata, Random random, int i) { + return Item.getItemOf(Blocks.STONE_SLAB); + } + + public String b(int i) { + return super.a() + "." + BlockDoubleStepAbstract.EnumStoneSlabVariant.a(i).d(); + } + + public IBlockState n() { + return BlockDoubleStepAbstract.VARIANT; + } + + public Object a(ItemStack itemstack) { + return BlockDoubleStepAbstract.EnumStoneSlabVariant.a(itemstack.getData() & 7); + } + + public IBlockData fromLegacyData(int i) { + IBlockData iblockdata = this.getBlockData().set(BlockDoubleStepAbstract.VARIANT, BlockDoubleStepAbstract.EnumStoneSlabVariant.a(i & 7)); + + if (this.l()) { + iblockdata = iblockdata.set(BlockDoubleStepAbstract.SEAMLESS, Boolean.valueOf((i & 8) != 0)); + } else { + iblockdata = iblockdata.set(BlockDoubleStepAbstract.HALF, (i & 8) == 0 ? BlockStepAbstract.EnumSlabHalf.BOTTOM : BlockStepAbstract.EnumSlabHalf.TOP); + } + + return iblockdata; + } + + public int toLegacyData(IBlockData iblockdata) { + byte b0 = 0; + int i = b0 | ((BlockDoubleStepAbstract.EnumStoneSlabVariant) iblockdata.get(BlockDoubleStepAbstract.VARIANT)).a(); + + if (this.l()) { + if (((Boolean) iblockdata.get(BlockDoubleStepAbstract.SEAMLESS)).booleanValue()) { + i |= 8; + } + } else if (iblockdata.get(BlockDoubleStepAbstract.HALF) == BlockStepAbstract.EnumSlabHalf.TOP) { + i |= 8; + } + + return i; + } + + protected BlockStateList getStateList() { + return this.l() ? new BlockStateList(this, new IBlockState[] { BlockDoubleStepAbstract.SEAMLESS, BlockDoubleStepAbstract.VARIANT}) : new BlockStateList(this, new IBlockState[] { BlockDoubleStepAbstract.HALF, BlockDoubleStepAbstract.VARIANT}); + } + + public int getDropData(IBlockData iblockdata) { + return ((BlockDoubleStepAbstract.EnumStoneSlabVariant) iblockdata.get(BlockDoubleStepAbstract.VARIANT)).a(); + } + + public MaterialMapColor g(IBlockData iblockdata) { + return ((BlockDoubleStepAbstract.EnumStoneSlabVariant) iblockdata.get(BlockDoubleStepAbstract.VARIANT)).c(); + } + + public static enum EnumStoneSlabVariant implements INamable { + + STONE(0, MaterialMapColor.m, "stone"), SAND(1, MaterialMapColor.d, "sandstone", "sand"), WOOD(2, MaterialMapColor.o, "wood_old", "wood"), COBBLESTONE(3, MaterialMapColor.m, "cobblestone", "cobble"), BRICK(4, MaterialMapColor.D, "brick"), SMOOTHBRICK(5, MaterialMapColor.m, "stone_brick", "smoothStoneBrick"), NETHERBRICK(6, MaterialMapColor.K, "nether_brick", "netherBrick"), QUARTZ(7, MaterialMapColor.p, "quartz"); + + private static final BlockDoubleStepAbstract.EnumStoneSlabVariant[] i = new BlockDoubleStepAbstract.EnumStoneSlabVariant[values().length]; + private final int j; + private final MaterialMapColor k; + private final String l; + private final String m; + + private EnumStoneSlabVariant(int i, MaterialMapColor materialmapcolor, String s) { + this(i, materialmapcolor, s, s); + } + + private EnumStoneSlabVariant(int i, MaterialMapColor materialmapcolor, String s, String s1) { + this.j = i; + this.k = materialmapcolor; + this.l = s; + this.m = s1; + } + + public int a() { + return this.j; + } + + public MaterialMapColor c() { + return this.k; + } + + public String toString() { + return this.l; + } + + public static BlockDoubleStepAbstract.EnumStoneSlabVariant a(int i) { + if (i < 0 || i >= BlockDoubleStepAbstract.EnumStoneSlabVariant.i.length) { + i = 0; + } + + return BlockDoubleStepAbstract.EnumStoneSlabVariant.i[i]; + } + + public String getName() { + return this.l; + } + + public String d() { + return this.m; + } + + static { + BlockDoubleStepAbstract.EnumStoneSlabVariant[] ablockdoublestepabstract_enumstoneslabvariant = values(); + int i = ablockdoublestepabstract_enumstoneslabvariant.length; + + for (int j = 0; j < i; ++j) { + BlockDoubleStepAbstract.EnumStoneSlabVariant blockdoublestepabstract_enumstoneslabvariant = ablockdoublestepabstract_enumstoneslabvariant[j]; + + BlockDoubleStepAbstract.EnumStoneSlabVariant.i[blockdoublestepabstract_enumstoneslabvariant.a()] = blockdoublestepabstract_enumstoneslabvariant; + } + + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockDoubleStoneStep2.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockDoubleStoneStep2.java new file mode 100644 index 0000000..87c61c4 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockDoubleStoneStep2.java @@ -0,0 +1,10 @@ +package net.minecraft.server; + +public class BlockDoubleStoneStep2 extends BlockDoubleStoneStepAbstract { + + public BlockDoubleStoneStep2() {} + + public boolean l() { + return true; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockDoubleStoneStepAbstract.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockDoubleStoneStepAbstract.java new file mode 100644 index 0000000..bd253ad --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockDoubleStoneStepAbstract.java @@ -0,0 +1,138 @@ +package net.minecraft.server; + +import java.util.Random; + +public abstract class BlockDoubleStoneStepAbstract extends BlockStepAbstract { + + public static final BlockStateBoolean SEAMLESS = BlockStateBoolean.of("seamless"); + public static final BlockStateEnum VARIANT = BlockStateEnum.of("variant", BlockDoubleStoneStepAbstract.EnumStoneSlab2Variant.class); + + public BlockDoubleStoneStepAbstract() { + super(Material.STONE); + IBlockData iblockdata = this.blockStateList.getBlockData(); + + if (this.l()) { + iblockdata = iblockdata.set(BlockDoubleStoneStepAbstract.SEAMLESS, Boolean.valueOf(false)); + } else { + iblockdata = iblockdata.set(BlockDoubleStoneStepAbstract.HALF, BlockStepAbstract.EnumSlabHalf.BOTTOM); + } + + this.j(iblockdata.set(BlockDoubleStoneStepAbstract.VARIANT, BlockDoubleStoneStepAbstract.EnumStoneSlab2Variant.RED_SANDSTONE)); + this.a(CreativeModeTab.b); + } + + public String getName() { + return LocaleI18n.get(this.a() + ".red_sandstone.name"); + } + + public Item getDropType(IBlockData iblockdata, Random random, int i) { + return Item.getItemOf(Blocks.STONE_SLAB2); + } + + public String b(int i) { + return super.a() + "." + BlockDoubleStoneStepAbstract.EnumStoneSlab2Variant.a(i).d(); + } + + public IBlockState n() { + return BlockDoubleStoneStepAbstract.VARIANT; + } + + public Object a(ItemStack itemstack) { + return BlockDoubleStoneStepAbstract.EnumStoneSlab2Variant.a(itemstack.getData() & 7); + } + + public IBlockData fromLegacyData(int i) { + IBlockData iblockdata = this.getBlockData().set(BlockDoubleStoneStepAbstract.VARIANT, BlockDoubleStoneStepAbstract.EnumStoneSlab2Variant.a(i & 7)); + + if (this.l()) { + iblockdata = iblockdata.set(BlockDoubleStoneStepAbstract.SEAMLESS, Boolean.valueOf((i & 8) != 0)); + } else { + iblockdata = iblockdata.set(BlockDoubleStoneStepAbstract.HALF, (i & 8) == 0 ? BlockStepAbstract.EnumSlabHalf.BOTTOM : BlockStepAbstract.EnumSlabHalf.TOP); + } + + return iblockdata; + } + + public int toLegacyData(IBlockData iblockdata) { + byte b0 = 0; + int i = b0 | ((BlockDoubleStoneStepAbstract.EnumStoneSlab2Variant) iblockdata.get(BlockDoubleStoneStepAbstract.VARIANT)).a(); + + if (this.l()) { + if (((Boolean) iblockdata.get(BlockDoubleStoneStepAbstract.SEAMLESS)).booleanValue()) { + i |= 8; + } + } else if (iblockdata.get(BlockDoubleStoneStepAbstract.HALF) == BlockStepAbstract.EnumSlabHalf.TOP) { + i |= 8; + } + + return i; + } + + protected BlockStateList getStateList() { + return this.l() ? new BlockStateList(this, new IBlockState[] { BlockDoubleStoneStepAbstract.SEAMLESS, BlockDoubleStoneStepAbstract.VARIANT}) : new BlockStateList(this, new IBlockState[] { BlockDoubleStoneStepAbstract.HALF, BlockDoubleStoneStepAbstract.VARIANT}); + } + + public MaterialMapColor g(IBlockData iblockdata) { + return ((BlockDoubleStoneStepAbstract.EnumStoneSlab2Variant) iblockdata.get(BlockDoubleStoneStepAbstract.VARIANT)).c(); + } + + public int getDropData(IBlockData iblockdata) { + return ((BlockDoubleStoneStepAbstract.EnumStoneSlab2Variant) iblockdata.get(BlockDoubleStoneStepAbstract.VARIANT)).a(); + } + + public static enum EnumStoneSlab2Variant implements INamable { + + RED_SANDSTONE(0, "red_sandstone", BlockSand.EnumSandVariant.RED_SAND.c()); + + private static final BlockDoubleStoneStepAbstract.EnumStoneSlab2Variant[] b = new BlockDoubleStoneStepAbstract.EnumStoneSlab2Variant[values().length]; + private final int c; + private final String d; + private final MaterialMapColor e; + + private EnumStoneSlab2Variant(int i, String s, MaterialMapColor materialmapcolor) { + this.c = i; + this.d = s; + this.e = materialmapcolor; + } + + public int a() { + return this.c; + } + + public MaterialMapColor c() { + return this.e; + } + + public String toString() { + return this.d; + } + + public static BlockDoubleStoneStepAbstract.EnumStoneSlab2Variant a(int i) { + if (i < 0 || i >= BlockDoubleStoneStepAbstract.EnumStoneSlab2Variant.b.length) { + i = 0; + } + + return BlockDoubleStoneStepAbstract.EnumStoneSlab2Variant.b[i]; + } + + public String getName() { + return this.d; + } + + public String d() { + return this.d; + } + + static { + BlockDoubleStoneStepAbstract.EnumStoneSlab2Variant[] ablockdoublestonestepabstract_enumstoneslab2variant = values(); + int i = ablockdoublestonestepabstract_enumstoneslab2variant.length; + + for (int j = 0; j < i; ++j) { + BlockDoubleStoneStepAbstract.EnumStoneSlab2Variant blockdoublestonestepabstract_enumstoneslab2variant = ablockdoublestonestepabstract_enumstoneslab2variant[j]; + + BlockDoubleStoneStepAbstract.EnumStoneSlab2Variant.b[blockdoublestonestepabstract_enumstoneslab2variant.a()] = blockdoublestonestepabstract_enumstoneslab2variant; + } + + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockDoubleWoodStep.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockDoubleWoodStep.java new file mode 100644 index 0000000..56cb6c7 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockDoubleWoodStep.java @@ -0,0 +1,10 @@ +package net.minecraft.server; + +public class BlockDoubleWoodStep extends BlockWoodenStep { + + public BlockDoubleWoodStep() {} + + public boolean l() { + return true; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockDragonEgg.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockDragonEgg.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockDragonEgg.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockDragonEgg.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockDropper.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockDropper.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockDropper.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockDropper.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockEnchantmentTable.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockEnchantmentTable.java new file mode 100644 index 0000000..c27c0ff --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockEnchantmentTable.java @@ -0,0 +1,53 @@ +package net.minecraft.server; + +public class BlockEnchantmentTable extends BlockContainer { + + protected BlockEnchantmentTable() { + super(Material.STONE, MaterialMapColor.D); + this.a(0.0F, 0.0F, 0.0F, 1.0F, 0.75F, 1.0F); + this.e(0); + this.a(CreativeModeTab.c); + } + + public boolean d() { + return false; + } + + public boolean c() { + return false; + } + + public int b() { + return 3; + } + + public TileEntity a(World world, int i) { + return new TileEntityEnchantTable(); + } + + public boolean interact(World world, BlockPosition blockposition, IBlockData iblockdata, EntityHuman entityhuman, EnumDirection enumdirection, float f, float f1, float f2) { + if (world.isClientSide) { + return true; + } else { + TileEntity tileentity = world.getTileEntity(blockposition); + + if (tileentity instanceof TileEntityEnchantTable) { + entityhuman.openTileEntity((TileEntityEnchantTable) tileentity); + } + + return true; + } + } + + public void postPlace(World world, BlockPosition blockposition, IBlockData iblockdata, EntityLiving entityliving, ItemStack itemstack) { + super.postPlace(world, blockposition, iblockdata, entityliving, itemstack); + if (itemstack.hasName()) { + TileEntity tileentity = world.getTileEntity(blockposition); + + if (tileentity instanceof TileEntityEnchantTable) { + ((TileEntityEnchantTable) tileentity).a(itemstack.getName()); + } + } + + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockEnderChest.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockEnderChest.java new file mode 100644 index 0000000..15b5f2f --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockEnderChest.java @@ -0,0 +1,90 @@ +package net.minecraft.server; + +import com.google.common.base.Predicate; +import java.util.Random; + +public class BlockEnderChest extends BlockContainer { + + public static final BlockStateDirection FACING = BlockStateDirection.of("facing", (Predicate) EnumDirection.EnumDirectionLimit.HORIZONTAL); + + protected BlockEnderChest() { + super(Material.STONE); + this.j(this.blockStateList.getBlockData().set(BlockEnderChest.FACING, EnumDirection.NORTH)); + this.a(CreativeModeTab.c); + this.a(0.0625F, 0.0F, 0.0625F, 0.9375F, 0.875F, 0.9375F); + } + + public boolean c() { + return false; + } + + public boolean d() { + return false; + } + + public int b() { + return 2; + } + + public Item getDropType(IBlockData iblockdata, Random random, int i) { + return Item.getItemOf(Blocks.OBSIDIAN); + } + + public int a(Random random) { + return 8; + } + + protected boolean I() { + return true; + } + + public IBlockData getPlacedState(World world, BlockPosition blockposition, EnumDirection enumdirection, float f, float f1, float f2, int i, EntityLiving entityliving) { + return this.getBlockData().set(BlockEnderChest.FACING, entityliving.getDirection().opposite()); + } + + public void postPlace(World world, BlockPosition blockposition, IBlockData iblockdata, EntityLiving entityliving, ItemStack itemstack) { + world.setTypeAndData(blockposition, iblockdata.set(BlockEnderChest.FACING, entityliving.getDirection().opposite()), 2); + } + + public boolean interact(World world, BlockPosition blockposition, IBlockData iblockdata, EntityHuman entityhuman, EnumDirection enumdirection, float f, float f1, float f2) { + InventoryEnderChest inventoryenderchest = entityhuman.getEnderChest(); + TileEntity tileentity = world.getTileEntity(blockposition); + + if (inventoryenderchest != null && tileentity instanceof TileEntityEnderChest) { + if (world.getType(blockposition.up()).getBlock().isOccluding()) { + return true; + } else if (world.isClientSide) { + return true; + } else { + inventoryenderchest.a((TileEntityEnderChest) tileentity); + entityhuman.openContainer(inventoryenderchest); + entityhuman.b(StatisticList.V); + return true; + } + } else { + return true; + } + } + + public TileEntity a(World world, int i) { + return new TileEntityEnderChest(); + } + + public IBlockData fromLegacyData(int i) { + EnumDirection enumdirection = EnumDirection.fromType1(i); + + if (enumdirection.k() == EnumDirection.EnumAxis.Y) { + enumdirection = EnumDirection.NORTH; + } + + return this.getBlockData().set(BlockEnderChest.FACING, enumdirection); + } + + public int toLegacyData(IBlockData iblockdata) { + return ((EnumDirection) iblockdata.get(BlockEnderChest.FACING)).a(); + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockEnderChest.FACING}); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockEnderPortal.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockEnderPortal.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockEnderPortal.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockEnderPortal.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockEnderPortalFrame.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockEnderPortalFrame.java new file mode 100644 index 0000000..43e1da0 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockEnderPortalFrame.java @@ -0,0 +1,70 @@ +package net.minecraft.server; + +import com.google.common.base.Predicate; +import java.util.List; +import java.util.Random; + +public class BlockEnderPortalFrame extends Block { + + public static final BlockStateDirection FACING = BlockStateDirection.of("facing", (Predicate) EnumDirection.EnumDirectionLimit.HORIZONTAL); + public static final BlockStateBoolean EYE = BlockStateBoolean.of("eye"); + + public BlockEnderPortalFrame() { + super(Material.STONE, MaterialMapColor.C); + this.j(this.blockStateList.getBlockData().set(BlockEnderPortalFrame.FACING, EnumDirection.NORTH).set(BlockEnderPortalFrame.EYE, Boolean.valueOf(false))); + } + + public boolean c() { + return false; + } + + public void j() { + this.a(0.0F, 0.0F, 0.0F, 1.0F, 0.8125F, 1.0F); + } + + public void a(World world, BlockPosition blockposition, IBlockData iblockdata, AxisAlignedBB axisalignedbb, List list, Entity entity) { + this.a(0.0F, 0.0F, 0.0F, 1.0F, 0.8125F, 1.0F); + super.a(world, blockposition, iblockdata, axisalignedbb, list, entity); + if (((Boolean) world.getType(blockposition).get(BlockEnderPortalFrame.EYE)).booleanValue()) { + this.a(0.3125F, 0.8125F, 0.3125F, 0.6875F, 1.0F, 0.6875F); + super.a(world, blockposition, iblockdata, axisalignedbb, list, entity); + } + + this.j(); + } + + public Item getDropType(IBlockData iblockdata, Random random, int i) { + return null; + } + + public IBlockData getPlacedState(World world, BlockPosition blockposition, EnumDirection enumdirection, float f, float f1, float f2, int i, EntityLiving entityliving) { + return this.getBlockData().set(BlockEnderPortalFrame.FACING, entityliving.getDirection().opposite()).set(BlockEnderPortalFrame.EYE, Boolean.valueOf(false)); + } + + public boolean isComplexRedstone() { + return true; + } + + public int l(World world, BlockPosition blockposition) { + return ((Boolean) world.getType(blockposition).get(BlockEnderPortalFrame.EYE)).booleanValue() ? 15 : 0; + } + + public IBlockData fromLegacyData(int i) { + return this.getBlockData().set(BlockEnderPortalFrame.EYE, Boolean.valueOf((i & 4) != 0)).set(BlockEnderPortalFrame.FACING, EnumDirection.fromType2(i & 3)); + } + + public int toLegacyData(IBlockData iblockdata) { + byte b0 = 0; + int i = b0 | ((EnumDirection) iblockdata.get(BlockEnderPortalFrame.FACING)).b(); + + if (((Boolean) iblockdata.get(BlockEnderPortalFrame.EYE)).booleanValue()) { + i |= 4; + } + + return i; + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockEnderPortalFrame.FACING, BlockEnderPortalFrame.EYE}); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockFalling.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockFalling.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockFalling.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockFalling.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockFence.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockFence.java new file mode 100644 index 0000000..1d50055 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockFence.java @@ -0,0 +1,133 @@ +package net.minecraft.server; + +import java.util.List; + +public class BlockFence extends Block { + + public static final BlockStateBoolean NORTH = BlockStateBoolean.of("north"); + public static final BlockStateBoolean EAST = BlockStateBoolean.of("east"); + public static final BlockStateBoolean SOUTH = BlockStateBoolean.of("south"); + public static final BlockStateBoolean WEST = BlockStateBoolean.of("west"); + + public BlockFence(Material material) { + this(material, material.r()); + } + + public BlockFence(Material material, MaterialMapColor materialmapcolor) { + super(material, materialmapcolor); + this.j(this.blockStateList.getBlockData().set(BlockFence.NORTH, Boolean.valueOf(false)).set(BlockFence.EAST, Boolean.valueOf(false)).set(BlockFence.SOUTH, Boolean.valueOf(false)).set(BlockFence.WEST, Boolean.valueOf(false))); + this.a(CreativeModeTab.c); + } + + public void a(World world, BlockPosition blockposition, IBlockData iblockdata, AxisAlignedBB axisalignedbb, List list, Entity entity) { + boolean flag = this.e(world, blockposition.north()); + boolean flag1 = this.e(world, blockposition.south()); + boolean flag2 = this.e(world, blockposition.west()); + boolean flag3 = this.e(world, blockposition.east()); + float f = 0.375F; + float f1 = 0.625F; + float f2 = 0.375F; + float f3 = 0.625F; + + if (flag) { + f2 = 0.0F; + } + + if (flag1) { + f3 = 1.0F; + } + + if (flag || flag1) { + this.a(f, 0.0F, f2, f1, 1.5F, f3); + super.a(world, blockposition, iblockdata, axisalignedbb, list, entity); + } + + f2 = 0.375F; + f3 = 0.625F; + if (flag2) { + f = 0.0F; + } + + if (flag3) { + f1 = 1.0F; + } + + if (flag2 || flag3 || !flag && !flag1) { + this.a(f, 0.0F, f2, f1, 1.5F, f3); + super.a(world, blockposition, iblockdata, axisalignedbb, list, entity); + } + + if (flag) { + f2 = 0.0F; + } + + if (flag1) { + f3 = 1.0F; + } + + this.a(f, 0.0F, f2, f1, 1.0F, f3); + } + + public void updateShape(IBlockAccess iblockaccess, BlockPosition blockposition) { + boolean flag = this.e(iblockaccess, blockposition.north()); + boolean flag1 = this.e(iblockaccess, blockposition.south()); + boolean flag2 = this.e(iblockaccess, blockposition.west()); + boolean flag3 = this.e(iblockaccess, blockposition.east()); + float f = 0.375F; + float f1 = 0.625F; + float f2 = 0.375F; + float f3 = 0.625F; + + if (flag) { + f2 = 0.0F; + } + + if (flag1) { + f3 = 1.0F; + } + + if (flag2) { + f = 0.0F; + } + + if (flag3) { + f1 = 1.0F; + } + + this.a(f, 0.0F, f2, f1, 1.0F, f3); + } + + public boolean c() { + return false; + } + + public boolean d() { + return false; + } + + public boolean b(IBlockAccess iblockaccess, BlockPosition blockposition) { + return false; + } + + public boolean e(IBlockAccess iblockaccess, BlockPosition blockposition) { + Block block = iblockaccess.getType(blockposition).getBlock(); + + return block == Blocks.BARRIER ? false : ((!(block instanceof BlockFence) || block.material != this.material) && !(block instanceof BlockFenceGate) ? (block.material.k() && block.d() ? block.material != Material.PUMPKIN : false) : true); + } + + public boolean interact(World world, BlockPosition blockposition, IBlockData iblockdata, EntityHuman entityhuman, EnumDirection enumdirection, float f, float f1, float f2) { + return world.isClientSide ? true : ItemLeash.a(entityhuman, world, blockposition); + } + + public int toLegacyData(IBlockData iblockdata) { + return 0; + } + + public IBlockData updateState(IBlockData iblockdata, IBlockAccess iblockaccess, BlockPosition blockposition) { + return iblockdata.set(BlockFence.NORTH, Boolean.valueOf(this.e(iblockaccess, blockposition.north()))).set(BlockFence.EAST, Boolean.valueOf(this.e(iblockaccess, blockposition.east()))).set(BlockFence.SOUTH, Boolean.valueOf(this.e(iblockaccess, blockposition.south()))).set(BlockFence.WEST, Boolean.valueOf(this.e(iblockaccess, blockposition.west()))); + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockFence.NORTH, BlockFence.EAST, BlockFence.WEST, BlockFence.SOUTH}); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockFenceGate.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockFenceGate.java new file mode 100644 index 0000000..c022812 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockFenceGate.java @@ -0,0 +1,126 @@ +package net.minecraft.server; + +public class BlockFenceGate extends BlockDirectional { + + public static final BlockStateBoolean OPEN = BlockStateBoolean.of("open"); + public static final BlockStateBoolean POWERED = BlockStateBoolean.of("powered"); + public static final BlockStateBoolean IN_WALL = BlockStateBoolean.of("in_wall"); + + public BlockFenceGate(BlockWood.EnumLogVariant blockwood_enumlogvariant) { + super(Material.WOOD, blockwood_enumlogvariant.c()); + this.j(this.blockStateList.getBlockData().set(BlockFenceGate.OPEN, Boolean.valueOf(false)).set(BlockFenceGate.POWERED, Boolean.valueOf(false)).set(BlockFenceGate.IN_WALL, Boolean.valueOf(false))); + this.a(CreativeModeTab.d); + } + + public IBlockData updateState(IBlockData iblockdata, IBlockAccess iblockaccess, BlockPosition blockposition) { + EnumDirection.EnumAxis enumdirection_enumaxis = ((EnumDirection) iblockdata.get(BlockFenceGate.FACING)).k(); + + if (enumdirection_enumaxis == EnumDirection.EnumAxis.Z && (iblockaccess.getType(blockposition.west()).getBlock() == Blocks.COBBLESTONE_WALL || iblockaccess.getType(blockposition.east()).getBlock() == Blocks.COBBLESTONE_WALL) || enumdirection_enumaxis == EnumDirection.EnumAxis.X && (iblockaccess.getType(blockposition.north()).getBlock() == Blocks.COBBLESTONE_WALL || iblockaccess.getType(blockposition.south()).getBlock() == Blocks.COBBLESTONE_WALL)) { + iblockdata = iblockdata.set(BlockFenceGate.IN_WALL, Boolean.valueOf(true)); + } + + return iblockdata; + } + + public boolean canPlace(World world, BlockPosition blockposition) { + return world.getType(blockposition.down()).getBlock().getMaterial().isBuildable() ? super.canPlace(world, blockposition) : false; + } + + public AxisAlignedBB a(World world, BlockPosition blockposition, IBlockData iblockdata) { + if (((Boolean) iblockdata.get(BlockFenceGate.OPEN)).booleanValue()) { + return null; + } else { + EnumDirection.EnumAxis enumdirection_enumaxis = ((EnumDirection) iblockdata.get(BlockFenceGate.FACING)).k(); + + return enumdirection_enumaxis == EnumDirection.EnumAxis.Z ? new AxisAlignedBB((double) blockposition.getX(), (double) blockposition.getY(), (double) ((float) blockposition.getZ() + 0.375F), (double) (blockposition.getX() + 1), (double) ((float) blockposition.getY() + 1.5F), (double) ((float) blockposition.getZ() + 0.625F)) : new AxisAlignedBB((double) ((float) blockposition.getX() + 0.375F), (double) blockposition.getY(), (double) blockposition.getZ(), (double) ((float) blockposition.getX() + 0.625F), (double) ((float) blockposition.getY() + 1.5F), (double) (blockposition.getZ() + 1)); + } + } + + public void updateShape(IBlockAccess iblockaccess, BlockPosition blockposition) { + EnumDirection.EnumAxis enumdirection_enumaxis = ((EnumDirection) iblockaccess.getType(blockposition).get(BlockFenceGate.FACING)).k(); + + if (enumdirection_enumaxis == EnumDirection.EnumAxis.Z) { + this.a(0.0F, 0.0F, 0.375F, 1.0F, 1.0F, 0.625F); + } else { + this.a(0.375F, 0.0F, 0.0F, 0.625F, 1.0F, 1.0F); + } + + } + + public boolean c() { + return false; + } + + public boolean d() { + return false; + } + + public boolean b(IBlockAccess iblockaccess, BlockPosition blockposition) { + return ((Boolean) iblockaccess.getType(blockposition).get(BlockFenceGate.OPEN)).booleanValue(); + } + + public IBlockData getPlacedState(World world, BlockPosition blockposition, EnumDirection enumdirection, float f, float f1, float f2, int i, EntityLiving entityliving) { + return this.getBlockData().set(BlockFenceGate.FACING, entityliving.getDirection()).set(BlockFenceGate.OPEN, Boolean.valueOf(false)).set(BlockFenceGate.POWERED, Boolean.valueOf(false)).set(BlockFenceGate.IN_WALL, Boolean.valueOf(false)); + } + + public boolean interact(World world, BlockPosition blockposition, IBlockData iblockdata, EntityHuman entityhuman, EnumDirection enumdirection, float f, float f1, float f2) { + if (((Boolean) iblockdata.get(BlockFenceGate.OPEN)).booleanValue()) { + iblockdata = iblockdata.set(BlockFenceGate.OPEN, Boolean.valueOf(false)); + world.setTypeAndData(blockposition, iblockdata, 2); + } else { + EnumDirection enumdirection1 = EnumDirection.fromAngle((double) entityhuman.yaw); + + if (iblockdata.get(BlockFenceGate.FACING) == enumdirection1.opposite()) { + iblockdata = iblockdata.set(BlockFenceGate.FACING, enumdirection1); + } + + iblockdata = iblockdata.set(BlockFenceGate.OPEN, Boolean.valueOf(true)); + world.setTypeAndData(blockposition, iblockdata, 2); + } + + world.a(entityhuman, ((Boolean) iblockdata.get(BlockFenceGate.OPEN)).booleanValue() ? 1003 : 1006, blockposition, 0); + return true; + } + + public void doPhysics(World world, BlockPosition blockposition, IBlockData iblockdata, Block block) { + if (!world.isClientSide) { + boolean flag = world.isBlockIndirectlyPowered(blockposition); + + if (flag || block.isPowerSource()) { + if (flag && !((Boolean) iblockdata.get(BlockFenceGate.OPEN)).booleanValue() && !((Boolean) iblockdata.get(BlockFenceGate.POWERED)).booleanValue()) { + world.setTypeAndData(blockposition, iblockdata.set(BlockFenceGate.OPEN, Boolean.valueOf(true)).set(BlockFenceGate.POWERED, Boolean.valueOf(true)), 2); + world.a((EntityHuman) null, 1003, blockposition, 0); + } else if (!flag && ((Boolean) iblockdata.get(BlockFenceGate.OPEN)).booleanValue() && ((Boolean) iblockdata.get(BlockFenceGate.POWERED)).booleanValue()) { + world.setTypeAndData(blockposition, iblockdata.set(BlockFenceGate.OPEN, Boolean.valueOf(false)).set(BlockFenceGate.POWERED, Boolean.valueOf(false)), 2); + world.a((EntityHuman) null, 1006, blockposition, 0); + } else if (flag != ((Boolean) iblockdata.get(BlockFenceGate.POWERED)).booleanValue()) { + world.setTypeAndData(blockposition, iblockdata.set(BlockFenceGate.POWERED, Boolean.valueOf(flag)), 2); + } + } + + } + } + + public IBlockData fromLegacyData(int i) { + return this.getBlockData().set(BlockFenceGate.FACING, EnumDirection.fromType2(i)).set(BlockFenceGate.OPEN, Boolean.valueOf((i & 4) != 0)).set(BlockFenceGate.POWERED, Boolean.valueOf((i & 8) != 0)); + } + + public int toLegacyData(IBlockData iblockdata) { + byte b0 = 0; + int i = b0 | ((EnumDirection) iblockdata.get(BlockFenceGate.FACING)).b(); + + if (((Boolean) iblockdata.get(BlockFenceGate.POWERED)).booleanValue()) { + i |= 8; + } + + if (((Boolean) iblockdata.get(BlockFenceGate.OPEN)).booleanValue()) { + i |= 4; + } + + return i; + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockFenceGate.FACING, BlockFenceGate.OPEN, BlockFenceGate.POWERED, BlockFenceGate.IN_WALL}); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockFire.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockFire.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockFire.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockFire.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockFloorSign.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockFloorSign.java new file mode 100644 index 0000000..27bc097 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockFloorSign.java @@ -0,0 +1,31 @@ +package net.minecraft.server; + +public class BlockFloorSign extends BlockSign { + + public static final BlockStateInteger ROTATION = BlockStateInteger.of("rotation", 0, 15); + + public BlockFloorSign() { + this.j(this.blockStateList.getBlockData().set(BlockFloorSign.ROTATION, Integer.valueOf(0))); + } + + public void doPhysics(World world, BlockPosition blockposition, IBlockData iblockdata, Block block) { + if (!world.getType(blockposition.down()).getBlock().getMaterial().isBuildable()) { + this.b(world, blockposition, iblockdata, 0); + world.setAir(blockposition); + } + + super.doPhysics(world, blockposition, iblockdata, block); + } + + public IBlockData fromLegacyData(int i) { + return this.getBlockData().set(BlockFloorSign.ROTATION, Integer.valueOf(i)); + } + + public int toLegacyData(IBlockData iblockdata) { + return ((Integer) iblockdata.get(BlockFloorSign.ROTATION)).intValue(); + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockFloorSign.ROTATION}); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockFlowerPot.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockFlowerPot.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockFlowerPot.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockFlowerPot.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockFlowers.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockFlowers.java new file mode 100644 index 0000000..ce128d9 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockFlowers.java @@ -0,0 +1,133 @@ +package net.minecraft.server; + +import com.google.common.base.Predicate; +import com.google.common.collect.Collections2; +import com.google.common.collect.Lists; +import java.util.Collection; + +public abstract class BlockFlowers extends BlockPlant { + + protected BlockStateEnum TYPE; + + protected BlockFlowers() { + this.j(this.blockStateList.getBlockData().set(this.n(), this.l() == BlockFlowers.EnumFlowerType.RED ? BlockFlowers.EnumFlowerVarient.POPPY : BlockFlowers.EnumFlowerVarient.DANDELION)); + } + + public int getDropData(IBlockData iblockdata) { + return ((BlockFlowers.EnumFlowerVarient) iblockdata.get(this.n())).b(); + } + + public IBlockData fromLegacyData(int i) { + return this.getBlockData().set(this.n(), BlockFlowers.EnumFlowerVarient.a(this.l(), i)); + } + + public abstract BlockFlowers.EnumFlowerType l(); + + public IBlockState n() { + if (this.TYPE == null) { + this.TYPE = BlockStateEnum.a("type", BlockFlowers.EnumFlowerVarient.class, new Predicate() { + public boolean a(BlockFlowers.EnumFlowerVarient blockflowers_enumflowervarient) { + return blockflowers_enumflowervarient.a() == BlockFlowers.this.l(); + } + + public boolean apply(Object object) { + return this.a((BlockFlowers.EnumFlowerVarient) object); + } + }); + } + + return this.TYPE; + } + + public int toLegacyData(IBlockData iblockdata) { + return ((BlockFlowers.EnumFlowerVarient) iblockdata.get(this.n())).b(); + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { this.n()}); + } + + public static enum EnumFlowerVarient implements INamable { + + DANDELION(BlockFlowers.EnumFlowerType.YELLOW, 0, "dandelion"), POPPY(BlockFlowers.EnumFlowerType.RED, 0, "poppy"), BLUE_ORCHID(BlockFlowers.EnumFlowerType.RED, 1, "blue_orchid", "blueOrchid"), ALLIUM(BlockFlowers.EnumFlowerType.RED, 2, "allium"), HOUSTONIA(BlockFlowers.EnumFlowerType.RED, 3, "houstonia"), RED_TULIP(BlockFlowers.EnumFlowerType.RED, 4, "red_tulip", "tulipRed"), ORANGE_TULIP(BlockFlowers.EnumFlowerType.RED, 5, "orange_tulip", "tulipOrange"), WHITE_TULIP(BlockFlowers.EnumFlowerType.RED, 6, "white_tulip", "tulipWhite"), PINK_TULIP(BlockFlowers.EnumFlowerType.RED, 7, "pink_tulip", "tulipPink"), OXEYE_DAISY(BlockFlowers.EnumFlowerType.RED, 8, "oxeye_daisy", "oxeyeDaisy"); + + private static final BlockFlowers.EnumFlowerVarient[][] k = new BlockFlowers.EnumFlowerVarient[BlockFlowers.EnumFlowerType.values().length][]; + private final BlockFlowers.EnumFlowerType l; + private final int m; + private final String n; + private final String o; + + private EnumFlowerVarient(BlockFlowers.EnumFlowerType blockflowers_enumflowertype, int i, String s) { + this(blockflowers_enumflowertype, i, s, s); + } + + private EnumFlowerVarient(BlockFlowers.EnumFlowerType blockflowers_enumflowertype, int i, String s, String s1) { + this.l = blockflowers_enumflowertype; + this.m = i; + this.n = s; + this.o = s1; + } + + public BlockFlowers.EnumFlowerType a() { + return this.l; + } + + public int b() { + return this.m; + } + + public static BlockFlowers.EnumFlowerVarient a(BlockFlowers.EnumFlowerType blockflowers_enumflowertype, int i) { + BlockFlowers.EnumFlowerVarient[] ablockflowers_enumflowervarient = BlockFlowers.EnumFlowerVarient.k[blockflowers_enumflowertype.ordinal()]; + + if (i < 0 || i >= ablockflowers_enumflowervarient.length) { + i = 0; + } + + return ablockflowers_enumflowervarient[i]; + } + + public String toString() { + return this.n; + } + + public String getName() { + return this.n; + } + + public String d() { + return this.o; + } + + static { + BlockFlowers.EnumFlowerType[] ablockflowers_enumflowertype = BlockFlowers.EnumFlowerType.values(); + int i = ablockflowers_enumflowertype.length; + + for (int j = 0; j < i; ++j) { + final BlockFlowers.EnumFlowerType blockflowers_enumflowertype = ablockflowers_enumflowertype[j]; + Collection collection = Collections2.filter(Lists.newArrayList(values()), new Predicate() { + public boolean a(BlockFlowers.EnumFlowerVarient blockflowers_enumflowervarient) { + return blockflowers_enumflowervarient.a() == blockflowers_enumflowertype; + } + + public boolean apply(Object object) { + return this.a((BlockFlowers.EnumFlowerVarient) object); + } + }); + + BlockFlowers.EnumFlowerVarient.k[blockflowers_enumflowertype.ordinal()] = (BlockFlowers.EnumFlowerVarient[]) collection.toArray(new BlockFlowers.EnumFlowerVarient[collection.size()]); + } + + } + } + + public static enum EnumFlowerType { + + YELLOW, RED; + + private EnumFlowerType() {} + + public BlockFlowers a() { + return this == BlockFlowers.EnumFlowerType.YELLOW ? Blocks.YELLOW_FLOWER : Blocks.RED_FLOWER; + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockFlowing.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockFlowing.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockFlowing.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockFlowing.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockFluids.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockFluids.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockFluids.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockFluids.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockFurnace.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockFurnace.java new file mode 100644 index 0000000..21d868c --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockFurnace.java @@ -0,0 +1,148 @@ +package net.minecraft.server; + +import com.google.common.base.Predicate; +import java.util.Random; + +public class BlockFurnace extends BlockContainer { + + public static final BlockStateDirection FACING = BlockStateDirection.of("facing", (Predicate) EnumDirection.EnumDirectionLimit.HORIZONTAL); + private final boolean b; + private static boolean N; + + protected BlockFurnace(boolean flag) { + super(Material.STONE); + this.j(this.blockStateList.getBlockData().set(BlockFurnace.FACING, EnumDirection.NORTH)); + this.b = flag; + } + + public Item getDropType(IBlockData iblockdata, Random random, int i) { + return Item.getItemOf(Blocks.FURNACE); + } + + /* // PandaSpigot - comment out - SPIGOT-1401 + public void onPlace(World world, BlockPosition blockposition, IBlockData iblockdata) { + this.e(world, blockposition, iblockdata); + } + + private void e(World world, BlockPosition blockposition, IBlockData iblockdata) { + if (!world.isClientSide) { + Block block = world.getType(blockposition.north()).getBlock(); + Block block1 = world.getType(blockposition.south()).getBlock(); + Block block2 = world.getType(blockposition.west()).getBlock(); + Block block3 = world.getType(blockposition.east()).getBlock(); + EnumDirection enumdirection = (EnumDirection) iblockdata.get(BlockFurnace.FACING); + + if (enumdirection == EnumDirection.NORTH && block.o() && !block1.o()) { + enumdirection = EnumDirection.SOUTH; + } else if (enumdirection == EnumDirection.SOUTH && block1.o() && !block.o()) { + enumdirection = EnumDirection.NORTH; + } else if (enumdirection == EnumDirection.WEST && block2.o() && !block3.o()) { + enumdirection = EnumDirection.EAST; + } else if (enumdirection == EnumDirection.EAST && block3.o() && !block2.o()) { + enumdirection = EnumDirection.WEST; + } + + world.setTypeAndData(blockposition, iblockdata.set(BlockFurnace.FACING, enumdirection), 2); + } + } + */ // PandaSpigot + + public boolean interact(World world, BlockPosition blockposition, IBlockData iblockdata, EntityHuman entityhuman, EnumDirection enumdirection, float f, float f1, float f2) { + if (world.isClientSide) { + return true; + } else { + TileEntity tileentity = world.getTileEntity(blockposition); + + if (tileentity instanceof TileEntityFurnace) { + entityhuman.openContainer((TileEntityFurnace) tileentity); + entityhuman.b(StatisticList.Y); + } + + return true; + } + } + + public static void a(boolean flag, World world, BlockPosition blockposition) { + IBlockData iblockdata = world.getType(blockposition); + TileEntity tileentity = world.getTileEntity(blockposition); + + BlockFurnace.N = true; + if (flag) { + world.setTypeAndData(blockposition, Blocks.LIT_FURNACE.getBlockData().set(BlockFurnace.FACING, iblockdata.get(BlockFurnace.FACING)), 3); + world.setTypeAndData(blockposition, Blocks.LIT_FURNACE.getBlockData().set(BlockFurnace.FACING, iblockdata.get(BlockFurnace.FACING)), 3); + } else { + world.setTypeAndData(blockposition, Blocks.FURNACE.getBlockData().set(BlockFurnace.FACING, iblockdata.get(BlockFurnace.FACING)), 3); + world.setTypeAndData(blockposition, Blocks.FURNACE.getBlockData().set(BlockFurnace.FACING, iblockdata.get(BlockFurnace.FACING)), 3); + } + + BlockFurnace.N = false; + if (tileentity != null) { + tileentity.D(); + world.setTileEntity(blockposition, tileentity); + } + + } + + public TileEntity a(World world, int i) { + return new TileEntityFurnace(); + } + + public IBlockData getPlacedState(World world, BlockPosition blockposition, EnumDirection enumdirection, float f, float f1, float f2, int i, EntityLiving entityliving) { + return this.getBlockData().set(BlockFurnace.FACING, entityliving.getDirection().opposite()); + } + + public void postPlace(World world, BlockPosition blockposition, IBlockData iblockdata, EntityLiving entityliving, ItemStack itemstack) { + world.setTypeAndData(blockposition, iblockdata.set(BlockFurnace.FACING, entityliving.getDirection().opposite()), 2); + if (itemstack.hasName()) { + TileEntity tileentity = world.getTileEntity(blockposition); + + if (tileentity instanceof TileEntityFurnace) { + ((TileEntityFurnace) tileentity).a(itemstack.getName()); + } + } + + } + + public void remove(World world, BlockPosition blockposition, IBlockData iblockdata) { + if (!BlockFurnace.N) { + TileEntity tileentity = world.getTileEntity(blockposition); + + if (tileentity instanceof TileEntityFurnace) { + InventoryUtils.dropInventory(world, blockposition, (TileEntityFurnace) tileentity); + world.updateAdjacentComparators(blockposition, this); + } + } + + super.remove(world, blockposition, iblockdata); + } + + public boolean isComplexRedstone() { + return true; + } + + public int l(World world, BlockPosition blockposition) { + return Container.a(world.getTileEntity(blockposition)); + } + + public int b() { + return 3; + } + + public IBlockData fromLegacyData(int i) { + EnumDirection enumdirection = EnumDirection.fromType1(i); + + if (enumdirection.k() == EnumDirection.EnumAxis.Y) { + enumdirection = EnumDirection.NORTH; + } + + return this.getBlockData().set(BlockFurnace.FACING, enumdirection); + } + + public int toLegacyData(IBlockData iblockdata) { + return ((EnumDirection) iblockdata.get(BlockFurnace.FACING)).a(); + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockFurnace.FACING}); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockGlass.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockGlass.java new file mode 100644 index 0000000..7879084 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockGlass.java @@ -0,0 +1,23 @@ +package net.minecraft.server; + +import java.util.Random; + +public class BlockGlass extends BlockHalfTransparent { + + public BlockGlass(Material material, boolean flag) { + super(material, flag); + this.a(CreativeModeTab.b); + } + + public int a(Random random) { + return 0; + } + + public boolean d() { + return false; + } + + protected boolean I() { + return true; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockGrass.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockGrass.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockGrass.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockGrass.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockGravel.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockGravel.java new file mode 100644 index 0000000..d910b79 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockGravel.java @@ -0,0 +1,20 @@ +package net.minecraft.server; + +import java.util.Random; + +public class BlockGravel extends BlockFalling { + + public BlockGravel() {} + + public Item getDropType(IBlockData iblockdata, Random random, int i) { + if (i > 3) { + i = 3; + } + + return random.nextInt(10 - i * 3) == 0 ? Items.FLINT : Item.getItemOf(this); + } + + public MaterialMapColor g(IBlockData iblockdata) { + return MaterialMapColor.m; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockHalfTransparent.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockHalfTransparent.java new file mode 100644 index 0000000..84c13ea --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockHalfTransparent.java @@ -0,0 +1,19 @@ +package net.minecraft.server; + +public class BlockHalfTransparent extends Block { + + private boolean a; + + protected BlockHalfTransparent(Material material, boolean flag) { + this(material, flag, material.r()); + } + + protected BlockHalfTransparent(Material material, boolean flag, MaterialMapColor materialmapcolor) { + super(material, materialmapcolor); + this.a = flag; + } + + public boolean c() { + return false; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockHardenedClay.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockHardenedClay.java new file mode 100644 index 0000000..7b12023 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockHardenedClay.java @@ -0,0 +1,13 @@ +package net.minecraft.server; + +public class BlockHardenedClay extends Block { + + public BlockHardenedClay() { + super(Material.STONE); + this.a(CreativeModeTab.b); + } + + public MaterialMapColor g(IBlockData iblockdata) { + return MaterialMapColor.q; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockHay.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockHay.java new file mode 100644 index 0000000..cc1dab7 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockHay.java @@ -0,0 +1,48 @@ +package net.minecraft.server; + +public class BlockHay extends BlockRotatable { + + public BlockHay() { + super(Material.GRASS, MaterialMapColor.t); + this.j(this.blockStateList.getBlockData().set(BlockHay.AXIS, EnumDirection.EnumAxis.Y)); + this.a(CreativeModeTab.b); + } + + public IBlockData fromLegacyData(int i) { + EnumDirection.EnumAxis enumdirection_enumaxis = EnumDirection.EnumAxis.Y; + int j = i & 12; + + if (j == 4) { + enumdirection_enumaxis = EnumDirection.EnumAxis.X; + } else if (j == 8) { + enumdirection_enumaxis = EnumDirection.EnumAxis.Z; + } + + return this.getBlockData().set(BlockHay.AXIS, enumdirection_enumaxis); + } + + public int toLegacyData(IBlockData iblockdata) { + int i = 0; + EnumDirection.EnumAxis enumdirection_enumaxis = (EnumDirection.EnumAxis) iblockdata.get(BlockHay.AXIS); + + if (enumdirection_enumaxis == EnumDirection.EnumAxis.X) { + i |= 4; + } else if (enumdirection_enumaxis == EnumDirection.EnumAxis.Z) { + i |= 8; + } + + return i; + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockHay.AXIS}); + } + + protected ItemStack i(IBlockData iblockdata) { + return new ItemStack(Item.getItemOf(this), 1, 0); + } + + public IBlockData getPlacedState(World world, BlockPosition blockposition, EnumDirection enumdirection, float f, float f1, float f2, int i, EntityLiving entityliving) { + return super.getPlacedState(world, blockposition, enumdirection, f, f1, f2, i, entityliving).set(BlockHay.AXIS, enumdirection.k()); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockHopper.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockHopper.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockHopper.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockHopper.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockHugeMushroom.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockHugeMushroom.java new file mode 100644 index 0000000..e5642dd --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockHugeMushroom.java @@ -0,0 +1,129 @@ +package net.minecraft.server; + +import java.util.Random; + +public class BlockHugeMushroom extends Block { + + public static final BlockStateEnum VARIANT = BlockStateEnum.of("variant", BlockHugeMushroom.EnumHugeMushroomVariant.class); + private final Block b; + + public BlockHugeMushroom(Material material, MaterialMapColor materialmapcolor, Block block) { + super(material, materialmapcolor); + this.j(this.blockStateList.getBlockData().set(BlockHugeMushroom.VARIANT, BlockHugeMushroom.EnumHugeMushroomVariant.ALL_OUTSIDE)); + this.b = block; + } + + public int a(Random random) { + return Math.max(0, random.nextInt(10) - 7); + } + + public MaterialMapColor g(IBlockData iblockdata) { + switch (BlockHugeMushroom.SyntheticClass_1.a[((BlockHugeMushroom.EnumHugeMushroomVariant) iblockdata.get(BlockHugeMushroom.VARIANT)).ordinal()]) { + case 1: + return MaterialMapColor.e; + + case 2: + return MaterialMapColor.d; + + case 3: + return MaterialMapColor.d; + + default: + return super.g(iblockdata); + } + } + + public Item getDropType(IBlockData iblockdata, Random random, int i) { + return Item.getItemOf(this.b); + } + + public IBlockData getPlacedState(World world, BlockPosition blockposition, EnumDirection enumdirection, float f, float f1, float f2, int i, EntityLiving entityliving) { + return this.getBlockData(); + } + + public IBlockData fromLegacyData(int i) { + return this.getBlockData().set(BlockHugeMushroom.VARIANT, BlockHugeMushroom.EnumHugeMushroomVariant.a(i)); + } + + public int toLegacyData(IBlockData iblockdata) { + return ((BlockHugeMushroom.EnumHugeMushroomVariant) iblockdata.get(BlockHugeMushroom.VARIANT)).a(); + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockHugeMushroom.VARIANT}); + } + + static class SyntheticClass_1 { + + static final int[] a = new int[BlockHugeMushroom.EnumHugeMushroomVariant.values().length]; + + static { + try { + BlockHugeMushroom.SyntheticClass_1.a[BlockHugeMushroom.EnumHugeMushroomVariant.ALL_STEM.ordinal()] = 1; + } catch (NoSuchFieldError nosuchfielderror) { + ; + } + + try { + BlockHugeMushroom.SyntheticClass_1.a[BlockHugeMushroom.EnumHugeMushroomVariant.ALL_INSIDE.ordinal()] = 2; + } catch (NoSuchFieldError nosuchfielderror1) { + ; + } + + try { + BlockHugeMushroom.SyntheticClass_1.a[BlockHugeMushroom.EnumHugeMushroomVariant.STEM.ordinal()] = 3; + } catch (NoSuchFieldError nosuchfielderror2) { + ; + } + + } + } + + public static enum EnumHugeMushroomVariant implements INamable { + + NORTH_WEST(1, "north_west"), NORTH(2, "north"), NORTH_EAST(3, "north_east"), WEST(4, "west"), CENTER(5, "center"), EAST(6, "east"), SOUTH_WEST(7, "south_west"), SOUTH(8, "south"), SOUTH_EAST(9, "south_east"), STEM(10, "stem"), ALL_INSIDE(0, "all_inside"), ALL_OUTSIDE(14, "all_outside"), ALL_STEM(15, "all_stem"); + + private static final BlockHugeMushroom.EnumHugeMushroomVariant[] n = new BlockHugeMushroom.EnumHugeMushroomVariant[16]; + private final int o; + private final String p; + + private EnumHugeMushroomVariant(int i, String s) { + this.o = i; + this.p = s; + } + + public int a() { + return this.o; + } + + public String toString() { + return this.p; + } + + public static BlockHugeMushroom.EnumHugeMushroomVariant a(int i) { + if (i < 0 || i >= BlockHugeMushroom.EnumHugeMushroomVariant.n.length) { + i = 0; + } + + BlockHugeMushroom.EnumHugeMushroomVariant blockhugemushroom_enumhugemushroomvariant = BlockHugeMushroom.EnumHugeMushroomVariant.n[i]; + + return blockhugemushroom_enumhugemushroomvariant == null ? BlockHugeMushroom.EnumHugeMushroomVariant.n[0] : blockhugemushroom_enumhugemushroomvariant; + } + + public String getName() { + return this.p; + } + + static { + BlockHugeMushroom.EnumHugeMushroomVariant[] ablockhugemushroom_enumhugemushroomvariant = values(); + int i = ablockhugemushroom_enumhugemushroomvariant.length; + + for (int j = 0; j < i; ++j) { + BlockHugeMushroom.EnumHugeMushroomVariant blockhugemushroom_enumhugemushroomvariant = ablockhugemushroom_enumhugemushroomvariant[j]; + + BlockHugeMushroom.EnumHugeMushroomVariant.n[blockhugemushroom_enumhugemushroomvariant.a()] = blockhugemushroom_enumhugemushroomvariant; + } + + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockIce.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockIce.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockIce.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockIce.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockJukeBox.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockJukeBox.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockJukeBox.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockJukeBox.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockLadder.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockLadder.java new file mode 100644 index 0000000..529aff2 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockLadder.java @@ -0,0 +1,144 @@ +package net.minecraft.server; + +import com.google.common.base.Predicate; +import java.util.Iterator; + +public class BlockLadder extends Block { + + public static final BlockStateDirection FACING = BlockStateDirection.of("facing", (Predicate) EnumDirection.EnumDirectionLimit.HORIZONTAL); + + protected BlockLadder() { + super(Material.ORIENTABLE); + this.j(this.blockStateList.getBlockData().set(BlockLadder.FACING, EnumDirection.NORTH)); + this.a(CreativeModeTab.c); + } + + public AxisAlignedBB a(World world, BlockPosition blockposition, IBlockData iblockdata) { + this.updateShape(world, blockposition); + return super.a(world, blockposition, iblockdata); + } + + public void updateShape(IBlockAccess iblockaccess, BlockPosition blockposition) { + IBlockData iblockdata = iblockaccess.getType(blockposition); + + if (iblockdata.getBlock() == this) { + float f = 0.125F; + + switch (BlockLadder.SyntheticClass_1.a[((EnumDirection) iblockdata.get(BlockLadder.FACING)).ordinal()]) { + case 1: + this.a(0.0F, 0.0F, 1.0F - f, 1.0F, 1.0F, 1.0F); + break; + + case 2: + this.a(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, f); + break; + + case 3: + this.a(1.0F - f, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + break; + + case 4: + default: + this.a(0.0F, 0.0F, 0.0F, f, 1.0F, 1.0F); + } + + } + } + + public boolean c() { + return false; + } + + public boolean d() { + return false; + } + + public boolean canPlace(World world, BlockPosition blockposition) { + return world.getType(blockposition.west()).getBlock().isOccluding() ? true : (world.getType(blockposition.east()).getBlock().isOccluding() ? true : (world.getType(blockposition.north()).getBlock().isOccluding() ? true : world.getType(blockposition.south()).getBlock().isOccluding())); + } + + public IBlockData getPlacedState(World world, BlockPosition blockposition, EnumDirection enumdirection, float f, float f1, float f2, int i, EntityLiving entityliving) { + if (enumdirection.k().c() && this.a(world, blockposition, enumdirection)) { + return this.getBlockData().set(BlockLadder.FACING, enumdirection); + } else { + Iterator iterator = EnumDirection.EnumDirectionLimit.HORIZONTAL.iterator(); + + EnumDirection enumdirection1; + + do { + if (!iterator.hasNext()) { + return this.getBlockData(); + } + + enumdirection1 = (EnumDirection) iterator.next(); + } while (!this.a(world, blockposition, enumdirection1)); + + return this.getBlockData().set(BlockLadder.FACING, enumdirection1); + } + } + + public void doPhysics(World world, BlockPosition blockposition, IBlockData iblockdata, Block block) { + EnumDirection enumdirection = (EnumDirection) iblockdata.get(BlockLadder.FACING); + + if (!this.a(world, blockposition, enumdirection)) { + this.b(world, blockposition, iblockdata, 0); + world.setAir(blockposition); + } + + super.doPhysics(world, blockposition, iblockdata, block); + } + + protected boolean a(World world, BlockPosition blockposition, EnumDirection enumdirection) { + return world.getType(blockposition.shift(enumdirection.opposite())).getBlock().isOccluding(); + } + + public IBlockData fromLegacyData(int i) { + EnumDirection enumdirection = EnumDirection.fromType1(i); + + if (enumdirection.k() == EnumDirection.EnumAxis.Y) { + enumdirection = EnumDirection.NORTH; + } + + return this.getBlockData().set(BlockLadder.FACING, enumdirection); + } + + public int toLegacyData(IBlockData iblockdata) { + return ((EnumDirection) iblockdata.get(BlockLadder.FACING)).a(); + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockLadder.FACING}); + } + + static class SyntheticClass_1 { + + static final int[] a = new int[EnumDirection.values().length]; + + static { + try { + BlockLadder.SyntheticClass_1.a[EnumDirection.NORTH.ordinal()] = 1; + } catch (NoSuchFieldError nosuchfielderror) { + ; + } + + try { + BlockLadder.SyntheticClass_1.a[EnumDirection.SOUTH.ordinal()] = 2; + } catch (NoSuchFieldError nosuchfielderror1) { + ; + } + + try { + BlockLadder.SyntheticClass_1.a[EnumDirection.WEST.ordinal()] = 3; + } catch (NoSuchFieldError nosuchfielderror2) { + ; + } + + try { + BlockLadder.SyntheticClass_1.a[EnumDirection.EAST.ordinal()] = 4; + } catch (NoSuchFieldError nosuchfielderror3) { + ; + } + + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockLeaves.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockLeaves.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockLeaves.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockLeaves.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockLeaves1.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockLeaves1.java new file mode 100644 index 0000000..aac5aa2 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockLeaves1.java @@ -0,0 +1,75 @@ +package net.minecraft.server; + +import com.google.common.base.Predicate; + +public class BlockLeaves1 extends BlockLeaves { + + public static final BlockStateEnum VARIANT = BlockStateEnum.a("variant", BlockWood.EnumLogVariant.class, new Predicate() { + public boolean a(BlockWood.EnumLogVariant blockwood_enumlogvariant) { + return blockwood_enumlogvariant.a() < 4; + } + + public boolean apply(Object object) { + return this.a((BlockWood.EnumLogVariant) object); + } + }); + + public BlockLeaves1() { + this.j(this.blockStateList.getBlockData().set(BlockLeaves1.VARIANT, BlockWood.EnumLogVariant.OAK).set(BlockLeaves1.CHECK_DECAY, Boolean.valueOf(true)).set(BlockLeaves1.DECAYABLE, Boolean.valueOf(true))); + } + + protected void a(World world, BlockPosition blockposition, IBlockData iblockdata, int i) { + if (iblockdata.get(BlockLeaves1.VARIANT) == BlockWood.EnumLogVariant.OAK && world.random.nextInt(i) == 0) { + a(world, blockposition, new ItemStack(Items.APPLE, 1, 0)); + } + + } + + protected int d(IBlockData iblockdata) { + return iblockdata.get(BlockLeaves1.VARIANT) == BlockWood.EnumLogVariant.JUNGLE ? 40 : super.d(iblockdata); + } + + protected ItemStack i(IBlockData iblockdata) { + return new ItemStack(Item.getItemOf(this), 1, ((BlockWood.EnumLogVariant) iblockdata.get(BlockLeaves1.VARIANT)).a()); + } + + public IBlockData fromLegacyData(int i) { + return this.getBlockData().set(BlockLeaves1.VARIANT, this.b(i)).set(BlockLeaves1.DECAYABLE, Boolean.valueOf((i & 4) == 0)).set(BlockLeaves1.CHECK_DECAY, Boolean.valueOf((i & 8) > 0)); + } + + public int toLegacyData(IBlockData iblockdata) { + byte b0 = 0; + int i = b0 | ((BlockWood.EnumLogVariant) iblockdata.get(BlockLeaves1.VARIANT)).a(); + + if (!((Boolean) iblockdata.get(BlockLeaves1.DECAYABLE)).booleanValue()) { + i |= 4; + } + + if (((Boolean) iblockdata.get(BlockLeaves1.CHECK_DECAY)).booleanValue()) { + i |= 8; + } + + return i; + } + + public BlockWood.EnumLogVariant b(int i) { + return BlockWood.EnumLogVariant.a((i & 3) % 4); + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockLeaves1.VARIANT, BlockLeaves1.CHECK_DECAY, BlockLeaves1.DECAYABLE}); + } + + public int getDropData(IBlockData iblockdata) { + return ((BlockWood.EnumLogVariant) iblockdata.get(BlockLeaves1.VARIANT)).a(); + } + + public void a(World world, EntityHuman entityhuman, BlockPosition blockposition, IBlockData iblockdata, TileEntity tileentity) { + if (!world.isClientSide && entityhuman.bZ() != null && entityhuman.bZ().getItem() == Items.SHEARS) { + entityhuman.b(StatisticList.MINE_BLOCK_COUNT[Block.getId(this)]); + a(world, blockposition, new ItemStack(Item.getItemOf(this), 1, ((BlockWood.EnumLogVariant) iblockdata.get(BlockLeaves1.VARIANT)).a())); + } else { + super.a(world, entityhuman, blockposition, iblockdata, tileentity); + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockLeaves2.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockLeaves2.java new file mode 100644 index 0000000..944ce5b --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockLeaves2.java @@ -0,0 +1,77 @@ +package net.minecraft.server; + +import com.google.common.base.Predicate; + +public class BlockLeaves2 extends BlockLeaves { + + public static final BlockStateEnum VARIANT = BlockStateEnum.a("variant", BlockWood.EnumLogVariant.class, new Predicate() { + public boolean a(BlockWood.EnumLogVariant blockwood_enumlogvariant) { + return blockwood_enumlogvariant.a() >= 4; + } + + public boolean apply(Object object) { + return this.a((BlockWood.EnumLogVariant) object); + } + }); + + public BlockLeaves2() { + this.j(this.blockStateList.getBlockData().set(BlockLeaves2.VARIANT, BlockWood.EnumLogVariant.ACACIA).set(BlockLeaves2.CHECK_DECAY, Boolean.valueOf(true)).set(BlockLeaves2.DECAYABLE, Boolean.valueOf(true))); + } + + protected void a(World world, BlockPosition blockposition, IBlockData iblockdata, int i) { + if (iblockdata.get(BlockLeaves2.VARIANT) == BlockWood.EnumLogVariant.DARK_OAK && world.random.nextInt(i) == 0) { + a(world, blockposition, new ItemStack(Items.APPLE, 1, 0)); + } + + } + + public int getDropData(IBlockData iblockdata) { + return ((BlockWood.EnumLogVariant) iblockdata.get(BlockLeaves2.VARIANT)).a(); + } + + public int getDropData(World world, BlockPosition blockposition) { + IBlockData iblockdata = world.getType(blockposition); + + return iblockdata.getBlock().toLegacyData(iblockdata) & 3; + } + + protected ItemStack i(IBlockData iblockdata) { + return new ItemStack(Item.getItemOf(this), 1, ((BlockWood.EnumLogVariant) iblockdata.get(BlockLeaves2.VARIANT)).a() - 4); + } + + public IBlockData fromLegacyData(int i) { + return this.getBlockData().set(BlockLeaves2.VARIANT, this.b(i)).set(BlockLeaves2.DECAYABLE, Boolean.valueOf((i & 4) == 0)).set(BlockLeaves2.CHECK_DECAY, Boolean.valueOf((i & 8) > 0)); + } + + public int toLegacyData(IBlockData iblockdata) { + byte b0 = 0; + int i = b0 | ((BlockWood.EnumLogVariant) iblockdata.get(BlockLeaves2.VARIANT)).a() - 4; + + if (!((Boolean) iblockdata.get(BlockLeaves2.DECAYABLE)).booleanValue()) { + i |= 4; + } + + if (((Boolean) iblockdata.get(BlockLeaves2.CHECK_DECAY)).booleanValue()) { + i |= 8; + } + + return i; + } + + public BlockWood.EnumLogVariant b(int i) { + return BlockWood.EnumLogVariant.a((i & 3) + 4); + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockLeaves2.VARIANT, BlockLeaves2.CHECK_DECAY, BlockLeaves2.DECAYABLE}); + } + + public void a(World world, EntityHuman entityhuman, BlockPosition blockposition, IBlockData iblockdata, TileEntity tileentity) { + if (!world.isClientSide && entityhuman.bZ() != null && entityhuman.bZ().getItem() == Items.SHEARS) { + entityhuman.b(StatisticList.MINE_BLOCK_COUNT[Block.getId(this)]); + a(world, blockposition, new ItemStack(Item.getItemOf(this), 1, ((BlockWood.EnumLogVariant) iblockdata.get(BlockLeaves2.VARIANT)).a() - 4)); + } else { + super.a(world, entityhuman, blockposition, iblockdata, tileentity); + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockLever.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockLever.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockLever.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockLever.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockLightStone.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockLightStone.java new file mode 100644 index 0000000..b50dc9a --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockLightStone.java @@ -0,0 +1,27 @@ +package net.minecraft.server; + +import java.util.Random; + +public class BlockLightStone extends Block { + + public BlockLightStone(Material material) { + super(material); + this.a(CreativeModeTab.b); + } + + public int getDropCount(int i, Random random) { + return MathHelper.clamp(this.a(random) + random.nextInt(i + 1), 1, 4); + } + + public int a(Random random) { + return 2 + random.nextInt(3); + } + + public Item getDropType(IBlockData iblockdata, Random random, int i) { + return Items.GLOWSTONE_DUST; + } + + public MaterialMapColor g(IBlockData iblockdata) { + return MaterialMapColor.d; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockLog1.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockLog1.java new file mode 100644 index 0000000..5290b36 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockLog1.java @@ -0,0 +1,162 @@ +package net.minecraft.server; + +import com.google.common.base.Predicate; + +public class BlockLog1 extends BlockLogAbstract { + + public static final BlockStateEnum VARIANT = BlockStateEnum.a("variant", BlockWood.EnumLogVariant.class, new Predicate() { + public boolean a(BlockWood.EnumLogVariant blockwood_enumlogvariant) { + return blockwood_enumlogvariant.a() < 4; + } + + public boolean apply(Object object) { + return this.a((BlockWood.EnumLogVariant) object); + } + }); + + public BlockLog1() { + this.j(this.blockStateList.getBlockData().set(BlockLog1.VARIANT, BlockWood.EnumLogVariant.OAK).set(BlockLog1.AXIS, BlockLogAbstract.EnumLogRotation.Y)); + } + + public MaterialMapColor g(IBlockData iblockdata) { + BlockWood.EnumLogVariant blockwood_enumlogvariant = (BlockWood.EnumLogVariant) iblockdata.get(BlockLog1.VARIANT); + + switch (BlockLog1.SyntheticClass_1.b[((BlockLogAbstract.EnumLogRotation) iblockdata.get(BlockLog1.AXIS)).ordinal()]) { + case 1: + case 2: + case 3: + default: + switch (BlockLog1.SyntheticClass_1.a[blockwood_enumlogvariant.ordinal()]) { + case 1: + default: + return BlockWood.EnumLogVariant.SPRUCE.c(); + + case 2: + return BlockWood.EnumLogVariant.DARK_OAK.c(); + + case 3: + return MaterialMapColor.p; + + case 4: + return BlockWood.EnumLogVariant.SPRUCE.c(); + } + + case 4: + return blockwood_enumlogvariant.c(); + } + } + + public IBlockData fromLegacyData(int i) { + IBlockData iblockdata = this.getBlockData().set(BlockLog1.VARIANT, BlockWood.EnumLogVariant.a((i & 3) % 4)); + + switch (i & 12) { + case 0: + iblockdata = iblockdata.set(BlockLog1.AXIS, BlockLogAbstract.EnumLogRotation.Y); + break; + + case 4: + iblockdata = iblockdata.set(BlockLog1.AXIS, BlockLogAbstract.EnumLogRotation.X); + break; + + case 8: + iblockdata = iblockdata.set(BlockLog1.AXIS, BlockLogAbstract.EnumLogRotation.Z); + break; + + default: + iblockdata = iblockdata.set(BlockLog1.AXIS, BlockLogAbstract.EnumLogRotation.NONE); + } + + return iblockdata; + } + + public int toLegacyData(IBlockData iblockdata) { + byte b0 = 0; + int i = b0 | ((BlockWood.EnumLogVariant) iblockdata.get(BlockLog1.VARIANT)).a(); + + switch (BlockLog1.SyntheticClass_1.b[((BlockLogAbstract.EnumLogRotation) iblockdata.get(BlockLog1.AXIS)).ordinal()]) { + case 1: + i |= 4; + break; + + case 2: + i |= 8; + break; + + case 3: + i |= 12; + } + + return i; + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockLog1.VARIANT, BlockLog1.AXIS}); + } + + protected ItemStack i(IBlockData iblockdata) { + return new ItemStack(Item.getItemOf(this), 1, ((BlockWood.EnumLogVariant) iblockdata.get(BlockLog1.VARIANT)).a()); + } + + public int getDropData(IBlockData iblockdata) { + return ((BlockWood.EnumLogVariant) iblockdata.get(BlockLog1.VARIANT)).a(); + } + + static class SyntheticClass_1 { + + static final int[] a; + static final int[] b = new int[BlockLogAbstract.EnumLogRotation.values().length]; + + static { + try { + BlockLog1.SyntheticClass_1.b[BlockLogAbstract.EnumLogRotation.X.ordinal()] = 1; + } catch (NoSuchFieldError nosuchfielderror) { + ; + } + + try { + BlockLog1.SyntheticClass_1.b[BlockLogAbstract.EnumLogRotation.Z.ordinal()] = 2; + } catch (NoSuchFieldError nosuchfielderror1) { + ; + } + + try { + BlockLog1.SyntheticClass_1.b[BlockLogAbstract.EnumLogRotation.NONE.ordinal()] = 3; + } catch (NoSuchFieldError nosuchfielderror2) { + ; + } + + try { + BlockLog1.SyntheticClass_1.b[BlockLogAbstract.EnumLogRotation.Y.ordinal()] = 4; + } catch (NoSuchFieldError nosuchfielderror3) { + ; + } + + a = new int[BlockWood.EnumLogVariant.values().length]; + + try { + BlockLog1.SyntheticClass_1.a[BlockWood.EnumLogVariant.OAK.ordinal()] = 1; + } catch (NoSuchFieldError nosuchfielderror4) { + ; + } + + try { + BlockLog1.SyntheticClass_1.a[BlockWood.EnumLogVariant.SPRUCE.ordinal()] = 2; + } catch (NoSuchFieldError nosuchfielderror5) { + ; + } + + try { + BlockLog1.SyntheticClass_1.a[BlockWood.EnumLogVariant.BIRCH.ordinal()] = 3; + } catch (NoSuchFieldError nosuchfielderror6) { + ; + } + + try { + BlockLog1.SyntheticClass_1.a[BlockWood.EnumLogVariant.JUNGLE.ordinal()] = 4; + } catch (NoSuchFieldError nosuchfielderror7) { + ; + } + + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockLog2.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockLog2.java new file mode 100644 index 0000000..0f9cabc --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockLog2.java @@ -0,0 +1,144 @@ +package net.minecraft.server; + +import com.google.common.base.Predicate; + +public class BlockLog2 extends BlockLogAbstract { + + public static final BlockStateEnum VARIANT = BlockStateEnum.a("variant", BlockWood.EnumLogVariant.class, new Predicate() { + public boolean a(BlockWood.EnumLogVariant blockwood_enumlogvariant) { + return blockwood_enumlogvariant.a() >= 4; + } + + public boolean apply(Object object) { + return this.a((BlockWood.EnumLogVariant) object); + } + }); + + public BlockLog2() { + this.j(this.blockStateList.getBlockData().set(BlockLog2.VARIANT, BlockWood.EnumLogVariant.ACACIA).set(BlockLog2.AXIS, BlockLogAbstract.EnumLogRotation.Y)); + } + + public MaterialMapColor g(IBlockData iblockdata) { + BlockWood.EnumLogVariant blockwood_enumlogvariant = (BlockWood.EnumLogVariant) iblockdata.get(BlockLog2.VARIANT); + + switch (BlockLog2.SyntheticClass_1.b[((BlockLogAbstract.EnumLogRotation) iblockdata.get(BlockLog2.AXIS)).ordinal()]) { + case 1: + case 2: + case 3: + default: + switch (BlockLog2.SyntheticClass_1.a[blockwood_enumlogvariant.ordinal()]) { + case 1: + default: + return MaterialMapColor.m; + + case 2: + return BlockWood.EnumLogVariant.DARK_OAK.c(); + } + + case 4: + return blockwood_enumlogvariant.c(); + } + } + + public IBlockData fromLegacyData(int i) { + IBlockData iblockdata = this.getBlockData().set(BlockLog2.VARIANT, BlockWood.EnumLogVariant.a((i & 3) + 4)); + + switch (i & 12) { + case 0: + iblockdata = iblockdata.set(BlockLog2.AXIS, BlockLogAbstract.EnumLogRotation.Y); + break; + + case 4: + iblockdata = iblockdata.set(BlockLog2.AXIS, BlockLogAbstract.EnumLogRotation.X); + break; + + case 8: + iblockdata = iblockdata.set(BlockLog2.AXIS, BlockLogAbstract.EnumLogRotation.Z); + break; + + default: + iblockdata = iblockdata.set(BlockLog2.AXIS, BlockLogAbstract.EnumLogRotation.NONE); + } + + return iblockdata; + } + + public int toLegacyData(IBlockData iblockdata) { + byte b0 = 0; + int i = b0 | ((BlockWood.EnumLogVariant) iblockdata.get(BlockLog2.VARIANT)).a() - 4; + + switch (BlockLog2.SyntheticClass_1.b[((BlockLogAbstract.EnumLogRotation) iblockdata.get(BlockLog2.AXIS)).ordinal()]) { + case 1: + i |= 4; + break; + + case 2: + i |= 8; + break; + + case 3: + i |= 12; + } + + return i; + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockLog2.VARIANT, BlockLog2.AXIS}); + } + + protected ItemStack i(IBlockData iblockdata) { + return new ItemStack(Item.getItemOf(this), 1, ((BlockWood.EnumLogVariant) iblockdata.get(BlockLog2.VARIANT)).a() - 4); + } + + public int getDropData(IBlockData iblockdata) { + return ((BlockWood.EnumLogVariant) iblockdata.get(BlockLog2.VARIANT)).a() - 4; + } + + static class SyntheticClass_1 { + + static final int[] a; + static final int[] b = new int[BlockLogAbstract.EnumLogRotation.values().length]; + + static { + try { + BlockLog2.SyntheticClass_1.b[BlockLogAbstract.EnumLogRotation.X.ordinal()] = 1; + } catch (NoSuchFieldError nosuchfielderror) { + ; + } + + try { + BlockLog2.SyntheticClass_1.b[BlockLogAbstract.EnumLogRotation.Z.ordinal()] = 2; + } catch (NoSuchFieldError nosuchfielderror1) { + ; + } + + try { + BlockLog2.SyntheticClass_1.b[BlockLogAbstract.EnumLogRotation.NONE.ordinal()] = 3; + } catch (NoSuchFieldError nosuchfielderror2) { + ; + } + + try { + BlockLog2.SyntheticClass_1.b[BlockLogAbstract.EnumLogRotation.Y.ordinal()] = 4; + } catch (NoSuchFieldError nosuchfielderror3) { + ; + } + + a = new int[BlockWood.EnumLogVariant.values().length]; + + try { + BlockLog2.SyntheticClass_1.a[BlockWood.EnumLogVariant.ACACIA.ordinal()] = 1; + } catch (NoSuchFieldError nosuchfielderror4) { + ; + } + + try { + BlockLog2.SyntheticClass_1.a[BlockWood.EnumLogVariant.DARK_OAK.ordinal()] = 2; + } catch (NoSuchFieldError nosuchfielderror5) { + ; + } + + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockLogAbstract.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockLogAbstract.java new file mode 100644 index 0000000..69a1289 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockLogAbstract.java @@ -0,0 +1,99 @@ +package net.minecraft.server; + +import java.util.Iterator; + +public abstract class BlockLogAbstract extends BlockRotatable { + + public static final BlockStateEnum AXIS = BlockStateEnum.of("axis", BlockLogAbstract.EnumLogRotation.class); + + public BlockLogAbstract() { + super(Material.WOOD); + this.a(CreativeModeTab.b); + this.c(2.0F); + this.a(BlockLogAbstract.f); + } + + public void remove(World world, BlockPosition blockposition, IBlockData iblockdata) { + byte b0 = 4; + int i = b0 + 1; + + if (world.areChunksLoadedBetween(blockposition.a(-i, -i, -i), blockposition.a(i, i, i))) { + Iterator iterator = BlockPosition.a(blockposition.a(-b0, -b0, -b0), blockposition.a(b0, b0, b0)).iterator(); + + while (iterator.hasNext()) { + BlockPosition blockposition1 = (BlockPosition) iterator.next(); + IBlockData iblockdata1 = world.getType(blockposition1); + + if (iblockdata1.getBlock().getMaterial() == Material.LEAVES && !((Boolean) iblockdata1.get(BlockLeaves.CHECK_DECAY)).booleanValue()) { + world.setTypeAndData(blockposition1, iblockdata1.set(BlockLeaves.CHECK_DECAY, Boolean.valueOf(true)), 4); + } + } + + } + } + + public IBlockData getPlacedState(World world, BlockPosition blockposition, EnumDirection enumdirection, float f, float f1, float f2, int i, EntityLiving entityliving) { + return super.getPlacedState(world, blockposition, enumdirection, f, f1, f2, i, entityliving).set(BlockLogAbstract.AXIS, BlockLogAbstract.EnumLogRotation.a(enumdirection.k())); + } + + static class SyntheticClass_1 { + + static final int[] a = new int[EnumDirection.EnumAxis.values().length]; + + static { + try { + BlockLogAbstract.SyntheticClass_1.a[EnumDirection.EnumAxis.X.ordinal()] = 1; + } catch (NoSuchFieldError nosuchfielderror) { + ; + } + + try { + BlockLogAbstract.SyntheticClass_1.a[EnumDirection.EnumAxis.Y.ordinal()] = 2; + } catch (NoSuchFieldError nosuchfielderror1) { + ; + } + + try { + BlockLogAbstract.SyntheticClass_1.a[EnumDirection.EnumAxis.Z.ordinal()] = 3; + } catch (NoSuchFieldError nosuchfielderror2) { + ; + } + + } + } + + public static enum EnumLogRotation implements INamable { + + X("x"), Y("y"), Z("z"), NONE("none"); + + private final String e; + + private EnumLogRotation(String s) { + this.e = s; + } + + public String toString() { + return this.e; + } + + public static BlockLogAbstract.EnumLogRotation a(EnumDirection.EnumAxis enumdirection_enumaxis) { + switch (BlockLogAbstract.SyntheticClass_1.a[enumdirection_enumaxis.ordinal()]) { + case 1: + return BlockLogAbstract.EnumLogRotation.X; + + case 2: + return BlockLogAbstract.EnumLogRotation.Y; + + case 3: + return BlockLogAbstract.EnumLogRotation.Z; + + default: + return BlockLogAbstract.EnumLogRotation.NONE; + } + } + + public String getName() { + return this.e; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockLongGrass.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockLongGrass.java new file mode 100644 index 0000000..126a4d2 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockLongGrass.java @@ -0,0 +1,127 @@ +package net.minecraft.server; + +import java.util.Random; + +public class BlockLongGrass extends BlockPlant implements IBlockFragilePlantElement { + + public static final BlockStateEnum TYPE = BlockStateEnum.of("type", BlockLongGrass.EnumTallGrassType.class); + + protected BlockLongGrass() { + super(Material.REPLACEABLE_PLANT); + this.j(this.blockStateList.getBlockData().set(BlockLongGrass.TYPE, BlockLongGrass.EnumTallGrassType.DEAD_BUSH)); + float f = 0.4F; + + this.a(0.5F - f, 0.0F, 0.5F - f, 0.5F + f, 0.8F, 0.5F + f); + } + + public boolean f(World world, BlockPosition blockposition, IBlockData iblockdata) { + return this.c(world.getType(blockposition.down()).getBlock()); + } + + public boolean a(World world, BlockPosition blockposition) { + return true; + } + + public Item getDropType(IBlockData iblockdata, Random random, int i) { + return random.nextInt(8) == 0 ? Items.WHEAT_SEEDS : null; + } + + public int getDropCount(int i, Random random) { + return 1 + random.nextInt(i * 2 + 1); + } + + public void a(World world, EntityHuman entityhuman, BlockPosition blockposition, IBlockData iblockdata, TileEntity tileentity) { + if (!world.isClientSide && entityhuman.bZ() != null && entityhuman.bZ().getItem() == Items.SHEARS) { + entityhuman.b(StatisticList.MINE_BLOCK_COUNT[Block.getId(this)]); + a(world, blockposition, new ItemStack(Blocks.TALLGRASS, 1, ((BlockLongGrass.EnumTallGrassType) iblockdata.get(BlockLongGrass.TYPE)).a())); + } else { + super.a(world, entityhuman, blockposition, iblockdata, tileentity); + } + + } + + public int getDropData(World world, BlockPosition blockposition) { + IBlockData iblockdata = world.getType(blockposition); + + return iblockdata.getBlock().toLegacyData(iblockdata); + } + + public boolean a(World world, BlockPosition blockposition, IBlockData iblockdata, boolean flag) { + return iblockdata.get(BlockLongGrass.TYPE) != BlockLongGrass.EnumTallGrassType.DEAD_BUSH; + } + + public boolean a(World world, Random random, BlockPosition blockposition, IBlockData iblockdata) { + return true; + } + + public void b(World world, Random random, BlockPosition blockposition, IBlockData iblockdata) { + BlockTallPlant.EnumTallFlowerVariants blocktallplant_enumtallflowervariants = BlockTallPlant.EnumTallFlowerVariants.GRASS; + + if (iblockdata.get(BlockLongGrass.TYPE) == BlockLongGrass.EnumTallGrassType.FERN) { + blocktallplant_enumtallflowervariants = BlockTallPlant.EnumTallFlowerVariants.FERN; + } + + if (Blocks.DOUBLE_PLANT.canPlace(world, blockposition)) { + Blocks.DOUBLE_PLANT.a(world, blockposition, blocktallplant_enumtallflowervariants, 2); + } + + } + + public IBlockData fromLegacyData(int i) { + return this.getBlockData().set(BlockLongGrass.TYPE, BlockLongGrass.EnumTallGrassType.a(i)); + } + + public int toLegacyData(IBlockData iblockdata) { + return ((BlockLongGrass.EnumTallGrassType) iblockdata.get(BlockLongGrass.TYPE)).a(); + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockLongGrass.TYPE}); + } + + public static enum EnumTallGrassType implements INamable { + + DEAD_BUSH(0, "dead_bush"), GRASS(1, "tall_grass"), FERN(2, "fern"); + + private static final BlockLongGrass.EnumTallGrassType[] d = new BlockLongGrass.EnumTallGrassType[values().length]; + private final int e; + private final String f; + + private EnumTallGrassType(int i, String s) { + this.e = i; + this.f = s; + } + + public int a() { + return this.e; + } + + public String toString() { + return this.f; + } + + public static BlockLongGrass.EnumTallGrassType a(int i) { + if (i < 0 || i >= BlockLongGrass.EnumTallGrassType.d.length) { + i = 0; + } + + return BlockLongGrass.EnumTallGrassType.d[i]; + } + + public String getName() { + return this.f; + } + + static { + BlockLongGrass.EnumTallGrassType[] ablocklonggrass_enumtallgrasstype = values(); + int i = ablocklonggrass_enumtallgrasstype.length; + + for (int j = 0; j < i; ++j) { + BlockLongGrass.EnumTallGrassType blocklonggrass_enumtallgrasstype = ablocklonggrass_enumtallgrasstype[j]; + + BlockLongGrass.EnumTallGrassType.d[blocklonggrass_enumtallgrasstype.a()] = blocklonggrass_enumtallgrasstype; + } + + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockMelon.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockMelon.java new file mode 100644 index 0000000..9365fe0 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockMelon.java @@ -0,0 +1,23 @@ +package net.minecraft.server; + +import java.util.Random; + +public class BlockMelon extends Block { + + protected BlockMelon() { + super(Material.PUMPKIN, MaterialMapColor.u); + this.a(CreativeModeTab.b); + } + + public Item getDropType(IBlockData iblockdata, Random random, int i) { + return Items.MELON; + } + + public int a(Random random) { + return 3 + random.nextInt(5); + } + + public int getDropCount(int i, Random random) { + return Math.min(9, this.a(random) + random.nextInt(1 + i)); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockMinecartDetector.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockMinecartDetector.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockMinecartDetector.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockMinecartDetector.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockMinecartTrack.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockMinecartTrack.java new file mode 100644 index 0000000..f56f656 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockMinecartTrack.java @@ -0,0 +1,34 @@ +package net.minecraft.server; + +public class BlockMinecartTrack extends BlockMinecartTrackAbstract { + + public static final BlockStateEnum SHAPE = BlockStateEnum.of("shape", BlockMinecartTrackAbstract.EnumTrackPosition.class); + + protected BlockMinecartTrack() { + super(false); + this.j(this.blockStateList.getBlockData().set(BlockMinecartTrack.SHAPE, BlockMinecartTrackAbstract.EnumTrackPosition.NORTH_SOUTH)); + } + + protected void b(World world, BlockPosition blockposition, IBlockData iblockdata, Block block) { + if (block.isPowerSource() && (new BlockMinecartTrackAbstract.MinecartTrackLogic(world, blockposition, iblockdata)).a() == 3) { + this.a(world, blockposition, iblockdata, false); + } + + } + + public IBlockState n() { + return BlockMinecartTrack.SHAPE; + } + + public IBlockData fromLegacyData(int i) { + return this.getBlockData().set(BlockMinecartTrack.SHAPE, BlockMinecartTrackAbstract.EnumTrackPosition.a(i)); + } + + public int toLegacyData(IBlockData iblockdata) { + return ((BlockMinecartTrackAbstract.EnumTrackPosition) iblockdata.get(BlockMinecartTrack.SHAPE)).a(); + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockMinecartTrack.SHAPE}); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockMinecartTrackAbstract.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockMinecartTrackAbstract.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockMinecartTrackAbstract.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockMinecartTrackAbstract.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockMobSpawner.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockMobSpawner.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockMobSpawner.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockMobSpawner.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockMonsterEggs.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockMonsterEggs.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockMonsterEggs.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockMonsterEggs.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockMushroom.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockMushroom.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockMushroom.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockMushroom.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockMycel.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockMycel.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockMycel.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockMycel.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockNetherWart.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockNetherWart.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockNetherWart.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockNetherWart.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockNetherbrick.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockNetherbrick.java new file mode 100644 index 0000000..4ddcbd6 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockNetherbrick.java @@ -0,0 +1,13 @@ +package net.minecraft.server; + +public class BlockNetherbrick extends Block { + + public BlockNetherbrick() { + super(Material.STONE); + this.a(CreativeModeTab.b); + } + + public MaterialMapColor g(IBlockData iblockdata) { + return MaterialMapColor.K; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockNote.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockNote.java new file mode 100644 index 0000000..e6b7546 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockNote.java @@ -0,0 +1,86 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import java.util.List; + +public class BlockNote extends BlockContainer { + + private static final List a = Lists.newArrayList(new String[] { "harp", "bd", "snare", "hat", "bassattack"}); + + public BlockNote() { + super(Material.WOOD); + this.a(CreativeModeTab.d); + } + + public void doPhysics(World world, BlockPosition blockposition, IBlockData iblockdata, Block block) { + boolean flag = world.isBlockIndirectlyPowered(blockposition); + TileEntity tileentity = world.getTileEntity(blockposition); + + if (tileentity instanceof TileEntityNote) { + TileEntityNote tileentitynote = (TileEntityNote) tileentity; + + if (tileentitynote.f != flag) { + if (flag) { + tileentitynote.play(world, blockposition); + } + + tileentitynote.f = flag; + } + } + + } + + public boolean interact(World world, BlockPosition blockposition, IBlockData iblockdata, EntityHuman entityhuman, EnumDirection enumdirection, float f, float f1, float f2) { + if (world.isClientSide) { + return true; + } else { + TileEntity tileentity = world.getTileEntity(blockposition); + + if (tileentity instanceof TileEntityNote) { + TileEntityNote tileentitynote = (TileEntityNote) tileentity; + + tileentitynote.b(); + tileentitynote.play(world, blockposition); + entityhuman.b(StatisticList.S); + } + + return true; + } + } + + public void attack(World world, BlockPosition blockposition, EntityHuman entityhuman) { + if (!world.isClientSide) { + TileEntity tileentity = world.getTileEntity(blockposition); + + if (tileentity instanceof TileEntityNote) { + ((TileEntityNote) tileentity).play(world, blockposition); + entityhuman.b(StatisticList.R); + } + + } + } + + public TileEntity a(World world, int i) { + return new TileEntityNote(); + } + + private String b(int i) { + if (i < 0 || i >= BlockNote.a.size()) { + i = 0; + } + + return (String) BlockNote.a.get(i); + } + + public boolean a(World world, BlockPosition blockposition, IBlockData iblockdata, int i, int j) { + float f = (float) Math.pow(2.0D, (double) (j - 12) / 12.0D); + + world.makeSound((double) blockposition.getX() + 0.5D, (double) blockposition.getY() + 0.5D, (double) blockposition.getZ() + 0.5D, "note." + this.b(i), 3.0F, f); + world.addParticle(EnumParticle.NOTE, (double) blockposition.getX() + 0.5D, (double) blockposition.getY() + 1.2D, (double) blockposition.getZ() + 0.5D, (double) j / 24.0D, 0.0D, 0.0D, new int[0]); + return true; + } + + public int b() { + return 3; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockObsidian.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockObsidian.java new file mode 100644 index 0000000..85ed566 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockObsidian.java @@ -0,0 +1,19 @@ +package net.minecraft.server; + +import java.util.Random; + +public class BlockObsidian extends Block { + + public BlockObsidian() { + super(Material.STONE); + this.a(CreativeModeTab.b); + } + + public Item getDropType(IBlockData iblockdata, Random random, int i) { + return Item.getItemOf(Blocks.OBSIDIAN); + } + + public MaterialMapColor g(IBlockData iblockdata) { + return MaterialMapColor.E; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockOre.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockOre.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockOre.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockOre.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockPackedIce.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockPackedIce.java new file mode 100644 index 0000000..38f0184 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockPackedIce.java @@ -0,0 +1,16 @@ +package net.minecraft.server; + +import java.util.Random; + +public class BlockPackedIce extends Block { + + public BlockPackedIce() { + super(Material.SNOW_LAYER); + this.frictionFactor = 0.98F; + this.a(CreativeModeTab.b); + } + + public int a(Random random) { + return 0; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockPiston.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockPiston.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockPiston.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockPiston.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockPistonExtension.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockPistonExtension.java new file mode 100644 index 0000000..371d104 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockPistonExtension.java @@ -0,0 +1,249 @@ +package net.minecraft.server; + +import java.util.List; +import java.util.Random; + +public class BlockPistonExtension extends Block { + + public static final BlockStateDirection FACING = BlockStateDirection.of("facing"); + public static final BlockStateEnum TYPE = BlockStateEnum.of("type", BlockPistonExtension.EnumPistonType.class); + public static final BlockStateBoolean SHORT = BlockStateBoolean.of("short"); + + public BlockPistonExtension() { + super(Material.PISTON); + this.j(this.blockStateList.getBlockData().set(BlockPistonExtension.FACING, EnumDirection.NORTH).set(BlockPistonExtension.TYPE, BlockPistonExtension.EnumPistonType.DEFAULT).set(BlockPistonExtension.SHORT, Boolean.valueOf(false))); + this.a(BlockPistonExtension.i); + this.c(0.5F); + } + + public void a(World world, BlockPosition blockposition, IBlockData iblockdata, EntityHuman entityhuman) { + if (entityhuman.abilities.canInstantlyBuild) { + EnumDirection enumdirection = (EnumDirection) iblockdata.get(BlockPistonExtension.FACING); + + if (enumdirection != null) { + BlockPosition blockposition1 = blockposition.shift(enumdirection.opposite()); + Block block = world.getType(blockposition1).getBlock(); + + if (block == Blocks.PISTON || block == Blocks.STICKY_PISTON) { + world.setAir(blockposition1); + } + } + } + + super.a(world, blockposition, iblockdata, entityhuman); + } + + public void remove(World world, BlockPosition blockposition, IBlockData iblockdata) { + super.remove(world, blockposition, iblockdata); + EnumDirection enumdirection = ((EnumDirection) iblockdata.get(BlockPistonExtension.FACING)).opposite(); + + blockposition = blockposition.shift(enumdirection); + IBlockData iblockdata1 = world.getType(blockposition); + + if ((iblockdata1.getBlock() == Blocks.PISTON || iblockdata1.getBlock() == Blocks.STICKY_PISTON) && ((Boolean) iblockdata1.get(BlockPiston.EXTENDED)).booleanValue()) { + iblockdata1.getBlock().b(world, blockposition, iblockdata1, 0); + world.setAir(blockposition); + } + + } + + public boolean c() { + return false; + } + + public boolean d() { + return false; + } + + public boolean canPlace(World world, BlockPosition blockposition) { + return false; + } + + public boolean canPlace(World world, BlockPosition blockposition, EnumDirection enumdirection) { + return false; + } + + public int a(Random random) { + return 0; + } + + public void a(World world, BlockPosition blockposition, IBlockData iblockdata, AxisAlignedBB axisalignedbb, List list, Entity entity) { + this.d(iblockdata); + super.a(world, blockposition, iblockdata, axisalignedbb, list, entity); + this.e(iblockdata); + super.a(world, blockposition, iblockdata, axisalignedbb, list, entity); + this.a(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + + private void e(IBlockData iblockdata) { + float f = 0.25F; + float f1 = 0.375F; + float f2 = 0.625F; + float f3 = 0.25F; + float f4 = 0.75F; + + switch (BlockPistonExtension.SyntheticClass_1.a[((EnumDirection) iblockdata.get(BlockPistonExtension.FACING)).ordinal()]) { + case 1: + this.a(0.375F, 0.25F, 0.375F, 0.625F, 1.0F, 0.625F); + break; + + case 2: + this.a(0.375F, 0.0F, 0.375F, 0.625F, 0.75F, 0.625F); + break; + + case 3: + this.a(0.25F, 0.375F, 0.25F, 0.75F, 0.625F, 1.0F); + break; + + case 4: + this.a(0.25F, 0.375F, 0.0F, 0.75F, 0.625F, 0.75F); + break; + + case 5: + this.a(0.375F, 0.25F, 0.25F, 0.625F, 0.75F, 1.0F); + break; + + case 6: + this.a(0.0F, 0.375F, 0.25F, 0.75F, 0.625F, 0.75F); + } + + } + + public void updateShape(IBlockAccess iblockaccess, BlockPosition blockposition) { + this.d(iblockaccess.getType(blockposition)); + } + + public void d(IBlockData iblockdata) { + float f = 0.25F; + EnumDirection enumdirection = (EnumDirection) iblockdata.get(BlockPistonExtension.FACING); + + if (enumdirection != null) { + switch (BlockPistonExtension.SyntheticClass_1.a[enumdirection.ordinal()]) { + case 1: + this.a(0.0F, 0.0F, 0.0F, 1.0F, 0.25F, 1.0F); + break; + + case 2: + this.a(0.0F, 0.75F, 0.0F, 1.0F, 1.0F, 1.0F); + break; + + case 3: + this.a(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.25F); + break; + + case 4: + this.a(0.0F, 0.0F, 0.75F, 1.0F, 1.0F, 1.0F); + break; + + case 5: + this.a(0.0F, 0.0F, 0.0F, 0.25F, 1.0F, 1.0F); + break; + + case 6: + this.a(0.75F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + + } + } + + public void doPhysics(World world, BlockPosition blockposition, IBlockData iblockdata, Block block) { + EnumDirection enumdirection = (EnumDirection) iblockdata.get(BlockPistonExtension.FACING); + BlockPosition blockposition1 = blockposition.shift(enumdirection.opposite()); + IBlockData iblockdata1 = world.getType(blockposition1); + + if (iblockdata1.getBlock() != Blocks.PISTON && iblockdata1.getBlock() != Blocks.STICKY_PISTON) { + world.setAir(blockposition); + } else { + iblockdata1.getBlock().doPhysics(world, blockposition1, iblockdata1, block); + } + + } + + public static EnumDirection b(int i) { + int j = i & 7; + + return j > 5 ? null : EnumDirection.fromType1(j); + } + + public IBlockData fromLegacyData(int i) { + return this.getBlockData().set(BlockPistonExtension.FACING, b(i)).set(BlockPistonExtension.TYPE, (i & 8) > 0 ? BlockPistonExtension.EnumPistonType.STICKY : BlockPistonExtension.EnumPistonType.DEFAULT); + } + + public int toLegacyData(IBlockData iblockdata) { + byte b0 = 0; + int i = b0 | ((EnumDirection) iblockdata.get(BlockPistonExtension.FACING)).a(); + + if (iblockdata.get(BlockPistonExtension.TYPE) == BlockPistonExtension.EnumPistonType.STICKY) { + i |= 8; + } + + return i; + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockPistonExtension.FACING, BlockPistonExtension.TYPE, BlockPistonExtension.SHORT}); + } + + static class SyntheticClass_1 { + + static final int[] a = new int[EnumDirection.values().length]; + + static { + try { + BlockPistonExtension.SyntheticClass_1.a[EnumDirection.DOWN.ordinal()] = 1; + } catch (NoSuchFieldError nosuchfielderror) { + ; + } + + try { + BlockPistonExtension.SyntheticClass_1.a[EnumDirection.UP.ordinal()] = 2; + } catch (NoSuchFieldError nosuchfielderror1) { + ; + } + + try { + BlockPistonExtension.SyntheticClass_1.a[EnumDirection.NORTH.ordinal()] = 3; + } catch (NoSuchFieldError nosuchfielderror2) { + ; + } + + try { + BlockPistonExtension.SyntheticClass_1.a[EnumDirection.SOUTH.ordinal()] = 4; + } catch (NoSuchFieldError nosuchfielderror3) { + ; + } + + try { + BlockPistonExtension.SyntheticClass_1.a[EnumDirection.WEST.ordinal()] = 5; + } catch (NoSuchFieldError nosuchfielderror4) { + ; + } + + try { + BlockPistonExtension.SyntheticClass_1.a[EnumDirection.EAST.ordinal()] = 6; + } catch (NoSuchFieldError nosuchfielderror5) { + ; + } + + } + } + + public static enum EnumPistonType implements INamable { + + DEFAULT("normal"), STICKY("sticky"); + + private final String c; + + private EnumPistonType(String s) { + this.c = s; + } + + public String toString() { + return this.c; + } + + public String getName() { + return this.c; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockPistonMoving.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockPistonMoving.java new file mode 100644 index 0000000..3b33343 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockPistonMoving.java @@ -0,0 +1,210 @@ +package net.minecraft.server; + +import java.util.Random; + +public class BlockPistonMoving extends BlockContainer { + + public static final BlockStateDirection FACING = BlockPistonExtension.FACING; + public static final BlockStateEnum TYPE = BlockPistonExtension.TYPE; + + public BlockPistonMoving() { + super(Material.PISTON); + this.j(this.blockStateList.getBlockData().set(BlockPistonMoving.FACING, EnumDirection.NORTH).set(BlockPistonMoving.TYPE, BlockPistonExtension.EnumPistonType.DEFAULT)); + this.c(-1.0F); + } + + public TileEntity a(World world, int i) { + return null; + } + + public static TileEntity a(IBlockData iblockdata, EnumDirection enumdirection, boolean flag, boolean flag1) { + return new TileEntityPiston(iblockdata, enumdirection, flag, flag1); + } + + public void remove(World world, BlockPosition blockposition, IBlockData iblockdata) { + TileEntity tileentity = world.getTileEntity(blockposition); + + if (tileentity instanceof TileEntityPiston) { + ((TileEntityPiston) tileentity).h(); + } else { + super.remove(world, blockposition, iblockdata); + } + + } + + public boolean canPlace(World world, BlockPosition blockposition) { + return false; + } + + public boolean canPlace(World world, BlockPosition blockposition, EnumDirection enumdirection) { + return false; + } + + public void postBreak(World world, BlockPosition blockposition, IBlockData iblockdata) { + BlockPosition blockposition1 = blockposition.shift(((EnumDirection) iblockdata.get(BlockPistonMoving.FACING)).opposite()); + IBlockData iblockdata1 = world.getType(blockposition1); + + if (iblockdata1.getBlock() instanceof BlockPiston && ((Boolean) iblockdata1.get(BlockPiston.EXTENDED)).booleanValue()) { + world.setAir(blockposition1); + } + + } + + public boolean c() { + return false; + } + + public boolean d() { + return false; + } + + public boolean interact(World world, BlockPosition blockposition, IBlockData iblockdata, EntityHuman entityhuman, EnumDirection enumdirection, float f, float f1, float f2) { + if (!world.isClientSide && world.getTileEntity(blockposition) == null) { + world.setAir(blockposition); + return true; + } else { + return false; + } + } + + public Item getDropType(IBlockData iblockdata, Random random, int i) { + return null; + } + + public void dropNaturally(World world, BlockPosition blockposition, IBlockData iblockdata, float f, int i) { + if (!world.isClientSide) { + TileEntityPiston tileentitypiston = this.e((IBlockAccess) world, blockposition); + + if (tileentitypiston != null) { + IBlockData iblockdata1 = tileentitypiston.b(); + + iblockdata1.getBlock().b(world, blockposition, iblockdata1, 0); + } + } + } + + public MovingObjectPosition a(World world, BlockPosition blockposition, Vec3D vec3d, Vec3D vec3d1) { + return null; + } + + public void doPhysics(World world, BlockPosition blockposition, IBlockData iblockdata, Block block) { + if (!world.isClientSide) { + world.getTileEntity(blockposition); + } + + } + + public AxisAlignedBB a(World world, BlockPosition blockposition, IBlockData iblockdata) { + TileEntityPiston tileentitypiston = this.e((IBlockAccess) world, blockposition); + + if (tileentitypiston == null) { + return null; + } else { + float f = tileentitypiston.a(0.0F); + + if (tileentitypiston.d()) { + f = 1.0F - f; + } + + return this.a(world, blockposition, tileentitypiston.b(), f, tileentitypiston.e()); + } + } + + public void updateShape(IBlockAccess iblockaccess, BlockPosition blockposition) { + TileEntityPiston tileentitypiston = this.e(iblockaccess, blockposition); + + if (tileentitypiston != null) { + IBlockData iblockdata = tileentitypiston.b(); + Block block = iblockdata.getBlock(); + + if (block == this || block.getMaterial() == Material.AIR) { + return; + } + + float f = tileentitypiston.a(0.0F); + + if (tileentitypiston.d()) { + f = 1.0F - f; + } + + block.updateShape(iblockaccess, blockposition); + if (block == Blocks.PISTON || block == Blocks.STICKY_PISTON) { + f = 0.0F; + } + + EnumDirection enumdirection = tileentitypiston.e(); + + this.minX = block.B() - (double) ((float) enumdirection.getAdjacentX() * f); + this.minY = block.D() - (double) ((float) enumdirection.getAdjacentY() * f); + this.minZ = block.F() - (double) ((float) enumdirection.getAdjacentZ() * f); + this.maxX = block.C() - (double) ((float) enumdirection.getAdjacentX() * f); + this.maxY = block.E() - (double) ((float) enumdirection.getAdjacentY() * f); + this.maxZ = block.G() - (double) ((float) enumdirection.getAdjacentZ() * f); + } + + } + + public AxisAlignedBB a(World world, BlockPosition blockposition, IBlockData iblockdata, float f, EnumDirection enumdirection) { + if (iblockdata.getBlock() != this && iblockdata.getBlock().getMaterial() != Material.AIR) { + AxisAlignedBB axisalignedbb = iblockdata.getBlock().a(world, blockposition, iblockdata); + + if (axisalignedbb == null) { + return null; + } else { + double d0 = axisalignedbb.a; + double d1 = axisalignedbb.b; + double d2 = axisalignedbb.c; + double d3 = axisalignedbb.d; + double d4 = axisalignedbb.e; + double d5 = axisalignedbb.f; + + if (enumdirection.getAdjacentX() < 0) { + d0 -= (double) ((float) enumdirection.getAdjacentX() * f); + } else { + d3 -= (double) ((float) enumdirection.getAdjacentX() * f); + } + + if (enumdirection.getAdjacentY() < 0) { + d1 -= (double) ((float) enumdirection.getAdjacentY() * f); + } else { + d4 -= (double) ((float) enumdirection.getAdjacentY() * f); + } + + if (enumdirection.getAdjacentZ() < 0) { + d2 -= (double) ((float) enumdirection.getAdjacentZ() * f); + } else { + d5 -= (double) ((float) enumdirection.getAdjacentZ() * f); + } + + return new AxisAlignedBB(d0, d1, d2, d3, d4, d5); + } + } else { + return null; + } + } + + private TileEntityPiston e(IBlockAccess iblockaccess, BlockPosition blockposition) { + TileEntity tileentity = iblockaccess.getTileEntity(blockposition); + + return tileentity instanceof TileEntityPiston ? (TileEntityPiston) tileentity : null; + } + + public IBlockData fromLegacyData(int i) { + return this.getBlockData().set(BlockPistonMoving.FACING, BlockPistonExtension.b(i)).set(BlockPistonMoving.TYPE, (i & 8) > 0 ? BlockPistonExtension.EnumPistonType.STICKY : BlockPistonExtension.EnumPistonType.DEFAULT); + } + + public int toLegacyData(IBlockData iblockdata) { + byte b0 = 0; + int i = b0 | ((EnumDirection) iblockdata.get(BlockPistonMoving.FACING)).a(); + + if (iblockdata.get(BlockPistonMoving.TYPE) == BlockPistonExtension.EnumPistonType.STICKY) { + i |= 8; + } + + return i; + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockPistonMoving.FACING, BlockPistonMoving.TYPE}); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockPlant.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockPlant.java similarity index 94% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockPlant.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockPlant.java index 8b84846..6697837 100644 --- a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockPlant.java +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockPlant.java @@ -42,7 +42,7 @@ public class BlockPlant extends Block { } protected void e(World world, BlockPosition blockposition, IBlockData iblockdata) { - if (!this.f(world, blockposition, iblockdata)) { + if (!this.f(world, blockposition, iblockdata) && ((WorldServer) world).hasPhysicsEvent) { // PandaSpigot - hasPhysicsEvent // CraftBukkit Start org.bukkit.block.Block block = world.getWorld().getBlockAt(blockposition.getX(), blockposition.getY(), blockposition.getZ()); BlockPhysicsEvent event = new BlockPhysicsEvent(block, block.getTypeId()); diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockPortal.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockPortal.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockPortal.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockPortal.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockPosition.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockPosition.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockPosition.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockPosition.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockPotatoes.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockPotatoes.java new file mode 100644 index 0000000..2007ca1 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockPotatoes.java @@ -0,0 +1,24 @@ +package net.minecraft.server; + +public class BlockPotatoes extends BlockCrops { + + public BlockPotatoes() {} + + protected Item l() { + return Items.POTATO; + } + + protected Item n() { + return Items.POTATO; + } + + public void dropNaturally(World world, BlockPosition blockposition, IBlockData iblockdata, float f, int i) { + super.dropNaturally(world, blockposition, iblockdata, f, i); + if (!world.isClientSide) { + if (((Integer) iblockdata.get(BlockPotatoes.AGE)).intValue() >= 7 && world.random.nextInt(50) == 0) { + a(world, blockposition, new ItemStack(Items.POISONOUS_POTATO)); + } + + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockPowered.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockPowered.java new file mode 100644 index 0000000..798ae26 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockPowered.java @@ -0,0 +1,16 @@ +package net.minecraft.server; + +public class BlockPowered extends Block { + + public BlockPowered(Material material, MaterialMapColor materialmapcolor) { + super(material, materialmapcolor); + } + + public boolean isPowerSource() { + return true; + } + + public int a(IBlockAccess iblockaccess, BlockPosition blockposition, IBlockData iblockdata, EnumDirection enumdirection) { + return 15; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockPoweredRail.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockPoweredRail.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockPoweredRail.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockPoweredRail.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockPredicate.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockPredicate.java new file mode 100644 index 0000000..28af027 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockPredicate.java @@ -0,0 +1,24 @@ +package net.minecraft.server; + +import com.google.common.base.Predicate; + +public class BlockPredicate implements Predicate { + + private final Block a; + + private BlockPredicate(Block block) { + this.a = block; + } + + public static BlockPredicate a(Block block) { + return new BlockPredicate(block); + } + + public boolean a(IBlockData iblockdata) { + return iblockdata != null && iblockdata.getBlock() == this.a; + } + + public boolean apply(IBlockData object) { + return this.a(object); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockPressurePlateAbstract.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockPressurePlateAbstract.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockPressurePlateAbstract.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockPressurePlateAbstract.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockPressurePlateBinary.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockPressurePlateBinary.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockPressurePlateBinary.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockPressurePlateBinary.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockPressurePlateWeighted.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockPressurePlateWeighted.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockPressurePlateWeighted.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockPressurePlateWeighted.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockPrismarine.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockPrismarine.java new file mode 100644 index 0000000..369f123 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockPrismarine.java @@ -0,0 +1,91 @@ +package net.minecraft.server; + +public class BlockPrismarine extends Block { + + public static final BlockStateEnum VARIANT = BlockStateEnum.of("variant", BlockPrismarine.EnumPrismarineVariant.class); + public static final int b = BlockPrismarine.EnumPrismarineVariant.ROUGH.a(); + public static final int N = BlockPrismarine.EnumPrismarineVariant.BRICKS.a(); + public static final int O = BlockPrismarine.EnumPrismarineVariant.DARK.a(); + + public BlockPrismarine() { + super(Material.STONE); + this.j(this.blockStateList.getBlockData().set(BlockPrismarine.VARIANT, BlockPrismarine.EnumPrismarineVariant.ROUGH)); + this.a(CreativeModeTab.b); + } + + public String getName() { + return LocaleI18n.get(this.a() + "." + BlockPrismarine.EnumPrismarineVariant.ROUGH.c() + ".name"); + } + + public MaterialMapColor g(IBlockData iblockdata) { + return iblockdata.get(BlockPrismarine.VARIANT) == BlockPrismarine.EnumPrismarineVariant.ROUGH ? MaterialMapColor.y : MaterialMapColor.G; + } + + public int getDropData(IBlockData iblockdata) { + return ((BlockPrismarine.EnumPrismarineVariant) iblockdata.get(BlockPrismarine.VARIANT)).a(); + } + + public int toLegacyData(IBlockData iblockdata) { + return ((BlockPrismarine.EnumPrismarineVariant) iblockdata.get(BlockPrismarine.VARIANT)).a(); + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockPrismarine.VARIANT}); + } + + public IBlockData fromLegacyData(int i) { + return this.getBlockData().set(BlockPrismarine.VARIANT, BlockPrismarine.EnumPrismarineVariant.a(i)); + } + + public static enum EnumPrismarineVariant implements INamable { + + ROUGH(0, "prismarine", "rough"), BRICKS(1, "prismarine_bricks", "bricks"), DARK(2, "dark_prismarine", "dark"); + + private static final BlockPrismarine.EnumPrismarineVariant[] d = new BlockPrismarine.EnumPrismarineVariant[values().length]; + private final int e; + private final String f; + private final String g; + + private EnumPrismarineVariant(int i, String s, String s1) { + this.e = i; + this.f = s; + this.g = s1; + } + + public int a() { + return this.e; + } + + public String toString() { + return this.f; + } + + public static BlockPrismarine.EnumPrismarineVariant a(int i) { + if (i < 0 || i >= BlockPrismarine.EnumPrismarineVariant.d.length) { + i = 0; + } + + return BlockPrismarine.EnumPrismarineVariant.d[i]; + } + + public String getName() { + return this.f; + } + + public String c() { + return this.g; + } + + static { + BlockPrismarine.EnumPrismarineVariant[] ablockprismarine_enumprismarinevariant = values(); + int i = ablockprismarine_enumprismarinevariant.length; + + for (int j = 0; j < i; ++j) { + BlockPrismarine.EnumPrismarineVariant blockprismarine_enumprismarinevariant = ablockprismarine_enumprismarinevariant[j]; + + BlockPrismarine.EnumPrismarineVariant.d[blockprismarine_enumprismarinevariant.a()] = blockprismarine_enumprismarinevariant; + } + + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockPumpkin.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockPumpkin.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockPumpkin.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockPumpkin.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockQuartz.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockQuartz.java new file mode 100644 index 0000000..5c39ec2 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockQuartz.java @@ -0,0 +1,132 @@ +package net.minecraft.server; + +public class BlockQuartz extends Block { + + public static final BlockStateEnum VARIANT = BlockStateEnum.of("variant", BlockQuartz.EnumQuartzVariant.class); + + public BlockQuartz() { + super(Material.STONE); + this.j(this.blockStateList.getBlockData().set(BlockQuartz.VARIANT, BlockQuartz.EnumQuartzVariant.DEFAULT)); + this.a(CreativeModeTab.b); + } + + public IBlockData getPlacedState(World world, BlockPosition blockposition, EnumDirection enumdirection, float f, float f1, float f2, int i, EntityLiving entityliving) { + if (i == BlockQuartz.EnumQuartzVariant.LINES_Y.a()) { + switch (BlockQuartz.SyntheticClass_1.a[enumdirection.k().ordinal()]) { + case 1: + return this.getBlockData().set(BlockQuartz.VARIANT, BlockQuartz.EnumQuartzVariant.LINES_Z); + + case 2: + return this.getBlockData().set(BlockQuartz.VARIANT, BlockQuartz.EnumQuartzVariant.LINES_X); + + case 3: + default: + return this.getBlockData().set(BlockQuartz.VARIANT, BlockQuartz.EnumQuartzVariant.LINES_Y); + } + } else { + return i == BlockQuartz.EnumQuartzVariant.CHISELED.a() ? this.getBlockData().set(BlockQuartz.VARIANT, BlockQuartz.EnumQuartzVariant.CHISELED) : this.getBlockData().set(BlockQuartz.VARIANT, BlockQuartz.EnumQuartzVariant.DEFAULT); + } + } + + public int getDropData(IBlockData iblockdata) { + BlockQuartz.EnumQuartzVariant blockquartz_enumquartzvariant = (BlockQuartz.EnumQuartzVariant) iblockdata.get(BlockQuartz.VARIANT); + + return blockquartz_enumquartzvariant != BlockQuartz.EnumQuartzVariant.LINES_X && blockquartz_enumquartzvariant != BlockQuartz.EnumQuartzVariant.LINES_Z ? blockquartz_enumquartzvariant.a() : BlockQuartz.EnumQuartzVariant.LINES_Y.a(); + } + + protected ItemStack i(IBlockData iblockdata) { + BlockQuartz.EnumQuartzVariant blockquartz_enumquartzvariant = (BlockQuartz.EnumQuartzVariant) iblockdata.get(BlockQuartz.VARIANT); + + return blockquartz_enumquartzvariant != BlockQuartz.EnumQuartzVariant.LINES_X && blockquartz_enumquartzvariant != BlockQuartz.EnumQuartzVariant.LINES_Z ? super.i(iblockdata) : new ItemStack(Item.getItemOf(this), 1, BlockQuartz.EnumQuartzVariant.LINES_Y.a()); + } + + public MaterialMapColor g(IBlockData iblockdata) { + return MaterialMapColor.p; + } + + public IBlockData fromLegacyData(int i) { + return this.getBlockData().set(BlockQuartz.VARIANT, BlockQuartz.EnumQuartzVariant.a(i)); + } + + public int toLegacyData(IBlockData iblockdata) { + return ((BlockQuartz.EnumQuartzVariant) iblockdata.get(BlockQuartz.VARIANT)).a(); + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockQuartz.VARIANT}); + } + + static class SyntheticClass_1 { + + static final int[] a = new int[EnumDirection.EnumAxis.values().length]; + + static { + try { + BlockQuartz.SyntheticClass_1.a[EnumDirection.EnumAxis.Z.ordinal()] = 1; + } catch (NoSuchFieldError nosuchfielderror) { + ; + } + + try { + BlockQuartz.SyntheticClass_1.a[EnumDirection.EnumAxis.X.ordinal()] = 2; + } catch (NoSuchFieldError nosuchfielderror1) { + ; + } + + try { + BlockQuartz.SyntheticClass_1.a[EnumDirection.EnumAxis.Y.ordinal()] = 3; + } catch (NoSuchFieldError nosuchfielderror2) { + ; + } + + } + } + + public static enum EnumQuartzVariant implements INamable { + + DEFAULT(0, "default", "default"), CHISELED(1, "chiseled", "chiseled"), LINES_Y(2, "lines_y", "lines"), LINES_X(3, "lines_x", "lines"), LINES_Z(4, "lines_z", "lines"); + + private static final BlockQuartz.EnumQuartzVariant[] f = new BlockQuartz.EnumQuartzVariant[values().length]; + private final int g; + private final String h; + private final String i; + + private EnumQuartzVariant(int i, String s, String s1) { + this.g = i; + this.h = s; + this.i = s1; + } + + public int a() { + return this.g; + } + + public String toString() { + return this.i; + } + + public static BlockQuartz.EnumQuartzVariant a(int i) { + if (i < 0 || i >= BlockQuartz.EnumQuartzVariant.f.length) { + i = 0; + } + + return BlockQuartz.EnumQuartzVariant.f[i]; + } + + public String getName() { + return this.h; + } + + static { + BlockQuartz.EnumQuartzVariant[] ablockquartz_enumquartzvariant = values(); + int i = ablockquartz_enumquartzvariant.length; + + for (int j = 0; j < i; ++j) { + BlockQuartz.EnumQuartzVariant blockquartz_enumquartzvariant = ablockquartz_enumquartzvariant[j]; + + BlockQuartz.EnumQuartzVariant.f[blockquartz_enumquartzvariant.a()] = blockquartz_enumquartzvariant; + } + + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockRedFlowers.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockRedFlowers.java new file mode 100644 index 0000000..0f4a18e --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockRedFlowers.java @@ -0,0 +1,10 @@ +package net.minecraft.server; + +public class BlockRedFlowers extends BlockFlowers { + + public BlockRedFlowers() {} + + public BlockFlowers.EnumFlowerType l() { + return BlockFlowers.EnumFlowerType.RED; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockRedSandstone.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockRedSandstone.java new file mode 100644 index 0000000..9f2d9c6 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockRedSandstone.java @@ -0,0 +1,80 @@ +package net.minecraft.server; + +public class BlockRedSandstone extends Block { + + public static final BlockStateEnum TYPE = BlockStateEnum.of("type", BlockRedSandstone.EnumRedSandstoneVariant.class); + + public BlockRedSandstone() { + super(Material.STONE, BlockSand.EnumSandVariant.RED_SAND.c()); + this.j(this.blockStateList.getBlockData().set(BlockRedSandstone.TYPE, BlockRedSandstone.EnumRedSandstoneVariant.DEFAULT)); + this.a(CreativeModeTab.b); + } + + public int getDropData(IBlockData iblockdata) { + return ((BlockRedSandstone.EnumRedSandstoneVariant) iblockdata.get(BlockRedSandstone.TYPE)).a(); + } + + public IBlockData fromLegacyData(int i) { + return this.getBlockData().set(BlockRedSandstone.TYPE, BlockRedSandstone.EnumRedSandstoneVariant.a(i)); + } + + public int toLegacyData(IBlockData iblockdata) { + return ((BlockRedSandstone.EnumRedSandstoneVariant) iblockdata.get(BlockRedSandstone.TYPE)).a(); + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockRedSandstone.TYPE}); + } + + public static enum EnumRedSandstoneVariant implements INamable { + + DEFAULT(0, "red_sandstone", "default"), CHISELED(1, "chiseled_red_sandstone", "chiseled"), SMOOTH(2, "smooth_red_sandstone", "smooth"); + + private static final BlockRedSandstone.EnumRedSandstoneVariant[] d = new BlockRedSandstone.EnumRedSandstoneVariant[values().length]; + private final int e; + private final String f; + private final String g; + + private EnumRedSandstoneVariant(int i, String s, String s1) { + this.e = i; + this.f = s; + this.g = s1; + } + + public int a() { + return this.e; + } + + public String toString() { + return this.f; + } + + public static BlockRedSandstone.EnumRedSandstoneVariant a(int i) { + if (i < 0 || i >= BlockRedSandstone.EnumRedSandstoneVariant.d.length) { + i = 0; + } + + return BlockRedSandstone.EnumRedSandstoneVariant.d[i]; + } + + public String getName() { + return this.f; + } + + public String c() { + return this.g; + } + + static { + BlockRedSandstone.EnumRedSandstoneVariant[] ablockredsandstone_enumredsandstonevariant = values(); + int i = ablockredsandstone_enumredsandstonevariant.length; + + for (int j = 0; j < i; ++j) { + BlockRedSandstone.EnumRedSandstoneVariant blockredsandstone_enumredsandstonevariant = ablockredsandstone_enumredsandstonevariant[j]; + + BlockRedSandstone.EnumRedSandstoneVariant.d[blockredsandstone_enumredsandstonevariant.a()] = blockredsandstone_enumredsandstonevariant; + } + + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockRedstoneComparator.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockRedstoneComparator.java new file mode 100644 index 0000000..71aaf47 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockRedstoneComparator.java @@ -0,0 +1,244 @@ +package net.minecraft.server; + +import com.google.common.base.Predicate; +import java.util.List; +import java.util.Random; + +public class BlockRedstoneComparator extends BlockDiodeAbstract implements IContainer { + + public static final BlockStateBoolean POWERED = BlockStateBoolean.of("powered"); + public static final BlockStateEnum MODE = BlockStateEnum.of("mode", BlockRedstoneComparator.EnumComparatorMode.class); + + public BlockRedstoneComparator(boolean flag) { + super(flag); + this.j(this.blockStateList.getBlockData().set(BlockRedstoneComparator.FACING, EnumDirection.NORTH).set(BlockRedstoneComparator.POWERED, Boolean.valueOf(false)).set(BlockRedstoneComparator.MODE, BlockRedstoneComparator.EnumComparatorMode.COMPARE)); + this.isTileEntity = true; + } + + public String getName() { + return LocaleI18n.get("item.comparator.name"); + } + + public Item getDropType(IBlockData iblockdata, Random random, int i) { + return Items.COMPARATOR; + } + + protected int d(IBlockData iblockdata) { + return 2; + } + + protected IBlockData e(IBlockData iblockdata) { + Boolean obool = (Boolean) iblockdata.get(BlockRedstoneComparator.POWERED); + BlockRedstoneComparator.EnumComparatorMode blockredstonecomparator_enumcomparatormode = (BlockRedstoneComparator.EnumComparatorMode) iblockdata.get(BlockRedstoneComparator.MODE); + EnumDirection enumdirection = (EnumDirection) iblockdata.get(BlockRedstoneComparator.FACING); + + return Blocks.POWERED_COMPARATOR.getBlockData().set(BlockRedstoneComparator.FACING, enumdirection).set(BlockRedstoneComparator.POWERED, obool).set(BlockRedstoneComparator.MODE, blockredstonecomparator_enumcomparatormode); + } + + protected IBlockData k(IBlockData iblockdata) { + Boolean obool = (Boolean) iblockdata.get(BlockRedstoneComparator.POWERED); + BlockRedstoneComparator.EnumComparatorMode blockredstonecomparator_enumcomparatormode = (BlockRedstoneComparator.EnumComparatorMode) iblockdata.get(BlockRedstoneComparator.MODE); + EnumDirection enumdirection = (EnumDirection) iblockdata.get(BlockRedstoneComparator.FACING); + + return Blocks.UNPOWERED_COMPARATOR.getBlockData().set(BlockRedstoneComparator.FACING, enumdirection).set(BlockRedstoneComparator.POWERED, obool).set(BlockRedstoneComparator.MODE, blockredstonecomparator_enumcomparatormode); + } + + protected boolean l(IBlockData iblockdata) { + return this.N || ((Boolean) iblockdata.get(BlockRedstoneComparator.POWERED)).booleanValue(); + } + + protected int a(IBlockAccess iblockaccess, BlockPosition blockposition, IBlockData iblockdata) { + TileEntity tileentity = iblockaccess.getTileEntity(blockposition); + + return tileentity instanceof TileEntityComparator ? ((TileEntityComparator) tileentity).b() : 0; + } + + private int j(World world, BlockPosition blockposition, IBlockData iblockdata) { + return iblockdata.get(BlockRedstoneComparator.MODE) == BlockRedstoneComparator.EnumComparatorMode.SUBTRACT ? Math.max(this.f(world, blockposition, iblockdata) - this.c(world, blockposition, iblockdata), 0) : this.f(world, blockposition, iblockdata); + } + + protected boolean e(World world, BlockPosition blockposition, IBlockData iblockdata) { + int i = this.f(world, blockposition, iblockdata); + + if (i >= 15) { + return true; + } else if (i == 0) { + return false; + } else { + int j = this.c(world, blockposition, iblockdata); + + return j == 0 ? true : i >= j; + } + } + + protected int f(World world, BlockPosition blockposition, IBlockData iblockdata) { + int i = super.f(world, blockposition, iblockdata); + EnumDirection enumdirection = (EnumDirection) iblockdata.get(BlockRedstoneComparator.FACING); + BlockPosition blockposition1 = blockposition.shift(enumdirection); + Block block = world.getType(blockposition1).getBlock(); + + if (block.isComplexRedstone()) { + i = block.l(world, blockposition1); + } else if (i < 15 && block.isOccluding()) { + blockposition1 = blockposition1.shift(enumdirection); + block = world.getType(blockposition1).getBlock(); + if (block.isComplexRedstone()) { + i = block.l(world, blockposition1); + } else if (block.getMaterial() == Material.AIR) { + EntityItemFrame entityitemframe = this.a(world, enumdirection, blockposition1); + + if (entityitemframe != null) { + i = entityitemframe.q(); + } + } + } + + return i; + } + + private EntityItemFrame a(World world, final EnumDirection enumdirection, BlockPosition blockposition) { + List list = world.a(EntityItemFrame.class, new AxisAlignedBB((double) blockposition.getX(), (double) blockposition.getY(), (double) blockposition.getZ(), (double) (blockposition.getX() + 1), (double) (blockposition.getY() + 1), (double) (blockposition.getZ() + 1)), new Predicate() { + public boolean a(Entity entity) { + return entity != null && entity.getDirection() == enumdirection; + } + + public boolean apply(Object object) { + return this.a((Entity) object); + } + }); + + return list.size() == 1 ? (EntityItemFrame) list.get(0) : null; + } + + public boolean interact(World world, BlockPosition blockposition, IBlockData iblockdata, EntityHuman entityhuman, EnumDirection enumdirection, float f, float f1, float f2) { + if (!entityhuman.abilities.mayBuild) { + return false; + } else { + iblockdata = iblockdata.a(BlockRedstoneComparator.MODE); + world.makeSound((double) blockposition.getX() + 0.5D, (double) blockposition.getY() + 0.5D, (double) blockposition.getZ() + 0.5D, "random.click", 0.3F, iblockdata.get(BlockRedstoneComparator.MODE) == BlockRedstoneComparator.EnumComparatorMode.SUBTRACT ? 0.55F : 0.5F); + world.setTypeAndData(blockposition, iblockdata, 2); + this.k(world, blockposition, iblockdata); + return true; + } + } + + protected void g(World world, BlockPosition blockposition, IBlockData iblockdata) { + if (!world.a(blockposition, (Block) this)) { + int i = this.j(world, blockposition, iblockdata); + TileEntity tileentity = world.getTileEntity(blockposition); + int j = tileentity instanceof TileEntityComparator ? ((TileEntityComparator) tileentity).b() : 0; + + if (i != j || this.l(iblockdata) != this.e(world, blockposition, iblockdata)) { + if (this.i(world, blockposition, iblockdata)) { + world.a(blockposition, this, 2, -1); + } else { + world.a(blockposition, this, 2, 0); + } + } + + } + } + + private void k(World world, BlockPosition blockposition, IBlockData iblockdata) { + int i = this.j(world, blockposition, iblockdata); + TileEntity tileentity = world.getTileEntity(blockposition); + int j = 0; + + if (tileentity instanceof TileEntityComparator) { + TileEntityComparator tileentitycomparator = (TileEntityComparator) tileentity; + + j = tileentitycomparator.b(); + tileentitycomparator.a(i); + } + + if (j != i || iblockdata.get(BlockRedstoneComparator.MODE) == BlockRedstoneComparator.EnumComparatorMode.COMPARE) { + boolean flag = this.e(world, blockposition, iblockdata); + boolean flag1 = this.l(iblockdata); + + if (flag1 && !flag) { + world.setTypeAndData(blockposition, iblockdata.set(BlockRedstoneComparator.POWERED, Boolean.valueOf(false)), 2); + } else if (!flag1 && flag) { + world.setTypeAndData(blockposition, iblockdata.set(BlockRedstoneComparator.POWERED, Boolean.valueOf(true)), 2); + } + + this.h(world, blockposition, iblockdata); + } + + } + + public void b(World world, BlockPosition blockposition, IBlockData iblockdata, Random random) { + if (this.N) { + world.setTypeAndData(blockposition, this.k(iblockdata).set(BlockRedstoneComparator.POWERED, Boolean.valueOf(true)), 4); + } + + this.k(world, blockposition, iblockdata); + } + + public void onPlace(World world, BlockPosition blockposition, IBlockData iblockdata) { + super.onPlace(world, blockposition, iblockdata); + world.setTileEntity(blockposition, this.a(world, 0)); + } + + public void remove(World world, BlockPosition blockposition, IBlockData iblockdata) { + super.remove(world, blockposition, iblockdata); + world.t(blockposition); + this.h(world, blockposition, iblockdata); + } + + public boolean a(World world, BlockPosition blockposition, IBlockData iblockdata, int i, int j) { + super.a(world, blockposition, iblockdata, i, j); + TileEntity tileentity = world.getTileEntity(blockposition); + + return tileentity == null ? false : tileentity.c(i, j); + } + + public TileEntity a(World world, int i) { + return new TileEntityComparator(); + } + + public IBlockData fromLegacyData(int i) { + return this.getBlockData().set(BlockRedstoneComparator.FACING, EnumDirection.fromType2(i)).set(BlockRedstoneComparator.POWERED, Boolean.valueOf((i & 8) > 0)).set(BlockRedstoneComparator.MODE, (i & 4) > 0 ? BlockRedstoneComparator.EnumComparatorMode.SUBTRACT : BlockRedstoneComparator.EnumComparatorMode.COMPARE); + } + + public int toLegacyData(IBlockData iblockdata) { + byte b0 = 0; + int i = b0 | ((EnumDirection) iblockdata.get(BlockRedstoneComparator.FACING)).b(); + + if (((Boolean) iblockdata.get(BlockRedstoneComparator.POWERED)).booleanValue()) { + i |= 8; + } + + if (iblockdata.get(BlockRedstoneComparator.MODE) == BlockRedstoneComparator.EnumComparatorMode.SUBTRACT) { + i |= 4; + } + + return i; + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockRedstoneComparator.FACING, BlockRedstoneComparator.MODE, BlockRedstoneComparator.POWERED}); + } + + public IBlockData getPlacedState(World world, BlockPosition blockposition, EnumDirection enumdirection, float f, float f1, float f2, int i, EntityLiving entityliving) { + return this.getBlockData().set(BlockRedstoneComparator.FACING, entityliving.getDirection().opposite()).set(BlockRedstoneComparator.POWERED, Boolean.valueOf(false)).set(BlockRedstoneComparator.MODE, BlockRedstoneComparator.EnumComparatorMode.COMPARE); + } + + public static enum EnumComparatorMode implements INamable { + + COMPARE("compare"), SUBTRACT("subtract"); + + private final String c; + + private EnumComparatorMode(String s) { + this.c = s; + } + + public String toString() { + return this.c; + } + + public String getName() { + return this.c; + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockRedstoneLamp.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockRedstoneLamp.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockRedstoneLamp.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockRedstoneLamp.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockRedstoneOre.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockRedstoneOre.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockRedstoneOre.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockRedstoneOre.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockRedstoneTorch.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockRedstoneTorch.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockRedstoneTorch.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockRedstoneTorch.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockRedstoneWire.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockRedstoneWire.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockRedstoneWire.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockRedstoneWire.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockReed.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockReed.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockReed.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockReed.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockRepeater.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockRepeater.java new file mode 100644 index 0000000..29a2428 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockRepeater.java @@ -0,0 +1,84 @@ +package net.minecraft.server; + +import java.util.Random; + +public class BlockRepeater extends BlockDiodeAbstract { + + public static final BlockStateBoolean LOCKED = BlockStateBoolean.of("locked"); + public static final BlockStateInteger DELAY = BlockStateInteger.of("delay", 1, 4); + + protected BlockRepeater(boolean flag) { + super(flag); + this.j(this.blockStateList.getBlockData().set(BlockRepeater.FACING, EnumDirection.NORTH).set(BlockRepeater.DELAY, Integer.valueOf(1)).set(BlockRepeater.LOCKED, Boolean.valueOf(false))); + } + + public String getName() { + return LocaleI18n.get("item.diode.name"); + } + + public IBlockData updateState(IBlockData iblockdata, IBlockAccess iblockaccess, BlockPosition blockposition) { + return iblockdata.set(BlockRepeater.LOCKED, Boolean.valueOf(this.b(iblockaccess, blockposition, iblockdata))); + } + + public boolean interact(World world, BlockPosition blockposition, IBlockData iblockdata, EntityHuman entityhuman, EnumDirection enumdirection, float f, float f1, float f2) { + if (!entityhuman.abilities.mayBuild) { + return false; + } else { + world.setTypeAndData(blockposition, iblockdata.a(BlockRepeater.DELAY), 3); + return true; + } + } + + protected int d(IBlockData iblockdata) { + return ((Integer) iblockdata.get(BlockRepeater.DELAY)).intValue() * 2; + } + + protected IBlockData e(IBlockData iblockdata) { + Integer integer = (Integer) iblockdata.get(BlockRepeater.DELAY); + Boolean obool = (Boolean) iblockdata.get(BlockRepeater.LOCKED); + EnumDirection enumdirection = (EnumDirection) iblockdata.get(BlockRepeater.FACING); + + return Blocks.POWERED_REPEATER.getBlockData().set(BlockRepeater.FACING, enumdirection).set(BlockRepeater.DELAY, integer).set(BlockRepeater.LOCKED, obool); + } + + protected IBlockData k(IBlockData iblockdata) { + Integer integer = (Integer) iblockdata.get(BlockRepeater.DELAY); + Boolean obool = (Boolean) iblockdata.get(BlockRepeater.LOCKED); + EnumDirection enumdirection = (EnumDirection) iblockdata.get(BlockRepeater.FACING); + + return Blocks.UNPOWERED_REPEATER.getBlockData().set(BlockRepeater.FACING, enumdirection).set(BlockRepeater.DELAY, integer).set(BlockRepeater.LOCKED, obool); + } + + public Item getDropType(IBlockData iblockdata, Random random, int i) { + return Items.REPEATER; + } + + public boolean b(IBlockAccess iblockaccess, BlockPosition blockposition, IBlockData iblockdata) { + return this.c(iblockaccess, blockposition, iblockdata) > 0; + } + + protected boolean c(Block block) { + return d(block); + } + + public void remove(World world, BlockPosition blockposition, IBlockData iblockdata) { + super.remove(world, blockposition, iblockdata); + this.h(world, blockposition, iblockdata); + } + + public IBlockData fromLegacyData(int i) { + return this.getBlockData().set(BlockRepeater.FACING, EnumDirection.fromType2(i)).set(BlockRepeater.LOCKED, Boolean.valueOf(false)).set(BlockRepeater.DELAY, Integer.valueOf(1 + (i >> 2))); + } + + public int toLegacyData(IBlockData iblockdata) { + byte b0 = 0; + int i = b0 | ((EnumDirection) iblockdata.get(BlockRepeater.FACING)).b(); + + i |= ((Integer) iblockdata.get(BlockRepeater.DELAY)).intValue() - 1 << 2; + return i; + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockRepeater.FACING, BlockRepeater.DELAY, BlockRepeater.LOCKED}); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockRotatable.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockRotatable.java new file mode 100644 index 0000000..186eb0a --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockRotatable.java @@ -0,0 +1,14 @@ +package net.minecraft.server; + +public abstract class BlockRotatable extends Block { + + public static final BlockStateEnum AXIS = BlockStateEnum.of("axis", EnumDirection.EnumAxis.class); + + protected BlockRotatable(Material material) { + super(material, material.r()); + } + + protected BlockRotatable(Material material, MaterialMapColor materialmapcolor) { + super(material, materialmapcolor); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockSand.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockSand.java new file mode 100644 index 0000000..567c3be --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockSand.java @@ -0,0 +1,88 @@ +package net.minecraft.server; + +public class BlockSand extends BlockFalling { + + public static final BlockStateEnum VARIANT = BlockStateEnum.of("variant", BlockSand.EnumSandVariant.class); + + public BlockSand() { + this.j(this.blockStateList.getBlockData().set(BlockSand.VARIANT, BlockSand.EnumSandVariant.SAND)); + } + + public int getDropData(IBlockData iblockdata) { + return ((BlockSand.EnumSandVariant) iblockdata.get(BlockSand.VARIANT)).a(); + } + + public MaterialMapColor g(IBlockData iblockdata) { + return ((BlockSand.EnumSandVariant) iblockdata.get(BlockSand.VARIANT)).c(); + } + + public IBlockData fromLegacyData(int i) { + return this.getBlockData().set(BlockSand.VARIANT, BlockSand.EnumSandVariant.a(i)); + } + + public int toLegacyData(IBlockData iblockdata) { + return ((BlockSand.EnumSandVariant) iblockdata.get(BlockSand.VARIANT)).a(); + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockSand.VARIANT}); + } + + public static enum EnumSandVariant implements INamable { + + SAND(0, "sand", "default", MaterialMapColor.d), RED_SAND(1, "red_sand", "red", MaterialMapColor.q); + + private static final BlockSand.EnumSandVariant[] c = new BlockSand.EnumSandVariant[values().length]; + private final int d; + private final String e; + private final MaterialMapColor f; + private final String g; + + private EnumSandVariant(int i, String s, String s1, MaterialMapColor materialmapcolor) { + this.d = i; + this.e = s; + this.f = materialmapcolor; + this.g = s1; + } + + public int a() { + return this.d; + } + + public String toString() { + return this.e; + } + + public MaterialMapColor c() { + return this.f; + } + + public static BlockSand.EnumSandVariant a(int i) { + if (i < 0 || i >= BlockSand.EnumSandVariant.c.length) { + i = 0; + } + + return BlockSand.EnumSandVariant.c[i]; + } + + public String getName() { + return this.e; + } + + public String d() { + return this.g; + } + + static { + BlockSand.EnumSandVariant[] ablocksand_enumsandvariant = values(); + int i = ablocksand_enumsandvariant.length; + + for (int j = 0; j < i; ++j) { + BlockSand.EnumSandVariant blocksand_enumsandvariant = ablocksand_enumsandvariant[j]; + + BlockSand.EnumSandVariant.c[blocksand_enumsandvariant.a()] = blocksand_enumsandvariant; + } + + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockSandStone.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockSandStone.java new file mode 100644 index 0000000..c68ca87 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockSandStone.java @@ -0,0 +1,84 @@ +package net.minecraft.server; + +public class BlockSandStone extends Block { + + public static final BlockStateEnum TYPE = BlockStateEnum.of("type", BlockSandStone.EnumSandstoneVariant.class); + + public BlockSandStone() { + super(Material.STONE); + this.j(this.blockStateList.getBlockData().set(BlockSandStone.TYPE, BlockSandStone.EnumSandstoneVariant.DEFAULT)); + this.a(CreativeModeTab.b); + } + + public int getDropData(IBlockData iblockdata) { + return ((BlockSandStone.EnumSandstoneVariant) iblockdata.get(BlockSandStone.TYPE)).a(); + } + + public MaterialMapColor g(IBlockData iblockdata) { + return MaterialMapColor.d; + } + + public IBlockData fromLegacyData(int i) { + return this.getBlockData().set(BlockSandStone.TYPE, BlockSandStone.EnumSandstoneVariant.a(i)); + } + + public int toLegacyData(IBlockData iblockdata) { + return ((BlockSandStone.EnumSandstoneVariant) iblockdata.get(BlockSandStone.TYPE)).a(); + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockSandStone.TYPE}); + } + + public static enum EnumSandstoneVariant implements INamable { + + DEFAULT(0, "sandstone", "default"), CHISELED(1, "chiseled_sandstone", "chiseled"), SMOOTH(2, "smooth_sandstone", "smooth"); + + private static final BlockSandStone.EnumSandstoneVariant[] d = new BlockSandStone.EnumSandstoneVariant[values().length]; + private final int e; + private final String f; + private final String g; + + private EnumSandstoneVariant(int i, String s, String s1) { + this.e = i; + this.f = s; + this.g = s1; + } + + public int a() { + return this.e; + } + + public String toString() { + return this.f; + } + + public static BlockSandStone.EnumSandstoneVariant a(int i) { + if (i < 0 || i >= BlockSandStone.EnumSandstoneVariant.d.length) { + i = 0; + } + + return BlockSandStone.EnumSandstoneVariant.d[i]; + } + + public String getName() { + return this.f; + } + + public String c() { + return this.g; + } + + static { + BlockSandStone.EnumSandstoneVariant[] ablocksandstone_enumsandstonevariant = values(); + int i = ablocksandstone_enumsandstonevariant.length; + + for (int j = 0; j < i; ++j) { + BlockSandStone.EnumSandstoneVariant blocksandstone_enumsandstonevariant = ablocksandstone_enumsandstonevariant[j]; + + BlockSandStone.EnumSandstoneVariant.d[blocksandstone_enumsandstonevariant.a()] = blocksandstone_enumsandstonevariant; + } + + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockSapling.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockSapling.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockSapling.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockSapling.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockSeaLantern.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockSeaLantern.java new file mode 100644 index 0000000..9e7b525 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockSeaLantern.java @@ -0,0 +1,31 @@ +package net.minecraft.server; + +import java.util.Random; + +public class BlockSeaLantern extends Block { + + public BlockSeaLantern(Material material) { + super(material); + this.a(CreativeModeTab.b); + } + + public int a(Random random) { + return 2 + random.nextInt(2); + } + + public int getDropCount(int i, Random random) { + return MathHelper.clamp(this.a(random) + random.nextInt(i + 1), 1, 5); + } + + public Item getDropType(IBlockData iblockdata, Random random, int i) { + return Items.PRISMARINE_CRYSTALS; + } + + public MaterialMapColor g(IBlockData iblockdata) { + return MaterialMapColor.p; + } + + protected boolean I() { + return true; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockSign.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockSign.java new file mode 100644 index 0000000..61cad56 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockSign.java @@ -0,0 +1,56 @@ +package net.minecraft.server; + +import java.util.Random; + +public class BlockSign extends BlockContainer { + + protected BlockSign() { + super(Material.WOOD); + float f = 0.25F; + float f1 = 1.0F; + + this.a(0.5F - f, 0.0F, 0.5F - f, 0.5F + f, f1, 0.5F + f); + } + + public AxisAlignedBB a(World world, BlockPosition blockposition, IBlockData iblockdata) { + return null; + } + + public boolean d() { + return false; + } + + public boolean b(IBlockAccess iblockaccess, BlockPosition blockposition) { + return true; + } + + public boolean c() { + return false; + } + + public boolean g() { + return true; + } + + public TileEntity a(World world, int i) { + return new TileEntitySign(); + } + + public Item getDropType(IBlockData iblockdata, Random random, int i) { + return Items.SIGN; + } + + public boolean interact(World world, BlockPosition blockposition, IBlockData iblockdata, EntityHuman entityhuman, EnumDirection enumdirection, float f, float f1, float f2) { + if (world.isClientSide) { + return true; + } else { + TileEntity tileentity = world.getTileEntity(blockposition); + + return tileentity instanceof TileEntitySign ? ((TileEntitySign) tileentity).b(entityhuman) : false; + } + } + + public boolean canPlace(World world, BlockPosition blockposition) { + return !this.e(world, blockposition) && super.canPlace(world, blockposition); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockSkull.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockSkull.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockSkull.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockSkull.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockSlime.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockSlime.java new file mode 100644 index 0000000..331bafa --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockSlime.java @@ -0,0 +1,39 @@ +package net.minecraft.server; + +public class BlockSlime extends BlockHalfTransparent { + + public BlockSlime() { + super(Material.CLAY, false, MaterialMapColor.c); + this.a(CreativeModeTab.c); + this.frictionFactor = 0.8F; + } + + public void fallOn(World world, BlockPosition blockposition, Entity entity, float f) { + if (entity.isSneaking()) { + super.fallOn(world, blockposition, entity, f); + } else { + entity.e(f, 0.0F); + } + + } + + public void a(World world, Entity entity) { + if (entity.isSneaking()) { + super.a(world, entity); + } else if (entity.motY < 0.0D) { + entity.motY = -entity.motY; + } + + } + + public void a(World world, BlockPosition blockposition, Entity entity) { + if (Math.abs(entity.motY) < 0.1D && !entity.isSneaking()) { + double d0 = 0.4D + Math.abs(entity.motY) * 0.2D; + + entity.motX *= d0; + entity.motZ *= d0; + } + + super.a(world, blockposition, entity); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockSlowSand.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockSlowSand.java new file mode 100644 index 0000000..8186574 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockSlowSand.java @@ -0,0 +1,20 @@ +package net.minecraft.server; + +public class BlockSlowSand extends Block { + + public BlockSlowSand() { + super(Material.SAND, MaterialMapColor.B); + this.a(CreativeModeTab.b); + } + + public AxisAlignedBB a(World world, BlockPosition blockposition, IBlockData iblockdata) { + float f = 0.125F; + + return new AxisAlignedBB((double) blockposition.getX(), (double) blockposition.getY(), (double) blockposition.getZ(), (double) (blockposition.getX() + 1), (double) ((float) (blockposition.getY() + 1) - f), (double) (blockposition.getZ() + 1)); + } + + public void a(World world, BlockPosition blockposition, IBlockData iblockdata, Entity entity) { + entity.motX *= 0.4D; + entity.motZ *= 0.4D; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockSmoothBrick.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockSmoothBrick.java new file mode 100644 index 0000000..01fdd9d --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockSmoothBrick.java @@ -0,0 +1,84 @@ +package net.minecraft.server; + +public class BlockSmoothBrick extends Block { + + public static final BlockStateEnum VARIANT = BlockStateEnum.of("variant", BlockSmoothBrick.EnumStonebrickType.class); + public static final int b = BlockSmoothBrick.EnumStonebrickType.DEFAULT.a(); + public static final int N = BlockSmoothBrick.EnumStonebrickType.MOSSY.a(); + public static final int O = BlockSmoothBrick.EnumStonebrickType.CRACKED.a(); + public static final int P = BlockSmoothBrick.EnumStonebrickType.CHISELED.a(); + + public BlockSmoothBrick() { + super(Material.STONE); + this.j(this.blockStateList.getBlockData().set(BlockSmoothBrick.VARIANT, BlockSmoothBrick.EnumStonebrickType.DEFAULT)); + this.a(CreativeModeTab.b); + } + + public int getDropData(IBlockData iblockdata) { + return ((BlockSmoothBrick.EnumStonebrickType) iblockdata.get(BlockSmoothBrick.VARIANT)).a(); + } + + public IBlockData fromLegacyData(int i) { + return this.getBlockData().set(BlockSmoothBrick.VARIANT, BlockSmoothBrick.EnumStonebrickType.a(i)); + } + + public int toLegacyData(IBlockData iblockdata) { + return ((BlockSmoothBrick.EnumStonebrickType) iblockdata.get(BlockSmoothBrick.VARIANT)).a(); + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockSmoothBrick.VARIANT}); + } + + public static enum EnumStonebrickType implements INamable { + + DEFAULT(0, "stonebrick", "default"), MOSSY(1, "mossy_stonebrick", "mossy"), CRACKED(2, "cracked_stonebrick", "cracked"), CHISELED(3, "chiseled_stonebrick", "chiseled"); + + private static final BlockSmoothBrick.EnumStonebrickType[] e = new BlockSmoothBrick.EnumStonebrickType[values().length]; + private final int f; + private final String g; + private final String h; + + private EnumStonebrickType(int i, String s, String s1) { + this.f = i; + this.g = s; + this.h = s1; + } + + public int a() { + return this.f; + } + + public String toString() { + return this.g; + } + + public static BlockSmoothBrick.EnumStonebrickType a(int i) { + if (i < 0 || i >= BlockSmoothBrick.EnumStonebrickType.e.length) { + i = 0; + } + + return BlockSmoothBrick.EnumStonebrickType.e[i]; + } + + public String getName() { + return this.g; + } + + public String c() { + return this.h; + } + + static { + BlockSmoothBrick.EnumStonebrickType[] ablocksmoothbrick_enumstonebricktype = values(); + int i = ablocksmoothbrick_enumstonebricktype.length; + + for (int j = 0; j < i; ++j) { + BlockSmoothBrick.EnumStonebrickType blocksmoothbrick_enumstonebricktype = ablocksmoothbrick_enumstonebricktype[j]; + + BlockSmoothBrick.EnumStonebrickType.e[blocksmoothbrick_enumstonebricktype.a()] = blocksmoothbrick_enumstonebricktype; + } + + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockSnow.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockSnow.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockSnow.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockSnow.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockSnowBlock.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockSnowBlock.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockSnowBlock.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockSnowBlock.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockSoil.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockSoil.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockSoil.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockSoil.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockSponge.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockSponge.java new file mode 100644 index 0000000..de7714e --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockSponge.java @@ -0,0 +1,100 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.LinkedList; + +public class BlockSponge extends Block { + + public static final BlockStateBoolean WET = BlockStateBoolean.of("wet"); + + protected BlockSponge() { + super(Material.SPONGE); + this.j(this.blockStateList.getBlockData().set(BlockSponge.WET, Boolean.valueOf(false))); + this.a(CreativeModeTab.b); + } + + public String getName() { + return LocaleI18n.get(this.a() + ".dry.name"); + } + + public int getDropData(IBlockData iblockdata) { + return ((Boolean) iblockdata.get(BlockSponge.WET)).booleanValue() ? 1 : 0; + } + + public void onPlace(World world, BlockPosition blockposition, IBlockData iblockdata) { + this.e(world, blockposition, iblockdata); + } + + public void doPhysics(World world, BlockPosition blockposition, IBlockData iblockdata, Block block) { + this.e(world, blockposition, iblockdata); + super.doPhysics(world, blockposition, iblockdata, block); + } + + protected void e(World world, BlockPosition blockposition, IBlockData iblockdata) { + if (!((Boolean) iblockdata.get(BlockSponge.WET)).booleanValue() && this.e(world, blockposition)) { + world.setTypeAndData(blockposition, iblockdata.set(BlockSponge.WET, Boolean.valueOf(true)), 2); + world.triggerEffect(2001, blockposition, Block.getId(Blocks.WATER)); + } + + } + + private boolean e(World world, BlockPosition blockposition) { + LinkedList linkedlist = Lists.newLinkedList(); + ArrayList arraylist = Lists.newArrayList(); + + linkedlist.add(new Tuple(blockposition, Integer.valueOf(0))); + int i = 0; + + BlockPosition blockposition1; + + while (!linkedlist.isEmpty()) { + Tuple tuple = (Tuple) linkedlist.poll(); + + blockposition1 = (BlockPosition) tuple.a(); + int j = ((Integer) tuple.b()).intValue(); + EnumDirection[] aenumdirection = EnumDirection.values(); + int k = aenumdirection.length; + + for (int l = 0; l < k; ++l) { + EnumDirection enumdirection = aenumdirection[l]; + BlockPosition blockposition2 = blockposition1.shift(enumdirection); + + if (world.getType(blockposition2).getBlock().getMaterial() == Material.WATER) { + world.setTypeAndData(blockposition2, Blocks.AIR.getBlockData(), 2); + arraylist.add(blockposition2); + ++i; + if (j < 6) { + linkedlist.add(new Tuple(blockposition2, Integer.valueOf(j + 1))); + } + } + } + + if (i > 64) { + break; + } + } + + Iterator iterator = arraylist.iterator(); + + while (iterator.hasNext()) { + blockposition1 = (BlockPosition) iterator.next(); + world.applyPhysics(blockposition1, Blocks.AIR); + } + + return i > 0; + } + + public IBlockData fromLegacyData(int i) { + return this.getBlockData().set(BlockSponge.WET, Boolean.valueOf((i & 1) == 1)); + } + + public int toLegacyData(IBlockData iblockdata) { + return ((Boolean) iblockdata.get(BlockSponge.WET)).booleanValue() ? 1 : 0; + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockSponge.WET}); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockStainedGlass.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockStainedGlass.java new file mode 100644 index 0000000..c60ff35 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockStainedGlass.java @@ -0,0 +1,60 @@ +package net.minecraft.server; + +import java.util.Random; + +public class BlockStainedGlass extends BlockHalfTransparent { + + public static final BlockStateEnum COLOR = BlockStateEnum.of("color", EnumColor.class); + + public BlockStainedGlass(Material material) { + super(material, false); + this.j(this.blockStateList.getBlockData().set(BlockStainedGlass.COLOR, EnumColor.WHITE)); + this.a(CreativeModeTab.b); + } + + public int getDropData(IBlockData iblockdata) { + return ((EnumColor) iblockdata.get(BlockStainedGlass.COLOR)).getColorIndex(); + } + + public MaterialMapColor g(IBlockData iblockdata) { + return ((EnumColor) iblockdata.get(BlockStainedGlass.COLOR)).e(); + } + + public int a(Random random) { + return 0; + } + + protected boolean I() { + return true; + } + + public boolean d() { + return false; + } + + public IBlockData fromLegacyData(int i) { + return this.getBlockData().set(BlockStainedGlass.COLOR, EnumColor.fromColorIndex(i)); + } + + public void onPlace(World world, BlockPosition blockposition, IBlockData iblockdata) { + if (!world.isClientSide) { + BlockBeacon.f(world, blockposition); + } + + } + + public void remove(World world, BlockPosition blockposition, IBlockData iblockdata) { + if (!world.isClientSide) { + BlockBeacon.f(world, blockposition); + } + + } + + public int toLegacyData(IBlockData iblockdata) { + return ((EnumColor) iblockdata.get(BlockStainedGlass.COLOR)).getColorIndex(); + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockStainedGlass.COLOR}); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockStainedGlassPane.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockStainedGlassPane.java new file mode 100644 index 0000000..1d64e6e --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockStainedGlassPane.java @@ -0,0 +1,46 @@ +package net.minecraft.server; + +public class BlockStainedGlassPane extends BlockThin { + + public static final BlockStateEnum COLOR = BlockStateEnum.of("color", EnumColor.class); + + public BlockStainedGlassPane() { + super(Material.SHATTERABLE, false); + this.j(this.blockStateList.getBlockData().set(BlockStainedGlassPane.NORTH, Boolean.valueOf(false)).set(BlockStainedGlassPane.EAST, Boolean.valueOf(false)).set(BlockStainedGlassPane.SOUTH, Boolean.valueOf(false)).set(BlockStainedGlassPane.WEST, Boolean.valueOf(false)).set(BlockStainedGlassPane.COLOR, EnumColor.WHITE)); + this.a(CreativeModeTab.c); + } + + public int getDropData(IBlockData iblockdata) { + return ((EnumColor) iblockdata.get(BlockStainedGlassPane.COLOR)).getColorIndex(); + } + + public MaterialMapColor g(IBlockData iblockdata) { + return ((EnumColor) iblockdata.get(BlockStainedGlassPane.COLOR)).e(); + } + + public IBlockData fromLegacyData(int i) { + return this.getBlockData().set(BlockStainedGlassPane.COLOR, EnumColor.fromColorIndex(i)); + } + + public int toLegacyData(IBlockData iblockdata) { + return ((EnumColor) iblockdata.get(BlockStainedGlassPane.COLOR)).getColorIndex(); + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockStainedGlassPane.NORTH, BlockStainedGlassPane.EAST, BlockStainedGlassPane.WEST, BlockStainedGlassPane.SOUTH, BlockStainedGlassPane.COLOR}); + } + + public void onPlace(World world, BlockPosition blockposition, IBlockData iblockdata) { + if (!world.isClientSide) { + BlockBeacon.f(world, blockposition); + } + + } + + public void remove(World world, BlockPosition blockposition, IBlockData iblockdata) { + if (!world.isClientSide) { + BlockBeacon.f(world, blockposition); + } + + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockStairs.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockStairs.java new file mode 100644 index 0000000..09ac41b --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockStairs.java @@ -0,0 +1,595 @@ +package net.minecraft.server; + +import com.google.common.base.Predicate; +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +public class BlockStairs extends Block { + + public static final BlockStateDirection FACING = BlockStateDirection.of("facing", (Predicate) EnumDirection.EnumDirectionLimit.HORIZONTAL); + public static final BlockStateEnum HALF = BlockStateEnum.of("half", BlockStairs.EnumHalf.class); + public static final BlockStateEnum SHAPE = BlockStateEnum.of("shape", BlockStairs.EnumStairShape.class); + private static final int[][] O = new int[][] { { 4, 5}, { 5, 7}, { 6, 7}, { 4, 6}, { 0, 1}, { 1, 3}, { 2, 3}, { 0, 2}}; + private final Block P; + private final IBlockData Q; + private boolean R; + private int S; + + protected BlockStairs(IBlockData iblockdata) { + super(iblockdata.getBlock().material); + this.j(this.blockStateList.getBlockData().set(BlockStairs.FACING, EnumDirection.NORTH).set(BlockStairs.HALF, BlockStairs.EnumHalf.BOTTOM).set(BlockStairs.SHAPE, BlockStairs.EnumStairShape.STRAIGHT)); + this.P = iblockdata.getBlock(); + this.Q = iblockdata; + this.c(this.P.strength); + this.b(this.P.durability / 3.0F); + this.a(this.P.stepSound); + this.e(255); + this.a(CreativeModeTab.b); + } + + public void updateShape(IBlockAccess iblockaccess, BlockPosition blockposition) { + if (this.R) { + this.a(0.5F * (float) (this.S % 2), 0.5F * (float) (this.S / 4 % 2), 0.5F * (float) (this.S / 2 % 2), 0.5F + 0.5F * (float) (this.S % 2), 0.5F + 0.5F * (float) (this.S / 4 % 2), 0.5F + 0.5F * (float) (this.S / 2 % 2)); + } else { + this.a(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + + } + + public boolean c() { + return false; + } + + public boolean d() { + return false; + } + + public void e(IBlockAccess iblockaccess, BlockPosition blockposition) { + if (iblockaccess.getType(blockposition).get(BlockStairs.HALF) == BlockStairs.EnumHalf.TOP) { + this.a(0.0F, 0.5F, 0.0F, 1.0F, 1.0F, 1.0F); + } else { + this.a(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F); + } + + } + + public static boolean c(Block block) { + return block instanceof BlockStairs; + } + + public static boolean a(IBlockAccess iblockaccess, BlockPosition blockposition, IBlockData iblockdata) { + IBlockData iblockdata1 = iblockaccess.getType(blockposition); + Block block = iblockdata1.getBlock(); + + return c(block) && iblockdata1.get(BlockStairs.HALF) == iblockdata.get(BlockStairs.HALF) && iblockdata1.get(BlockStairs.FACING) == iblockdata.get(BlockStairs.FACING); + } + + public int f(IBlockAccess iblockaccess, BlockPosition blockposition) { + IBlockData iblockdata = iblockaccess.getType(blockposition); + EnumDirection enumdirection = (EnumDirection) iblockdata.get(BlockStairs.FACING); + BlockStairs.EnumHalf blockstairs_enumhalf = (BlockStairs.EnumHalf) iblockdata.get(BlockStairs.HALF); + boolean flag = blockstairs_enumhalf == BlockStairs.EnumHalf.TOP; + IBlockData iblockdata1; + Block block; + EnumDirection enumdirection1; + + if (enumdirection == EnumDirection.EAST) { + iblockdata1 = iblockaccess.getType(blockposition.east()); + block = iblockdata1.getBlock(); + if (c(block) && blockstairs_enumhalf == iblockdata1.get(BlockStairs.HALF)) { + enumdirection1 = (EnumDirection) iblockdata1.get(BlockStairs.FACING); + if (enumdirection1 == EnumDirection.NORTH && !a(iblockaccess, blockposition.south(), iblockdata)) { + return flag ? 1 : 2; + } + + if (enumdirection1 == EnumDirection.SOUTH && !a(iblockaccess, blockposition.north(), iblockdata)) { + return flag ? 2 : 1; + } + } + } else if (enumdirection == EnumDirection.WEST) { + iblockdata1 = iblockaccess.getType(blockposition.west()); + block = iblockdata1.getBlock(); + if (c(block) && blockstairs_enumhalf == iblockdata1.get(BlockStairs.HALF)) { + enumdirection1 = (EnumDirection) iblockdata1.get(BlockStairs.FACING); + if (enumdirection1 == EnumDirection.NORTH && !a(iblockaccess, blockposition.south(), iblockdata)) { + return flag ? 2 : 1; + } + + if (enumdirection1 == EnumDirection.SOUTH && !a(iblockaccess, blockposition.north(), iblockdata)) { + return flag ? 1 : 2; + } + } + } else if (enumdirection == EnumDirection.SOUTH) { + iblockdata1 = iblockaccess.getType(blockposition.south()); + block = iblockdata1.getBlock(); + if (c(block) && blockstairs_enumhalf == iblockdata1.get(BlockStairs.HALF)) { + enumdirection1 = (EnumDirection) iblockdata1.get(BlockStairs.FACING); + if (enumdirection1 == EnumDirection.WEST && !a(iblockaccess, blockposition.east(), iblockdata)) { + return flag ? 2 : 1; + } + + if (enumdirection1 == EnumDirection.EAST && !a(iblockaccess, blockposition.west(), iblockdata)) { + return flag ? 1 : 2; + } + } + } else if (enumdirection == EnumDirection.NORTH) { + iblockdata1 = iblockaccess.getType(blockposition.north()); + block = iblockdata1.getBlock(); + if (c(block) && blockstairs_enumhalf == iblockdata1.get(BlockStairs.HALF)) { + enumdirection1 = (EnumDirection) iblockdata1.get(BlockStairs.FACING); + if (enumdirection1 == EnumDirection.WEST && !a(iblockaccess, blockposition.east(), iblockdata)) { + return flag ? 1 : 2; + } + + if (enumdirection1 == EnumDirection.EAST && !a(iblockaccess, blockposition.west(), iblockdata)) { + return flag ? 2 : 1; + } + } + } + + return 0; + } + + public int g(IBlockAccess iblockaccess, BlockPosition blockposition) { + IBlockData iblockdata = iblockaccess.getType(blockposition); + EnumDirection enumdirection = (EnumDirection) iblockdata.get(BlockStairs.FACING); + BlockStairs.EnumHalf blockstairs_enumhalf = (BlockStairs.EnumHalf) iblockdata.get(BlockStairs.HALF); + boolean flag = blockstairs_enumhalf == BlockStairs.EnumHalf.TOP; + IBlockData iblockdata1; + Block block; + EnumDirection enumdirection1; + + if (enumdirection == EnumDirection.EAST) { + iblockdata1 = iblockaccess.getType(blockposition.west()); + block = iblockdata1.getBlock(); + if (c(block) && blockstairs_enumhalf == iblockdata1.get(BlockStairs.HALF)) { + enumdirection1 = (EnumDirection) iblockdata1.get(BlockStairs.FACING); + if (enumdirection1 == EnumDirection.NORTH && !a(iblockaccess, blockposition.north(), iblockdata)) { + return flag ? 1 : 2; + } + + if (enumdirection1 == EnumDirection.SOUTH && !a(iblockaccess, blockposition.south(), iblockdata)) { + return flag ? 2 : 1; + } + } + } else if (enumdirection == EnumDirection.WEST) { + iblockdata1 = iblockaccess.getType(blockposition.east()); + block = iblockdata1.getBlock(); + if (c(block) && blockstairs_enumhalf == iblockdata1.get(BlockStairs.HALF)) { + enumdirection1 = (EnumDirection) iblockdata1.get(BlockStairs.FACING); + if (enumdirection1 == EnumDirection.NORTH && !a(iblockaccess, blockposition.north(), iblockdata)) { + return flag ? 2 : 1; + } + + if (enumdirection1 == EnumDirection.SOUTH && !a(iblockaccess, blockposition.south(), iblockdata)) { + return flag ? 1 : 2; + } + } + } else if (enumdirection == EnumDirection.SOUTH) { + iblockdata1 = iblockaccess.getType(blockposition.north()); + block = iblockdata1.getBlock(); + if (c(block) && blockstairs_enumhalf == iblockdata1.get(BlockStairs.HALF)) { + enumdirection1 = (EnumDirection) iblockdata1.get(BlockStairs.FACING); + if (enumdirection1 == EnumDirection.WEST && !a(iblockaccess, blockposition.west(), iblockdata)) { + return flag ? 2 : 1; + } + + if (enumdirection1 == EnumDirection.EAST && !a(iblockaccess, blockposition.east(), iblockdata)) { + return flag ? 1 : 2; + } + } + } else if (enumdirection == EnumDirection.NORTH) { + iblockdata1 = iblockaccess.getType(blockposition.south()); + block = iblockdata1.getBlock(); + if (c(block) && blockstairs_enumhalf == iblockdata1.get(BlockStairs.HALF)) { + enumdirection1 = (EnumDirection) iblockdata1.get(BlockStairs.FACING); + if (enumdirection1 == EnumDirection.WEST && !a(iblockaccess, blockposition.west(), iblockdata)) { + return flag ? 1 : 2; + } + + if (enumdirection1 == EnumDirection.EAST && !a(iblockaccess, blockposition.east(), iblockdata)) { + return flag ? 2 : 1; + } + } + } + + return 0; + } + + public boolean h(IBlockAccess iblockaccess, BlockPosition blockposition) { + IBlockData iblockdata = iblockaccess.getType(blockposition); + EnumDirection enumdirection = (EnumDirection) iblockdata.get(BlockStairs.FACING); + BlockStairs.EnumHalf blockstairs_enumhalf = (BlockStairs.EnumHalf) iblockdata.get(BlockStairs.HALF); + boolean flag = blockstairs_enumhalf == BlockStairs.EnumHalf.TOP; + float f = 0.5F; + float f1 = 1.0F; + + if (flag) { + f = 0.0F; + f1 = 0.5F; + } + + float f2 = 0.0F; + float f3 = 1.0F; + float f4 = 0.0F; + float f5 = 0.5F; + boolean flag1 = true; + IBlockData iblockdata1; + Block block; + EnumDirection enumdirection1; + + if (enumdirection == EnumDirection.EAST) { + f2 = 0.5F; + f5 = 1.0F; + iblockdata1 = iblockaccess.getType(blockposition.east()); + block = iblockdata1.getBlock(); + if (c(block) && blockstairs_enumhalf == iblockdata1.get(BlockStairs.HALF)) { + enumdirection1 = (EnumDirection) iblockdata1.get(BlockStairs.FACING); + if (enumdirection1 == EnumDirection.NORTH && !a(iblockaccess, blockposition.south(), iblockdata)) { + f5 = 0.5F; + flag1 = false; + } else if (enumdirection1 == EnumDirection.SOUTH && !a(iblockaccess, blockposition.north(), iblockdata)) { + f4 = 0.5F; + flag1 = false; + } + } + } else if (enumdirection == EnumDirection.WEST) { + f3 = 0.5F; + f5 = 1.0F; + iblockdata1 = iblockaccess.getType(blockposition.west()); + block = iblockdata1.getBlock(); + if (c(block) && blockstairs_enumhalf == iblockdata1.get(BlockStairs.HALF)) { + enumdirection1 = (EnumDirection) iblockdata1.get(BlockStairs.FACING); + if (enumdirection1 == EnumDirection.NORTH && !a(iblockaccess, blockposition.south(), iblockdata)) { + f5 = 0.5F; + flag1 = false; + } else if (enumdirection1 == EnumDirection.SOUTH && !a(iblockaccess, blockposition.north(), iblockdata)) { + f4 = 0.5F; + flag1 = false; + } + } + } else if (enumdirection == EnumDirection.SOUTH) { + f4 = 0.5F; + f5 = 1.0F; + iblockdata1 = iblockaccess.getType(blockposition.south()); + block = iblockdata1.getBlock(); + if (c(block) && blockstairs_enumhalf == iblockdata1.get(BlockStairs.HALF)) { + enumdirection1 = (EnumDirection) iblockdata1.get(BlockStairs.FACING); + if (enumdirection1 == EnumDirection.WEST && !a(iblockaccess, blockposition.east(), iblockdata)) { + f3 = 0.5F; + flag1 = false; + } else if (enumdirection1 == EnumDirection.EAST && !a(iblockaccess, blockposition.west(), iblockdata)) { + f2 = 0.5F; + flag1 = false; + } + } + } else if (enumdirection == EnumDirection.NORTH) { + iblockdata1 = iblockaccess.getType(blockposition.north()); + block = iblockdata1.getBlock(); + if (c(block) && blockstairs_enumhalf == iblockdata1.get(BlockStairs.HALF)) { + enumdirection1 = (EnumDirection) iblockdata1.get(BlockStairs.FACING); + if (enumdirection1 == EnumDirection.WEST && !a(iblockaccess, blockposition.east(), iblockdata)) { + f3 = 0.5F; + flag1 = false; + } else if (enumdirection1 == EnumDirection.EAST && !a(iblockaccess, blockposition.west(), iblockdata)) { + f2 = 0.5F; + flag1 = false; + } + } + } + + this.a(f2, f, f4, f3, f1, f5); + return flag1; + } + + public boolean i(IBlockAccess iblockaccess, BlockPosition blockposition) { + IBlockData iblockdata = iblockaccess.getType(blockposition); + EnumDirection enumdirection = (EnumDirection) iblockdata.get(BlockStairs.FACING); + BlockStairs.EnumHalf blockstairs_enumhalf = (BlockStairs.EnumHalf) iblockdata.get(BlockStairs.HALF); + boolean flag = blockstairs_enumhalf == BlockStairs.EnumHalf.TOP; + float f = 0.5F; + float f1 = 1.0F; + + if (flag) { + f = 0.0F; + f1 = 0.5F; + } + + float f2 = 0.0F; + float f3 = 0.5F; + float f4 = 0.5F; + float f5 = 1.0F; + boolean flag1 = false; + IBlockData iblockdata1; + Block block; + EnumDirection enumdirection1; + + if (enumdirection == EnumDirection.EAST) { + iblockdata1 = iblockaccess.getType(blockposition.west()); + block = iblockdata1.getBlock(); + if (c(block) && blockstairs_enumhalf == iblockdata1.get(BlockStairs.HALF)) { + enumdirection1 = (EnumDirection) iblockdata1.get(BlockStairs.FACING); + if (enumdirection1 == EnumDirection.NORTH && !a(iblockaccess, blockposition.north(), iblockdata)) { + f4 = 0.0F; + f5 = 0.5F; + flag1 = true; + } else if (enumdirection1 == EnumDirection.SOUTH && !a(iblockaccess, blockposition.south(), iblockdata)) { + f4 = 0.5F; + f5 = 1.0F; + flag1 = true; + } + } + } else if (enumdirection == EnumDirection.WEST) { + iblockdata1 = iblockaccess.getType(blockposition.east()); + block = iblockdata1.getBlock(); + if (c(block) && blockstairs_enumhalf == iblockdata1.get(BlockStairs.HALF)) { + f2 = 0.5F; + f3 = 1.0F; + enumdirection1 = (EnumDirection) iblockdata1.get(BlockStairs.FACING); + if (enumdirection1 == EnumDirection.NORTH && !a(iblockaccess, blockposition.north(), iblockdata)) { + f4 = 0.0F; + f5 = 0.5F; + flag1 = true; + } else if (enumdirection1 == EnumDirection.SOUTH && !a(iblockaccess, blockposition.south(), iblockdata)) { + f4 = 0.5F; + f5 = 1.0F; + flag1 = true; + } + } + } else if (enumdirection == EnumDirection.SOUTH) { + iblockdata1 = iblockaccess.getType(blockposition.north()); + block = iblockdata1.getBlock(); + if (c(block) && blockstairs_enumhalf == iblockdata1.get(BlockStairs.HALF)) { + f4 = 0.0F; + f5 = 0.5F; + enumdirection1 = (EnumDirection) iblockdata1.get(BlockStairs.FACING); + if (enumdirection1 == EnumDirection.WEST && !a(iblockaccess, blockposition.west(), iblockdata)) { + flag1 = true; + } else if (enumdirection1 == EnumDirection.EAST && !a(iblockaccess, blockposition.east(), iblockdata)) { + f2 = 0.5F; + f3 = 1.0F; + flag1 = true; + } + } + } else if (enumdirection == EnumDirection.NORTH) { + iblockdata1 = iblockaccess.getType(blockposition.south()); + block = iblockdata1.getBlock(); + if (c(block) && blockstairs_enumhalf == iblockdata1.get(BlockStairs.HALF)) { + enumdirection1 = (EnumDirection) iblockdata1.get(BlockStairs.FACING); + if (enumdirection1 == EnumDirection.WEST && !a(iblockaccess, blockposition.west(), iblockdata)) { + flag1 = true; + } else if (enumdirection1 == EnumDirection.EAST && !a(iblockaccess, blockposition.east(), iblockdata)) { + f2 = 0.5F; + f3 = 1.0F; + flag1 = true; + } + } + } + + if (flag1) { + this.a(f2, f, f4, f3, f1, f5); + } + + return flag1; + } + + public void a(World world, BlockPosition blockposition, IBlockData iblockdata, AxisAlignedBB axisalignedbb, List list, Entity entity) { + this.e(world, blockposition); + super.a(world, blockposition, iblockdata, axisalignedbb, list, entity); + boolean flag = this.h(world, blockposition); + + super.a(world, blockposition, iblockdata, axisalignedbb, list, entity); + if (flag && this.i(world, blockposition)) { + super.a(world, blockposition, iblockdata, axisalignedbb, list, entity); + } + + this.a(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + + public void attack(World world, BlockPosition blockposition, EntityHuman entityhuman) { + this.P.attack(world, blockposition, entityhuman); + } + + public void postBreak(World world, BlockPosition blockposition, IBlockData iblockdata) { + this.P.postBreak(world, blockposition, iblockdata); + } + + public float a(Entity entity) { + return this.P.a(entity); + } + + public int a(World world) { + return this.P.a(world); + } + + public Vec3D a(World world, BlockPosition blockposition, Entity entity, Vec3D vec3d) { + return this.P.a(world, blockposition, entity, vec3d); + } + + public boolean A() { + return this.P.A(); + } + + public boolean a(IBlockData iblockdata, boolean flag) { + return this.P.a(iblockdata, flag); + } + + public boolean canPlace(World world, BlockPosition blockposition) { + return this.P.canPlace(world, blockposition); + } + + public void onPlace(World world, BlockPosition blockposition, IBlockData iblockdata) { + this.doPhysics(world, blockposition, this.Q, Blocks.AIR); + this.P.onPlace(world, blockposition, this.Q); + } + + public void remove(World world, BlockPosition blockposition, IBlockData iblockdata) { + this.P.remove(world, blockposition, this.Q); + } + + public void a(World world, BlockPosition blockposition, Entity entity) { + this.P.a(world, blockposition, entity); + } + + public void b(World world, BlockPosition blockposition, IBlockData iblockdata, Random random) { + this.P.b(world, blockposition, iblockdata, random); + } + + public boolean interact(World world, BlockPosition blockposition, IBlockData iblockdata, EntityHuman entityhuman, EnumDirection enumdirection, float f, float f1, float f2) { + return this.P.interact(world, blockposition, this.Q, entityhuman, EnumDirection.DOWN, 0.0F, 0.0F, 0.0F); + } + + public void wasExploded(World world, BlockPosition blockposition, Explosion explosion) { + this.P.wasExploded(world, blockposition, explosion); + } + + public MaterialMapColor g(IBlockData iblockdata) { + return this.P.g(this.Q); + } + + public IBlockData getPlacedState(World world, BlockPosition blockposition, EnumDirection enumdirection, float f, float f1, float f2, int i, EntityLiving entityliving) { + IBlockData iblockdata = super.getPlacedState(world, blockposition, enumdirection, f, f1, f2, i, entityliving); + + iblockdata = iblockdata.set(BlockStairs.FACING, entityliving.getDirection()).set(BlockStairs.SHAPE, BlockStairs.EnumStairShape.STRAIGHT); + return enumdirection != EnumDirection.DOWN && (enumdirection == EnumDirection.UP || (double) f1 <= 0.5D) ? iblockdata.set(BlockStairs.HALF, BlockStairs.EnumHalf.BOTTOM) : iblockdata.set(BlockStairs.HALF, BlockStairs.EnumHalf.TOP); + } + + public MovingObjectPosition a(World world, BlockPosition blockposition, Vec3D vec3d, Vec3D vec3d1) { + MovingObjectPosition[] amovingobjectposition = new MovingObjectPosition[8]; + IBlockData iblockdata = world.getType(blockposition); + int i = ((EnumDirection) iblockdata.get(BlockStairs.FACING)).b(); + boolean flag = iblockdata.get(BlockStairs.HALF) == BlockStairs.EnumHalf.TOP; + int[] aint = BlockStairs.O[i + (flag ? 4 : 0)]; + + this.R = true; + + for (int j = 0; j < 8; ++j) { + this.S = j; + if (Arrays.binarySearch(aint, j) < 0) { + amovingobjectposition[j] = super.a(world, blockposition, vec3d, vec3d1); + } + } + + int[] aint1 = aint; + int k = aint.length; + + for (int l = 0; l < k; ++l) { + int i1 = aint1[l]; + + amovingobjectposition[i1] = null; + } + + MovingObjectPosition movingobjectposition = null; + double d0 = 0.0D; + MovingObjectPosition[] amovingobjectposition1 = amovingobjectposition; + int j1 = amovingobjectposition.length; + + for (int k1 = 0; k1 < j1; ++k1) { + MovingObjectPosition movingobjectposition1 = amovingobjectposition1[k1]; + + if (movingobjectposition1 != null) { + double d1 = movingobjectposition1.pos.distanceSquared(vec3d1); + + if (d1 > d0) { + movingobjectposition = movingobjectposition1; + d0 = d1; + } + } + } + + return movingobjectposition; + } + + public IBlockData fromLegacyData(int i) { + IBlockData iblockdata = this.getBlockData().set(BlockStairs.HALF, (i & 4) > 0 ? BlockStairs.EnumHalf.TOP : BlockStairs.EnumHalf.BOTTOM); + + iblockdata = iblockdata.set(BlockStairs.FACING, EnumDirection.fromType1(5 - (i & 3))); + return iblockdata; + } + + public int toLegacyData(IBlockData iblockdata) { + int i = 0; + + if (iblockdata.get(BlockStairs.HALF) == BlockStairs.EnumHalf.TOP) { + i |= 4; + } + + i |= 5 - ((EnumDirection) iblockdata.get(BlockStairs.FACING)).a(); + return i; + } + + public IBlockData updateState(IBlockData iblockdata, IBlockAccess iblockaccess, BlockPosition blockposition) { + if (this.h(iblockaccess, blockposition)) { + switch (this.g(iblockaccess, blockposition)) { + case 0: + iblockdata = iblockdata.set(BlockStairs.SHAPE, BlockStairs.EnumStairShape.STRAIGHT); + break; + + case 1: + iblockdata = iblockdata.set(BlockStairs.SHAPE, BlockStairs.EnumStairShape.INNER_RIGHT); + break; + + case 2: + iblockdata = iblockdata.set(BlockStairs.SHAPE, BlockStairs.EnumStairShape.INNER_LEFT); + } + } else { + switch (this.f(iblockaccess, blockposition)) { + case 0: + iblockdata = iblockdata.set(BlockStairs.SHAPE, BlockStairs.EnumStairShape.STRAIGHT); + break; + + case 1: + iblockdata = iblockdata.set(BlockStairs.SHAPE, BlockStairs.EnumStairShape.OUTER_RIGHT); + break; + + case 2: + iblockdata = iblockdata.set(BlockStairs.SHAPE, BlockStairs.EnumStairShape.OUTER_LEFT); + } + } + + return iblockdata; + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockStairs.FACING, BlockStairs.HALF, BlockStairs.SHAPE}); + } + + public static enum EnumStairShape implements INamable { + + STRAIGHT("straight"), INNER_LEFT("inner_left"), INNER_RIGHT("inner_right"), OUTER_LEFT("outer_left"), OUTER_RIGHT("outer_right"); + + private final String f; + + private EnumStairShape(String s) { + this.f = s; + } + + public String toString() { + return this.f; + } + + public String getName() { + return this.f; + } + } + + public static enum EnumHalf implements INamable { + + TOP("top"), BOTTOM("bottom"); + + private final String c; + + private EnumHalf(String s) { + this.c = s; + } + + public String toString() { + return this.c; + } + + public String getName() { + return this.c; + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockState.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockState.java similarity index 88% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockState.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockState.java index 049019d..634ce1e 100644 --- a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockState.java +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockState.java @@ -1,6 +1,6 @@ package net.minecraft.server; -import com.google.common.base.Objects; +import com.google.common.base.MoreObjects; // TacoSpigot start @@ -41,7 +41,7 @@ public abstract class BlockState> implements IBlockState } public String toString() { - return Objects.toStringHelper(this).add("name", this.b).add("clazz", this.a).add("values", this.c()).toString(); + return MoreObjects.toStringHelper(this).add("name", this.b).add("clazz", this.a).add("values", this.c()).toString(); } public boolean equals(Object object) { diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockStateBoolean.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockStateBoolean.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockStateBoolean.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockStateBoolean.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockStateDirection.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockStateDirection.java new file mode 100644 index 0000000..46339a2 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockStateDirection.java @@ -0,0 +1,26 @@ +package net.minecraft.server; + +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.google.common.collect.Collections2; +import com.google.common.collect.Lists; +import java.util.Collection; + +public class BlockStateDirection extends BlockStateEnum { + + protected BlockStateDirection(String s, Collection collection) { + super(s, EnumDirection.class, collection); + } + + public static BlockStateDirection of(String s) { + return of(s, Predicates.alwaysTrue()); + } + + public static BlockStateDirection of(String s, Predicate predicate) { + return a(s, Collections2.filter(Lists.newArrayList(EnumDirection.values()), predicate)); + } + + public static BlockStateDirection a(String s, Collection collection) { + return new BlockStateDirection(s, collection); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockStateEnum.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockStateEnum.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockStateEnum.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockStateEnum.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockStateInteger.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockStateInteger.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockStateInteger.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockStateInteger.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockStateList.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockStateList.java similarity index 97% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockStateList.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockStateList.java index aae2034..031d41b 100644 --- a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockStateList.java +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockStateList.java @@ -2,7 +2,7 @@ package net.minecraft.server; import com.google.common.base.Function; import com.google.common.base.Joiner; -import com.google.common.base.Objects; +import com.google.common.base.MoreObjects; import com.google.common.collect.HashBasedTable; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; @@ -110,7 +110,7 @@ public class BlockStateList { } public String toString() { - return Objects.toStringHelper(this).add("block", Block.REGISTRY.c(this.c)).add("properties", Iterables.transform(this.d, BlockStateList.b)).toString(); + return MoreObjects.toStringHelper(this).add("block", Block.REGISTRY.c(this.c)).add("properties", Iterables.transform(this.d, BlockStateList.b)).toString(); } static class BlockData extends BlockDataAbstract { diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockStatePredicate.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockStatePredicate.java new file mode 100644 index 0000000..4c97a4c --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockStatePredicate.java @@ -0,0 +1,56 @@ +package net.minecraft.server; + +import com.google.common.base.Predicate; +import com.google.common.collect.Maps; +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; + +public class BlockStatePredicate implements Predicate { + + private final BlockStateList a; + private final Map b = Maps.newHashMap(); + + private BlockStatePredicate(BlockStateList blockstatelist) { + this.a = blockstatelist; + } + + public static BlockStatePredicate a(Block block) { + return new BlockStatePredicate(block.P()); + } + + public boolean a(IBlockData iblockdata) { + if (iblockdata != null && iblockdata.getBlock().equals(this.a.getBlock())) { + Iterator iterator = this.b.entrySet().iterator(); + + Entry entry; + Comparable comparable; + + do { + if (!iterator.hasNext()) { + return true; + } + + entry = (Entry) iterator.next(); + comparable = iblockdata.get((IBlockState) entry.getKey()); + } while (((Predicate) entry.getValue()).apply(comparable)); + + return false; + } else { + return false; + } + } + + public > BlockStatePredicate a(IBlockState iblockstate, Predicate predicate) { + if (!this.a.d().contains(iblockstate)) { + throw new IllegalArgumentException(this.a + " cannot support property " + iblockstate); + } else { + this.b.put(iblockstate, predicate); + return this; + } + } + + public boolean apply(IBlockData object) { + return this.a(object); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockStationary.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockStationary.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockStationary.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockStationary.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockStem.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockStem.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockStem.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockStem.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockStep.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockStep.java new file mode 100644 index 0000000..e69bbe0 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockStep.java @@ -0,0 +1,10 @@ +package net.minecraft.server; + +public class BlockStep extends BlockDoubleStepAbstract { + + public BlockStep() {} + + public boolean l() { + return false; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockStepAbstract.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockStepAbstract.java new file mode 100644 index 0000000..668f932 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockStepAbstract.java @@ -0,0 +1,104 @@ +package net.minecraft.server; + +import java.util.List; +import java.util.Random; + +public abstract class BlockStepAbstract extends Block { + + public static final BlockStateEnum HALF = BlockStateEnum.of("half", BlockStepAbstract.EnumSlabHalf.class); + + public BlockStepAbstract(Material material) { + super(material); + if (this.l()) { + this.r = true; + } else { + this.a(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F); + } + + this.e(255); + } + + protected boolean I() { + return false; + } + + public void updateShape(IBlockAccess iblockaccess, BlockPosition blockposition) { + if (this.l()) { + this.a(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } else { + IBlockData iblockdata = iblockaccess.getType(blockposition); + + if (iblockdata.getBlock() == this) { + if (iblockdata.get(BlockStepAbstract.HALF) == BlockStepAbstract.EnumSlabHalf.TOP) { + this.a(0.0F, 0.5F, 0.0F, 1.0F, 1.0F, 1.0F); + } else { + this.a(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F); + } + } + + } + } + + public void j() { + if (this.l()) { + this.a(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } else { + this.a(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F); + } + + } + + public void a(World world, BlockPosition blockposition, IBlockData iblockdata, AxisAlignedBB axisalignedbb, List list, Entity entity) { + this.updateShape(world, blockposition); + super.a(world, blockposition, iblockdata, axisalignedbb, list, entity); + } + + public boolean c() { + return this.l(); + } + + public IBlockData getPlacedState(World world, BlockPosition blockposition, EnumDirection enumdirection, float f, float f1, float f2, int i, EntityLiving entityliving) { + IBlockData iblockdata = super.getPlacedState(world, blockposition, enumdirection, f, f1, f2, i, entityliving).set(BlockStepAbstract.HALF, BlockStepAbstract.EnumSlabHalf.BOTTOM); + + return this.l() ? iblockdata : (enumdirection != EnumDirection.DOWN && (enumdirection == EnumDirection.UP || (double) f1 <= 0.5D) ? iblockdata : iblockdata.set(BlockStepAbstract.HALF, BlockStepAbstract.EnumSlabHalf.TOP)); + } + + public int a(Random random) { + return this.l() ? 2 : 1; + } + + public boolean d() { + return this.l(); + } + + public abstract String b(int i); + + public int getDropData(World world, BlockPosition blockposition) { + return super.getDropData(world, blockposition) & 7; + } + + public abstract boolean l(); + + public abstract IBlockState n(); + + public abstract Object a(ItemStack itemstack); + + public static enum EnumSlabHalf implements INamable { + + TOP("top"), BOTTOM("bottom"); + + private final String c; + + private EnumSlabHalf(String s) { + this.c = s; + } + + public String toString() { + return this.c; + } + + public String getName() { + return this.c; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockStone.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockStone.java new file mode 100644 index 0000000..596470f --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockStone.java @@ -0,0 +1,104 @@ +package net.minecraft.server; + +import java.util.Random; + +public class BlockStone extends Block { + + public static final BlockStateEnum VARIANT = BlockStateEnum.of("variant", BlockStone.EnumStoneVariant.class); + + public BlockStone() { + super(Material.STONE); + this.j(this.blockStateList.getBlockData().set(BlockStone.VARIANT, BlockStone.EnumStoneVariant.STONE)); + this.a(CreativeModeTab.b); + } + + public String getName() { + return LocaleI18n.get(this.a() + "." + BlockStone.EnumStoneVariant.STONE.d() + ".name"); + } + + public MaterialMapColor g(IBlockData iblockdata) { + return ((BlockStone.EnumStoneVariant) iblockdata.get(BlockStone.VARIANT)).c(); + } + + public Item getDropType(IBlockData iblockdata, Random random, int i) { + return iblockdata.get(BlockStone.VARIANT) == BlockStone.EnumStoneVariant.STONE ? Item.getItemOf(Blocks.COBBLESTONE) : Item.getItemOf(Blocks.STONE); + } + + public int getDropData(IBlockData iblockdata) { + return ((BlockStone.EnumStoneVariant) iblockdata.get(BlockStone.VARIANT)).a(); + } + + public IBlockData fromLegacyData(int i) { + return this.getBlockData().set(BlockStone.VARIANT, BlockStone.EnumStoneVariant.a(i)); + } + + public int toLegacyData(IBlockData iblockdata) { + return ((BlockStone.EnumStoneVariant) iblockdata.get(BlockStone.VARIANT)).a(); + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockStone.VARIANT}); + } + + public static enum EnumStoneVariant implements INamable { + + STONE(0, MaterialMapColor.m, "stone"), GRANITE(1, MaterialMapColor.l, "granite"), GRANITE_SMOOTH(2, MaterialMapColor.l, "smooth_granite", "graniteSmooth"), DIORITE(3, MaterialMapColor.p, "diorite"), DIORITE_SMOOTH(4, MaterialMapColor.p, "smooth_diorite", "dioriteSmooth"), ANDESITE(5, MaterialMapColor.m, "andesite"), ANDESITE_SMOOTH(6, MaterialMapColor.m, "smooth_andesite", "andesiteSmooth"); + + private static final BlockStone.EnumStoneVariant[] h = new BlockStone.EnumStoneVariant[values().length]; + private final int i; + private final String j; + private final String k; + private final MaterialMapColor l; + + private EnumStoneVariant(int i, MaterialMapColor materialmapcolor, String s) { + this(i, materialmapcolor, s, s); + } + + private EnumStoneVariant(int i, MaterialMapColor materialmapcolor, String s, String s1) { + this.i = i; + this.j = s; + this.k = s1; + this.l = materialmapcolor; + } + + public int a() { + return this.i; + } + + public MaterialMapColor c() { + return this.l; + } + + public String toString() { + return this.j; + } + + public static BlockStone.EnumStoneVariant a(int i) { + if (i < 0 || i >= BlockStone.EnumStoneVariant.h.length) { + i = 0; + } + + return BlockStone.EnumStoneVariant.h[i]; + } + + public String getName() { + return this.j; + } + + public String d() { + return this.k; + } + + static { + BlockStone.EnumStoneVariant[] ablockstone_enumstonevariant = values(); + int i = ablockstone_enumstonevariant.length; + + for (int j = 0; j < i; ++j) { + BlockStone.EnumStoneVariant blockstone_enumstonevariant = ablockstone_enumstonevariant[j]; + + BlockStone.EnumStoneVariant.h[blockstone_enumstonevariant.a()] = blockstone_enumstonevariant; + } + + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockStoneButton.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockStoneButton.java new file mode 100644 index 0000000..d07bb7c --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockStoneButton.java @@ -0,0 +1,8 @@ +package net.minecraft.server; + +public class BlockStoneButton extends BlockButtonAbstract { + + protected BlockStoneButton() { + super(false); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockStoneStep2.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockStoneStep2.java new file mode 100644 index 0000000..e1e4081 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockStoneStep2.java @@ -0,0 +1,10 @@ +package net.minecraft.server; + +public class BlockStoneStep2 extends BlockDoubleStoneStepAbstract { + + public BlockStoneStep2() {} + + public boolean l() { + return false; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockTNT.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockTNT.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockTNT.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockTNT.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockTallPlant.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockTallPlant.java new file mode 100644 index 0000000..3fd33e5 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockTallPlant.java @@ -0,0 +1,267 @@ +package net.minecraft.server; + +import java.util.Random; + +public class BlockTallPlant extends BlockPlant implements IBlockFragilePlantElement { + + public static final BlockStateEnum VARIANT = BlockStateEnum.of("variant", BlockTallPlant.EnumTallFlowerVariants.class); + public static final BlockStateEnum HALF = BlockStateEnum.of("half", BlockTallPlant.EnumTallPlantHalf.class); + public static final BlockStateEnum N = BlockDirectional.FACING; + + public BlockTallPlant() { + super(Material.REPLACEABLE_PLANT); + this.j(this.blockStateList.getBlockData().set(BlockTallPlant.VARIANT, BlockTallPlant.EnumTallFlowerVariants.SUNFLOWER).set(BlockTallPlant.HALF, BlockTallPlant.EnumTallPlantHalf.LOWER).set(BlockTallPlant.N, EnumDirection.NORTH)); + this.c(0.0F); + this.a(BlockTallPlant.h); + this.c("doublePlant"); + } + + public void updateShape(IBlockAccess iblockaccess, BlockPosition blockposition) { + this.a(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + + public BlockTallPlant.EnumTallFlowerVariants e(IBlockAccess iblockaccess, BlockPosition blockposition) { + IBlockData iblockdata = iblockaccess.getType(blockposition); + + if (iblockdata.getBlock() == this) { + iblockdata = this.updateState(iblockdata, iblockaccess, blockposition); + return (BlockTallPlant.EnumTallFlowerVariants) iblockdata.get(BlockTallPlant.VARIANT); + } else { + return BlockTallPlant.EnumTallFlowerVariants.FERN; + } + } + + public boolean canPlace(World world, BlockPosition blockposition) { + return super.canPlace(world, blockposition) && world.isEmpty(blockposition.up()); + } + + public boolean a(World world, BlockPosition blockposition) { + IBlockData iblockdata = world.getType(blockposition); + + if (iblockdata.getBlock() != this) { + return true; + } else { + BlockTallPlant.EnumTallFlowerVariants blocktallplant_enumtallflowervariants = (BlockTallPlant.EnumTallFlowerVariants) this.updateState(iblockdata, world, blockposition).get(BlockTallPlant.VARIANT); + + return blocktallplant_enumtallflowervariants == BlockTallPlant.EnumTallFlowerVariants.FERN || blocktallplant_enumtallflowervariants == BlockTallPlant.EnumTallFlowerVariants.GRASS; + } + } + + protected void e(World world, BlockPosition blockposition, IBlockData iblockdata) { + if (!this.f(world, blockposition, iblockdata)) { + boolean flag = iblockdata.get(BlockTallPlant.HALF) == BlockTallPlant.EnumTallPlantHalf.UPPER; + BlockPosition blockposition1 = flag ? blockposition : blockposition.up(); + BlockPosition blockposition2 = flag ? blockposition.down() : blockposition; + Object object = flag ? this : world.getType(blockposition1).getBlock(); + Object object1 = flag ? world.getType(blockposition2).getBlock() : this; + + if (object == this) { + world.setTypeAndData(blockposition1, Blocks.AIR.getBlockData(), 2); + } + + if (object1 == this) { + world.setTypeAndData(blockposition2, Blocks.AIR.getBlockData(), 3); + if (!flag) { + this.b(world, blockposition2, iblockdata, 0); + } + } + + } + } + + public boolean f(World world, BlockPosition blockposition, IBlockData iblockdata) { + if (iblockdata.get(BlockTallPlant.HALF) == BlockTallPlant.EnumTallPlantHalf.UPPER) { + return world.getType(blockposition.down()).getBlock() == this; + } else { + IBlockData iblockdata1 = world.getType(blockposition.up()); + + return iblockdata1.getBlock() == this && super.f(world, blockposition, iblockdata1); + } + } + + public Item getDropType(IBlockData iblockdata, Random random, int i) { + if (iblockdata.get(BlockTallPlant.HALF) == BlockTallPlant.EnumTallPlantHalf.UPPER) { + return null; + } else { + BlockTallPlant.EnumTallFlowerVariants blocktallplant_enumtallflowervariants = (BlockTallPlant.EnumTallFlowerVariants) iblockdata.get(BlockTallPlant.VARIANT); + + return blocktallplant_enumtallflowervariants == BlockTallPlant.EnumTallFlowerVariants.FERN ? null : (blocktallplant_enumtallflowervariants == BlockTallPlant.EnumTallFlowerVariants.GRASS ? (random.nextInt(8) == 0 ? Items.WHEAT_SEEDS : null) : Item.getItemOf(this)); + } + } + + public int getDropData(IBlockData iblockdata) { + return iblockdata.get(BlockTallPlant.HALF) != BlockTallPlant.EnumTallPlantHalf.UPPER && iblockdata.get(BlockTallPlant.VARIANT) != BlockTallPlant.EnumTallFlowerVariants.GRASS ? ((BlockTallPlant.EnumTallFlowerVariants) iblockdata.get(BlockTallPlant.VARIANT)).a() : 0; + } + + public void a(World world, BlockPosition blockposition, BlockTallPlant.EnumTallFlowerVariants blocktallplant_enumtallflowervariants, int i) { + world.setTypeAndData(blockposition, this.getBlockData().set(BlockTallPlant.HALF, BlockTallPlant.EnumTallPlantHalf.LOWER).set(BlockTallPlant.VARIANT, blocktallplant_enumtallflowervariants), i); + world.setTypeAndData(blockposition.up(), this.getBlockData().set(BlockTallPlant.HALF, BlockTallPlant.EnumTallPlantHalf.UPPER), i); + } + + public void postPlace(World world, BlockPosition blockposition, IBlockData iblockdata, EntityLiving entityliving, ItemStack itemstack) { + world.setTypeAndData(blockposition.up(), this.getBlockData().set(BlockTallPlant.HALF, BlockTallPlant.EnumTallPlantHalf.UPPER), 2); + } + + public void a(World world, EntityHuman entityhuman, BlockPosition blockposition, IBlockData iblockdata, TileEntity tileentity) { + if (world.isClientSide || entityhuman.bZ() == null || entityhuman.bZ().getItem() != Items.SHEARS || iblockdata.get(BlockTallPlant.HALF) != BlockTallPlant.EnumTallPlantHalf.LOWER || !this.b(world, blockposition, iblockdata, entityhuman)) { + super.a(world, entityhuman, blockposition, iblockdata, tileentity); + } + } + + public void a(World world, BlockPosition blockposition, IBlockData iblockdata, EntityHuman entityhuman) { + if (iblockdata.get(BlockTallPlant.HALF) == BlockTallPlant.EnumTallPlantHalf.UPPER) { + if (world.getType(blockposition.down()).getBlock() == this) { + if (!entityhuman.abilities.canInstantlyBuild) { + IBlockData iblockdata1 = world.getType(blockposition.down()); + BlockTallPlant.EnumTallFlowerVariants blocktallplant_enumtallflowervariants = (BlockTallPlant.EnumTallFlowerVariants) iblockdata1.get(BlockTallPlant.VARIANT); + + if (blocktallplant_enumtallflowervariants != BlockTallPlant.EnumTallFlowerVariants.FERN && blocktallplant_enumtallflowervariants != BlockTallPlant.EnumTallFlowerVariants.GRASS) { + world.setAir(blockposition.down(), true); + } else if (!world.isClientSide) { + if (entityhuman.bZ() != null && entityhuman.bZ().getItem() == Items.SHEARS) { + this.b(world, blockposition, iblockdata1, entityhuman); + world.setAir(blockposition.down()); + } else { + world.setAir(blockposition.down(), true); + } + } else { + world.setAir(blockposition.down()); + } + } else { + world.setAir(blockposition.down()); + } + } + } else if (entityhuman.abilities.canInstantlyBuild && world.getType(blockposition.up()).getBlock() == this) { + world.setTypeAndData(blockposition.up(), Blocks.AIR.getBlockData(), 2); + } + + super.a(world, blockposition, iblockdata, entityhuman); + } + + private boolean b(World world, BlockPosition blockposition, IBlockData iblockdata, EntityHuman entityhuman) { + BlockTallPlant.EnumTallFlowerVariants blocktallplant_enumtallflowervariants = (BlockTallPlant.EnumTallFlowerVariants) iblockdata.get(BlockTallPlant.VARIANT); + + if (blocktallplant_enumtallflowervariants != BlockTallPlant.EnumTallFlowerVariants.FERN && blocktallplant_enumtallflowervariants != BlockTallPlant.EnumTallFlowerVariants.GRASS) { + return false; + } else { + entityhuman.b(StatisticList.MINE_BLOCK_COUNT[Block.getId(this)]); + int i = (blocktallplant_enumtallflowervariants == BlockTallPlant.EnumTallFlowerVariants.GRASS ? BlockLongGrass.EnumTallGrassType.GRASS : BlockLongGrass.EnumTallGrassType.FERN).a(); + + a(world, blockposition, new ItemStack(Blocks.TALLGRASS, 2, i)); + return true; + } + } + + public int getDropData(World world, BlockPosition blockposition) { + return this.e(world, blockposition).a(); + } + + public boolean a(World world, BlockPosition blockposition, IBlockData iblockdata, boolean flag) { + BlockTallPlant.EnumTallFlowerVariants blocktallplant_enumtallflowervariants = this.e(world, blockposition); + + return blocktallplant_enumtallflowervariants != BlockTallPlant.EnumTallFlowerVariants.GRASS && blocktallplant_enumtallflowervariants != BlockTallPlant.EnumTallFlowerVariants.FERN; + } + + public boolean a(World world, Random random, BlockPosition blockposition, IBlockData iblockdata) { + return true; + } + + public void b(World world, Random random, BlockPosition blockposition, IBlockData iblockdata) { + a(world, blockposition, new ItemStack(this, 1, this.e(world, blockposition).a())); + } + + public IBlockData fromLegacyData(int i) { + return (i & 8) > 0 ? this.getBlockData().set(BlockTallPlant.HALF, BlockTallPlant.EnumTallPlantHalf.UPPER) : this.getBlockData().set(BlockTallPlant.HALF, BlockTallPlant.EnumTallPlantHalf.LOWER).set(BlockTallPlant.VARIANT, BlockTallPlant.EnumTallFlowerVariants.a(i & 7)); + } + + public IBlockData updateState(IBlockData iblockdata, IBlockAccess iblockaccess, BlockPosition blockposition) { + if (iblockdata.get(BlockTallPlant.HALF) == BlockTallPlant.EnumTallPlantHalf.UPPER) { + IBlockData iblockdata1 = iblockaccess.getType(blockposition.down()); + + if (iblockdata1.getBlock() == this) { + iblockdata = iblockdata.set(BlockTallPlant.VARIANT, iblockdata1.get(BlockTallPlant.VARIANT)); + } + } + + return iblockdata; + } + + public int toLegacyData(IBlockData iblockdata) { + return iblockdata.get(BlockTallPlant.HALF) == BlockTallPlant.EnumTallPlantHalf.UPPER ? 8 | ((EnumDirection) iblockdata.get(BlockTallPlant.N)).b() : ((BlockTallPlant.EnumTallFlowerVariants) iblockdata.get(BlockTallPlant.VARIANT)).a(); + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockTallPlant.HALF, BlockTallPlant.VARIANT, BlockTallPlant.N}); + } + + public static enum EnumTallPlantHalf implements INamable { + + UPPER, LOWER; + + private EnumTallPlantHalf() {} + + public String toString() { + return this.getName(); + } + + public String getName() { + return this == BlockTallPlant.EnumTallPlantHalf.UPPER ? "upper" : "lower"; + } + } + + public static enum EnumTallFlowerVariants implements INamable { + + SUNFLOWER(0, "sunflower"), SYRINGA(1, "syringa"), GRASS(2, "double_grass", "grass"), FERN(3, "double_fern", "fern"), ROSE(4, "double_rose", "rose"), PAEONIA(5, "paeonia"); + + private static final BlockTallPlant.EnumTallFlowerVariants[] g = new BlockTallPlant.EnumTallFlowerVariants[values().length]; + private final int h; + private final String i; + private final String j; + + private EnumTallFlowerVariants(int i, String s) { + this(i, s, s); + } + + private EnumTallFlowerVariants(int i, String s, String s1) { + this.h = i; + this.i = s; + this.j = s1; + } + + public int a() { + return this.h; + } + + public String toString() { + return this.i; + } + + public static BlockTallPlant.EnumTallFlowerVariants a(int i) { + if (i < 0 || i >= BlockTallPlant.EnumTallFlowerVariants.g.length) { + i = 0; + } + + return BlockTallPlant.EnumTallFlowerVariants.g[i]; + } + + public String getName() { + return this.i; + } + + public String c() { + return this.j; + } + + static { + BlockTallPlant.EnumTallFlowerVariants[] ablocktallplant_enumtallflowervariants = values(); + int i = ablocktallplant_enumtallflowervariants.length; + + for (int j = 0; j < i; ++j) { + BlockTallPlant.EnumTallFlowerVariants blocktallplant_enumtallflowervariants = ablocktallplant_enumtallflowervariants[j]; + + BlockTallPlant.EnumTallFlowerVariants.g[blocktallplant_enumtallflowervariants.a()] = blocktallplant_enumtallflowervariants; + } + + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockThin.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockThin.java new file mode 100644 index 0000000..5a89a77 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockThin.java @@ -0,0 +1,125 @@ +package net.minecraft.server; + +import java.util.List; +import java.util.Random; + +public class BlockThin extends Block { + + public static final BlockStateBoolean NORTH = BlockStateBoolean.of("north"); + public static final BlockStateBoolean EAST = BlockStateBoolean.of("east"); + public static final BlockStateBoolean SOUTH = BlockStateBoolean.of("south"); + public static final BlockStateBoolean WEST = BlockStateBoolean.of("west"); + private final boolean a; + + protected BlockThin(Material material, boolean flag) { + super(material); + this.j(this.blockStateList.getBlockData().set(BlockThin.NORTH, Boolean.valueOf(false)).set(BlockThin.EAST, Boolean.valueOf(false)).set(BlockThin.SOUTH, Boolean.valueOf(false)).set(BlockThin.WEST, Boolean.valueOf(false))); + this.a = flag; + this.a(CreativeModeTab.c); + } + + public IBlockData updateState(IBlockData iblockdata, IBlockAccess iblockaccess, BlockPosition blockposition) { + return iblockdata.set(BlockThin.NORTH, Boolean.valueOf(this.c(iblockaccess.getType(blockposition.north()).getBlock()))).set(BlockThin.SOUTH, Boolean.valueOf(this.c(iblockaccess.getType(blockposition.south()).getBlock()))).set(BlockThin.WEST, Boolean.valueOf(this.c(iblockaccess.getType(blockposition.west()).getBlock()))).set(BlockThin.EAST, Boolean.valueOf(this.c(iblockaccess.getType(blockposition.east()).getBlock()))); + } + + public Item getDropType(IBlockData iblockdata, Random random, int i) { + return !this.a ? null : super.getDropType(iblockdata, random, i); + } + + public boolean c() { + return false; + } + + public boolean d() { + return false; + } + + public void a(World world, BlockPosition blockposition, IBlockData iblockdata, AxisAlignedBB axisalignedbb, List list, Entity entity) { + boolean flag = this.c(world.getType(blockposition.north()).getBlock()); + boolean flag1 = this.c(world.getType(blockposition.south()).getBlock()); + boolean flag2 = this.c(world.getType(blockposition.west()).getBlock()); + boolean flag3 = this.c(world.getType(blockposition.east()).getBlock()); + + if ((!flag2 || !flag3) && (flag2 || flag3 || flag || flag1)) { + if (flag2) { + this.a(0.0F, 0.0F, 0.4375F, 0.5F, 1.0F, 0.5625F); + super.a(world, blockposition, iblockdata, axisalignedbb, list, entity); + } else if (flag3) { + this.a(0.5F, 0.0F, 0.4375F, 1.0F, 1.0F, 0.5625F); + super.a(world, blockposition, iblockdata, axisalignedbb, list, entity); + } + } else { + this.a(0.0F, 0.0F, 0.4375F, 1.0F, 1.0F, 0.5625F); + super.a(world, blockposition, iblockdata, axisalignedbb, list, entity); + } + + if ((!flag || !flag1) && (flag2 || flag3 || flag || flag1)) { + if (flag) { + this.a(0.4375F, 0.0F, 0.0F, 0.5625F, 1.0F, 0.5F); + super.a(world, blockposition, iblockdata, axisalignedbb, list, entity); + } else if (flag1) { + this.a(0.4375F, 0.0F, 0.5F, 0.5625F, 1.0F, 1.0F); + super.a(world, blockposition, iblockdata, axisalignedbb, list, entity); + } + } else { + this.a(0.4375F, 0.0F, 0.0F, 0.5625F, 1.0F, 1.0F); + super.a(world, blockposition, iblockdata, axisalignedbb, list, entity); + } + + } + + public void j() { + this.a(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + + public void updateShape(IBlockAccess iblockaccess, BlockPosition blockposition) { + float f = 0.4375F; + float f1 = 0.5625F; + float f2 = 0.4375F; + float f3 = 0.5625F; + boolean flag = this.c(iblockaccess.getType(blockposition.north()).getBlock()); + boolean flag1 = this.c(iblockaccess.getType(blockposition.south()).getBlock()); + boolean flag2 = this.c(iblockaccess.getType(blockposition.west()).getBlock()); + boolean flag3 = this.c(iblockaccess.getType(blockposition.east()).getBlock()); + + if ((!flag2 || !flag3) && (flag2 || flag3 || flag || flag1)) { + if (flag2) { + f = 0.0F; + } else if (flag3) { + f1 = 1.0F; + } + } else { + f = 0.0F; + f1 = 1.0F; + } + + if ((!flag || !flag1) && (flag2 || flag3 || flag || flag1)) { + if (flag) { + f2 = 0.0F; + } else if (flag1) { + f3 = 1.0F; + } + } else { + f2 = 0.0F; + f3 = 1.0F; + } + + this.a(f, 0.0F, f2, f1, 1.0F, f3); + } + + public final boolean c(Block block) { + return block.o() || block == this || block == Blocks.GLASS || block == Blocks.STAINED_GLASS || block == Blocks.STAINED_GLASS_PANE || block instanceof BlockThin; + } + + protected boolean I() { + return true; + } + + public int toLegacyData(IBlockData iblockdata) { + return 0; + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockThin.NORTH, BlockThin.EAST, BlockThin.WEST, BlockThin.SOUTH}); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockTorch.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockTorch.java new file mode 100644 index 0000000..db8a918 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockTorch.java @@ -0,0 +1,261 @@ +package net.minecraft.server; + +import com.google.common.base.Predicate; +import java.util.Iterator; + +public class BlockTorch extends Block { + + public static final BlockStateDirection FACING = BlockStateDirection.of("facing", new Predicate() { + public boolean a(EnumDirection enumdirection) { + return enumdirection != EnumDirection.DOWN; + } + + public boolean apply(Object object) { + return this.a((EnumDirection) object); + } + }); + + protected BlockTorch() { + super(Material.ORIENTABLE); + this.j(this.blockStateList.getBlockData().set(BlockTorch.FACING, EnumDirection.UP)); + this.a(true); + this.a(CreativeModeTab.c); + } + + public AxisAlignedBB a(World world, BlockPosition blockposition, IBlockData iblockdata) { + return null; + } + + public boolean c() { + return false; + } + + public boolean d() { + return false; + } + + private boolean e(World world, BlockPosition blockposition) { + if (World.a((IBlockAccess) world, blockposition)) { + return true; + } else { + Block block = world.getType(blockposition).getBlock(); + + return block instanceof BlockFence || block == Blocks.GLASS || block == Blocks.COBBLESTONE_WALL || block == Blocks.STAINED_GLASS; + } + } + + public boolean canPlace(World world, BlockPosition blockposition) { + Iterator iterator = BlockTorch.FACING.c().iterator(); + + EnumDirection enumdirection; + + do { + if (!iterator.hasNext()) { + return false; + } + + enumdirection = (EnumDirection) iterator.next(); + } while (!this.a(world, blockposition, enumdirection)); + + return true; + } + + private boolean a(World world, BlockPosition blockposition, EnumDirection enumdirection) { + BlockPosition blockposition1 = blockposition.shift(enumdirection.opposite()); + boolean flag = enumdirection.k().c(); + + return flag && world.d(blockposition1, true) || enumdirection.equals(EnumDirection.UP) && this.e(world, blockposition1); + } + + public IBlockData getPlacedState(World world, BlockPosition blockposition, EnumDirection enumdirection, float f, float f1, float f2, int i, EntityLiving entityliving) { + if (this.a(world, blockposition, enumdirection)) { + return this.getBlockData().set(BlockTorch.FACING, enumdirection); + } else { + Iterator iterator = EnumDirection.EnumDirectionLimit.HORIZONTAL.iterator(); + + EnumDirection enumdirection1; + + do { + if (!iterator.hasNext()) { + return this.getBlockData(); + } + + enumdirection1 = (EnumDirection) iterator.next(); + } while (!world.d(blockposition.shift(enumdirection1.opposite()), true)); + + return this.getBlockData().set(BlockTorch.FACING, enumdirection1); + } + } + + public void onPlace(World world, BlockPosition blockposition, IBlockData iblockdata) { + this.f(world, blockposition, iblockdata); + } + + public void doPhysics(World world, BlockPosition blockposition, IBlockData iblockdata, Block block) { + this.e(world, blockposition, iblockdata); + } + + protected boolean e(World world, BlockPosition blockposition, IBlockData iblockdata) { + if (!this.f(world, blockposition, iblockdata)) { + return true; + } else { + EnumDirection enumdirection = (EnumDirection) iblockdata.get(BlockTorch.FACING); + EnumDirection.EnumAxis enumdirection_enumaxis = enumdirection.k(); + EnumDirection enumdirection1 = enumdirection.opposite(); + boolean flag = false; + + if (enumdirection_enumaxis.c() && !world.d(blockposition.shift(enumdirection1), true)) { + flag = true; + } else if (enumdirection_enumaxis.b() && !this.e(world, blockposition.shift(enumdirection1))) { + flag = true; + } + + if (flag) { + this.b(world, blockposition, iblockdata, 0); + world.setAir(blockposition); + return true; + } else { + return false; + } + } + } + + protected boolean f(World world, BlockPosition blockposition, IBlockData iblockdata) { + if (iblockdata.getBlock() == this && this.a(world, blockposition, (EnumDirection) iblockdata.get(BlockTorch.FACING))) { + return true; + } else { + if (world.getType(blockposition).getBlock() == this) { + this.b(world, blockposition, iblockdata, 0); + world.setAir(blockposition); + } + + return false; + } + } + + public MovingObjectPosition a(World world, BlockPosition blockposition, Vec3D vec3d, Vec3D vec3d1) { + EnumDirection enumdirection = (EnumDirection) world.getType(blockposition).get(BlockTorch.FACING); + float f = 0.15F; + + if (enumdirection == EnumDirection.EAST) { + this.a(0.0F, 0.2F, 0.5F - f, f * 2.0F, 0.8F, 0.5F + f); + } else if (enumdirection == EnumDirection.WEST) { + this.a(1.0F - f * 2.0F, 0.2F, 0.5F - f, 1.0F, 0.8F, 0.5F + f); + } else if (enumdirection == EnumDirection.SOUTH) { + this.a(0.5F - f, 0.2F, 0.0F, 0.5F + f, 0.8F, f * 2.0F); + } else if (enumdirection == EnumDirection.NORTH) { + this.a(0.5F - f, 0.2F, 1.0F - f * 2.0F, 0.5F + f, 0.8F, 1.0F); + } else { + f = 0.1F; + this.a(0.5F - f, 0.0F, 0.5F - f, 0.5F + f, 0.6F, 0.5F + f); + } + + return super.a(world, blockposition, vec3d, vec3d1); + } + + public IBlockData fromLegacyData(int i) { + IBlockData iblockdata = this.getBlockData(); + + switch (i) { + case 1: + iblockdata = iblockdata.set(BlockTorch.FACING, EnumDirection.EAST); + break; + + case 2: + iblockdata = iblockdata.set(BlockTorch.FACING, EnumDirection.WEST); + break; + + case 3: + iblockdata = iblockdata.set(BlockTorch.FACING, EnumDirection.SOUTH); + break; + + case 4: + iblockdata = iblockdata.set(BlockTorch.FACING, EnumDirection.NORTH); + break; + + case 5: + default: + iblockdata = iblockdata.set(BlockTorch.FACING, EnumDirection.UP); + } + + return iblockdata; + } + + public int toLegacyData(IBlockData iblockdata) { + byte b0 = 0; + int i; + + switch (BlockTorch.SyntheticClass_1.a[((EnumDirection) iblockdata.get(BlockTorch.FACING)).ordinal()]) { + case 1: + i = b0 | 1; + break; + + case 2: + i = b0 | 2; + break; + + case 3: + i = b0 | 3; + break; + + case 4: + i = b0 | 4; + break; + + case 5: + case 6: + default: + i = b0 | 5; + } + + return i; + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockTorch.FACING}); + } + + static class SyntheticClass_1 { + + static final int[] a = new int[EnumDirection.values().length]; + + static { + try { + BlockTorch.SyntheticClass_1.a[EnumDirection.EAST.ordinal()] = 1; + } catch (NoSuchFieldError nosuchfielderror) { + ; + } + + try { + BlockTorch.SyntheticClass_1.a[EnumDirection.WEST.ordinal()] = 2; + } catch (NoSuchFieldError nosuchfielderror1) { + ; + } + + try { + BlockTorch.SyntheticClass_1.a[EnumDirection.SOUTH.ordinal()] = 3; + } catch (NoSuchFieldError nosuchfielderror2) { + ; + } + + try { + BlockTorch.SyntheticClass_1.a[EnumDirection.NORTH.ordinal()] = 4; + } catch (NoSuchFieldError nosuchfielderror3) { + ; + } + + try { + BlockTorch.SyntheticClass_1.a[EnumDirection.DOWN.ordinal()] = 5; + } catch (NoSuchFieldError nosuchfielderror4) { + ; + } + + try { + BlockTorch.SyntheticClass_1.a[EnumDirection.UP.ordinal()] = 6; + } catch (NoSuchFieldError nosuchfielderror5) { + ; + } + + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockTransparent.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockTransparent.java new file mode 100644 index 0000000..eb8339f --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockTransparent.java @@ -0,0 +1,15 @@ +package net.minecraft.server; + +public class BlockTransparent extends Block { + + protected boolean R; + + protected BlockTransparent(Material material, boolean flag) { + super(material); + this.R = flag; + } + + public boolean c() { + return false; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockTrapdoor.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockTrapdoor.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockTrapdoor.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockTrapdoor.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockTripwire.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockTripwire.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockTripwire.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockTripwire.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockTripwireHook.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockTripwireHook.java similarity index 98% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockTripwireHook.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockTripwireHook.java index 5129862..ad6f39a 100644 --- a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockTripwireHook.java +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockTripwireHook.java @@ -1,7 +1,7 @@ package net.minecraft.server; +import com.google.common.base.MoreObjects; import com.google.common.base.Objects; -import com.google.common.base.Predicate; import java.util.Iterator; import java.util.Random; @@ -113,7 +113,7 @@ public class BlockTripwireHook extends Block { flag5 = false; } else { if (k == i) { - iblockdata2 = Objects.firstNonNull(iblockdata1, iblockdata2); + iblockdata2 = MoreObjects.firstNonNull(iblockdata1, iblockdata2); } boolean flag7 = !(Boolean) iblockdata2.get(BlockTripwire.DISARMED); diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/BlockVine.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockVine.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/BlockVine.java rename to eSpigot-Server/src/main/java/net/minecraft/server/BlockVine.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockWallSign.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockWallSign.java new file mode 100644 index 0000000..4fcc357 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockWallSign.java @@ -0,0 +1,101 @@ +package net.minecraft.server; + +import com.google.common.base.Predicate; + +public class BlockWallSign extends BlockSign { + + public static final BlockStateDirection FACING = BlockStateDirection.of("facing", (Predicate) EnumDirection.EnumDirectionLimit.HORIZONTAL); + + public BlockWallSign() { + this.j(this.blockStateList.getBlockData().set(BlockWallSign.FACING, EnumDirection.NORTH)); + } + + public void updateShape(IBlockAccess iblockaccess, BlockPosition blockposition) { + EnumDirection enumdirection = (EnumDirection) iblockaccess.getType(blockposition).get(BlockWallSign.FACING); + float f = 0.28125F; + float f1 = 0.78125F; + float f2 = 0.0F; + float f3 = 1.0F; + float f4 = 0.125F; + + this.a(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + switch (BlockWallSign.SyntheticClass_1.a[enumdirection.ordinal()]) { + case 1: + this.a(f2, f, 1.0F - f4, f3, f1, 1.0F); + break; + + case 2: + this.a(f2, f, 0.0F, f3, f1, f4); + break; + + case 3: + this.a(1.0F - f4, f, f2, 1.0F, f1, f3); + break; + + case 4: + this.a(0.0F, f, f2, f4, f1, f3); + } + + } + + public void doPhysics(World world, BlockPosition blockposition, IBlockData iblockdata, Block block) { + EnumDirection enumdirection = (EnumDirection) iblockdata.get(BlockWallSign.FACING); + + if (!world.getType(blockposition.shift(enumdirection.opposite())).getBlock().getMaterial().isBuildable()) { + this.b(world, blockposition, iblockdata, 0); + world.setAir(blockposition); + } + + super.doPhysics(world, blockposition, iblockdata, block); + } + + public IBlockData fromLegacyData(int i) { + EnumDirection enumdirection = EnumDirection.fromType1(i); + + if (enumdirection.k() == EnumDirection.EnumAxis.Y) { + enumdirection = EnumDirection.NORTH; + } + + return this.getBlockData().set(BlockWallSign.FACING, enumdirection); + } + + public int toLegacyData(IBlockData iblockdata) { + return ((EnumDirection) iblockdata.get(BlockWallSign.FACING)).a(); + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockWallSign.FACING}); + } + + static class SyntheticClass_1 { + + static final int[] a = new int[EnumDirection.values().length]; + + static { + try { + BlockWallSign.SyntheticClass_1.a[EnumDirection.NORTH.ordinal()] = 1; + } catch (NoSuchFieldError nosuchfielderror) { + ; + } + + try { + BlockWallSign.SyntheticClass_1.a[EnumDirection.SOUTH.ordinal()] = 2; + } catch (NoSuchFieldError nosuchfielderror1) { + ; + } + + try { + BlockWallSign.SyntheticClass_1.a[EnumDirection.WEST.ordinal()] = 3; + } catch (NoSuchFieldError nosuchfielderror2) { + ; + } + + try { + BlockWallSign.SyntheticClass_1.a[EnumDirection.EAST.ordinal()] = 4; + } catch (NoSuchFieldError nosuchfielderror3) { + ; + } + + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockWaterLily.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockWaterLily.java new file mode 100644 index 0000000..be856db --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockWaterLily.java @@ -0,0 +1,43 @@ +package net.minecraft.server; + +import java.util.List; + +public class BlockWaterLily extends BlockPlant { + + protected BlockWaterLily() { + float f = 0.5F; + float f1 = 0.015625F; + + this.a(0.5F - f, 0.0F, 0.5F - f, 0.5F + f, f1, 0.5F + f); + this.a(CreativeModeTab.c); + } + + public void a(World world, BlockPosition blockposition, IBlockData iblockdata, AxisAlignedBB axisalignedbb, List list, Entity entity) { + if (entity == null || !(entity instanceof EntityBoat)) { + super.a(world, blockposition, iblockdata, axisalignedbb, list, entity); + } + + } + + public AxisAlignedBB a(World world, BlockPosition blockposition, IBlockData iblockdata) { + return new AxisAlignedBB((double) blockposition.getX() + this.minX, (double) blockposition.getY() + this.minY, (double) blockposition.getZ() + this.minZ, (double) blockposition.getX() + this.maxX, (double) blockposition.getY() + this.maxY, (double) blockposition.getZ() + this.maxZ); + } + + protected boolean c(Block block) { + return block == Blocks.WATER; + } + + public boolean f(World world, BlockPosition blockposition, IBlockData iblockdata) { + if (blockposition.getY() >= 0 && blockposition.getY() < 256) { + IBlockData iblockdata1 = world.getType(blockposition.down()); + + return iblockdata1.getBlock().getMaterial() == Material.WATER && ((Integer) iblockdata1.get(BlockFluids.LEVEL)).intValue() == 0; + } else { + return false; + } + } + + public int toLegacyData(IBlockData iblockdata) { + return 0; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockWeb.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockWeb.java new file mode 100644 index 0000000..244e633 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockWeb.java @@ -0,0 +1,35 @@ +package net.minecraft.server; + +import java.util.Random; + +public class BlockWeb extends Block { + + public BlockWeb() { + super(Material.WEB); + this.a(CreativeModeTab.c); + } + + public void a(World world, BlockPosition blockposition, IBlockData iblockdata, Entity entity) { + entity.aA(); + } + + public boolean c() { + return false; + } + + public AxisAlignedBB a(World world, BlockPosition blockposition, IBlockData iblockdata) { + return null; + } + + public boolean d() { + return false; + } + + public Item getDropType(IBlockData iblockdata, Random random, int i) { + return Items.STRING; + } + + protected boolean I() { + return true; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockWood.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockWood.java new file mode 100644 index 0000000..4d87f32 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockWood.java @@ -0,0 +1,94 @@ +package net.minecraft.server; + +public class BlockWood extends Block { + + public static final BlockStateEnum VARIANT = BlockStateEnum.of("variant", BlockWood.EnumLogVariant.class); + + public BlockWood() { + super(Material.WOOD); + this.j(this.blockStateList.getBlockData().set(BlockWood.VARIANT, BlockWood.EnumLogVariant.OAK)); + this.a(CreativeModeTab.b); + } + + public int getDropData(IBlockData iblockdata) { + return ((BlockWood.EnumLogVariant) iblockdata.get(BlockWood.VARIANT)).a(); + } + + public IBlockData fromLegacyData(int i) { + return this.getBlockData().set(BlockWood.VARIANT, BlockWood.EnumLogVariant.a(i)); + } + + public MaterialMapColor g(IBlockData iblockdata) { + return ((BlockWood.EnumLogVariant) iblockdata.get(BlockWood.VARIANT)).c(); + } + + public int toLegacyData(IBlockData iblockdata) { + return ((BlockWood.EnumLogVariant) iblockdata.get(BlockWood.VARIANT)).a(); + } + + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockWood.VARIANT}); + } + + public static enum EnumLogVariant implements INamable { + + OAK(0, "oak", MaterialMapColor.o), SPRUCE(1, "spruce", MaterialMapColor.J), BIRCH(2, "birch", MaterialMapColor.d), JUNGLE(3, "jungle", MaterialMapColor.l), ACACIA(4, "acacia", MaterialMapColor.q), DARK_OAK(5, "dark_oak", "big_oak", MaterialMapColor.B); + + private static final BlockWood.EnumLogVariant[] g = new BlockWood.EnumLogVariant[values().length]; + private final int h; + private final String i; + private final String j; + private final MaterialMapColor k; + + private EnumLogVariant(int i, String s, MaterialMapColor materialmapcolor) { + this(i, s, s, materialmapcolor); + } + + private EnumLogVariant(int i, String s, String s1, MaterialMapColor materialmapcolor) { + this.h = i; + this.i = s; + this.j = s1; + this.k = materialmapcolor; + } + + public int a() { + return this.h; + } + + public MaterialMapColor c() { + return this.k; + } + + public String toString() { + return this.i; + } + + public static BlockWood.EnumLogVariant a(int i) { + if (i < 0 || i >= BlockWood.EnumLogVariant.g.length) { + i = 0; + } + + return BlockWood.EnumLogVariant.g[i]; + } + + public String getName() { + return this.i; + } + + public String d() { + return this.j; + } + + static { + BlockWood.EnumLogVariant[] ablockwood_enumlogvariant = values(); + int i = ablockwood_enumlogvariant.length; + + for (int j = 0; j < i; ++j) { + BlockWood.EnumLogVariant blockwood_enumlogvariant = ablockwood_enumlogvariant[j]; + + BlockWood.EnumLogVariant.g[blockwood_enumlogvariant.a()] = blockwood_enumlogvariant; + } + + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockWoodButton.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockWoodButton.java new file mode 100644 index 0000000..e62cc86 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockWoodButton.java @@ -0,0 +1,8 @@ +package net.minecraft.server; + +public class BlockWoodButton extends BlockButtonAbstract { + + protected BlockWoodButton() { + super(true); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockWoodStep.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockWoodStep.java new file mode 100644 index 0000000..9b4ad90 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockWoodStep.java @@ -0,0 +1,10 @@ +package net.minecraft.server; + +public class BlockWoodStep extends BlockWoodenStep { + + public BlockWoodStep() {} + + public boolean l() { + return false; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockWoodenStep.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockWoodenStep.java new file mode 100644 index 0000000..d90f3be --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockWoodenStep.java @@ -0,0 +1,69 @@ +package net.minecraft.server; + +import java.util.Random; + +public abstract class BlockWoodenStep extends BlockStepAbstract { + + public static final BlockStateEnum VARIANT = BlockStateEnum.of("variant", BlockWood.EnumLogVariant.class); + + public BlockWoodenStep() { + super(Material.WOOD); + IBlockData iblockdata = this.blockStateList.getBlockData(); + + if (!this.l()) { + iblockdata = iblockdata.set(BlockWoodenStep.HALF, BlockStepAbstract.EnumSlabHalf.BOTTOM); + } + + this.j(iblockdata.set(BlockWoodenStep.VARIANT, BlockWood.EnumLogVariant.OAK)); + this.a(CreativeModeTab.b); + } + + public MaterialMapColor g(IBlockData iblockdata) { + return ((BlockWood.EnumLogVariant) iblockdata.get(BlockWoodenStep.VARIANT)).c(); + } + + public Item getDropType(IBlockData iblockdata, Random random, int i) { + return Item.getItemOf(Blocks.WOODEN_SLAB); + } + + public String b(int i) { + return super.a() + "." + BlockWood.EnumLogVariant.a(i).d(); + } + + public IBlockState n() { + return BlockWoodenStep.VARIANT; + } + + public Object a(ItemStack itemstack) { + return BlockWood.EnumLogVariant.a(itemstack.getData() & 7); + } + + public IBlockData fromLegacyData(int i) { + IBlockData iblockdata = this.getBlockData().set(BlockWoodenStep.VARIANT, BlockWood.EnumLogVariant.a(i & 7)); + + if (!this.l()) { + iblockdata = iblockdata.set(BlockWoodenStep.HALF, (i & 8) == 0 ? BlockStepAbstract.EnumSlabHalf.BOTTOM : BlockStepAbstract.EnumSlabHalf.TOP); + } + + return iblockdata; + } + + public int toLegacyData(IBlockData iblockdata) { + byte b0 = 0; + int i = b0 | ((BlockWood.EnumLogVariant) iblockdata.get(BlockWoodenStep.VARIANT)).a(); + + if (!this.l() && iblockdata.get(BlockWoodenStep.HALF) == BlockStepAbstract.EnumSlabHalf.TOP) { + i |= 8; + } + + return i; + } + + protected BlockStateList getStateList() { + return this.l() ? new BlockStateList(this, new IBlockState[] { BlockWoodenStep.VARIANT}) : new BlockStateList(this, new IBlockState[] { BlockWoodenStep.HALF, BlockWoodenStep.VARIANT}); + } + + public int getDropData(IBlockData iblockdata) { + return ((BlockWood.EnumLogVariant) iblockdata.get(BlockWoodenStep.VARIANT)).a(); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockWorkbench.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockWorkbench.java new file mode 100644 index 0000000..dc3ed8a --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockWorkbench.java @@ -0,0 +1,50 @@ +package net.minecraft.server; + +public class BlockWorkbench extends Block { + + protected BlockWorkbench() { + super(Material.WOOD); + this.a(CreativeModeTab.c); + } + + public boolean interact(World world, BlockPosition blockposition, IBlockData iblockdata, EntityHuman entityhuman, EnumDirection enumdirection, float f, float f1, float f2) { + if (world.isClientSide) { + return true; + } else { + entityhuman.openTileEntity(new BlockWorkbench.TileEntityContainerWorkbench(world, blockposition)); + entityhuman.b(StatisticList.Z); + return true; + } + } + + public static class TileEntityContainerWorkbench implements ITileEntityContainer { + + private final World a; + private final BlockPosition b; + + public TileEntityContainerWorkbench(World world, BlockPosition blockposition) { + this.a = world; + this.b = blockposition; + } + + public String getName() { + return null; + } + + public boolean hasCustomName() { + return false; + } + + public IChatBaseComponent getScoreboardDisplayName() { + return new ChatMessage(Blocks.CRAFTING_TABLE.a() + ".name", new Object[0]); + } + + public Container createContainer(PlayerInventory playerinventory, EntityHuman entityhuman) { + return new ContainerWorkbench(playerinventory, this.a, this.b); + } + + public String getContainerName() { + return "minecraft:crafting_table"; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/BlockYellowFlowers.java b/eSpigot-Server/src/main/java/net/minecraft/server/BlockYellowFlowers.java new file mode 100644 index 0000000..50c4009 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/BlockYellowFlowers.java @@ -0,0 +1,10 @@ +package net.minecraft.server; + +public class BlockYellowFlowers extends BlockFlowers { + + public BlockYellowFlowers() {} + + public BlockFlowers.EnumFlowerType l() { + return BlockFlowers.EnumFlowerType.YELLOW; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/Blocks.java b/eSpigot-Server/src/main/java/net/minecraft/server/Blocks.java new file mode 100644 index 0000000..58d86bb --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/Blocks.java @@ -0,0 +1,412 @@ +package net.minecraft.server; + +public class Blocks { + + public static final Block AIR; + public static final Block STONE; + public static final BlockGrass GRASS; + public static final Block DIRT; + public static final Block COBBLESTONE; + public static final Block PLANKS; + public static final Block SAPLING; + public static final Block BEDROCK; + public static final BlockFlowing FLOWING_WATER; + public static final BlockStationary WATER; + public static final BlockFlowing FLOWING_LAVA; + public static final BlockStationary LAVA; + public static final BlockSand SAND; + public static final Block GRAVEL; + public static final Block GOLD_ORE; + public static final Block IRON_ORE; + public static final Block COAL_ORE; + public static final Block LOG; + public static final Block LOG2; + public static final BlockLeaves LEAVES; + public static final BlockLeaves LEAVES2; + public static final Block SPONGE; + public static final Block GLASS; + public static final Block LAPIS_ORE; + public static final Block LAPIS_BLOCK; + public static final Block DISPENSER; + public static final Block SANDSTONE; + public static final Block NOTEBLOCK; + public static final Block BED; + public static final Block GOLDEN_RAIL; + public static final Block DETECTOR_RAIL; + public static final BlockPiston STICKY_PISTON; + public static final Block WEB; + public static final BlockLongGrass TALLGRASS; + public static final BlockDeadBush DEADBUSH; + public static final BlockPiston PISTON; + public static final BlockPistonExtension PISTON_HEAD; + public static final Block WOOL; + public static final BlockPistonMoving PISTON_EXTENSION; + public static final BlockFlowers YELLOW_FLOWER; + public static final BlockFlowers RED_FLOWER; + public static final BlockPlant BROWN_MUSHROOM; + public static final BlockPlant RED_MUSHROOM; + public static final Block GOLD_BLOCK; + public static final Block IRON_BLOCK; + public static final BlockStepAbstract DOUBLE_STONE_SLAB; + public static final BlockStepAbstract STONE_SLAB; + public static final Block BRICK_BLOCK; + public static final Block TNT; + public static final Block BOOKSHELF; + public static final Block MOSSY_COBBLESTONE; + public static final Block OBSIDIAN; + public static final Block TORCH; + public static final BlockFire FIRE; + public static final Block MOB_SPAWNER; + public static final Block OAK_STAIRS; + public static final BlockChest CHEST; + public static final BlockRedstoneWire REDSTONE_WIRE; + public static final Block DIAMOND_ORE; + public static final Block DIAMOND_BLOCK; + public static final Block CRAFTING_TABLE; + public static final Block WHEAT; + public static final Block FARMLAND; + public static final Block FURNACE; + public static final Block LIT_FURNACE; + public static final Block STANDING_SIGN; + public static final Block WOODEN_DOOR; + public static final Block SPRUCE_DOOR; + public static final Block BIRCH_DOOR; + public static final Block JUNGLE_DOOR; + public static final Block ACACIA_DOOR; + public static final Block DARK_OAK_DOOR; + public static final Block LADDER; + public static final Block RAIL; + public static final Block STONE_STAIRS; + public static final Block WALL_SIGN; + public static final Block LEVER; + public static final Block STONE_PRESSURE_PLATE; + public static final Block IRON_DOOR; + public static final Block WOODEN_PRESSURE_PLATE; + public static final Block REDSTONE_ORE; + public static final Block LIT_REDSTONE_ORE; + public static final Block UNLIT_REDSTONE_TORCH; + public static final Block REDSTONE_TORCH; + public static final Block STONE_BUTTON; + public static final Block SNOW_LAYER; + public static final Block ICE; + public static final Block SNOW; + public static final BlockCactus CACTUS; + public static final Block CLAY; + public static final BlockReed REEDS; + public static final Block JUKEBOX; + public static final Block FENCE; + public static final Block SPRUCE_FENCE; + public static final Block BIRCH_FENCE; + public static final Block JUNGLE_FENCE; + public static final Block DARK_OAK_FENCE; + public static final Block ACACIA_FENCE; + public static final Block PUMPKIN; + public static final Block NETHERRACK; + public static final Block SOUL_SAND; + public static final Block GLOWSTONE; + public static final BlockPortal PORTAL; + public static final Block LIT_PUMPKIN; + public static final Block CAKE; + public static final BlockRepeater UNPOWERED_REPEATER; + public static final BlockRepeater POWERED_REPEATER; + public static final Block TRAPDOOR; + public static final Block MONSTER_EGG; + public static final Block STONEBRICK; + public static final Block BROWN_MUSHROOM_BLOCK; + public static final Block RED_MUSHROOM_BLOCK; + public static final Block IRON_BARS; + public static final Block GLASS_PANE; + public static final Block MELON_BLOCK; + public static final Block PUMPKIN_STEM; + public static final Block MELON_STEM; + public static final Block VINE; + public static final Block FENCE_GATE; + public static final Block SPRUCE_FENCE_GATE; + public static final Block BIRCH_FENCE_GATE; + public static final Block JUNGLE_FENCE_GATE; + public static final Block DARK_OAK_FENCE_GATE; + public static final Block ACACIA_FENCE_GATE; + public static final Block BRICK_STAIRS; + public static final Block STONE_BRICK_STAIRS; + public static final BlockMycel MYCELIUM; + public static final Block WATERLILY; + public static final Block NETHER_BRICK; + public static final Block NETHER_BRICK_FENCE; + public static final Block NETHER_BRICK_STAIRS; + public static final Block NETHER_WART; + public static final Block ENCHANTING_TABLE; + public static final Block BREWING_STAND; + public static final BlockCauldron cauldron; + public static final Block END_PORTAL; + public static final Block END_PORTAL_FRAME; + public static final Block END_STONE; + public static final Block DRAGON_EGG; + public static final Block REDSTONE_LAMP; + public static final Block LIT_REDSTONE_LAMP; + public static final BlockStepAbstract DOUBLE_WOODEN_SLAB; + public static final BlockStepAbstract WOODEN_SLAB; + public static final Block COCOA; + public static final Block SANDSTONE_STAIRS; + public static final Block EMERALD_ORE; + public static final Block ENDER_CHEST; + public static final BlockTripwireHook TRIPWIRE_HOOK; + public static final Block TRIPWIRE; + public static final Block EMERALD_BLOCK; + public static final Block SPRUCE_STAIRS; + public static final Block BIRCH_STAIRS; + public static final Block JUNGLE_STAIRS; + public static final Block COMMAND_BLOCK; + public static final BlockBeacon BEACON; + public static final Block COBBLESTONE_WALL; + public static final Block FLOWER_POT; + public static final Block CARROTS; + public static final Block POTATOES; + public static final Block WOODEN_BUTTON; + public static final BlockSkull SKULL; + public static final Block ANVIL; + public static final Block TRAPPED_CHEST; + public static final Block LIGHT_WEIGHTED_PRESSURE_PLATE; + public static final Block HEAVY_WEIGHTED_PRESSURE_PLATE; + public static final BlockRedstoneComparator UNPOWERED_COMPARATOR; + public static final BlockRedstoneComparator POWERED_COMPARATOR; + public static final BlockDaylightDetector DAYLIGHT_DETECTOR; + public static final BlockDaylightDetector DAYLIGHT_DETECTOR_INVERTED; + public static final Block REDSTONE_BLOCK; + public static final Block QUARTZ_ORE; + public static final BlockHopper HOPPER; + public static final Block QUARTZ_BLOCK; + public static final Block QUARTZ_STAIRS; + public static final Block ACTIVATOR_RAIL; + public static final Block DROPPER; + public static final Block STAINED_HARDENED_CLAY; + public static final Block BARRIER; + public static final Block IRON_TRAPDOOR; + public static final Block HAY_BLOCK; + public static final Block CARPET; + public static final Block HARDENED_CLAY; + public static final Block COAL_BLOCK; + public static final Block PACKED_ICE; + public static final Block ACACIA_STAIRS; + public static final Block DARK_OAK_STAIRS; + public static final Block SLIME; + public static final BlockTallPlant DOUBLE_PLANT; + public static final BlockStainedGlass STAINED_GLASS; + public static final BlockStainedGlassPane STAINED_GLASS_PANE; + public static final Block PRISMARINE; + public static final Block SEA_LANTERN; + public static final Block STANDING_BANNER; + public static final Block WALL_BANNER; + public static final Block RED_SANDSTONE; + public static final Block RED_SANDSTONE_STAIRS; + public static final BlockStepAbstract DOUBLE_STONE_SLAB2; + public static final BlockStepAbstract STONE_SLAB2; + + private static Block get(String s) { + return (Block) Block.REGISTRY.get(new MinecraftKey(s)); + } + + static { + if (!DispenserRegistry.a()) { + throw new RuntimeException("Accessed Blocks before Bootstrap!"); + } else { + AIR = get("air"); + STONE = get("stone"); + GRASS = (BlockGrass) get("grass"); + DIRT = get("dirt"); + COBBLESTONE = get("cobblestone"); + PLANKS = get("planks"); + SAPLING = get("sapling"); + BEDROCK = get("bedrock"); + FLOWING_WATER = (BlockFlowing) get("flowing_water"); + WATER = (BlockStationary) get("water"); + FLOWING_LAVA = (BlockFlowing) get("flowing_lava"); + LAVA = (BlockStationary) get("lava"); + SAND = (BlockSand) get("sand"); + GRAVEL = get("gravel"); + GOLD_ORE = get("gold_ore"); + IRON_ORE = get("iron_ore"); + COAL_ORE = get("coal_ore"); + LOG = get("log"); + LOG2 = get("log2"); + LEAVES = (BlockLeaves) get("leaves"); + LEAVES2 = (BlockLeaves) get("leaves2"); + SPONGE = get("sponge"); + GLASS = get("glass"); + LAPIS_ORE = get("lapis_ore"); + LAPIS_BLOCK = get("lapis_block"); + DISPENSER = get("dispenser"); + SANDSTONE = get("sandstone"); + NOTEBLOCK = get("noteblock"); + BED = get("bed"); + GOLDEN_RAIL = get("golden_rail"); + DETECTOR_RAIL = get("detector_rail"); + STICKY_PISTON = (BlockPiston) get("sticky_piston"); + WEB = get("web"); + TALLGRASS = (BlockLongGrass) get("tallgrass"); + DEADBUSH = (BlockDeadBush) get("deadbush"); + PISTON = (BlockPiston) get("piston"); + PISTON_HEAD = (BlockPistonExtension) get("piston_head"); + WOOL = get("wool"); + PISTON_EXTENSION = (BlockPistonMoving) get("piston_extension"); + YELLOW_FLOWER = (BlockFlowers) get("yellow_flower"); + RED_FLOWER = (BlockFlowers) get("red_flower"); + BROWN_MUSHROOM = (BlockPlant) get("brown_mushroom"); + RED_MUSHROOM = (BlockPlant) get("red_mushroom"); + GOLD_BLOCK = get("gold_block"); + IRON_BLOCK = get("iron_block"); + DOUBLE_STONE_SLAB = (BlockStepAbstract) get("double_stone_slab"); + STONE_SLAB = (BlockStepAbstract) get("stone_slab"); + BRICK_BLOCK = get("brick_block"); + TNT = get("tnt"); + BOOKSHELF = get("bookshelf"); + MOSSY_COBBLESTONE = get("mossy_cobblestone"); + OBSIDIAN = get("obsidian"); + TORCH = get("torch"); + FIRE = (BlockFire) get("fire"); + MOB_SPAWNER = get("mob_spawner"); + OAK_STAIRS = get("oak_stairs"); + CHEST = (BlockChest) get("chest"); + REDSTONE_WIRE = (BlockRedstoneWire) get("redstone_wire"); + DIAMOND_ORE = get("diamond_ore"); + DIAMOND_BLOCK = get("diamond_block"); + CRAFTING_TABLE = get("crafting_table"); + WHEAT = get("wheat"); + FARMLAND = get("farmland"); + FURNACE = get("furnace"); + LIT_FURNACE = get("lit_furnace"); + STANDING_SIGN = get("standing_sign"); + WOODEN_DOOR = get("wooden_door"); + SPRUCE_DOOR = get("spruce_door"); + BIRCH_DOOR = get("birch_door"); + JUNGLE_DOOR = get("jungle_door"); + ACACIA_DOOR = get("acacia_door"); + DARK_OAK_DOOR = get("dark_oak_door"); + LADDER = get("ladder"); + RAIL = get("rail"); + STONE_STAIRS = get("stone_stairs"); + WALL_SIGN = get("wall_sign"); + LEVER = get("lever"); + STONE_PRESSURE_PLATE = get("stone_pressure_plate"); + IRON_DOOR = get("iron_door"); + WOODEN_PRESSURE_PLATE = get("wooden_pressure_plate"); + REDSTONE_ORE = get("redstone_ore"); + LIT_REDSTONE_ORE = get("lit_redstone_ore"); + UNLIT_REDSTONE_TORCH = get("unlit_redstone_torch"); + REDSTONE_TORCH = get("redstone_torch"); + STONE_BUTTON = get("stone_button"); + SNOW_LAYER = get("snow_layer"); + ICE = get("ice"); + SNOW = get("snow"); + CACTUS = (BlockCactus) get("cactus"); + CLAY = get("clay"); + REEDS = (BlockReed) get("reeds"); + JUKEBOX = get("jukebox"); + FENCE = get("fence"); + SPRUCE_FENCE = get("spruce_fence"); + BIRCH_FENCE = get("birch_fence"); + JUNGLE_FENCE = get("jungle_fence"); + DARK_OAK_FENCE = get("dark_oak_fence"); + ACACIA_FENCE = get("acacia_fence"); + PUMPKIN = get("pumpkin"); + NETHERRACK = get("netherrack"); + SOUL_SAND = get("soul_sand"); + GLOWSTONE = get("glowstone"); + PORTAL = (BlockPortal) get("portal"); + LIT_PUMPKIN = get("lit_pumpkin"); + CAKE = get("cake"); + UNPOWERED_REPEATER = (BlockRepeater) get("unpowered_repeater"); + POWERED_REPEATER = (BlockRepeater) get("powered_repeater"); + TRAPDOOR = get("trapdoor"); + MONSTER_EGG = get("monster_egg"); + STONEBRICK = get("stonebrick"); + BROWN_MUSHROOM_BLOCK = get("brown_mushroom_block"); + RED_MUSHROOM_BLOCK = get("red_mushroom_block"); + IRON_BARS = get("iron_bars"); + GLASS_PANE = get("glass_pane"); + MELON_BLOCK = get("melon_block"); + PUMPKIN_STEM = get("pumpkin_stem"); + MELON_STEM = get("melon_stem"); + VINE = get("vine"); + FENCE_GATE = get("fence_gate"); + SPRUCE_FENCE_GATE = get("spruce_fence_gate"); + BIRCH_FENCE_GATE = get("birch_fence_gate"); + JUNGLE_FENCE_GATE = get("jungle_fence_gate"); + DARK_OAK_FENCE_GATE = get("dark_oak_fence_gate"); + ACACIA_FENCE_GATE = get("acacia_fence_gate"); + BRICK_STAIRS = get("brick_stairs"); + STONE_BRICK_STAIRS = get("stone_brick_stairs"); + MYCELIUM = (BlockMycel) get("mycelium"); + WATERLILY = get("waterlily"); + NETHER_BRICK = get("nether_brick"); + NETHER_BRICK_FENCE = get("nether_brick_fence"); + NETHER_BRICK_STAIRS = get("nether_brick_stairs"); + NETHER_WART = get("nether_wart"); + ENCHANTING_TABLE = get("enchanting_table"); + BREWING_STAND = get("brewing_stand"); + cauldron = (BlockCauldron) get("cauldron"); + END_PORTAL = get("end_portal"); + END_PORTAL_FRAME = get("end_portal_frame"); + END_STONE = get("end_stone"); + DRAGON_EGG = get("dragon_egg"); + REDSTONE_LAMP = get("redstone_lamp"); + LIT_REDSTONE_LAMP = get("lit_redstone_lamp"); + DOUBLE_WOODEN_SLAB = (BlockStepAbstract) get("double_wooden_slab"); + WOODEN_SLAB = (BlockStepAbstract) get("wooden_slab"); + COCOA = get("cocoa"); + SANDSTONE_STAIRS = get("sandstone_stairs"); + EMERALD_ORE = get("emerald_ore"); + ENDER_CHEST = get("ender_chest"); + TRIPWIRE_HOOK = (BlockTripwireHook) get("tripwire_hook"); + TRIPWIRE = get("tripwire"); + EMERALD_BLOCK = get("emerald_block"); + SPRUCE_STAIRS = get("spruce_stairs"); + BIRCH_STAIRS = get("birch_stairs"); + JUNGLE_STAIRS = get("jungle_stairs"); + COMMAND_BLOCK = get("command_block"); + BEACON = (BlockBeacon) get("beacon"); + COBBLESTONE_WALL = get("cobblestone_wall"); + FLOWER_POT = get("flower_pot"); + CARROTS = get("carrots"); + POTATOES = get("potatoes"); + WOODEN_BUTTON = get("wooden_button"); + SKULL = (BlockSkull) get("skull"); + ANVIL = get("anvil"); + TRAPPED_CHEST = get("trapped_chest"); + LIGHT_WEIGHTED_PRESSURE_PLATE = get("light_weighted_pressure_plate"); + HEAVY_WEIGHTED_PRESSURE_PLATE = get("heavy_weighted_pressure_plate"); + UNPOWERED_COMPARATOR = (BlockRedstoneComparator) get("unpowered_comparator"); + POWERED_COMPARATOR = (BlockRedstoneComparator) get("powered_comparator"); + DAYLIGHT_DETECTOR = (BlockDaylightDetector) get("daylight_detector"); + DAYLIGHT_DETECTOR_INVERTED = (BlockDaylightDetector) get("daylight_detector_inverted"); + REDSTONE_BLOCK = get("redstone_block"); + QUARTZ_ORE = get("quartz_ore"); + HOPPER = (BlockHopper) get("hopper"); + QUARTZ_BLOCK = get("quartz_block"); + QUARTZ_STAIRS = get("quartz_stairs"); + ACTIVATOR_RAIL = get("activator_rail"); + DROPPER = get("dropper"); + STAINED_HARDENED_CLAY = get("stained_hardened_clay"); + BARRIER = get("barrier"); + IRON_TRAPDOOR = get("iron_trapdoor"); + HAY_BLOCK = get("hay_block"); + CARPET = get("carpet"); + HARDENED_CLAY = get("hardened_clay"); + COAL_BLOCK = get("coal_block"); + PACKED_ICE = get("packed_ice"); + ACACIA_STAIRS = get("acacia_stairs"); + DARK_OAK_STAIRS = get("dark_oak_stairs"); + SLIME = get("slime"); + DOUBLE_PLANT = (BlockTallPlant) get("double_plant"); + STAINED_GLASS = (BlockStainedGlass) get("stained_glass"); + STAINED_GLASS_PANE = (BlockStainedGlassPane) get("stained_glass_pane"); + PRISMARINE = get("prismarine"); + SEA_LANTERN = get("sea_lantern"); + STANDING_BANNER = get("standing_banner"); + WALL_BANNER = get("wall_banner"); + RED_SANDSTONE = get("red_sandstone"); + RED_SANDSTONE_STAIRS = get("red_sandstone_stairs"); + DOUBLE_STONE_SLAB2 = (BlockStepAbstract) get("double_stone_slab2"); + STONE_SLAB2 = (BlockStepAbstract) get("stone_slab2"); + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CancelledPacketHandleException.java b/eSpigot-Server/src/main/java/net/minecraft/server/CancelledPacketHandleException.java new file mode 100644 index 0000000..63b7db3 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CancelledPacketHandleException.java @@ -0,0 +1,15 @@ +package net.minecraft.server; + +public final class CancelledPacketHandleException extends RuntimeException { + + public static final CancelledPacketHandleException INSTANCE = new CancelledPacketHandleException(); + + private CancelledPacketHandleException() { + this.setStackTrace(new StackTraceElement[0]); + } + + public synchronized Throwable fillInStackTrace() { + this.setStackTrace(new StackTraceElement[0]); + return this; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ChatBaseComponent.java b/eSpigot-Server/src/main/java/net/minecraft/server/ChatBaseComponent.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ChatBaseComponent.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ChatBaseComponent.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ChatClickable.java b/eSpigot-Server/src/main/java/net/minecraft/server/ChatClickable.java new file mode 100644 index 0000000..d319fa3 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ChatClickable.java @@ -0,0 +1,96 @@ +package net.minecraft.server; + +import com.google.common.collect.Maps; +import java.util.Map; + +public class ChatClickable { + + private final ChatClickable.EnumClickAction a; + private final String b; + + public ChatClickable(ChatClickable.EnumClickAction chatclickable_enumclickaction, String s) { + this.a = chatclickable_enumclickaction; + this.b = s; + } + + public ChatClickable.EnumClickAction a() { + return this.a; + } + + public String b() { + return this.b; + } + + public boolean equals(Object object) { + if (this == object) { + return true; + } else if (object != null && this.getClass() == object.getClass()) { + ChatClickable chatclickable = (ChatClickable) object; + + if (this.a != chatclickable.a) { + return false; + } else { + if (this.b != null) { + if (!this.b.equals(chatclickable.b)) { + return false; + } + } else if (chatclickable.b != null) { + return false; + } + + return true; + } + } else { + return false; + } + } + + public String toString() { + return "ClickEvent{action=" + this.a + ", value=\'" + this.b + '\'' + '}'; + } + + public int hashCode() { + int i = this.a.hashCode(); + + i = 31 * i + (this.b != null ? this.b.hashCode() : 0); + return i; + } + + public static enum EnumClickAction { + + OPEN_URL("open_url", true), OPEN_FILE("open_file", false), RUN_COMMAND("run_command", true), TWITCH_USER_INFO("twitch_user_info", false), SUGGEST_COMMAND("suggest_command", true), CHANGE_PAGE("change_page", true); + + private static final Map g = Maps.newHashMap(); + private final boolean h; + private final String i; + + private EnumClickAction(String s, boolean flag) { + this.i = s; + this.h = flag; + } + + public boolean a() { + return this.h; + } + + public String b() { + return this.i; + } + + public static ChatClickable.EnumClickAction a(String s) { + return (ChatClickable.EnumClickAction) ChatClickable.EnumClickAction.g.get(s); + } + + static { + ChatClickable.EnumClickAction[] achatclickable_enumclickaction = values(); + int i = achatclickable_enumclickaction.length; + + for (int j = 0; j < i; ++j) { + ChatClickable.EnumClickAction chatclickable_enumclickaction = achatclickable_enumclickaction[j]; + + ChatClickable.EnumClickAction.g.put(chatclickable_enumclickaction.b(), chatclickable_enumclickaction); + } + + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ChatComponentScore.java b/eSpigot-Server/src/main/java/net/minecraft/server/ChatComponentScore.java new file mode 100644 index 0000000..26f903d --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ChatComponentScore.java @@ -0,0 +1,82 @@ +package net.minecraft.server; + +import java.util.Iterator; + +public class ChatComponentScore extends ChatBaseComponent { + + private final String b; + private final String c; + private String d = ""; + + public ChatComponentScore(String s, String s1) { + this.b = s; + this.c = s1; + } + + public String g() { + return this.b; + } + + public String h() { + return this.c; + } + + public void b(String s) { + this.d = s; + } + + public String getText() { + MinecraftServer minecraftserver = MinecraftServer.getServer(); + + if (minecraftserver != null && minecraftserver.O() && UtilColor.b(this.d)) { + Scoreboard scoreboard = minecraftserver.getWorldServer(0).getScoreboard(); + ScoreboardObjective scoreboardobjective = scoreboard.getObjective(this.c); + + if (scoreboard.b(this.b, scoreboardobjective)) { + ScoreboardScore scoreboardscore = scoreboard.getPlayerScoreForObjective(this.b, scoreboardobjective); + + this.b(String.format("%d", new Object[] { Integer.valueOf(scoreboardscore.getScore())})); + } else { + this.d = ""; + } + } + + return this.d; + } + + public ChatComponentScore i() { + ChatComponentScore chatcomponentscore = new ChatComponentScore(this.b, this.c); + + chatcomponentscore.b(this.d); + chatcomponentscore.setChatModifier(this.getChatModifier().clone()); + Iterator iterator = this.a().iterator(); + + while (iterator.hasNext()) { + IChatBaseComponent ichatbasecomponent = (IChatBaseComponent) iterator.next(); + + chatcomponentscore.addSibling(ichatbasecomponent.f()); + } + + return chatcomponentscore; + } + + public boolean equals(Object object) { + if (this == object) { + return true; + } else if (!(object instanceof ChatComponentScore)) { + return false; + } else { + ChatComponentScore chatcomponentscore = (ChatComponentScore) object; + + return this.b.equals(chatcomponentscore.b) && this.c.equals(chatcomponentscore.c) && super.equals(object); + } + } + + public String toString() { + return "ScoreComponent{name=\'" + this.b + '\'' + "objective=\'" + this.c + '\'' + ", siblings=" + this.a + ", style=" + this.getChatModifier() + '}'; + } + + public IChatBaseComponent f() { + return this.i(); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ChatComponentSelector.java b/eSpigot-Server/src/main/java/net/minecraft/server/ChatComponentSelector.java new file mode 100644 index 0000000..2acccbe --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ChatComponentSelector.java @@ -0,0 +1,55 @@ +package net.minecraft.server; + +import java.util.Iterator; + +public class ChatComponentSelector extends ChatBaseComponent { + + private final String b; + + public ChatComponentSelector(String s) { + this.b = s; + } + + public String g() { + return this.b; + } + + public String getText() { + return this.b; + } + + public ChatComponentSelector h() { + ChatComponentSelector chatcomponentselector = new ChatComponentSelector(this.b); + + chatcomponentselector.setChatModifier(this.getChatModifier().clone()); + Iterator iterator = this.a().iterator(); + + while (iterator.hasNext()) { + IChatBaseComponent ichatbasecomponent = (IChatBaseComponent) iterator.next(); + + chatcomponentselector.addSibling(ichatbasecomponent.f()); + } + + return chatcomponentselector; + } + + public boolean equals(Object object) { + if (this == object) { + return true; + } else if (!(object instanceof ChatComponentSelector)) { + return false; + } else { + ChatComponentSelector chatcomponentselector = (ChatComponentSelector) object; + + return this.b.equals(chatcomponentselector.b) && super.equals(object); + } + } + + public String toString() { + return "SelectorComponent{pattern=\'" + this.b + '\'' + ", siblings=" + this.a + ", style=" + this.getChatModifier() + '}'; + } + + public IChatBaseComponent f() { + return this.h(); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ChatComponentText.java b/eSpigot-Server/src/main/java/net/minecraft/server/ChatComponentText.java new file mode 100644 index 0000000..42cb342 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ChatComponentText.java @@ -0,0 +1,55 @@ +package net.minecraft.server; + +import java.util.Iterator; + +public class ChatComponentText extends ChatBaseComponent { + + private final String b; + + public ChatComponentText(String s) { + this.b = s; + } + + public String g() { + return this.b; + } + + public String getText() { + return this.b; + } + + public ChatComponentText h() { + ChatComponentText chatcomponenttext = new ChatComponentText(this.b); + + chatcomponenttext.setChatModifier(this.getChatModifier().clone()); + Iterator iterator = this.a().iterator(); + + while (iterator.hasNext()) { + IChatBaseComponent ichatbasecomponent = (IChatBaseComponent) iterator.next(); + + chatcomponenttext.addSibling(ichatbasecomponent.f()); + } + + return chatcomponenttext; + } + + public boolean equals(Object object) { + if (this == object) { + return true; + } else if (!(object instanceof ChatComponentText)) { + return false; + } else { + ChatComponentText chatcomponenttext = (ChatComponentText) object; + + return this.b.equals(chatcomponenttext.g()) && super.equals(object); + } + } + + public String toString() { + return "TextComponent{text=\'" + this.b + '\'' + ", siblings=" + this.a + ", style=" + this.getChatModifier() + '}'; + } + + public IChatBaseComponent f() { + return this.h(); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ChatComponentUtils.java b/eSpigot-Server/src/main/java/net/minecraft/server/ChatComponentUtils.java new file mode 100644 index 0000000..941a604 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ChatComponentUtils.java @@ -0,0 +1,70 @@ +package net.minecraft.server; + +import java.util.Iterator; +import java.util.List; + +public class ChatComponentUtils { + + public static IChatBaseComponent filterForDisplay(ICommandListener icommandlistener, IChatBaseComponent ichatbasecomponent, Entity entity) throws CommandException { + Object object = null; + + if (ichatbasecomponent instanceof ChatComponentScore) { + ChatComponentScore chatcomponentscore = (ChatComponentScore) ichatbasecomponent; + String s = chatcomponentscore.g(); + + if (PlayerSelector.isPattern(s)) { + List list = PlayerSelector.getPlayers(icommandlistener, s, Entity.class); + + if (list.size() != 1) { + throw new ExceptionEntityNotFound(); + } + + s = ((Entity) list.get(0)).getName(); + } + + object = entity != null && s.equals("*") ? new ChatComponentScore(entity.getName(), chatcomponentscore.h()) : new ChatComponentScore(s, chatcomponentscore.h()); + ((ChatComponentScore) object).b(chatcomponentscore.getText()); + } else if (ichatbasecomponent instanceof ChatComponentSelector) { + String s1 = ((ChatComponentSelector) ichatbasecomponent).g(); + + object = PlayerSelector.getPlayerNames(icommandlistener, s1); + if (object == null) { + object = new ChatComponentText(""); + } + } else if (ichatbasecomponent instanceof ChatComponentText) { + object = new ChatComponentText(((ChatComponentText) ichatbasecomponent).g()); + } else { + if (!(ichatbasecomponent instanceof ChatMessage)) { + return ichatbasecomponent; + } + + Object[] aobject = ((ChatMessage) ichatbasecomponent).j(); + + for (int i = 0; i < aobject.length; ++i) { + Object object1 = aobject[i]; + + if (object1 instanceof IChatBaseComponent) { + aobject[i] = filterForDisplay(icommandlistener, (IChatBaseComponent) object1, entity); + } + } + + object = new ChatMessage(((ChatMessage) ichatbasecomponent).i(), aobject); + } + + ChatModifier chatmodifier = ichatbasecomponent.getChatModifier(); + + if (chatmodifier != null) { + ((IChatBaseComponent) object).setChatModifier(chatmodifier.clone()); + } + + Iterator iterator = ichatbasecomponent.a().iterator(); + + while (iterator.hasNext()) { + IChatBaseComponent ichatbasecomponent1 = (IChatBaseComponent) iterator.next(); + + ((IChatBaseComponent) object).addSibling(filterForDisplay(icommandlistener, ichatbasecomponent1, entity)); + } + + return (IChatBaseComponent) object; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ChatDeserializer.java b/eSpigot-Server/src/main/java/net/minecraft/server/ChatDeserializer.java new file mode 100644 index 0000000..4d679ea --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ChatDeserializer.java @@ -0,0 +1,131 @@ +package net.minecraft.server; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSyntaxException; +import org.apache.commons.lang3.StringUtils; + +public class ChatDeserializer { + + public static boolean d(JsonObject jsonobject, String s) { + return !g(jsonobject, s) ? false : jsonobject.get(s).isJsonArray(); + } + + public static boolean g(JsonObject jsonobject, String s) { + return jsonobject == null ? false : jsonobject.get(s) != null; + } + + public static String a(JsonElement jsonelement, String s) { + if (jsonelement.isJsonPrimitive()) { + return jsonelement.getAsString(); + } else { + throw new JsonSyntaxException("Expected " + s + " to be a string, was " + d(jsonelement)); + } + } + + public static String h(JsonObject jsonobject, String s) { + if (jsonobject.has(s)) { + return a(jsonobject.get(s), s); + } else { + throw new JsonSyntaxException("Missing " + s + ", expected to find a string"); + } + } + + public static boolean b(JsonElement jsonelement, String s) { + if (jsonelement.isJsonPrimitive()) { + return jsonelement.getAsBoolean(); + } else { + throw new JsonSyntaxException("Expected " + s + " to be a Boolean, was " + d(jsonelement)); + } + } + + public static boolean a(JsonObject jsonobject, String s, boolean flag) { + return jsonobject.has(s) ? b(jsonobject.get(s), s) : flag; + } + + public static float d(JsonElement jsonelement, String s) { + if (jsonelement.isJsonPrimitive() && jsonelement.getAsJsonPrimitive().isNumber()) { + return jsonelement.getAsFloat(); + } else { + throw new JsonSyntaxException("Expected " + s + " to be a Float, was " + d(jsonelement)); + } + } + + public static float a(JsonObject jsonobject, String s, float f) { + return jsonobject.has(s) ? d(jsonobject.get(s), s) : f; + } + + public static int f(JsonElement jsonelement, String s) { + if (jsonelement.isJsonPrimitive() && jsonelement.getAsJsonPrimitive().isNumber()) { + return jsonelement.getAsInt(); + } else { + throw new JsonSyntaxException("Expected " + s + " to be a Int, was " + d(jsonelement)); + } + } + + public static int m(JsonObject jsonobject, String s) { + if (jsonobject.has(s)) { + return f(jsonobject.get(s), s); + } else { + throw new JsonSyntaxException("Missing " + s + ", expected to find a Int"); + } + } + + public static int a(JsonObject jsonobject, String s, int i) { + return jsonobject.has(s) ? f(jsonobject.get(s), s) : i; + } + + public static JsonObject l(JsonElement jsonelement, String s) { + if (jsonelement.isJsonObject()) { + return jsonelement.getAsJsonObject(); + } else { + throw new JsonSyntaxException("Expected " + s + " to be a JsonObject, was " + d(jsonelement)); + } + } + + public static JsonArray m(JsonElement jsonelement, String s) { + if (jsonelement.isJsonArray()) { + return jsonelement.getAsJsonArray(); + } else { + throw new JsonSyntaxException("Expected " + s + " to be a JsonArray, was " + d(jsonelement)); + } + } + + public static JsonArray t(JsonObject jsonobject, String s) { + if (jsonobject.has(s)) { + return m(jsonobject.get(s), s); + } else { + throw new JsonSyntaxException("Missing " + s + ", expected to find a JsonArray"); + } + } + + public static String d(JsonElement jsonelement) { + String s = StringUtils.abbreviateMiddle(String.valueOf(jsonelement), "...", 10); + + if (jsonelement == null) { + return "null (missing)"; + } else if (jsonelement.isJsonNull()) { + return "null (json)"; + } else if (jsonelement.isJsonArray()) { + return "an array (" + s + ")"; + } else if (jsonelement.isJsonObject()) { + return "an object (" + s + ")"; + } else { + if (jsonelement.isJsonPrimitive()) { + JsonPrimitive jsonprimitive = jsonelement.getAsJsonPrimitive(); + + if (jsonprimitive.isNumber()) { + return "a number (" + s + ")"; + } + + if (jsonprimitive.isBoolean()) { + return "a boolean (" + s + ")"; + } + } + + return s; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ChatHoverable.java b/eSpigot-Server/src/main/java/net/minecraft/server/ChatHoverable.java new file mode 100644 index 0000000..6c13f31 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ChatHoverable.java @@ -0,0 +1,96 @@ +package net.minecraft.server; + +import com.google.common.collect.Maps; +import java.util.Map; + +public class ChatHoverable { + + private final ChatHoverable.EnumHoverAction a; + private final IChatBaseComponent b; + + public ChatHoverable(ChatHoverable.EnumHoverAction chathoverable_enumhoveraction, IChatBaseComponent ichatbasecomponent) { + this.a = chathoverable_enumhoveraction; + this.b = ichatbasecomponent; + } + + public ChatHoverable.EnumHoverAction a() { + return this.a; + } + + public IChatBaseComponent b() { + return this.b; + } + + public boolean equals(Object object) { + if (this == object) { + return true; + } else if (object != null && this.getClass() == object.getClass()) { + ChatHoverable chathoverable = (ChatHoverable) object; + + if (this.a != chathoverable.a) { + return false; + } else { + if (this.b != null) { + if (!this.b.equals(chathoverable.b)) { + return false; + } + } else if (chathoverable.b != null) { + return false; + } + + return true; + } + } else { + return false; + } + } + + public String toString() { + return "HoverEvent{action=" + this.a + ", value=\'" + this.b + '\'' + '}'; + } + + public int hashCode() { + int i = this.a.hashCode(); + + i = 31 * i + (this.b != null ? this.b.hashCode() : 0); + return i; + } + + public static enum EnumHoverAction { + + SHOW_TEXT("show_text", true), SHOW_ACHIEVEMENT("show_achievement", true), SHOW_ITEM("show_item", true), SHOW_ENTITY("show_entity", true); + + private static final Map e = Maps.newHashMap(); + private final boolean f; + private final String g; + + private EnumHoverAction(String s, boolean flag) { + this.g = s; + this.f = flag; + } + + public boolean a() { + return this.f; + } + + public String b() { + return this.g; + } + + public static ChatHoverable.EnumHoverAction a(String s) { + return (ChatHoverable.EnumHoverAction) ChatHoverable.EnumHoverAction.e.get(s); + } + + static { + ChatHoverable.EnumHoverAction[] achathoverable_enumhoveraction = values(); + int i = achathoverable_enumhoveraction.length; + + for (int j = 0; j < i; ++j) { + ChatHoverable.EnumHoverAction chathoverable_enumhoveraction = achathoverable_enumhoveraction[j]; + + ChatHoverable.EnumHoverAction.e.put(chathoverable_enumhoveraction.b(), chathoverable_enumhoveraction); + } + + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ChatMessage.java b/eSpigot-Server/src/main/java/net/minecraft/server/ChatMessage.java new file mode 100644 index 0000000..6b6936f --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ChatMessage.java @@ -0,0 +1,242 @@ +package net.minecraft.server; + +import com.google.common.collect.Iterators; +import com.google.common.collect.Lists; +import java.util.Arrays; +import java.util.IllegalFormatException; +import java.util.Iterator; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class ChatMessage extends ChatBaseComponent { + + private final String d; + private final Object[] e; + private final Object f = new Object(); + private long g = -1L; + List b = Lists.newArrayList(); + public static final Pattern c = Pattern.compile("%(?:(\\d+)\\$)?([A-Za-z%]|$)"); + + public ChatMessage(String s, Object... aobject) { + this.d = s; + this.e = aobject; + Object[] aobject1 = aobject; + int i = aobject.length; + + for (int j = 0; j < i; ++j) { + Object object = aobject1[j]; + + if (object instanceof IChatBaseComponent) { + ((IChatBaseComponent) object).getChatModifier().setChatModifier(this.getChatModifier()); + } + } + + } + + synchronized void g() { + Object object = this.f; + + synchronized (this.f) { + long i = LocaleI18n.a(); + + if (i == this.g) { + return; + } + + this.g = i; + this.b.clear(); + } + + try { + this.b(LocaleI18n.get(this.d)); + } catch (ChatMessageException chatmessageexception) { + this.b.clear(); + + try { + this.b(LocaleI18n.b(this.d)); + } catch (ChatMessageException chatmessageexception1) { + throw chatmessageexception; + } + } + + } + + protected void b(String s) { + boolean flag = false; + Matcher matcher = ChatMessage.c.matcher(s); + int i = 0; + int j = 0; + + try { + int k; + + for (; matcher.find(j); j = k) { + int l = matcher.start(); + + k = matcher.end(); + if (l > j) { + ChatComponentText chatcomponenttext = new ChatComponentText(String.format(s.substring(j, l), new Object[0])); + + chatcomponenttext.getChatModifier().setChatModifier(this.getChatModifier()); + this.b.add(chatcomponenttext); + } + + String s1 = matcher.group(2); + String s2 = s.substring(l, k); + + if ("%".equals(s1) && "%%".equals(s2)) { + ChatComponentText chatcomponenttext1 = new ChatComponentText("%"); + + chatcomponenttext1.getChatModifier().setChatModifier(this.getChatModifier()); + this.b.add(chatcomponenttext1); + } else { + if (!"s".equals(s1)) { + throw new ChatMessageException(this, "Unsupported format: \'" + s2 + "\'"); + } + + String s3 = matcher.group(1); + int i1 = s3 != null ? Integer.parseInt(s3) - 1 : i++; + + if (i1 < this.e.length) { + this.b.add(this.a(i1)); + } + } + } + + if (j < s.length()) { + ChatComponentText chatcomponenttext2 = new ChatComponentText(String.format(s.substring(j), new Object[0])); + + chatcomponenttext2.getChatModifier().setChatModifier(this.getChatModifier()); + this.b.add(chatcomponenttext2); + } + + } catch (IllegalFormatException illegalformatexception) { + throw new ChatMessageException(this, illegalformatexception); + } + } + + private IChatBaseComponent a(int i) { + if (i >= this.e.length) { + throw new ChatMessageException(this, i); + } else { + Object object = this.e[i]; + Object object1; + + if (object instanceof IChatBaseComponent) { + object1 = (IChatBaseComponent) object; + } else { + object1 = new ChatComponentText(object == null ? "null" : object.toString()); + ((IChatBaseComponent) object1).getChatModifier().setChatModifier(this.getChatModifier()); + } + + return (IChatBaseComponent) object1; + } + } + + public IChatBaseComponent setChatModifier(ChatModifier chatmodifier) { + super.setChatModifier(chatmodifier); + Object[] aobject = this.e; + int i = aobject.length; + + for (int j = 0; j < i; ++j) { + Object object = aobject[j]; + + if (object instanceof IChatBaseComponent) { + ((IChatBaseComponent) object).getChatModifier().setChatModifier(this.getChatModifier()); + } + } + + if (this.g > -1L) { + Iterator iterator = this.b.iterator(); + + while (iterator.hasNext()) { + IChatBaseComponent ichatbasecomponent = (IChatBaseComponent) iterator.next(); + + ichatbasecomponent.getChatModifier().setChatModifier(chatmodifier); + } + } + + return this; + } + + public Iterator iterator() { + this.g(); + return Iterators.concat(a((Iterable) this.b), a((Iterable) this.a)); + } + + public String getText() { + this.g(); + StringBuilder stringbuilder = new StringBuilder(); + Iterator iterator = this.b.iterator(); + + while (iterator.hasNext()) { + IChatBaseComponent ichatbasecomponent = (IChatBaseComponent) iterator.next(); + + stringbuilder.append(ichatbasecomponent.getText()); + } + + return stringbuilder.toString(); + } + + public ChatMessage h() { + Object[] aobject = new Object[this.e.length]; + + for (int i = 0; i < this.e.length; ++i) { + if (this.e[i] instanceof IChatBaseComponent) { + aobject[i] = ((IChatBaseComponent) this.e[i]).f(); + } else { + aobject[i] = this.e[i]; + } + } + + ChatMessage chatmessage = new ChatMessage(this.d, aobject); + + chatmessage.setChatModifier(this.getChatModifier().clone()); + Iterator iterator = this.a().iterator(); + + while (iterator.hasNext()) { + IChatBaseComponent ichatbasecomponent = (IChatBaseComponent) iterator.next(); + + chatmessage.addSibling(ichatbasecomponent.f()); + } + + return chatmessage; + } + + public boolean equals(Object object) { + if (this == object) { + return true; + } else if (!(object instanceof ChatMessage)) { + return false; + } else { + ChatMessage chatmessage = (ChatMessage) object; + + return Arrays.equals(this.e, chatmessage.e) && this.d.equals(chatmessage.d) && super.equals(object); + } + } + + public int hashCode() { + int i = super.hashCode(); + + i = 31 * i + this.d.hashCode(); + i = 31 * i + Arrays.hashCode(this.e); + return i; + } + + public String toString() { + return "TranslatableComponent{key=\'" + this.d + '\'' + ", args=" + Arrays.toString(this.e) + ", siblings=" + this.a + ", style=" + this.getChatModifier() + '}'; + } + + public String i() { + return this.d; + } + + public Object[] j() { + return this.e; + } + + public IChatBaseComponent f() { + return this.h(); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ChatMessageException.java b/eSpigot-Server/src/main/java/net/minecraft/server/ChatMessageException.java new file mode 100644 index 0000000..65a5225 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ChatMessageException.java @@ -0,0 +1,16 @@ +package net.minecraft.server; + +public class ChatMessageException extends IllegalArgumentException { + + public ChatMessageException(ChatMessage chatmessage, String s) { + super(String.format("Error parsing: %s: %s", new Object[] { chatmessage, s})); + } + + public ChatMessageException(ChatMessage chatmessage, int i) { + super(String.format("Invalid index %d requested for %s", new Object[] { Integer.valueOf(i), chatmessage})); + } + + public ChatMessageException(ChatMessage chatmessage, Throwable throwable) { + super(String.format("Error while parsing: %s", new Object[] { chatmessage}), throwable); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ChatModifier.java b/eSpigot-Server/src/main/java/net/minecraft/server/ChatModifier.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ChatModifier.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ChatModifier.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ChatTypeAdapterFactory.java b/eSpigot-Server/src/main/java/net/minecraft/server/ChatTypeAdapterFactory.java new file mode 100644 index 0000000..2f2dbcd --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ChatTypeAdapterFactory.java @@ -0,0 +1,60 @@ +package net.minecraft.server; + +import com.google.common.collect.Maps; +import com.google.gson.Gson; +import com.google.gson.TypeAdapter; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonToken; +import com.google.gson.stream.JsonWriter; +import java.io.IOException; +import java.util.HashMap; +import java.util.Locale; + +public class ChatTypeAdapterFactory implements TypeAdapterFactory { + + public ChatTypeAdapterFactory() {} + + public TypeAdapter create(Gson gson, TypeToken typetoken) { + Class oclass = typetoken.getRawType(); + + if (!oclass.isEnum()) { + return null; + } else { + final HashMap hashmap = Maps.newHashMap(); + Object[] aobject = oclass.getEnumConstants(); + int i = aobject.length; + + for (int j = 0; j < i; ++j) { + Object object = aobject[j]; + + hashmap.put(this.a(object), (T) object); + } + + return new TypeAdapter() { + public void write(JsonWriter jsonwriter, T t0) throws IOException { + if (t0 == null) { + jsonwriter.nullValue(); + } else { + jsonwriter.value(ChatTypeAdapterFactory.this.a(t0)); + } + + } + + public T read(JsonReader jsonreader) throws IOException { + if (jsonreader.peek() == JsonToken.NULL) { + jsonreader.nextNull(); + return null; + } else { + return hashmap.get(jsonreader.nextString()); + } + } + }; + } + } + + private String a(Object object) { + return object instanceof Enum ? ((Enum) object).name().toLowerCase(Locale.US) : object.toString().toLowerCase(Locale.US); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ChestLock.java b/eSpigot-Server/src/main/java/net/minecraft/server/ChestLock.java new file mode 100644 index 0000000..cfee9f0 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ChestLock.java @@ -0,0 +1,33 @@ +package net.minecraft.server; + +public class ChestLock { + + public static final ChestLock a = new ChestLock(""); + private final String b; + + public ChestLock(String s) { + this.b = s; + } + + public boolean a() { + return this.b == null || this.b.isEmpty(); + } + + public String b() { + return this.b; + } + + public void a(NBTTagCompound nbttagcompound) { + nbttagcompound.setString("Lock", this.b); + } + + public static ChestLock b(NBTTagCompound nbttagcompound) { + if (nbttagcompound.hasKeyOfType("Lock", 8)) { + String s = nbttagcompound.getString("Lock"); + + return new ChestLock(s); + } else { + return ChestLock.a; + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/Chunk.java b/eSpigot-Server/src/main/java/net/minecraft/server/Chunk.java similarity index 99% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/Chunk.java rename to eSpigot-Server/src/main/java/net/minecraft/server/Chunk.java index 7d12ba3..0f79fef 100644 --- a/TacoSpigot-Server/src/main/java/net/minecraft/server/Chunk.java +++ b/eSpigot-Server/src/main/java/net/minecraft/server/Chunk.java @@ -145,6 +145,8 @@ public class Chunk { } // CraftBukkit end + private final ChunkCoordIntPair chunkCoords; // PandaSpigot + public Chunk(World world, int i, int j) { this.sections = new ChunkSection[16]; this.e = new byte[256]; @@ -171,6 +173,7 @@ public class Chunk { if (!(this instanceof EmptyChunk)) { this.bukkitChunk = new org.bukkit.craftbukkit.CraftChunk(this); } + this.chunkCoords = new ChunkCoordIntPair(this.locX, this.locZ); // PandaSpigot } public org.bukkit.Chunk bukkitChunk; @@ -1214,7 +1217,7 @@ public class Chunk { } public ChunkCoordIntPair j() { - return new ChunkCoordIntPair(this.locX, this.locZ); + return this.chunkCoords; // PandaSpigot } public boolean c(int i, int j) { diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ChunkCache.java b/eSpigot-Server/src/main/java/net/minecraft/server/ChunkCache.java new file mode 100644 index 0000000..45d385d --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ChunkCache.java @@ -0,0 +1,75 @@ +package net.minecraft.server; + +public class ChunkCache implements IBlockAccess { + + protected int a; + protected int b; + protected Chunk[][] c; + protected boolean d; + protected World e; + + public ChunkCache(World world, BlockPosition blockposition, BlockPosition blockposition1, int i) { + this.e = world; + this.a = blockposition.getX() - i >> 4; + this.b = blockposition.getZ() - i >> 4; + int j = blockposition1.getX() + i >> 4; + int k = blockposition1.getZ() + i >> 4; + + this.c = new Chunk[j - this.a + 1][k - this.b + 1]; + this.d = true; + + int l; + int i1; + + for (l = this.a; l <= j; ++l) { + for (i1 = this.b; i1 <= k; ++i1) { + this.c[l - this.a][i1 - this.b] = world.getChunkAt(l, i1); + } + } + + for (l = blockposition.getX() >> 4; l <= blockposition1.getX() >> 4; ++l) { + for (i1 = blockposition.getZ() >> 4; i1 <= blockposition1.getZ() >> 4; ++i1) { + Chunk chunk = this.c[l - this.a][i1 - this.b]; + + if (chunk != null && !chunk.c(blockposition.getY(), blockposition1.getY())) { + this.d = false; + } + } + } + + } + + public TileEntity getTileEntity(BlockPosition blockposition) { + int i = (blockposition.getX() >> 4) - this.a; + int j = (blockposition.getZ() >> 4) - this.b; + + return this.c[i][j].a(blockposition, Chunk.EnumTileEntityState.IMMEDIATE); + } + + public IBlockData getType(BlockPosition blockposition) { + if (blockposition.getY() >= 0 && blockposition.getY() < 256) { + int i = (blockposition.getX() >> 4) - this.a; + int j = (blockposition.getZ() >> 4) - this.b; + + if (i >= 0 && i < this.c.length && j >= 0 && j < this.c[i].length) { + Chunk chunk = this.c[i][j]; + + if (chunk != null) { + return chunk.getBlockData(blockposition); + } + } + } + + return Blocks.AIR.getBlockData(); + } + + public boolean isEmpty(BlockPosition blockposition) { + return this.getType(blockposition).getBlock().getMaterial() == Material.AIR; + } + + public int getBlockPower(BlockPosition blockposition, EnumDirection enumdirection) { + IBlockData iblockdata = this.getType(blockposition); + + return iblockdata.getBlock().b((IBlockAccess) this, blockposition, iblockdata, enumdirection); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ChunkCoordIntPair.java b/eSpigot-Server/src/main/java/net/minecraft/server/ChunkCoordIntPair.java new file mode 100644 index 0000000..652c079 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ChunkCoordIntPair.java @@ -0,0 +1,71 @@ +package net.minecraft.server; + +public class ChunkCoordIntPair { + + public final int x; + public final int z; + + public ChunkCoordIntPair(int i, int j) { + this.x = i; + this.z = j; + } + + public static long a(int i, int j) { + return (long) i & 4294967295L | ((long) j & 4294967295L) << 32; + } + + public int hashCode() { + int i = 1664525 * this.x + 1013904223; + int j = 1664525 * (this.z ^ -559038737) + 1013904223; + + return i ^ j; + } + + public boolean equals(Object object) { + if (this == object) { + return true; + } else if (!(object instanceof ChunkCoordIntPair)) { + return false; + } else { + ChunkCoordIntPair chunkcoordintpair = (ChunkCoordIntPair) object; + + return this.x == chunkcoordintpair.x && this.z == chunkcoordintpair.z; + } + } + + public int a() { + return (this.x << 4) + 8; + } + + public int b() { + return (this.z << 4) + 8; + } + + public int c() { + return this.x << 4; + } + + public int d() { + return this.z << 4; + } + + public int e() { + return (this.x << 4) + 15; + } + + public int f() { + return (this.z << 4) + 15; + } + + public BlockPosition a(int i, int j, int k) { + return new BlockPosition((this.x << 4) + i, j, (this.z << 4) + k); + } + + public BlockPosition a(int i) { + return new BlockPosition(this.a(), i, this.b()); + } + + public String toString() { + return "[" + this.x + ", " + this.z + "]"; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ChunkProviderDebug.java b/eSpigot-Server/src/main/java/net/minecraft/server/ChunkProviderDebug.java new file mode 100644 index 0000000..c6230ab --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ChunkProviderDebug.java @@ -0,0 +1,129 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import java.util.Iterator; +import java.util.List; + +public class ChunkProviderDebug implements IChunkProvider { + + private static final List a = Lists.newArrayList(); + private static final int b; + private static final int c; + private final World d; + + public ChunkProviderDebug(World world) { + this.d = world; + } + + public Chunk getOrCreateChunk(int i, int j) { + ChunkSnapshot chunksnapshot = new ChunkSnapshot(); + + int k; + + for (int l = 0; l < 16; ++l) { + for (int i1 = 0; i1 < 16; ++i1) { + int j1 = i * 16 + l; + + k = j * 16 + i1; + chunksnapshot.a(l, 60, i1, Blocks.BARRIER.getBlockData()); + IBlockData iblockdata = b(j1, k); + + if (iblockdata != null) { + chunksnapshot.a(l, 70, i1, iblockdata); + } + } + } + + Chunk chunk = new Chunk(this.d, chunksnapshot, i, j); + + chunk.initLighting(); + BiomeBase[] abiomebase = this.d.getWorldChunkManager().getBiomeBlock((BiomeBase[]) null, i * 16, j * 16, 16, 16); + byte[] abyte = chunk.getBiomeIndex(); + + for (k = 0; k < abyte.length; ++k) { + abyte[k] = (byte) abiomebase[k].id; + } + + chunk.initLighting(); + return chunk; + } + + public static IBlockData b(int i, int j) { + IBlockData iblockdata = null; + + if (i > 0 && j > 0 && i % 2 != 0 && j % 2 != 0) { + i /= 2; + j /= 2; + if (i <= ChunkProviderDebug.b && j <= ChunkProviderDebug.c) { + int k = MathHelper.a(i * ChunkProviderDebug.b + j); + + if (k < ChunkProviderDebug.a.size()) { + iblockdata = (IBlockData) ChunkProviderDebug.a.get(k); + } + } + } + + return iblockdata; + } + + public boolean isChunkLoaded(int i, int j) { + return true; + } + + public void getChunkAt(IChunkProvider ichunkprovider, int i, int j) {} + + public boolean a(IChunkProvider ichunkprovider, Chunk chunk, int i, int j) { + return false; + } + + public boolean saveChunks(boolean flag, IProgressUpdate iprogressupdate) { + return true; + } + + public void c() {} + + public boolean unloadChunks() { + return false; + } + + public boolean canSave() { + return true; + } + + public String getName() { + return "DebugLevelSource"; + } + + public List getMobsFor(EnumCreatureType enumcreaturetype, BlockPosition blockposition) { + BiomeBase biomebase = this.d.getBiome(blockposition); + + return biomebase.getMobs(enumcreaturetype); + } + + public BlockPosition findNearestMapFeature(World world, String s, BlockPosition blockposition) { + return null; + } + + public int getLoadedChunks() { + return 0; + } + + public void recreateStructures(Chunk chunk, int i, int j) {} + + public Chunk getChunkAt(BlockPosition blockposition) { + return this.getOrCreateChunk(blockposition.getX() >> 4, blockposition.getZ() >> 4); + } + + static { + Iterator iterator = Block.REGISTRY.iterator(); + + while (iterator.hasNext()) { + Block block = (Block) iterator.next(); + + ChunkProviderDebug.a.addAll(block.P().a()); + } + + b = MathHelper.f(MathHelper.c((float) ChunkProviderDebug.a.size())); + c = MathHelper.f((float) ChunkProviderDebug.a.size() / (float) ChunkProviderDebug.b); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ChunkProviderFlat.java b/eSpigot-Server/src/main/java/net/minecraft/server/ChunkProviderFlat.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ChunkProviderFlat.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ChunkProviderFlat.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ChunkProviderGenerate.java b/eSpigot-Server/src/main/java/net/minecraft/server/ChunkProviderGenerate.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ChunkProviderGenerate.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ChunkProviderGenerate.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ChunkProviderHell.java b/eSpigot-Server/src/main/java/net/minecraft/server/ChunkProviderHell.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ChunkProviderHell.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ChunkProviderHell.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ChunkProviderServer.java b/eSpigot-Server/src/main/java/net/minecraft/server/ChunkProviderServer.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ChunkProviderServer.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ChunkProviderServer.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ChunkProviderTheEnd.java b/eSpigot-Server/src/main/java/net/minecraft/server/ChunkProviderTheEnd.java new file mode 100644 index 0000000..4f2c865 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ChunkProviderTheEnd.java @@ -0,0 +1,272 @@ +package net.minecraft.server; + +import java.util.List; +import java.util.Random; + +public class ChunkProviderTheEnd implements IChunkProvider { + + private Random h; + private NoiseGeneratorOctaves i; + private NoiseGeneratorOctaves j; + private NoiseGeneratorOctaves k; + public NoiseGeneratorOctaves a; + public NoiseGeneratorOctaves b; + private World l; + private double[] m; + private BiomeBase[] n; + double[] c; + double[] d; + double[] e; + double[] f; + double[] g; + + public ChunkProviderTheEnd(World world, long i) { + this.l = world; + this.h = new Random(i); + this.i = new NoiseGeneratorOctaves(this.h, 16); + this.j = new NoiseGeneratorOctaves(this.h, 16); + this.k = new NoiseGeneratorOctaves(this.h, 8); + this.a = new NoiseGeneratorOctaves(this.h, 10); + this.b = new NoiseGeneratorOctaves(this.h, 16); + } + + public void a(int i, int j, ChunkSnapshot chunksnapshot) { + byte b0 = 2; + int k = b0 + 1; + byte b1 = 33; + int l = b0 + 1; + + this.m = this.a(this.m, i * b0, 0, j * b0, k, b1, l); + + for (int i1 = 0; i1 < b0; ++i1) { + for (int j1 = 0; j1 < b0; ++j1) { + for (int k1 = 0; k1 < 32; ++k1) { + double d0 = 0.25D; + double d1 = this.m[((i1 + 0) * l + j1 + 0) * b1 + k1 + 0]; + double d2 = this.m[((i1 + 0) * l + j1 + 1) * b1 + k1 + 0]; + double d3 = this.m[((i1 + 1) * l + j1 + 0) * b1 + k1 + 0]; + double d4 = this.m[((i1 + 1) * l + j1 + 1) * b1 + k1 + 0]; + double d5 = (this.m[((i1 + 0) * l + j1 + 0) * b1 + k1 + 1] - d1) * d0; + double d6 = (this.m[((i1 + 0) * l + j1 + 1) * b1 + k1 + 1] - d2) * d0; + double d7 = (this.m[((i1 + 1) * l + j1 + 0) * b1 + k1 + 1] - d3) * d0; + double d8 = (this.m[((i1 + 1) * l + j1 + 1) * b1 + k1 + 1] - d4) * d0; + + for (int l1 = 0; l1 < 4; ++l1) { + double d9 = 0.125D; + double d10 = d1; + double d11 = d2; + double d12 = (d3 - d1) * d9; + double d13 = (d4 - d2) * d9; + + for (int i2 = 0; i2 < 8; ++i2) { + double d14 = 0.125D; + double d15 = d10; + double d16 = (d11 - d10) * d14; + + for (int j2 = 0; j2 < 8; ++j2) { + IBlockData iblockdata = null; + + if (d15 > 0.0D) { + iblockdata = Blocks.END_STONE.getBlockData(); + } + + int k2 = i2 + i1 * 8; + int l2 = l1 + k1 * 4; + int i3 = j2 + j1 * 8; + + chunksnapshot.a(k2, l2, i3, iblockdata); + d15 += d16; + } + + d10 += d12; + d11 += d13; + } + + d1 += d5; + d2 += d6; + d3 += d7; + d4 += d8; + } + } + } + } + + } + + public void a(ChunkSnapshot chunksnapshot) { + for (int i = 0; i < 16; ++i) { + for (int j = 0; j < 16; ++j) { + byte b0 = 1; + int k = -1; + IBlockData iblockdata = Blocks.END_STONE.getBlockData(); + IBlockData iblockdata1 = Blocks.END_STONE.getBlockData(); + + for (int l = 127; l >= 0; --l) { + IBlockData iblockdata2 = chunksnapshot.a(i, l, j); + + if (iblockdata2.getBlock().getMaterial() == Material.AIR) { + k = -1; + } else if (iblockdata2.getBlock() == Blocks.STONE) { + if (k == -1) { + if (b0 <= 0) { + iblockdata = Blocks.AIR.getBlockData(); + iblockdata1 = Blocks.END_STONE.getBlockData(); + } + + k = b0; + if (l >= 0) { + chunksnapshot.a(i, l, j, iblockdata); + } else { + chunksnapshot.a(i, l, j, iblockdata1); + } + } else if (k > 0) { + --k; + chunksnapshot.a(i, l, j, iblockdata1); + } + } + } + } + } + + } + + public Chunk getOrCreateChunk(int i, int j) { + this.h.setSeed((long) i * 341873128712L + (long) j * 132897987541L); + ChunkSnapshot chunksnapshot = new ChunkSnapshot(); + + this.n = this.l.getWorldChunkManager().getBiomeBlock(this.n, i * 16, j * 16, 16, 16); + this.a(i, j, chunksnapshot); + this.a(chunksnapshot); + Chunk chunk = new Chunk(this.l, chunksnapshot, i, j); + byte[] abyte = chunk.getBiomeIndex(); + + for (int k = 0; k < abyte.length; ++k) { + abyte[k] = (byte) this.n[k].id; + } + + chunk.initLighting(); + return chunk; + } + + private double[] a(double[] adouble, int i, int j, int k, int l, int i1, int j1) { + if (adouble == null) { + adouble = new double[l * i1 * j1]; + } + + double d0 = 684.412D; + double d1 = 684.412D; + + this.f = this.a.a(this.f, i, k, l, j1, 1.121D, 1.121D, 0.5D); + this.g = this.b.a(this.g, i, k, l, j1, 200.0D, 200.0D, 0.5D); + d0 *= 2.0D; + this.c = this.k.a(this.c, i, j, k, l, i1, j1, d0 / 80.0D, d1 / 160.0D, d0 / 80.0D); + this.d = this.i.a(this.d, i, j, k, l, i1, j1, d0, d1, d0); + this.e = this.j.a(this.e, i, j, k, l, i1, j1, d0, d1, d0); + int k1 = 0; + + for (int l1 = 0; l1 < l; ++l1) { + for (int i2 = 0; i2 < j1; ++i2) { + float f = (float) (l1 + i) / 1.0F; + float f1 = (float) (i2 + k) / 1.0F; + float f2 = 100.0F - MathHelper.c(f * f + f1 * f1) * 8.0F; + + if (f2 > 80.0F) { + f2 = 80.0F; + } + + if (f2 < -100.0F) { + f2 = -100.0F; + } + + for (int j2 = 0; j2 < i1; ++j2) { + double d2 = 0.0D; + double d3 = this.d[k1] / 512.0D; + double d4 = this.e[k1] / 512.0D; + double d5 = (this.c[k1] / 10.0D + 1.0D) / 2.0D; + + if (d5 < 0.0D) { + d2 = d3; + } else if (d5 > 1.0D) { + d2 = d4; + } else { + d2 = d3 + (d4 - d3) * d5; + } + + d2 -= 8.0D; + d2 += (double) f2; + byte b0 = 2; + double d6; + + if (j2 > i1 / 2 - b0) { + d6 = (double) ((float) (j2 - (i1 / 2 - b0)) / 64.0F); + d6 = MathHelper.a(d6, 0.0D, 1.0D); + d2 = d2 * (1.0D - d6) + -3000.0D * d6; + } + + b0 = 8; + if (j2 < b0) { + d6 = (double) ((float) (b0 - j2) / ((float) b0 - 1.0F)); + d2 = d2 * (1.0D - d6) + -30.0D * d6; + } + + adouble[k1] = d2; + ++k1; + } + } + } + + return adouble; + } + + public boolean isChunkLoaded(int i, int j) { + return true; + } + + public void getChunkAt(IChunkProvider ichunkprovider, int i, int j) { + BlockFalling.instaFall = true; + BlockPosition blockposition = new BlockPosition(i * 16, 0, j * 16); + + this.l.getBiome(blockposition.a(16, 0, 16)).a(this.l, this.l.random, blockposition); + BlockFalling.instaFall = false; + } + + public boolean a(IChunkProvider ichunkprovider, Chunk chunk, int i, int j) { + return false; + } + + public boolean saveChunks(boolean flag, IProgressUpdate iprogressupdate) { + return true; + } + + public void c() {} + + public boolean unloadChunks() { + return false; + } + + public boolean canSave() { + return true; + } + + public String getName() { + return "RandomLevelSource"; + } + + public List getMobsFor(EnumCreatureType enumcreaturetype, BlockPosition blockposition) { + return this.l.getBiome(blockposition).getMobs(enumcreaturetype); + } + + public BlockPosition findNearestMapFeature(World world, String s, BlockPosition blockposition) { + return null; + } + + public int getLoadedChunks() { + return 0; + } + + public void recreateStructures(Chunk chunk, int i, int j) {} + + public Chunk getChunkAt(BlockPosition blockposition) { + return this.getOrCreateChunk(blockposition.getX() >> 4, blockposition.getZ() >> 4); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ChunkRegionLoader.java b/eSpigot-Server/src/main/java/net/minecraft/server/ChunkRegionLoader.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ChunkRegionLoader.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ChunkRegionLoader.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ChunkSection.java b/eSpigot-Server/src/main/java/net/minecraft/server/ChunkSection.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ChunkSection.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ChunkSection.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ChunkSnapshot.java b/eSpigot-Server/src/main/java/net/minecraft/server/ChunkSnapshot.java new file mode 100644 index 0000000..4ce9e5d --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ChunkSnapshot.java @@ -0,0 +1,41 @@ +package net.minecraft.server; + +public class ChunkSnapshot { + + private final short[] a = new short[65536]; + private final IBlockData b; + + public ChunkSnapshot() { + this.b = Blocks.AIR.getBlockData(); + } + + public IBlockData a(int i, int j, int k) { + int l = i << 12 | k << 8 | j; + + return this.a(l); + } + + public IBlockData a(int i) { + if (i >= 0 && i < this.a.length) { + IBlockData iblockdata = (IBlockData) Block.d.a(this.a[i]); + + return iblockdata != null ? iblockdata : this.b; + } else { + throw new IndexOutOfBoundsException("The coordinate is out of range"); + } + } + + public void a(int i, int j, int k, IBlockData iblockdata) { + int l = i << 12 | k << 8 | j; + + this.a(l, iblockdata); + } + + public void a(int i, IBlockData iblockdata) { + if (i >= 0 && i < this.a.length) { + this.a[i] = (short) Block.d.b(iblockdata); + } else { + throw new IndexOutOfBoundsException("The coordinate is out of range"); + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CombatEntry.java b/eSpigot-Server/src/main/java/net/minecraft/server/CombatEntry.java new file mode 100644 index 0000000..a0a1d98 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CombatEntry.java @@ -0,0 +1,44 @@ +package net.minecraft.server; + +public class CombatEntry { + + private final DamageSource a; + private final int b; + private final float c; + private final float d; + private final String e; + private final float f; + + public CombatEntry(DamageSource damagesource, int i, float f, float f1, String s, float f2) { + this.a = damagesource; + this.b = i; + this.c = f1; + this.d = f; + this.e = s; + this.f = f2; + } + + public DamageSource a() { + return this.a; + } + + public float c() { + return this.c; + } + + public boolean f() { + return this.a.getEntity() instanceof EntityLiving; + } + + public String g() { + return this.e; + } + + public IChatBaseComponent h() { + return this.a().getEntity() == null ? null : this.a().getEntity().getScoreboardDisplayName(); + } + + public float i() { + return this.a == DamageSource.OUT_OF_WORLD ? Float.MAX_VALUE : this.f; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CombatTracker.java b/eSpigot-Server/src/main/java/net/minecraft/server/CombatTracker.java new file mode 100644 index 0000000..711632e --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CombatTracker.java @@ -0,0 +1,195 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import java.util.Iterator; +import java.util.List; + +public class CombatTracker { + + private final List a = Lists.newArrayList(); + private final EntityLiving b; + private int c; + private int d; + private int e; + private boolean f; + private boolean g; + private String h; + + public CombatTracker(EntityLiving entityliving) { + this.b = entityliving; + } + + public void a() { + this.j(); + if (this.b.k_()) { + Block block = this.b.world.getType(new BlockPosition(this.b.locX, this.b.getBoundingBox().b, this.b.locZ)).getBlock(); + + if (block == Blocks.LADDER) { + this.h = "ladder"; + } else if (block == Blocks.VINE) { + this.h = "vines"; + } + } else if (this.b.V()) { + this.h = "water"; + } + + } + + public void a(DamageSource damagesource, float f, float f1) { + this.g(); + this.a(); + CombatEntry combatentry = new CombatEntry(damagesource, this.b.ticksLived, f, f1, this.h, this.b.fallDistance); + + this.a.add(combatentry); + this.c = this.b.ticksLived; + this.g = true; + if (combatentry.f() && !this.f && this.b.isAlive()) { + this.f = true; + this.d = this.b.ticksLived; + this.e = this.d; + this.b.enterCombat(); + } + + } + + public IChatBaseComponent b() { + if (this.a.size() == 0) { + return new ChatMessage("death.attack.generic", new Object[] { this.b.getScoreboardDisplayName()}); + } else { + CombatEntry combatentry = this.i(); + CombatEntry combatentry1 = (CombatEntry) this.a.get(this.a.size() - 1); + IChatBaseComponent ichatbasecomponent = combatentry1.h(); + Entity entity = combatentry1.a().getEntity(); + Object object; + + if (combatentry != null && combatentry1.a() == DamageSource.FALL) { + IChatBaseComponent ichatbasecomponent1 = combatentry.h(); + + if (combatentry.a() != DamageSource.FALL && combatentry.a() != DamageSource.OUT_OF_WORLD) { + if (ichatbasecomponent1 != null && (ichatbasecomponent == null || !ichatbasecomponent1.equals(ichatbasecomponent))) { + Entity entity1 = combatentry.a().getEntity(); + ItemStack itemstack = entity1 instanceof EntityLiving ? ((EntityLiving) entity1).bA() : null; + + if (itemstack != null && itemstack.hasName()) { + object = new ChatMessage("death.fell.assist.item", new Object[] { this.b.getScoreboardDisplayName(), ichatbasecomponent1, itemstack.C()}); + } else { + object = new ChatMessage("death.fell.assist", new Object[] { this.b.getScoreboardDisplayName(), ichatbasecomponent1}); + } + } else if (ichatbasecomponent != null) { + ItemStack itemstack1 = entity instanceof EntityLiving ? ((EntityLiving) entity).bA() : null; + + if (itemstack1 != null && itemstack1.hasName()) { + object = new ChatMessage("death.fell.finish.item", new Object[] { this.b.getScoreboardDisplayName(), ichatbasecomponent, itemstack1.C()}); + } else { + object = new ChatMessage("death.fell.finish", new Object[] { this.b.getScoreboardDisplayName(), ichatbasecomponent}); + } + } else { + object = new ChatMessage("death.fell.killer", new Object[] { this.b.getScoreboardDisplayName()}); + } + } else { + object = new ChatMessage("death.fell.accident." + this.a(combatentry), new Object[] { this.b.getScoreboardDisplayName()}); + } + } else { + object = combatentry1.a().getLocalizedDeathMessage(this.b); + } + + return (IChatBaseComponent) object; + } + } + + public EntityLiving c() { + EntityLiving entityliving = null; + EntityHuman entityhuman = null; + float f = 0.0F; + float f1 = 0.0F; + Iterator iterator = this.a.iterator(); + + while (iterator.hasNext()) { + CombatEntry combatentry = (CombatEntry) iterator.next(); + + if (combatentry.a().getEntity() instanceof EntityHuman && (entityhuman == null || combatentry.c() > f1)) { + f1 = combatentry.c(); + entityhuman = (EntityHuman) combatentry.a().getEntity(); + } + + if (combatentry.a().getEntity() instanceof EntityLiving && (entityliving == null || combatentry.c() > f)) { + f = combatentry.c(); + entityliving = (EntityLiving) combatentry.a().getEntity(); + } + } + + if (entityhuman != null && f1 >= f / 3.0F) { + return entityhuman; + } else { + return entityliving; + } + } + + private CombatEntry i() { + CombatEntry combatentry = null; + CombatEntry combatentry1 = null; + byte b0 = 0; + float f = 0.0F; + + for (int i = 0; i < this.a.size(); ++i) { + CombatEntry combatentry2 = (CombatEntry) this.a.get(i); + CombatEntry combatentry3 = i > 0 ? (CombatEntry) this.a.get(i - 1) : null; + + if ((combatentry2.a() == DamageSource.FALL || combatentry2.a() == DamageSource.OUT_OF_WORLD) && combatentry2.i() > 0.0F && (combatentry == null || combatentry2.i() > f)) { + if (i > 0) { + combatentry = combatentry3; + } else { + combatentry = combatentry2; + } + + f = combatentry2.i(); + } + + if (combatentry2.g() != null && (combatentry1 == null || combatentry2.c() > (float) b0)) { + combatentry1 = combatentry2; + } + } + + if (f > 5.0F && combatentry != null) { + return combatentry; + } else if (b0 > 5 && combatentry1 != null) { + return combatentry1; + } else { + return null; + } + } + + private String a(CombatEntry combatentry) { + return combatentry.g() == null ? "generic" : combatentry.g(); + } + + public int f() { + return this.f ? this.b.ticksLived - this.d : this.e - this.d; + } + + private void j() { + this.h = null; + } + + public void g() { + int i = this.f ? 300 : 100; + + if (this.g && (!this.b.isAlive() || this.b.ticksLived - this.c > i)) { + boolean flag = this.f; + + this.g = false; + this.f = false; + this.e = this.b.ticksLived; + if (flag) { + this.b.exitCombat(); + } + + this.a.clear(); + } + + } + + public EntityLiving h() { + return this.b; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandAbstract.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandAbstract.java new file mode 100644 index 0000000..1121880 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandAbstract.java @@ -0,0 +1,552 @@ +package net.minecraft.server; + +import com.google.common.base.Functions; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.google.common.primitives.Doubles; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.UUID; + +public abstract class CommandAbstract implements ICommand { + + private static ICommandDispatcher a; + + public CommandAbstract() {} + + public int a() { + return 4; + } + + public List b() { + return Collections.emptyList(); + } + + public boolean canUse(ICommandListener icommandlistener) { + return icommandlistener.a(this.a(), this.getCommand()); + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + return null; + } + + public static int a(String s) throws ExceptionInvalidNumber { + try { + return Integer.parseInt(s); + } catch (NumberFormatException numberformatexception) { + throw new ExceptionInvalidNumber("commands.generic.num.invalid", new Object[] { s}); + } + } + + public static int a(String s, int i) throws ExceptionInvalidNumber { + return a(s, i, Integer.MAX_VALUE); + } + + public static int a(String s, int i, int j) throws ExceptionInvalidNumber { + int k = a(s); + + if (k < i) { + throw new ExceptionInvalidNumber("commands.generic.num.tooSmall", new Object[] { Integer.valueOf(k), Integer.valueOf(i)}); + } else if (k > j) { + throw new ExceptionInvalidNumber("commands.generic.num.tooBig", new Object[] { Integer.valueOf(k), Integer.valueOf(j)}); + } else { + return k; + } + } + + public static long b(String s) throws ExceptionInvalidNumber { + try { + return Long.parseLong(s); + } catch (NumberFormatException numberformatexception) { + throw new ExceptionInvalidNumber("commands.generic.num.invalid", new Object[] { s}); + } + } + + public static long a(String s, long i, long j) throws ExceptionInvalidNumber { + long k = b(s); + + if (k < i) { + throw new ExceptionInvalidNumber("commands.generic.num.tooSmall", new Object[] { Long.valueOf(k), Long.valueOf(i)}); + } else if (k > j) { + throw new ExceptionInvalidNumber("commands.generic.num.tooBig", new Object[] { Long.valueOf(k), Long.valueOf(j)}); + } else { + return k; + } + } + + public static BlockPosition a(ICommandListener icommandlistener, String[] astring, int i, boolean flag) throws ExceptionInvalidNumber { + BlockPosition blockposition = icommandlistener.getChunkCoordinates(); + + return new BlockPosition(b((double) blockposition.getX(), astring[i], -30000000, 30000000, flag), b((double) blockposition.getY(), astring[i + 1], 0, 256, false), b((double) blockposition.getZ(), astring[i + 2], -30000000, 30000000, flag)); + } + + public static double c(String s) throws ExceptionInvalidNumber { + try { + double d0 = Double.parseDouble(s); + + if (!Doubles.isFinite(d0)) { + throw new ExceptionInvalidNumber("commands.generic.num.invalid", new Object[] { s}); + } else { + return d0; + } + } catch (NumberFormatException numberformatexception) { + throw new ExceptionInvalidNumber("commands.generic.num.invalid", new Object[] { s}); + } + } + + public static double a(String s, double d0) throws ExceptionInvalidNumber { + return a(s, d0, Double.MAX_VALUE); + } + + public static double a(String s, double d0, double d1) throws ExceptionInvalidNumber { + double d2 = c(s); + + if (d2 < d0) { + throw new ExceptionInvalidNumber("commands.generic.double.tooSmall", new Object[] { Double.valueOf(d2), Double.valueOf(d0)}); + } else if (d2 > d1) { + throw new ExceptionInvalidNumber("commands.generic.double.tooBig", new Object[] { Double.valueOf(d2), Double.valueOf(d1)}); + } else { + return d2; + } + } + + public static boolean d(String s) throws CommandException { + if (!s.equals("true") && !s.equals("1")) { + if (!s.equals("false") && !s.equals("0")) { + throw new CommandException("commands.generic.boolean.invalid", new Object[] { s}); + } else { + return false; + } + } else { + return true; + } + } + + public static EntityPlayer b(ICommandListener icommandlistener) throws ExceptionPlayerNotFound { + if (icommandlistener instanceof EntityPlayer) { + return (EntityPlayer) icommandlistener; + } else { + throw new ExceptionPlayerNotFound("You must specify which player you wish to perform this action on.", new Object[0]); + } + } + + public static EntityPlayer a(ICommandListener icommandlistener, String s) throws ExceptionPlayerNotFound { + EntityPlayer entityplayer = PlayerSelector.getPlayer(icommandlistener, s); + + if (entityplayer == null) { + try { + entityplayer = MinecraftServer.getServer().getPlayerList().a(UUID.fromString(s)); + } catch (IllegalArgumentException illegalargumentexception) { + ; + } + } + + if (entityplayer == null) { + entityplayer = MinecraftServer.getServer().getPlayerList().getPlayer(s); + } + + if (entityplayer == null) { + throw new ExceptionPlayerNotFound(); + } else { + return entityplayer; + } + } + + public static Entity b(ICommandListener icommandlistener, String s) throws ExceptionEntityNotFound { + return a(icommandlistener, s, Entity.class); + } + + public static T a(ICommandListener icommandlistener, String s, Class oclass) throws ExceptionEntityNotFound { + Entity object = PlayerSelector.getEntity(icommandlistener, s, oclass); + MinecraftServer minecraftserver = MinecraftServer.getServer(); + + if (object == null) { + object = minecraftserver.getPlayerList().getPlayer(s); + } + + if (object == null) { + try { + UUID uuid = UUID.fromString(s); + + object = minecraftserver.a(uuid); + if (object == null) { + object = minecraftserver.getPlayerList().a(uuid); + } + } catch (IllegalArgumentException illegalargumentexception) { + throw new ExceptionEntityNotFound("commands.generic.entity.invalidUuid", new Object[0]); + } + } + + if (object != null && oclass.isAssignableFrom(object.getClass())) { + return (T) object; + } else { + throw new ExceptionEntityNotFound(); + } + } + + public static List c(ICommandListener icommandlistener, String s) throws ExceptionEntityNotFound { + return (List) (PlayerSelector.isPattern(s) ? PlayerSelector.getPlayers(icommandlistener, s, Entity.class) : Lists.newArrayList(new Entity[] { b(icommandlistener, s)})); + } + + public static String d(ICommandListener icommandlistener, String s) throws ExceptionPlayerNotFound { + try { + return a(icommandlistener, s).getName(); + } catch (ExceptionPlayerNotFound exceptionplayernotfound) { + if (PlayerSelector.isPattern(s)) { + throw exceptionplayernotfound; + } else { + return s; + } + } + } + + public static String e(ICommandListener icommandlistener, String s) throws ExceptionEntityNotFound { + try { + return a(icommandlistener, s).getName(); + } catch (ExceptionPlayerNotFound exceptionplayernotfound) { + try { + return b(icommandlistener, s).getUniqueID().toString(); + } catch (ExceptionEntityNotFound exceptionentitynotfound) { + if (PlayerSelector.isPattern(s)) { + throw exceptionentitynotfound; + } else { + return s; + } + } + } + } + + public static IChatBaseComponent a(ICommandListener icommandlistener, String[] astring, int i) throws ExceptionPlayerNotFound { + return b(icommandlistener, astring, i, false); + } + + public static IChatBaseComponent b(ICommandListener icommandlistener, String[] astring, int i, boolean flag) throws ExceptionPlayerNotFound { + ChatComponentText chatcomponenttext = new ChatComponentText(""); + + for (int j = i; j < astring.length; ++j) { + if (j > i) { + chatcomponenttext.a(" "); + } + + Object object = new ChatComponentText(astring[j]); + + if (flag) { + IChatBaseComponent ichatbasecomponent = PlayerSelector.getPlayerNames(icommandlistener, astring[j]); + + if (ichatbasecomponent == null) { + if (PlayerSelector.isPattern(astring[j])) { + throw new ExceptionPlayerNotFound(); + } + } else { + object = ichatbasecomponent; + } + } + + chatcomponenttext.addSibling((IChatBaseComponent) object); + } + + return chatcomponenttext; + } + + public static String a(String[] astring, int i) { + StringBuilder stringbuilder = new StringBuilder(); + + for (int j = i; j < astring.length; ++j) { + if (j > i) { + stringbuilder.append(" "); + } + + String s = astring[j]; + + stringbuilder.append(s); + } + + return stringbuilder.toString(); + } + + public static CommandAbstract.CommandNumber a(double d0, String s, boolean flag) throws ExceptionInvalidNumber { + return a(d0, s, -30000000, 30000000, flag); + } + + public static CommandAbstract.CommandNumber a(double d0, String s, int i, int j, boolean flag) throws ExceptionInvalidNumber { + boolean flag1 = s.startsWith("~"); + + if (flag1 && Double.isNaN(d0)) { + throw new ExceptionInvalidNumber("commands.generic.num.invalid", new Object[] { Double.valueOf(d0)}); + } else { + double d1 = 0.0D; + + if (!flag1 || s.length() > 1) { + boolean flag2 = s.contains("."); + + if (flag1) { + s = s.substring(1); + } + + d1 += c(s); + if (!flag2 && !flag1 && flag) { + d1 += 0.5D; + } + } + + if (i != 0 || j != 0) { + if (d1 < (double) i) { + throw new ExceptionInvalidNumber("commands.generic.double.tooSmall", new Object[] { Double.valueOf(d1), Integer.valueOf(i)}); + } + + if (d1 > (double) j) { + throw new ExceptionInvalidNumber("commands.generic.double.tooBig", new Object[] { Double.valueOf(d1), Integer.valueOf(j)}); + } + } + + return new CommandAbstract.CommandNumber(d1 + (flag1 ? d0 : 0.0D), d1, flag1); + } + } + + public static double b(double d0, String s, boolean flag) throws ExceptionInvalidNumber { + return b(d0, s, -30000000, 30000000, flag); + } + + public static double b(double d0, String s, int i, int j, boolean flag) throws ExceptionInvalidNumber { + boolean flag1 = s.startsWith("~"); + + if (flag1 && Double.isNaN(d0)) { + throw new ExceptionInvalidNumber("commands.generic.num.invalid", new Object[] { Double.valueOf(d0)}); + } else { + double d1 = flag1 ? d0 : 0.0D; + + if (!flag1 || s.length() > 1) { + boolean flag2 = s.contains("."); + + if (flag1) { + s = s.substring(1); + } + + d1 += c(s); + if (!flag2 && !flag1 && flag) { + d1 += 0.5D; + } + } + + if (i != 0 || j != 0) { + if (d1 < (double) i) { + throw new ExceptionInvalidNumber("commands.generic.double.tooSmall", new Object[] { Double.valueOf(d1), Integer.valueOf(i)}); + } + + if (d1 > (double) j) { + throw new ExceptionInvalidNumber("commands.generic.double.tooBig", new Object[] { Double.valueOf(d1), Integer.valueOf(j)}); + } + } + + return d1; + } + } + + public static Item f(ICommandListener icommandlistener, String s) throws ExceptionInvalidNumber { + MinecraftKey minecraftkey = new MinecraftKey(s); + Item item = (Item) Item.REGISTRY.get(minecraftkey); + + if (item == null) { + throw new ExceptionInvalidNumber("commands.give.item.notFound", new Object[] { minecraftkey}); + } else { + return item; + } + } + + public static Block g(ICommandListener icommandlistener, String s) throws ExceptionInvalidNumber { + MinecraftKey minecraftkey = new MinecraftKey(s); + + if (!Block.REGISTRY.d(minecraftkey)) { + throw new ExceptionInvalidNumber("commands.give.block.notFound", new Object[] { minecraftkey}); + } else { + Block block = (Block) Block.REGISTRY.get(minecraftkey); + + if (block == null) { + throw new ExceptionInvalidNumber("commands.give.block.notFound", new Object[] { minecraftkey}); + } else { + return block; + } + } + } + + public static String a(Object[] aobject) { + StringBuilder stringbuilder = new StringBuilder(); + + for (int i = 0; i < aobject.length; ++i) { + String s = aobject[i].toString(); + + if (i > 0) { + if (i == aobject.length - 1) { + stringbuilder.append(" and "); + } else { + stringbuilder.append(", "); + } + } + + stringbuilder.append(s); + } + + return stringbuilder.toString(); + } + + public static IChatBaseComponent a(List list) { + ChatComponentText chatcomponenttext = new ChatComponentText(""); + + for (int i = 0; i < list.size(); ++i) { + if (i > 0) { + if (i == list.size() - 1) { + chatcomponenttext.a(" and "); + } else if (i > 0) { + chatcomponenttext.a(", "); + } + } + + chatcomponenttext.addSibling((IChatBaseComponent) list.get(i)); + } + + return chatcomponenttext; + } + + public static String a(Collection collection) { + return a(collection.toArray(new String[collection.size()])); + } + + public static List a(String[] astring, int i, BlockPosition blockposition) { + if (blockposition == null) { + return null; + } else { + int j = astring.length - 1; + String s; + + if (j == i) { + s = Integer.toString(blockposition.getX()); + } else if (j == i + 1) { + s = Integer.toString(blockposition.getY()); + } else { + if (j != i + 2) { + return null; + } + + s = Integer.toString(blockposition.getZ()); + } + + return Lists.newArrayList(new String[] { s}); + } + } + + public static List b(String[] astring, int i, BlockPosition blockposition) { + if (blockposition == null) { + return null; + } else { + int j = astring.length - 1; + String s; + + if (j == i) { + s = Integer.toString(blockposition.getX()); + } else { + if (j != i + 1) { + return null; + } + + s = Integer.toString(blockposition.getZ()); + } + + return Lists.newArrayList(new String[] { s}); + } + } + + public static boolean a(String s, String s1) { + return s1.regionMatches(true, 0, s, 0, s.length()); + } + + public static List a(String[] astring, String... astring1) { + return a(astring, (Collection) Arrays.asList(astring1)); + } + + public static List a(String[] astring, Collection collection) { + String s = astring[astring.length - 1]; + ArrayList arraylist = Lists.newArrayList(); + + if (!collection.isEmpty()) { + Iterator iterator = Iterables.transform(collection, Functions.toStringFunction()).iterator(); + + while (iterator.hasNext()) { + String s1 = (String) iterator.next(); + + if (a(s, s1)) { + arraylist.add(s1); + } + } + + if (arraylist.isEmpty()) { + iterator = collection.iterator(); + + while (iterator.hasNext()) { + Object object = iterator.next(); + + if (object instanceof MinecraftKey && a(s, ((MinecraftKey) object).a())) { + arraylist.add(String.valueOf(object)); + } + } + } + } + + return arraylist; + } + + public boolean isListStart(String[] astring, int i) { + return false; + } + + public static void a(ICommandListener icommandlistener, ICommand icommand, String s, Object... aobject) { + a(icommandlistener, icommand, 0, s, aobject); + } + + public static void a(ICommandListener icommandlistener, ICommand icommand, int i, String s, Object... aobject) { + if (CommandAbstract.a != null) { + CommandAbstract.a.a(icommandlistener, icommand, i, s, aobject); + } + + } + + public static void a(ICommandDispatcher icommanddispatcher) { + CommandAbstract.a = icommanddispatcher; + } + + public int a(ICommand icommand) { + return this.getCommand().compareTo(icommand.getCommand()); + } + + public int compareTo(ICommand object) { + return this.a(object); + } + + public static class CommandNumber { + + private final double a; + private final double b; + private final boolean c; + + protected CommandNumber(double d0, double d1, boolean flag) { + this.a = d0; + this.b = d1; + this.c = flag; + } + + public double a() { + return this.a; + } + + public double b() { + return this.b; + } + + public boolean c() { + return this.c; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandAchievement.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandAchievement.java new file mode 100644 index 0000000..c668da5 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandAchievement.java @@ -0,0 +1,169 @@ +package net.minecraft.server; + +import com.google.common.base.Predicate; +import com.google.common.collect.Iterators; +import com.google.common.collect.Lists; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; + +public class CommandAchievement extends CommandAbstract { + + public CommandAchievement() {} + + public String getCommand() { + return "achievement"; + } + + public int a() { + return 2; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.achievement.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length < 2) { + throw new ExceptionUsage("commands.achievement.usage", new Object[0]); + } else { + final Statistic statistic = StatisticList.getStatistic(astring[1]); + + if (statistic == null && !astring[1].equals("*")) { + throw new CommandException("commands.achievement.unknownAchievement", new Object[] { astring[1]}); + } else { + final EntityPlayer entityplayer = astring.length >= 3 ? a(icommandlistener, astring[2]) : b(icommandlistener); + boolean flag = astring[0].equalsIgnoreCase("give"); + boolean flag1 = astring[0].equalsIgnoreCase("take"); + + if (flag || flag1) { + if (statistic == null) { + Iterator iterator; + Achievement achievement; + + if (flag) { + iterator = AchievementList.e.iterator(); + + while (iterator.hasNext()) { + achievement = (Achievement) iterator.next(); + entityplayer.b((Statistic) achievement); + } + + a(icommandlistener, this, "commands.achievement.give.success.all", new Object[] { entityplayer.getName()}); + } else if (flag1) { + iterator = Lists.reverse(AchievementList.e).iterator(); + + while (iterator.hasNext()) { + achievement = (Achievement) iterator.next(); + entityplayer.a((Statistic) achievement); + } + + a(icommandlistener, this, "commands.achievement.take.success.all", new Object[] { entityplayer.getName()}); + } + + } else { + if (statistic instanceof Achievement) { + Achievement achievement1 = (Achievement) statistic; + ArrayList arraylist; + + if (flag) { + if (entityplayer.getStatisticManager().hasAchievement(achievement1)) { + throw new CommandException("commands.achievement.alreadyHave", new Object[] { entityplayer.getName(), statistic.j()}); + } + + for (arraylist = Lists.newArrayList(); achievement1.c != null && !entityplayer.getStatisticManager().hasAchievement(achievement1.c); achievement1 = achievement1.c) { + arraylist.add(achievement1.c); + } + + Iterator iterator1 = Lists.reverse(arraylist).iterator(); + + while (iterator1.hasNext()) { + Achievement achievement2 = (Achievement) iterator1.next(); + + entityplayer.b((Statistic) achievement2); + } + } else if (flag1) { + if (!entityplayer.getStatisticManager().hasAchievement(achievement1)) { + throw new CommandException("commands.achievement.dontHave", new Object[] { entityplayer.getName(), statistic.j()}); + } + + arraylist = Lists.newArrayList(Iterators.filter(AchievementList.e.iterator(), new Predicate() { + public boolean a(Achievement achievement) { + return entityplayer.getStatisticManager().hasAchievement(achievement) && achievement != statistic; + } + + public boolean apply(Object object) { + return this.a((Achievement) object); + } + })); + ArrayList arraylist1 = Lists.newArrayList(arraylist); + Iterator iterator2 = arraylist.iterator(); + + Achievement achievement3; + + while (iterator2.hasNext()) { + achievement3 = (Achievement) iterator2.next(); + Achievement achievement4 = achievement3; + + boolean flag2; + + for (flag2 = false; achievement4 != null; achievement4 = achievement4.c) { + if (achievement4 == statistic) { + flag2 = true; + } + } + + if (!flag2) { + for (achievement4 = achievement3; achievement4 != null; achievement4 = achievement4.c) { + arraylist1.remove(achievement3); + } + } + } + + iterator2 = arraylist1.iterator(); + + while (iterator2.hasNext()) { + achievement3 = (Achievement) iterator2.next(); + entityplayer.a((Statistic) achievement3); + } + } + } + + if (flag) { + entityplayer.b(statistic); + a(icommandlistener, this, "commands.achievement.give.success.one", new Object[] { entityplayer.getName(), statistic.j()}); + } else if (flag1) { + entityplayer.a(statistic); + a(icommandlistener, this, "commands.achievement.take.success.one", new Object[] { statistic.j(), entityplayer.getName()}); + } + + } + } + } + } + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + if (astring.length == 1) { + return a(astring, new String[] { "give", "take"}); + } else if (astring.length != 2) { + return astring.length == 3 ? a(astring, MinecraftServer.getServer().getPlayers()) : null; + } else { + ArrayList arraylist = Lists.newArrayList(); + Iterator iterator = StatisticList.stats.iterator(); + + while (iterator.hasNext()) { + Statistic statistic = (Statistic) iterator.next(); + + arraylist.add(statistic.name); + } + + return a(astring, (Collection) arraylist); + } + } + + public boolean isListStart(String[] astring, int i) { + return i == 2; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandBan.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandBan.java new file mode 100644 index 0000000..83d1d9f --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandBan.java @@ -0,0 +1,60 @@ +package net.minecraft.server; + +import com.mojang.authlib.GameProfile; +import java.util.Date; +import java.util.List; + +public class CommandBan extends CommandAbstract { + + public CommandBan() {} + + public String getCommand() { + return "ban"; + } + + public int a() { + return 3; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.ban.usage"; + } + + public boolean canUse(ICommandListener icommandlistener) { + return MinecraftServer.getServer().getPlayerList().getProfileBans().isEnabled() && super.canUse(icommandlistener); + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length >= 1 && astring[0].length() > 0) { + MinecraftServer minecraftserver = MinecraftServer.getServer(); + GameProfile gameprofile = minecraftserver.getUserCache().getProfile(astring[0]); + + if (gameprofile == null) { + throw new CommandException("commands.ban.failed", new Object[] { astring[0]}); + } else { + String s = null; + + if (astring.length >= 2) { + s = a(icommandlistener, astring, 1).c(); + } + + GameProfileBanEntry gameprofilebanentry = new GameProfileBanEntry(gameprofile, (Date) null, icommandlistener.getName(), (Date) null, s); + + minecraftserver.getPlayerList().getProfileBans().add(gameprofilebanentry); + EntityPlayer entityplayer = minecraftserver.getPlayerList().getPlayer(astring[0]); + + if (entityplayer != null) { + entityplayer.playerConnection.disconnect("You are banned from this server."); + } + + a(icommandlistener, this, "commands.ban.success", new Object[] { astring[0]}); + } + } else { + throw new ExceptionUsage("commands.ban.usage", new Object[0]); + } + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + return astring.length >= 1 ? a(astring, MinecraftServer.getServer().getPlayers()) : null; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandBanIp.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandBanIp.java new file mode 100644 index 0000000..8042f01 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandBanIp.java @@ -0,0 +1,79 @@ +package net.minecraft.server; + +import java.util.Date; +import java.util.Iterator; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class CommandBanIp extends CommandAbstract { + + public static final Pattern a = Pattern.compile("^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])$"); + + public CommandBanIp() {} + + public String getCommand() { + return "ban-ip"; + } + + public int a() { + return 3; + } + + public boolean canUse(ICommandListener icommandlistener) { + return MinecraftServer.getServer().getPlayerList().getIPBans().isEnabled() && super.canUse(icommandlistener); + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.banip.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length >= 1 && astring[0].length() > 1) { + IChatBaseComponent ichatbasecomponent = astring.length >= 2 ? a(icommandlistener, astring, 1) : null; + Matcher matcher = CommandBanIp.a.matcher(astring[0]); + + if (matcher.matches()) { + this.a(icommandlistener, astring[0], ichatbasecomponent == null ? null : ichatbasecomponent.c()); + } else { + EntityPlayer entityplayer = MinecraftServer.getServer().getPlayerList().getPlayer(astring[0]); + + if (entityplayer == null) { + throw new ExceptionPlayerNotFound("commands.banip.invalid", new Object[0]); + } + + this.a(icommandlistener, entityplayer.w(), ichatbasecomponent == null ? null : ichatbasecomponent.c()); + } + + } else { + throw new ExceptionUsage("commands.banip.usage", new Object[0]); + } + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + return astring.length == 1 ? a(astring, MinecraftServer.getServer().getPlayers()) : null; + } + + protected void a(ICommandListener icommandlistener, String s, String s1) { + IpBanEntry ipbanentry = new IpBanEntry(s, (Date) null, icommandlistener.getName(), (Date) null, s1); + + MinecraftServer.getServer().getPlayerList().getIPBans().add(ipbanentry); + List list = MinecraftServer.getServer().getPlayerList().b(s); + String[] astring = new String[list.size()]; + int i = 0; + + EntityPlayer entityplayer; + + for (Iterator iterator = list.iterator(); iterator.hasNext(); astring[i++] = entityplayer.getName()) { + entityplayer = (EntityPlayer) iterator.next(); + entityplayer.playerConnection.disconnect("You have been IP banned."); + } + + if (list.isEmpty()) { + a(icommandlistener, this, "commands.banip.success", new Object[] { s}); + } else { + a(icommandlistener, this, "commands.banip.success.players", new Object[] { s, a((Object[]) astring)}); + } + + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandBanList.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandBanList.java new file mode 100644 index 0000000..eacc3d4 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandBanList.java @@ -0,0 +1,39 @@ +package net.minecraft.server; + +import java.util.List; + +public class CommandBanList extends CommandAbstract { + + public CommandBanList() {} + + public String getCommand() { + return "banlist"; + } + + public int a() { + return 3; + } + + public boolean canUse(ICommandListener icommandlistener) { + return (MinecraftServer.getServer().getPlayerList().getIPBans().isEnabled() || MinecraftServer.getServer().getPlayerList().getProfileBans().isEnabled()) && super.canUse(icommandlistener); + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.banlist.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length >= 1 && astring[0].equalsIgnoreCase("ips")) { + icommandlistener.sendMessage(new ChatMessage("commands.banlist.ips", new Object[] { Integer.valueOf(MinecraftServer.getServer().getPlayerList().getIPBans().getEntries().length)})); + icommandlistener.sendMessage(new ChatComponentText(a((Object[]) MinecraftServer.getServer().getPlayerList().getIPBans().getEntries()))); + } else { + icommandlistener.sendMessage(new ChatMessage("commands.banlist.players", new Object[] { Integer.valueOf(MinecraftServer.getServer().getPlayerList().getProfileBans().getEntries().length)})); + icommandlistener.sendMessage(new ChatComponentText(a((Object[]) MinecraftServer.getServer().getPlayerList().getProfileBans().getEntries()))); + } + + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + return astring.length == 1 ? a(astring, new String[] { "players", "ips"}) : null; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandBlockData.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandBlockData.java new file mode 100644 index 0000000..d4264b3 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandBlockData.java @@ -0,0 +1,71 @@ +package net.minecraft.server; + +import java.util.List; + +public class CommandBlockData extends CommandAbstract { + + public CommandBlockData() {} + + public String getCommand() { + return "blockdata"; + } + + public int a() { + return 2; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.blockdata.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length < 4) { + throw new ExceptionUsage("commands.blockdata.usage", new Object[0]); + } else { + icommandlistener.a(CommandObjectiveExecutor.EnumCommandResult.AFFECTED_BLOCKS, 0); + BlockPosition blockposition = a(icommandlistener, astring, 0, false); + World world = icommandlistener.getWorld(); + + if (!world.isLoaded(blockposition)) { + throw new CommandException("commands.blockdata.outOfWorld", new Object[0]); + } else { + TileEntity tileentity = world.getTileEntity(blockposition); + + if (tileentity == null) { + throw new CommandException("commands.blockdata.notValid", new Object[0]); + } else { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + + tileentity.b(nbttagcompound); + NBTTagCompound nbttagcompound1 = (NBTTagCompound) nbttagcompound.clone(); + + NBTTagCompound nbttagcompound2; + + try { + nbttagcompound2 = MojangsonParser.parse(a(icommandlistener, astring, 3).c()); + } catch (MojangsonParseException mojangsonparseexception) { + throw new CommandException("commands.blockdata.tagError", new Object[] { mojangsonparseexception.getMessage()}); + } + + nbttagcompound.a(nbttagcompound2); + nbttagcompound.setInt("x", blockposition.getX()); + nbttagcompound.setInt("y", blockposition.getY()); + nbttagcompound.setInt("z", blockposition.getZ()); + if (nbttagcompound.equals(nbttagcompound1)) { + throw new CommandException("commands.blockdata.failed", new Object[] { nbttagcompound.toString()}); + } else { + tileentity.a(nbttagcompound); + tileentity.update(); + world.notify(blockposition); + icommandlistener.a(CommandObjectiveExecutor.EnumCommandResult.AFFECTED_BLOCKS, 1); + a(icommandlistener, this, "commands.blockdata.success", new Object[] { nbttagcompound.toString()}); + } + } + } + } + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + return astring.length > 0 && astring.length <= 3 ? a(astring, 0, blockposition) : null; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/CommandBlockListenerAbstract.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandBlockListenerAbstract.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/CommandBlockListenerAbstract.java rename to eSpigot-Server/src/main/java/net/minecraft/server/CommandBlockListenerAbstract.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandClear.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandClear.java new file mode 100644 index 0000000..2bc317d --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandClear.java @@ -0,0 +1,72 @@ +package net.minecraft.server; + +import java.util.Collection; +import java.util.List; + +public class CommandClear extends CommandAbstract { + + public CommandClear() {} + + public String getCommand() { + return "clear"; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.clear.usage"; + } + + public int a() { + return 2; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + EntityPlayer entityplayer = astring.length == 0 ? b(icommandlistener) : a(icommandlistener, astring[0]); + Item item = astring.length >= 2 ? f(icommandlistener, astring[1]) : null; + int i = astring.length >= 3 ? a(astring[2], -1) : -1; + int j = astring.length >= 4 ? a(astring[3], -1) : -1; + NBTTagCompound nbttagcompound = null; + + if (astring.length >= 5) { + try { + nbttagcompound = MojangsonParser.parse(a(astring, 4)); + } catch (MojangsonParseException mojangsonparseexception) { + throw new CommandException("commands.clear.tagError", new Object[] { mojangsonparseexception.getMessage()}); + } + } + + if (astring.length >= 2 && item == null) { + throw new CommandException("commands.clear.failure", new Object[] { entityplayer.getName()}); + } else { + int k = entityplayer.inventory.a(item, i, j, nbttagcompound); + + entityplayer.defaultContainer.b(); + if (!entityplayer.abilities.canInstantlyBuild) { + entityplayer.broadcastCarriedItem(); + } + + icommandlistener.a(CommandObjectiveExecutor.EnumCommandResult.AFFECTED_ITEMS, k); + if (k == 0) { + throw new CommandException("commands.clear.failure", new Object[] { entityplayer.getName()}); + } else { + if (j == 0) { + icommandlistener.sendMessage(new ChatMessage("commands.clear.testing", new Object[] { entityplayer.getName(), Integer.valueOf(k)})); + } else { + a(icommandlistener, this, "commands.clear.success", new Object[] { entityplayer.getName(), Integer.valueOf(k)}); + } + + } + } + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + return astring.length == 1 ? a(astring, this.d()) : (astring.length == 2 ? a(astring, (Collection) Item.REGISTRY.keySet()) : null); + } + + protected String[] d() { + return MinecraftServer.getServer().getPlayers(); + } + + public boolean isListStart(String[] astring, int i) { + return i == 0; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandClone.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandClone.java new file mode 100644 index 0000000..34012e8 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandClone.java @@ -0,0 +1,225 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; + +public class CommandClone extends CommandAbstract { + + public CommandClone() {} + + public String getCommand() { + return "clone"; + } + + public int a() { + return 2; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.clone.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length < 9) { + throw new ExceptionUsage("commands.clone.usage", new Object[0]); + } else { + icommandlistener.a(CommandObjectiveExecutor.EnumCommandResult.AFFECTED_BLOCKS, 0); + BlockPosition blockposition = a(icommandlistener, astring, 0, false); + BlockPosition blockposition1 = a(icommandlistener, astring, 3, false); + BlockPosition blockposition2 = a(icommandlistener, astring, 6, false); + StructureBoundingBox structureboundingbox = new StructureBoundingBox(blockposition, blockposition1); + StructureBoundingBox structureboundingbox1 = new StructureBoundingBox(blockposition2, blockposition2.a(structureboundingbox.b())); + int i = structureboundingbox.c() * structureboundingbox.d() * structureboundingbox.e(); + + if (i > '\u8000') { + throw new CommandException("commands.clone.tooManyBlocks", new Object[] { Integer.valueOf(i), Integer.valueOf('\u8000')}); + } else { + boolean flag = false; + Block block = null; + int j = -1; + + if ((astring.length < 11 || !astring[10].equals("force") && !astring[10].equals("move")) && structureboundingbox.a(structureboundingbox1)) { + throw new CommandException("commands.clone.noOverlap", new Object[0]); + } else { + if (astring.length >= 11 && astring[10].equals("move")) { + flag = true; + } + + if (structureboundingbox.b >= 0 && structureboundingbox.e < 256 && structureboundingbox1.b >= 0 && structureboundingbox1.e < 256) { + World world = icommandlistener.getWorld(); + + if (world.a(structureboundingbox) && world.a(structureboundingbox1)) { + boolean flag1 = false; + + if (astring.length >= 10) { + if (astring[9].equals("masked")) { + flag1 = true; + } else if (astring[9].equals("filtered")) { + if (astring.length < 12) { + throw new ExceptionUsage("commands.clone.usage", new Object[0]); + } + + block = g(icommandlistener, astring[11]); + if (astring.length >= 13) { + j = a(astring[12], 0, 15); + } + } + } + + ArrayList arraylist = Lists.newArrayList(); + ArrayList arraylist1 = Lists.newArrayList(); + ArrayList arraylist2 = Lists.newArrayList(); + LinkedList linkedlist = Lists.newLinkedList(); + BlockPosition blockposition3 = new BlockPosition(structureboundingbox1.a - structureboundingbox.a, structureboundingbox1.b - structureboundingbox.b, structureboundingbox1.c - structureboundingbox.c); + + for (int k = structureboundingbox.c; k <= structureboundingbox.f; ++k) { + for (int l = structureboundingbox.b; l <= structureboundingbox.e; ++l) { + for (int i1 = structureboundingbox.a; i1 <= structureboundingbox.d; ++i1) { + BlockPosition blockposition4 = new BlockPosition(i1, l, k); + BlockPosition blockposition5 = blockposition4.a(blockposition3); + IBlockData iblockdata = world.getType(blockposition4); + + if ((!flag1 || iblockdata.getBlock() != Blocks.AIR) && (block == null || iblockdata.getBlock() == block && (j < 0 || iblockdata.getBlock().toLegacyData(iblockdata) == j))) { + TileEntity tileentity = world.getTileEntity(blockposition4); + + if (tileentity != null) { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + + tileentity.b(nbttagcompound); + arraylist1.add(new CommandClone.CommandCloneStoredTileEntity(blockposition5, iblockdata, nbttagcompound)); + linkedlist.addLast(blockposition4); + } else if (!iblockdata.getBlock().o() && !iblockdata.getBlock().d()) { + arraylist2.add(new CommandClone.CommandCloneStoredTileEntity(blockposition5, iblockdata, (NBTTagCompound) null)); + linkedlist.addFirst(blockposition4); + } else { + arraylist.add(new CommandClone.CommandCloneStoredTileEntity(blockposition5, iblockdata, (NBTTagCompound) null)); + linkedlist.addLast(blockposition4); + } + } + } + } + } + + if (flag) { + Iterator iterator; + BlockPosition blockposition6; + + for (iterator = linkedlist.iterator(); iterator.hasNext(); world.setTypeAndData(blockposition6, Blocks.BARRIER.getBlockData(), 2)) { + blockposition6 = (BlockPosition) iterator.next(); + TileEntity tileentity1 = world.getTileEntity(blockposition6); + + if (tileentity1 instanceof IInventory) { + ((IInventory) tileentity1).l(); + } + } + + iterator = linkedlist.iterator(); + + while (iterator.hasNext()) { + blockposition6 = (BlockPosition) iterator.next(); + world.setTypeAndData(blockposition6, Blocks.AIR.getBlockData(), 3); + } + } + + ArrayList arraylist3 = Lists.newArrayList(); + + arraylist3.addAll(arraylist); + arraylist3.addAll(arraylist1); + arraylist3.addAll(arraylist2); + List list = Lists.reverse(arraylist3); + + Iterator iterator1; + CommandClone.CommandCloneStoredTileEntity commandclone_commandclonestoredtileentity; + TileEntity tileentity2; + + for (iterator1 = list.iterator(); iterator1.hasNext(); world.setTypeAndData(commandclone_commandclonestoredtileentity.a, Blocks.BARRIER.getBlockData(), 2)) { + commandclone_commandclonestoredtileentity = (CommandClone.CommandCloneStoredTileEntity) iterator1.next(); + tileentity2 = world.getTileEntity(commandclone_commandclonestoredtileentity.a); + if (tileentity2 instanceof IInventory) { + ((IInventory) tileentity2).l(); + } + } + + i = 0; + iterator1 = arraylist3.iterator(); + + while (iterator1.hasNext()) { + commandclone_commandclonestoredtileentity = (CommandClone.CommandCloneStoredTileEntity) iterator1.next(); + if (world.setTypeAndData(commandclone_commandclonestoredtileentity.a, commandclone_commandclonestoredtileentity.b, 2)) { + ++i; + } + } + + for (iterator1 = arraylist1.iterator(); iterator1.hasNext(); world.setTypeAndData(commandclone_commandclonestoredtileentity.a, commandclone_commandclonestoredtileentity.b, 2)) { + commandclone_commandclonestoredtileentity = (CommandClone.CommandCloneStoredTileEntity) iterator1.next(); + tileentity2 = world.getTileEntity(commandclone_commandclonestoredtileentity.a); + if (commandclone_commandclonestoredtileentity.c != null && tileentity2 != null) { + commandclone_commandclonestoredtileentity.c.setInt("x", commandclone_commandclonestoredtileentity.a.getX()); + commandclone_commandclonestoredtileentity.c.setInt("y", commandclone_commandclonestoredtileentity.a.getY()); + commandclone_commandclonestoredtileentity.c.setInt("z", commandclone_commandclonestoredtileentity.a.getZ()); + tileentity2.a(commandclone_commandclonestoredtileentity.c); + tileentity2.update(); + } + } + + iterator1 = list.iterator(); + + while (iterator1.hasNext()) { + commandclone_commandclonestoredtileentity = (CommandClone.CommandCloneStoredTileEntity) iterator1.next(); + world.update(commandclone_commandclonestoredtileentity.a, commandclone_commandclonestoredtileentity.b.getBlock()); + } + + List list1 = world.a(structureboundingbox, false); + + if (list1 != null) { + Iterator iterator2 = list1.iterator(); + + while (iterator2.hasNext()) { + NextTickListEntry nextticklistentry = (NextTickListEntry) iterator2.next(); + + if (structureboundingbox.b((BaseBlockPosition) nextticklistentry.a)) { + BlockPosition blockposition7 = nextticklistentry.a.a(blockposition3); + + world.b(blockposition7, nextticklistentry.a(), (int) (nextticklistentry.b - world.getWorldData().getTime()), nextticklistentry.c); + } + } + } + + if (i <= 0) { + throw new CommandException("commands.clone.failed", new Object[0]); + } else { + icommandlistener.a(CommandObjectiveExecutor.EnumCommandResult.AFFECTED_BLOCKS, i); + a(icommandlistener, this, "commands.clone.success", new Object[] { Integer.valueOf(i)}); + } + } else { + throw new CommandException("commands.clone.outOfWorld", new Object[0]); + } + } else { + throw new CommandException("commands.clone.outOfWorld", new Object[0]); + } + } + } + } + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + return astring.length > 0 && astring.length <= 3 ? a(astring, 0, blockposition) : (astring.length > 3 && astring.length <= 6 ? a(astring, 3, blockposition) : (astring.length > 6 && astring.length <= 9 ? a(astring, 6, blockposition) : (astring.length == 10 ? a(astring, new String[] { "replace", "masked", "filtered"}) : (astring.length == 11 ? a(astring, new String[] { "normal", "force", "move"}) : (astring.length == 12 && "filtered".equals(astring[9]) ? a(astring, (Collection) Block.REGISTRY.keySet()) : null))))); + } + + static class CommandCloneStoredTileEntity { + + public final BlockPosition a; + public final IBlockData b; + public final NBTTagCompound c; + + public CommandCloneStoredTileEntity(BlockPosition blockposition, IBlockData iblockdata, NBTTagCompound nbttagcompound) { + this.a = blockposition; + this.b = iblockdata; + this.c = nbttagcompound; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandDebug.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandDebug.java new file mode 100644 index 0000000..916298c --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandDebug.java @@ -0,0 +1,141 @@ +package net.minecraft.server; + +import java.io.File; +import java.io.FileWriter; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class CommandDebug extends CommandAbstract { + + private static final Logger a = LogManager.getLogger(); + private long b; + private int c; + + public CommandDebug() {} + + public String getCommand() { + return "debug"; + } + + public int a() { + return 3; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.debug.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length < 1) { + throw new ExceptionUsage("commands.debug.usage", new Object[0]); + } else { + if (astring[0].equals("start")) { + if (astring.length != 1) { + throw new ExceptionUsage("commands.debug.usage", new Object[0]); + } + + a(icommandlistener, this, "commands.debug.start", new Object[0]); + MinecraftServer.getServer().au(); + this.b = MinecraftServer.az(); + this.c = MinecraftServer.getServer().at(); + } else { + if (!astring[0].equals("stop")) { + throw new ExceptionUsage("commands.debug.usage", new Object[0]); + } + + if (astring.length != 1) { + throw new ExceptionUsage("commands.debug.usage", new Object[0]); + } + + if (!MinecraftServer.getServer().methodProfiler.a) { + throw new CommandException("commands.debug.notStarted", new Object[0]); + } + + long i = MinecraftServer.az(); + int j = MinecraftServer.getServer().at(); + long k = i - this.b; + int l = j - this.c; + + this.a(k, l); + MinecraftServer.getServer().methodProfiler.a = false; + a(icommandlistener, this, "commands.debug.stop", new Object[] { Float.valueOf((float) k / 1000.0F), Integer.valueOf(l)}); + } + + } + } + + private void a(long i, int j) { + File file = new File(MinecraftServer.getServer().d("debug"), "profile-results-" + (new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss")).format(new Date()) + ".txt"); + + file.getParentFile().mkdirs(); + + try { + FileWriter filewriter = new FileWriter(file); + + filewriter.write(this.b(i, j)); + filewriter.close(); + } catch (Throwable throwable) { + CommandDebug.a.error("Could not save profiler results to " + file, throwable); + } + + } + + private String b(long i, int j) { + StringBuilder stringbuilder = new StringBuilder(); + + stringbuilder.append("---- Minecraft Profiler Results ----\n"); + stringbuilder.append("// "); + stringbuilder.append(d()); + stringbuilder.append("\n\n"); + stringbuilder.append("Time span: ").append(i).append(" ms\n"); + stringbuilder.append("Tick span: ").append(j).append(" ticks\n"); + stringbuilder.append("// This is approximately ").append(String.format("%.2f", new Object[] { Float.valueOf((float) j / ((float) i / 1000.0F))})).append(" ticks per second. It should be ").append(20).append(" ticks per second\n\n"); + stringbuilder.append("--- BEGIN PROFILE DUMP ---\n\n"); + this.a(0, "root", stringbuilder); + stringbuilder.append("--- END PROFILE DUMP ---\n\n"); + return stringbuilder.toString(); + } + + private void a(int i, String s, StringBuilder stringbuilder) { + List list = MinecraftServer.getServer().methodProfiler.b(s); + + if (list != null && list.size() >= 3) { + for (int j = 1; j < list.size(); ++j) { + MethodProfiler.ProfilerInfo methodprofiler_profilerinfo = (MethodProfiler.ProfilerInfo) list.get(j); + + stringbuilder.append(String.format("[%02d] ", new Object[] { Integer.valueOf(i)})); + + for (int k = 0; k < i; ++k) { + stringbuilder.append(" "); + } + + stringbuilder.append(methodprofiler_profilerinfo.c).append(" - ").append(String.format("%.2f", new Object[] { Double.valueOf(methodprofiler_profilerinfo.a)})).append("%/").append(String.format("%.2f", new Object[] { Double.valueOf(methodprofiler_profilerinfo.b)})).append("%\n"); + if (!methodprofiler_profilerinfo.c.equals("unspecified")) { + try { + this.a(i + 1, s + "." + methodprofiler_profilerinfo.c, stringbuilder); + } catch (Exception exception) { + stringbuilder.append("[[ EXCEPTION ").append(exception).append(" ]]"); + } + } + } + + } + } + + private static String d() { + String[] astring = new String[] { "Shiny numbers!", "Am I not running fast enough? :(", "I\'m working as hard as I can!", "Will I ever be good enough for you? :(", "Speedy. Zoooooom!", "Hello world", "40% better than a crash report.", "Now with extra numbers", "Now with less numbers", "Now with the same numbers", "You should add flames to things, it makes them go faster!", "Do you feel the need for... optimization?", "*cracks redstone whip*", "Maybe if you treated it better then it\'ll have more motivation to work faster! Poor server."}; + + try { + return astring[(int) (System.nanoTime() % (long) astring.length)]; + } catch (Throwable throwable) { + return "Witty comment unavailable :("; + } + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + return astring.length == 1 ? a(astring, new String[] { "start", "stop"}) : null; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandDeop.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandDeop.java new file mode 100644 index 0000000..34d98bb --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandDeop.java @@ -0,0 +1,41 @@ +package net.minecraft.server; + +import com.mojang.authlib.GameProfile; +import java.util.List; + +public class CommandDeop extends CommandAbstract { + + public CommandDeop() {} + + public String getCommand() { + return "deop"; + } + + public int a() { + return 3; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.deop.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length == 1 && astring[0].length() > 0) { + MinecraftServer minecraftserver = MinecraftServer.getServer(); + GameProfile gameprofile = minecraftserver.getPlayerList().getOPs().a(astring[0]); + + if (gameprofile == null) { + throw new CommandException("commands.deop.failed", new Object[] { astring[0]}); + } else { + minecraftserver.getPlayerList().removeOp(gameprofile); + a(icommandlistener, this, "commands.deop.success", new Object[] { astring[0]}); + } + } else { + throw new ExceptionUsage("commands.deop.usage", new Object[0]); + } + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + return astring.length == 1 ? a(astring, MinecraftServer.getServer().getPlayerList().n()) : null; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandDifficulty.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandDifficulty.java new file mode 100644 index 0000000..dd59948 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandDifficulty.java @@ -0,0 +1,39 @@ +package net.minecraft.server; + +import java.util.List; + +public class CommandDifficulty extends CommandAbstract { + + public CommandDifficulty() {} + + public String getCommand() { + return "difficulty"; + } + + public int a() { + return 2; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.difficulty.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length <= 0) { + throw new ExceptionUsage("commands.difficulty.usage", new Object[0]); + } else { + EnumDifficulty enumdifficulty = this.e(astring[0]); + + MinecraftServer.getServer().a(enumdifficulty); + a(icommandlistener, this, "commands.difficulty.success", new Object[] { new ChatMessage(enumdifficulty.b(), new Object[0])}); + } + } + + protected EnumDifficulty e(String s) throws ExceptionInvalidNumber { + return !s.equalsIgnoreCase("peaceful") && !s.equalsIgnoreCase("p") ? (!s.equalsIgnoreCase("easy") && !s.equalsIgnoreCase("e") ? (!s.equalsIgnoreCase("normal") && !s.equalsIgnoreCase("n") ? (!s.equalsIgnoreCase("hard") && !s.equalsIgnoreCase("h") ? EnumDifficulty.getById(a(s, 0, 3)) : EnumDifficulty.HARD) : EnumDifficulty.NORMAL) : EnumDifficulty.EASY) : EnumDifficulty.PEACEFUL; + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + return astring.length == 1 ? a(astring, new String[] { "peaceful", "easy", "normal", "hard"}) : null; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/CommandDispatcher.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandDispatcher.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/CommandDispatcher.java rename to eSpigot-Server/src/main/java/net/minecraft/server/CommandDispatcher.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandEffect.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandEffect.java new file mode 100644 index 0000000..743d385 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandEffect.java @@ -0,0 +1,107 @@ +package net.minecraft.server; + +import java.util.Collection; +import java.util.List; + +public class CommandEffect extends CommandAbstract { + + public CommandEffect() {} + + public String getCommand() { + return "effect"; + } + + public int a() { + return 2; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.effect.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length < 2) { + throw new ExceptionUsage("commands.effect.usage", new Object[0]); + } else { + EntityLiving entityliving = (EntityLiving) a(icommandlistener, astring[0], EntityLiving.class); + + if (astring[1].equals("clear")) { + if (entityliving.getEffects().isEmpty()) { + throw new CommandException("commands.effect.failure.notActive.all", new Object[] { entityliving.getName()}); + } else { + entityliving.removeAllEffects(); + a(icommandlistener, this, "commands.effect.success.removed.all", new Object[] { entityliving.getName()}); + } + } else { + int i; + + try { + i = a(astring[1], 1); + } catch (ExceptionInvalidNumber exceptioninvalidnumber) { + MobEffectList mobeffectlist = MobEffectList.b(astring[1]); + + if (mobeffectlist == null) { + throw exceptioninvalidnumber; + } + + i = mobeffectlist.id; + } + + int j = 600; + int k = 30; + int l = 0; + + if (i >= 0 && i < MobEffectList.byId.length && MobEffectList.byId[i] != null) { + MobEffectList mobeffectlist1 = MobEffectList.byId[i]; + + if (astring.length >= 3) { + k = a(astring[2], 0, 1000000); + if (mobeffectlist1.isInstant()) { + j = k; + } else { + j = k * 20; + } + } else if (mobeffectlist1.isInstant()) { + j = 1; + } + + if (astring.length >= 4) { + l = a(astring[3], 0, 255); + } + + boolean flag = true; + + if (astring.length >= 5 && "true".equalsIgnoreCase(astring[4])) { + flag = false; + } + + if (k > 0) { + MobEffect mobeffect = new MobEffect(i, j, l, false, flag); + + entityliving.addEffect(mobeffect); + a(icommandlistener, this, "commands.effect.success", new Object[] { new ChatMessage(mobeffect.g(), new Object[0]), Integer.valueOf(i), Integer.valueOf(l), entityliving.getName(), Integer.valueOf(k)}); + } else if (entityliving.hasEffect(i)) { + entityliving.removeEffect(i); + a(icommandlistener, this, "commands.effect.success.removed", new Object[] { new ChatMessage(mobeffectlist1.a(), new Object[0]), entityliving.getName()}); + } else { + throw new CommandException("commands.effect.failure.notActive", new Object[] { new ChatMessage(mobeffectlist1.a(), new Object[0]), entityliving.getName()}); + } + } else { + throw new ExceptionInvalidNumber("commands.effect.notFound", new Object[] { Integer.valueOf(i)}); + } + } + } + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + return astring.length == 1 ? a(astring, this.d()) : (astring.length == 2 ? a(astring, (Collection) MobEffectList.c()) : (astring.length == 5 ? a(astring, new String[] { "true", "false"}) : null)); + } + + protected String[] d() { + return MinecraftServer.getServer().getPlayers(); + } + + public boolean isListStart(String[] astring, int i) { + return i == 0; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandEnchant.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandEnchant.java new file mode 100644 index 0000000..500a6a9 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandEnchant.java @@ -0,0 +1,98 @@ +package net.minecraft.server; + +import java.util.Collection; +import java.util.List; + +public class CommandEnchant extends CommandAbstract { + + public CommandEnchant() {} + + public String getCommand() { + return "enchant"; + } + + public int a() { + return 2; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.enchant.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length < 2) { + throw new ExceptionUsage("commands.enchant.usage", new Object[0]); + } else { + EntityPlayer entityplayer = a(icommandlistener, astring[0]); + + icommandlistener.a(CommandObjectiveExecutor.EnumCommandResult.AFFECTED_ITEMS, 0); + + int i; + + try { + i = a(astring[1], 0); + } catch (ExceptionInvalidNumber exceptioninvalidnumber) { + Enchantment enchantment = Enchantment.getByName(astring[1]); + + if (enchantment == null) { + throw exceptioninvalidnumber; + } + + i = enchantment.id; + } + + int j = 1; + ItemStack itemstack = entityplayer.bZ(); + + if (itemstack == null) { + throw new CommandException("commands.enchant.noItem", new Object[0]); + } else { + Enchantment enchantment1 = Enchantment.getById(i); + + if (enchantment1 == null) { + throw new ExceptionInvalidNumber("commands.enchant.notFound", new Object[] { Integer.valueOf(i)}); + } else if (!enchantment1.canEnchant(itemstack)) { + throw new CommandException("commands.enchant.cantEnchant", new Object[0]); + } else { + if (astring.length >= 3) { + j = a(astring[2], enchantment1.getStartLevel(), enchantment1.getMaxLevel()); + } + + if (itemstack.hasTag()) { + NBTTagList nbttaglist = itemstack.getEnchantments(); + + if (nbttaglist != null) { + for (int k = 0; k < nbttaglist.size(); ++k) { + short short0 = nbttaglist.get(k).getShort("id"); + + if (Enchantment.getById(short0) != null) { + Enchantment enchantment2 = Enchantment.getById(short0); + + if (!enchantment2.a(enchantment1)) { + throw new CommandException("commands.enchant.cantCombine", new Object[] { enchantment1.d(j), enchantment2.d(nbttaglist.get(k).getShort("lvl"))}); + } + } + } + } + } + + itemstack.addEnchantment(enchantment1, j); + a(icommandlistener, this, "commands.enchant.success", new Object[0]); + icommandlistener.a(CommandObjectiveExecutor.EnumCommandResult.AFFECTED_ITEMS, 1); + } + } + } + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + return astring.length == 1 ? a(astring, this.d()) : (astring.length == 2 ? a(astring, (Collection) Enchantment.getEffects()) : null); + } + + protected String[] d() { + return MinecraftServer.getServer().getPlayers(); + } + + public boolean isListStart(String[] astring, int i) { + return i == 0; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandEntityData.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandEntityData.java new file mode 100644 index 0000000..464c1d3 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandEntityData.java @@ -0,0 +1,57 @@ +package net.minecraft.server; + +public class CommandEntityData extends CommandAbstract { + + public CommandEntityData() {} + + public String getCommand() { + return "entitydata"; + } + + public int a() { + return 2; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.entitydata.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length < 2) { + throw new ExceptionUsage("commands.entitydata.usage", new Object[0]); + } else { + Entity entity = b(icommandlistener, astring[0]); + + if (entity instanceof EntityHuman) { + throw new CommandException("commands.entitydata.noPlayers", new Object[] { entity.getScoreboardDisplayName()}); + } else { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + + entity.e(nbttagcompound); + NBTTagCompound nbttagcompound1 = (NBTTagCompound) nbttagcompound.clone(); + + NBTTagCompound nbttagcompound2; + + try { + nbttagcompound2 = MojangsonParser.parse(a(icommandlistener, astring, 1).c()); + } catch (MojangsonParseException mojangsonparseexception) { + throw new CommandException("commands.entitydata.tagError", new Object[] { mojangsonparseexception.getMessage()}); + } + + nbttagcompound2.remove("UUIDMost"); + nbttagcompound2.remove("UUIDLeast"); + nbttagcompound.a(nbttagcompound2); + if (nbttagcompound.equals(nbttagcompound1)) { + throw new CommandException("commands.entitydata.failed", new Object[] { nbttagcompound.toString()}); + } else { + entity.f(nbttagcompound); + a(icommandlistener, this, "commands.entitydata.success", new Object[] { nbttagcompound.toString()}); + } + } + } + } + + public boolean isListStart(String[] astring, int i) { + return i == 0; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandException.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandException.java new file mode 100644 index 0000000..abe7b7b --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandException.java @@ -0,0 +1,15 @@ +package net.minecraft.server; + +public class CommandException extends Exception { + + private final Object[] a; + + public CommandException(String s, Object... aobject) { + super(s); + this.a = aobject; + } + + public Object[] getArgs() { + return this.a; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/CommandExecute.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandExecute.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/CommandExecute.java rename to eSpigot-Server/src/main/java/net/minecraft/server/CommandExecute.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandFill.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandFill.java new file mode 100644 index 0000000..aab43b1 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandFill.java @@ -0,0 +1,168 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; + +public class CommandFill extends CommandAbstract { + + public CommandFill() {} + + public String getCommand() { + return "fill"; + } + + public int a() { + return 2; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.fill.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length < 7) { + throw new ExceptionUsage("commands.fill.usage", new Object[0]); + } else { + icommandlistener.a(CommandObjectiveExecutor.EnumCommandResult.AFFECTED_BLOCKS, 0); + BlockPosition blockposition = a(icommandlistener, astring, 0, false); + BlockPosition blockposition1 = a(icommandlistener, astring, 3, false); + Block block = CommandAbstract.g(icommandlistener, astring[6]); + int i = 0; + + if (astring.length >= 8) { + i = a(astring[7], 0, 15); + } + + BlockPosition blockposition2 = new BlockPosition(Math.min(blockposition.getX(), blockposition1.getX()), Math.min(blockposition.getY(), blockposition1.getY()), Math.min(blockposition.getZ(), blockposition1.getZ())); + BlockPosition blockposition3 = new BlockPosition(Math.max(blockposition.getX(), blockposition1.getX()), Math.max(blockposition.getY(), blockposition1.getY()), Math.max(blockposition.getZ(), blockposition1.getZ())); + int j = (blockposition3.getX() - blockposition2.getX() + 1) * (blockposition3.getY() - blockposition2.getY() + 1) * (blockposition3.getZ() - blockposition2.getZ() + 1); + + if (j > '\u8000') { + throw new CommandException("commands.fill.tooManyBlocks", new Object[] { Integer.valueOf(j), Integer.valueOf('\u8000')}); + } else if (blockposition2.getY() >= 0 && blockposition3.getY() < 256) { + World world = icommandlistener.getWorld(); + + for (int k = blockposition2.getZ(); k < blockposition3.getZ() + 16; k += 16) { + for (int l = blockposition2.getX(); l < blockposition3.getX() + 16; l += 16) { + if (!world.isLoaded(new BlockPosition(l, blockposition3.getY() - blockposition2.getY(), k))) { + throw new CommandException("commands.fill.outOfWorld", new Object[0]); + } + } + } + + NBTTagCompound nbttagcompound = new NBTTagCompound(); + boolean flag = false; + + if (astring.length >= 10 && block.isTileEntity()) { + String s = a(icommandlistener, astring, 9).c(); + + try { + nbttagcompound = MojangsonParser.parse(s); + flag = true; + } catch (MojangsonParseException mojangsonparseexception) { + throw new CommandException("commands.fill.tagError", new Object[] { mojangsonparseexception.getMessage()}); + } + } + + ArrayList arraylist = Lists.newArrayList(); + + j = 0; + + for (int i1 = blockposition2.getZ(); i1 <= blockposition3.getZ(); ++i1) { + for (int j1 = blockposition2.getY(); j1 <= blockposition3.getY(); ++j1) { + for (int k1 = blockposition2.getX(); k1 <= blockposition3.getX(); ++k1) { + BlockPosition blockposition4 = new BlockPosition(k1, j1, i1); + IBlockData iblockdata; + + if (astring.length >= 9) { + if (!astring[8].equals("outline") && !astring[8].equals("hollow")) { + if (astring[8].equals("destroy")) { + world.setAir(blockposition4, true); + } else if (astring[8].equals("keep")) { + if (!world.isEmpty(blockposition4)) { + continue; + } + } else if (astring[8].equals("replace") && !block.isTileEntity()) { + if (astring.length > 9) { + Block block1 = CommandAbstract.g(icommandlistener, astring[9]); + + if (world.getType(blockposition4).getBlock() != block1) { + continue; + } + } + + if (astring.length > 10) { + int l1 = CommandAbstract.a(astring[10]); + + iblockdata = world.getType(blockposition4); + if (iblockdata.getBlock().toLegacyData(iblockdata) != l1) { + continue; + } + } + } + } else if (k1 != blockposition2.getX() && k1 != blockposition3.getX() && j1 != blockposition2.getY() && j1 != blockposition3.getY() && i1 != blockposition2.getZ() && i1 != blockposition3.getZ()) { + if (astring[8].equals("hollow")) { + world.setTypeAndData(blockposition4, Blocks.AIR.getBlockData(), 2); + arraylist.add(blockposition4); + } + continue; + } + } + + TileEntity tileentity = world.getTileEntity(blockposition4); + + if (tileentity != null) { + if (tileentity instanceof IInventory) { + ((IInventory) tileentity).l(); + } + + world.setTypeAndData(blockposition4, Blocks.BARRIER.getBlockData(), block == Blocks.BARRIER ? 2 : 4); + } + + iblockdata = block.fromLegacyData(i); + if (world.setTypeAndData(blockposition4, iblockdata, 2)) { + arraylist.add(blockposition4); + ++j; + if (flag) { + TileEntity tileentity1 = world.getTileEntity(blockposition4); + + if (tileentity1 != null) { + nbttagcompound.setInt("x", blockposition4.getX()); + nbttagcompound.setInt("y", blockposition4.getY()); + nbttagcompound.setInt("z", blockposition4.getZ()); + tileentity1.a(nbttagcompound); + } + } + } + } + } + } + + Iterator iterator = arraylist.iterator(); + + while (iterator.hasNext()) { + BlockPosition blockposition5 = (BlockPosition) iterator.next(); + Block block2 = world.getType(blockposition5).getBlock(); + + world.update(blockposition5, block2); + } + + if (j <= 0) { + throw new CommandException("commands.fill.failed", new Object[0]); + } else { + icommandlistener.a(CommandObjectiveExecutor.EnumCommandResult.AFFECTED_BLOCKS, j); + a(icommandlistener, this, "commands.fill.success", new Object[] { Integer.valueOf(j)}); + } + } else { + throw new CommandException("commands.fill.outOfWorld", new Object[0]); + } + } + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + return astring.length > 0 && astring.length <= 3 ? a(astring, 0, blockposition) : (astring.length > 3 && astring.length <= 6 ? a(astring, 3, blockposition) : (astring.length == 7 ? a(astring, (Collection) Block.REGISTRY.keySet()) : (astring.length == 9 ? a(astring, new String[] { "replace", "destroy", "keep", "hollow", "outline"}) : (astring.length == 10 && "replace".equals(astring[8]) ? a(astring, (Collection) Block.REGISTRY.keySet()) : null)))); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/CommandGamemode.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandGamemode.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/CommandGamemode.java rename to eSpigot-Server/src/main/java/net/minecraft/server/CommandGamemode.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandGamemodeDefault.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandGamemodeDefault.java new file mode 100644 index 0000000..cfeaf32 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandGamemodeDefault.java @@ -0,0 +1,42 @@ +package net.minecraft.server; + +import java.util.Iterator; + +public class CommandGamemodeDefault extends CommandGamemode { + + public CommandGamemodeDefault() {} + + public String getCommand() { + return "defaultgamemode"; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.defaultgamemode.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length <= 0) { + throw new ExceptionUsage("commands.defaultgamemode.usage", new Object[0]); + } else { + WorldSettings.EnumGamemode worldsettings_enumgamemode = this.h(icommandlistener, astring[0]); + + this.a(worldsettings_enumgamemode); + a(icommandlistener, this, "commands.defaultgamemode.success", new Object[] { new ChatMessage("gameMode." + worldsettings_enumgamemode.b(), new Object[0])}); + } + } + + protected void a(WorldSettings.EnumGamemode worldsettings_enumgamemode) { + MinecraftServer minecraftserver = MinecraftServer.getServer(); + + minecraftserver.setGamemode(worldsettings_enumgamemode); + EntityPlayer entityplayer; + + if (minecraftserver.getForceGamemode()) { + for (Iterator iterator = MinecraftServer.getServer().getPlayerList().v().iterator(); iterator.hasNext(); entityplayer.fallDistance = 0.0F) { + entityplayer = (EntityPlayer) iterator.next(); + entityplayer.a(worldsettings_enumgamemode); + } + } + + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/CommandGamerule.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandGamerule.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/CommandGamerule.java rename to eSpigot-Server/src/main/java/net/minecraft/server/CommandGamerule.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandGive.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandGive.java new file mode 100644 index 0000000..2449723 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandGive.java @@ -0,0 +1,82 @@ +package net.minecraft.server; + +import java.util.Collection; +import java.util.List; + +public class CommandGive extends CommandAbstract { + + public CommandGive() {} + + public String getCommand() { + return "give"; + } + + public int a() { + return 2; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.give.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length < 2) { + throw new ExceptionUsage("commands.give.usage", new Object[0]); + } else { + EntityPlayer entityplayer = a(icommandlistener, astring[0]); + Item item = f(icommandlistener, astring[1]); + int i = astring.length >= 3 ? a(astring[2], 1, 64) : 1; + int j = astring.length >= 4 ? a(astring[3]) : 0; + ItemStack itemstack = new ItemStack(item, i, j); + + if (astring.length >= 5) { + String s = a(icommandlistener, astring, 4).c(); + + try { + itemstack.setTag(MojangsonParser.parse(s)); + } catch (MojangsonParseException mojangsonparseexception) { + throw new CommandException("commands.give.tagError", new Object[] { mojangsonparseexception.getMessage()}); + } + } + + boolean flag = entityplayer.inventory.pickup(itemstack); + + if (flag) { + entityplayer.world.makeSound(entityplayer, "random.pop", 0.2F, ((entityplayer.bc().nextFloat() - entityplayer.bc().nextFloat()) * 0.7F + 1.0F) * 2.0F); + entityplayer.defaultContainer.b(); + } + + EntityItem entityitem; + + if (flag && itemstack.count <= 0) { + itemstack.count = 1; + icommandlistener.a(CommandObjectiveExecutor.EnumCommandResult.AFFECTED_ITEMS, i); + entityitem = entityplayer.drop(itemstack, false); + if (entityitem != null) { + entityitem.v(); + } + } else { + icommandlistener.a(CommandObjectiveExecutor.EnumCommandResult.AFFECTED_ITEMS, i - itemstack.count); + entityitem = entityplayer.drop(itemstack, false); + if (entityitem != null) { + entityitem.q(); + entityitem.b(entityplayer.getName()); + } + } + + a(icommandlistener, this, "commands.give.success", new Object[] { itemstack.C(), Integer.valueOf(i), entityplayer.getName()}); + } + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + return astring.length == 1 ? a(astring, this.d()) : (astring.length == 2 ? a(astring, (Collection) Item.REGISTRY.keySet()) : null); + } + + protected String[] d() { + return MinecraftServer.getServer().getPlayers(); + } + + public boolean isListStart(String[] astring, int i) { + return i == 0; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandHandler.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandHandler.java new file mode 100644 index 0000000..f0c7e1f --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandHandler.java @@ -0,0 +1,186 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.Map.Entry; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class CommandHandler implements ICommandHandler { + + private static final Logger a = LogManager.getLogger(); + private final Map b = Maps.newHashMap(); + private final Set c = Sets.newHashSet(); + + public CommandHandler() {} + + public int a(ICommandListener icommandlistener, String s) { + s = s.trim(); + if (s.startsWith("/")) { + s = s.substring(1); + } + + String[] astring = s.split(" "); + String s1 = astring[0]; + + astring = a(astring); + ICommand icommand = (ICommand) this.b.get(s1); + int i = this.a(icommand, astring); + int j = 0; + ChatMessage chatmessage; + + if (icommand == null) { + chatmessage = new ChatMessage("commands.generic.notFound", new Object[0]); + chatmessage.getChatModifier().setColor(EnumChatFormat.RED); + icommandlistener.sendMessage(chatmessage); + } else if (icommand.canUse(icommandlistener)) { + if (i > -1) { + List list = PlayerSelector.getPlayers(icommandlistener, astring[i], Entity.class); + String s2 = astring[i]; + + icommandlistener.a(CommandObjectiveExecutor.EnumCommandResult.AFFECTED_ENTITIES, list.size()); + Iterator iterator = list.iterator(); + + while (iterator.hasNext()) { + Entity entity = (Entity) iterator.next(); + + astring[i] = entity.getUniqueID().toString(); + if (this.a(icommandlistener, astring, icommand, s)) { + ++j; + } + } + + astring[i] = s2; + } else { + icommandlistener.a(CommandObjectiveExecutor.EnumCommandResult.AFFECTED_ENTITIES, 1); + if (this.a(icommandlistener, astring, icommand, s)) { + ++j; + } + } + } else { + chatmessage = new ChatMessage("commands.generic.permission", new Object[0]); + chatmessage.getChatModifier().setColor(EnumChatFormat.RED); + icommandlistener.sendMessage(chatmessage); + } + + icommandlistener.a(CommandObjectiveExecutor.EnumCommandResult.SUCCESS_COUNT, j); + return j; + } + + protected boolean a(ICommandListener icommandlistener, String[] astring, ICommand icommand, String s) { + ChatMessage chatmessage; + + try { + icommand.execute(icommandlistener, astring); + return true; + } catch (ExceptionUsage exceptionusage) { + chatmessage = new ChatMessage("commands.generic.usage", new Object[] { new ChatMessage(exceptionusage.getMessage(), exceptionusage.getArgs())}); + chatmessage.getChatModifier().setColor(EnumChatFormat.RED); + icommandlistener.sendMessage(chatmessage); + } catch (CommandException commandexception) { + chatmessage = new ChatMessage(commandexception.getMessage(), commandexception.getArgs()); + chatmessage.getChatModifier().setColor(EnumChatFormat.RED); + icommandlistener.sendMessage(chatmessage); + } catch (Throwable throwable) { + chatmessage = new ChatMessage("commands.generic.exception", new Object[0]); + chatmessage.getChatModifier().setColor(EnumChatFormat.RED); + icommandlistener.sendMessage(chatmessage); + CommandHandler.a.warn("Couldn\'t process command: \'" + s + "\'"); + } + + return false; + } + + public ICommand a(ICommand icommand) { + this.b.put(icommand.getCommand(), icommand); + this.c.add(icommand); + Iterator iterator = icommand.b().iterator(); + + while (iterator.hasNext()) { + String s = (String) iterator.next(); + ICommand icommand1 = (ICommand) this.b.get(s); + + if (icommand1 == null || !icommand1.getCommand().equals(s)) { + this.b.put(s, icommand); + } + } + + return icommand; + } + + private static String[] a(String[] astring) { + String[] astring1 = new String[astring.length - 1]; + + System.arraycopy(astring, 1, astring1, 0, astring.length - 1); + return astring1; + } + + public List a(ICommandListener icommandlistener, String s, BlockPosition blockposition) { + String[] astring = s.split(" ", -1); + String s1 = astring[0]; + + if (astring.length == 1) { + ArrayList arraylist = Lists.newArrayList(); + Iterator iterator = this.b.entrySet().iterator(); + + while (iterator.hasNext()) { + Entry entry = (Entry) iterator.next(); + + if (CommandAbstract.a(s1, (String) entry.getKey()) && ((ICommand) entry.getValue()).canUse(icommandlistener)) { + arraylist.add(entry.getKey()); + } + } + + return arraylist; + } else { + if (astring.length > 1) { + ICommand icommand = (ICommand) this.b.get(s1); + + if (icommand != null && icommand.canUse(icommandlistener)) { + return icommand.tabComplete(icommandlistener, a(astring), blockposition); + } + } + + return null; + } + } + + public List a(ICommandListener icommandlistener) { + ArrayList arraylist = Lists.newArrayList(); + Iterator iterator = this.c.iterator(); + + while (iterator.hasNext()) { + ICommand icommand = (ICommand) iterator.next(); + + if (icommand.canUse(icommandlistener)) { + arraylist.add(icommand); + } + } + + return arraylist; + } + + public Map getCommands() { + return this.b; + } + + private int a(ICommand icommand, String[] astring) { + if (icommand == null) { + return -1; + } else { + for (int i = 0; i < astring.length; ++i) { + if (icommand.isListStart(astring, i) && PlayerSelector.isList(astring[i])) { + return i; + } + } + + return -1; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandHelp.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandHelp.java new file mode 100644 index 0000000..b490b13 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandHelp.java @@ -0,0 +1,97 @@ +package net.minecraft.server; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Set; + +public class CommandHelp extends CommandAbstract { + + public CommandHelp() {} + + public String getCommand() { + return "help"; + } + + public int a() { + return 0; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.help.usage"; + } + + public List b() { + return Arrays.asList(new String[] { "?"}); + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + List list = this.d(icommandlistener); + boolean flag = true; + int i = (list.size() - 1) / 7; + boolean flag1 = false; + + int j; + + try { + j = astring.length == 0 ? 0 : a(astring[0], 1, i + 1) - 1; + } catch (ExceptionInvalidNumber exceptioninvalidnumber) { + Map map = this.d(); + ICommand icommand = (ICommand) map.get(astring[0]); + + if (icommand != null) { + throw new ExceptionUsage(icommand.getUsage(icommandlistener), new Object[0]); + } + + if (MathHelper.a(astring[0], -1) != -1) { + throw exceptioninvalidnumber; + } + + throw new ExceptionUnknownCommand(); + } + + int k = Math.min((j + 1) * 7, list.size()); + ChatMessage chatmessage = new ChatMessage("commands.help.header", new Object[] { Integer.valueOf(j + 1), Integer.valueOf(i + 1)}); + + chatmessage.getChatModifier().setColor(EnumChatFormat.DARK_GREEN); + icommandlistener.sendMessage(chatmessage); + + for (int l = j * 7; l < k; ++l) { + ICommand icommand1 = (ICommand) list.get(l); + ChatMessage chatmessage1 = new ChatMessage(icommand1.getUsage(icommandlistener), new Object[0]); + + chatmessage1.getChatModifier().setChatClickable(new ChatClickable(ChatClickable.EnumClickAction.SUGGEST_COMMAND, "/" + icommand1.getCommand() + " ")); + icommandlistener.sendMessage(chatmessage1); + } + + if (j == 0 && icommandlistener instanceof EntityHuman) { + ChatMessage chatmessage2 = new ChatMessage("commands.help.footer", new Object[0]); + + chatmessage2.getChatModifier().setColor(EnumChatFormat.GREEN); + icommandlistener.sendMessage(chatmessage2); + } + + } + + protected List d(ICommandListener icommandlistener) { + List list = MinecraftServer.getServer().getCommandHandler().a(icommandlistener); + + Collections.sort(list); + return list; + } + + protected Map d() { + return MinecraftServer.getServer().getCommandHandler().getCommands(); + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + if (astring.length == 1) { + Set set = this.d().keySet(); + + return a(astring, (String[]) set.toArray(new String[set.size()])); + } else { + return null; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandIdleTimeout.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandIdleTimeout.java new file mode 100644 index 0000000..2d11e2e --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandIdleTimeout.java @@ -0,0 +1,29 @@ +package net.minecraft.server; + +public class CommandIdleTimeout extends CommandAbstract { + + public CommandIdleTimeout() {} + + public String getCommand() { + return "setidletimeout"; + } + + public int a() { + return 3; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.setidletimeout.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length != 1) { + throw new ExceptionUsage("commands.setidletimeout.usage", new Object[0]); + } else { + int i = a(astring[0], 0); + + MinecraftServer.getServer().setIdleTimeout(i); + a(icommandlistener, this, "commands.setidletimeout.success", new Object[] { Integer.valueOf(i)}); + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandKick.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandKick.java new file mode 100644 index 0000000..909087d --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandKick.java @@ -0,0 +1,51 @@ +package net.minecraft.server; + +import java.util.List; + +public class CommandKick extends CommandAbstract { + + public CommandKick() {} + + public String getCommand() { + return "kick"; + } + + public int a() { + return 3; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.kick.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length > 0 && astring[0].length() > 1) { + EntityPlayer entityplayer = MinecraftServer.getServer().getPlayerList().getPlayer(astring[0]); + String s = "Kicked by an operator."; + boolean flag = false; + + if (entityplayer == null) { + throw new ExceptionPlayerNotFound(); + } else { + if (astring.length >= 2) { + s = a(icommandlistener, astring, 1).c(); + flag = true; + } + + entityplayer.playerConnection.disconnect(s); + if (flag) { + a(icommandlistener, this, "commands.kick.success.reason", new Object[] { entityplayer.getName(), s}); + } else { + a(icommandlistener, this, "commands.kick.success", new Object[] { entityplayer.getName()}); + } + + } + } else { + throw new ExceptionUsage("commands.kick.usage", new Object[0]); + } + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + return astring.length >= 1 ? a(astring, MinecraftServer.getServer().getPlayers()) : null; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandKill.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandKill.java new file mode 100644 index 0000000..682909b --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandKill.java @@ -0,0 +1,42 @@ +package net.minecraft.server; + +import java.util.List; + +public class CommandKill extends CommandAbstract { + + public CommandKill() {} + + public String getCommand() { + return "kill"; + } + + public int a() { + return 2; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.kill.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length == 0) { + EntityPlayer entityplayer = b(icommandlistener); + + entityplayer.G(); + a(icommandlistener, this, "commands.kill.successful", new Object[] { entityplayer.getScoreboardDisplayName()}); + } else { + Entity entity = b(icommandlistener, astring[0]); + + entity.G(); + a(icommandlistener, this, "commands.kill.successful", new Object[] { entity.getScoreboardDisplayName()}); + } + } + + public boolean isListStart(String[] astring, int i) { + return i == 0; + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + return astring.length == 1 ? a(astring, MinecraftServer.getServer().getPlayers()) : null; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandList.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandList.java new file mode 100644 index 0000000..f72f4bc --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandList.java @@ -0,0 +1,26 @@ +package net.minecraft.server; + +public class CommandList extends CommandAbstract { + + public CommandList() {} + + public String getCommand() { + return "list"; + } + + public int a() { + return 0; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.players.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + int i = MinecraftServer.getServer().I(); + + icommandlistener.sendMessage(new ChatMessage("commands.players.list", new Object[] { Integer.valueOf(i), Integer.valueOf(MinecraftServer.getServer().J())})); + icommandlistener.sendMessage(new ChatComponentText(MinecraftServer.getServer().getPlayerList().b(astring.length > 0 && "uuids".equalsIgnoreCase(astring[0])))); + icommandlistener.a(CommandObjectiveExecutor.EnumCommandResult.QUERY_RESULT, i); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandMe.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandMe.java new file mode 100644 index 0000000..a1bb5a4 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandMe.java @@ -0,0 +1,34 @@ +package net.minecraft.server; + +import java.util.List; + +public class CommandMe extends CommandAbstract { + + public CommandMe() {} + + public String getCommand() { + return "me"; + } + + public int a() { + return 0; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.me.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length <= 0) { + throw new ExceptionUsage("commands.me.usage", new Object[0]); + } else { + IChatBaseComponent ichatbasecomponent = b(icommandlistener, astring, 0, !(icommandlistener instanceof EntityHuman)); + + MinecraftServer.getServer().getPlayerList().sendMessage(new ChatMessage("chat.type.emote", new Object[] { icommandlistener.getScoreboardDisplayName(), ichatbasecomponent})); + } + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + return a(astring, MinecraftServer.getServer().getPlayers()); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandObjectiveExecutor.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandObjectiveExecutor.java new file mode 100644 index 0000000..53bf236 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandObjectiveExecutor.java @@ -0,0 +1,231 @@ +package net.minecraft.server; + +public class CommandObjectiveExecutor { + + private static final int a = CommandObjectiveExecutor.EnumCommandResult.values().length; + private static final String[] b = new String[CommandObjectiveExecutor.a]; + private String[] c; + private String[] d; + + public CommandObjectiveExecutor() { + this.c = CommandObjectiveExecutor.b; + this.d = CommandObjectiveExecutor.b; + } + + public void a(final ICommandListener icommandlistener, CommandObjectiveExecutor.EnumCommandResult commandobjectiveexecutor_enumcommandresult, int i) { + String s = this.c[commandobjectiveexecutor_enumcommandresult.a()]; + + if (s != null) { + ICommandListener icommandlistener1 = new ICommandListener() { + public String getName() { + return icommandlistener.getName(); + } + + public IChatBaseComponent getScoreboardDisplayName() { + return icommandlistener.getScoreboardDisplayName(); + } + + public void sendMessage(IChatBaseComponent ichatbasecomponent) { + icommandlistener.sendMessage(ichatbasecomponent); + } + + public boolean a(int i, String s) { + return true; + } + + public BlockPosition getChunkCoordinates() { + return icommandlistener.getChunkCoordinates(); + } + + public Vec3D d() { + return icommandlistener.d(); + } + + public World getWorld() { + return icommandlistener.getWorld(); + } + + public Entity f() { + return icommandlistener.f(); + } + + public boolean getSendCommandFeedback() { + return icommandlistener.getSendCommandFeedback(); + } + + public void a(CommandObjectiveExecutor.EnumCommandResult commandobjectiveexecutor_enumcommandresult, int i) { + icommandlistener.a(commandobjectiveexecutor_enumcommandresult, i); + } + }; + + String s1; + + try { + s1 = CommandAbstract.e(icommandlistener1, s); + } catch (ExceptionEntityNotFound exceptionentitynotfound) { + return; + } + + String s2 = this.d[commandobjectiveexecutor_enumcommandresult.a()]; + + if (s2 != null) { + Scoreboard scoreboard = icommandlistener.getWorld().getScoreboard(); + ScoreboardObjective scoreboardobjective = scoreboard.getObjective(s2); + + if (scoreboardobjective != null) { + if (scoreboard.b(s1, scoreboardobjective)) { + ScoreboardScore scoreboardscore = scoreboard.getPlayerScoreForObjective(s1, scoreboardobjective); + + scoreboardscore.setScore(i); + } + } + } + } + } + + public void a(NBTTagCompound nbttagcompound) { + if (nbttagcompound.hasKeyOfType("CommandStats", 10)) { + NBTTagCompound nbttagcompound1 = nbttagcompound.getCompound("CommandStats"); + CommandObjectiveExecutor.EnumCommandResult[] acommandobjectiveexecutor_enumcommandresult = CommandObjectiveExecutor.EnumCommandResult.values(); + int i = acommandobjectiveexecutor_enumcommandresult.length; + + for (int j = 0; j < i; ++j) { + CommandObjectiveExecutor.EnumCommandResult commandobjectiveexecutor_enumcommandresult = acommandobjectiveexecutor_enumcommandresult[j]; + String s = commandobjectiveexecutor_enumcommandresult.b() + "Name"; + String s1 = commandobjectiveexecutor_enumcommandresult.b() + "Objective"; + + if (nbttagcompound1.hasKeyOfType(s, 8) && nbttagcompound1.hasKeyOfType(s1, 8)) { + String s2 = nbttagcompound1.getString(s); + String s3 = nbttagcompound1.getString(s1); + + a(this, commandobjectiveexecutor_enumcommandresult, s2, s3); + } + } + + } + } + + public void b(NBTTagCompound nbttagcompound) { + NBTTagCompound nbttagcompound1 = new NBTTagCompound(); + CommandObjectiveExecutor.EnumCommandResult[] acommandobjectiveexecutor_enumcommandresult = CommandObjectiveExecutor.EnumCommandResult.values(); + int i = acommandobjectiveexecutor_enumcommandresult.length; + + for (int j = 0; j < i; ++j) { + CommandObjectiveExecutor.EnumCommandResult commandobjectiveexecutor_enumcommandresult = acommandobjectiveexecutor_enumcommandresult[j]; + String s = this.c[commandobjectiveexecutor_enumcommandresult.a()]; + String s1 = this.d[commandobjectiveexecutor_enumcommandresult.a()]; + + if (s != null && s1 != null) { + nbttagcompound1.setString(commandobjectiveexecutor_enumcommandresult.b() + "Name", s); + nbttagcompound1.setString(commandobjectiveexecutor_enumcommandresult.b() + "Objective", s1); + } + } + + if (!nbttagcompound1.isEmpty()) { + nbttagcompound.set("CommandStats", nbttagcompound1); + } + + } + + public static void a(CommandObjectiveExecutor commandobjectiveexecutor, CommandObjectiveExecutor.EnumCommandResult commandobjectiveexecutor_enumcommandresult, String s, String s1) { + if (s != null && s.length() != 0 && s1 != null && s1.length() != 0) { + if (commandobjectiveexecutor.c == CommandObjectiveExecutor.b || commandobjectiveexecutor.d == CommandObjectiveExecutor.b) { + commandobjectiveexecutor.c = new String[CommandObjectiveExecutor.a]; + commandobjectiveexecutor.d = new String[CommandObjectiveExecutor.a]; + } + + commandobjectiveexecutor.c[commandobjectiveexecutor_enumcommandresult.a()] = s; + commandobjectiveexecutor.d[commandobjectiveexecutor_enumcommandresult.a()] = s1; + } else { + a(commandobjectiveexecutor, commandobjectiveexecutor_enumcommandresult); + } + } + + private static void a(CommandObjectiveExecutor commandobjectiveexecutor, CommandObjectiveExecutor.EnumCommandResult commandobjectiveexecutor_enumcommandresult) { + if (commandobjectiveexecutor.c != CommandObjectiveExecutor.b && commandobjectiveexecutor.d != CommandObjectiveExecutor.b) { + commandobjectiveexecutor.c[commandobjectiveexecutor_enumcommandresult.a()] = null; + commandobjectiveexecutor.d[commandobjectiveexecutor_enumcommandresult.a()] = null; + boolean flag = true; + CommandObjectiveExecutor.EnumCommandResult[] acommandobjectiveexecutor_enumcommandresult = CommandObjectiveExecutor.EnumCommandResult.values(); + int i = acommandobjectiveexecutor_enumcommandresult.length; + + for (int j = 0; j < i; ++j) { + CommandObjectiveExecutor.EnumCommandResult commandobjectiveexecutor_enumcommandresult1 = acommandobjectiveexecutor_enumcommandresult[j]; + + if (commandobjectiveexecutor.c[commandobjectiveexecutor_enumcommandresult1.a()] != null && commandobjectiveexecutor.d[commandobjectiveexecutor_enumcommandresult1.a()] != null) { + flag = false; + break; + } + } + + if (flag) { + commandobjectiveexecutor.c = CommandObjectiveExecutor.b; + commandobjectiveexecutor.d = CommandObjectiveExecutor.b; + } + + } + } + + public void a(CommandObjectiveExecutor commandobjectiveexecutor) { + CommandObjectiveExecutor.EnumCommandResult[] acommandobjectiveexecutor_enumcommandresult = CommandObjectiveExecutor.EnumCommandResult.values(); + int i = acommandobjectiveexecutor_enumcommandresult.length; + + for (int j = 0; j < i; ++j) { + CommandObjectiveExecutor.EnumCommandResult commandobjectiveexecutor_enumcommandresult = acommandobjectiveexecutor_enumcommandresult[j]; + + a(this, commandobjectiveexecutor_enumcommandresult, commandobjectiveexecutor.c[commandobjectiveexecutor_enumcommandresult.a()], commandobjectiveexecutor.d[commandobjectiveexecutor_enumcommandresult.a()]); + } + + } + + public static enum EnumCommandResult { + + SUCCESS_COUNT(0, "SuccessCount"), AFFECTED_BLOCKS(1, "AffectedBlocks"), AFFECTED_ENTITIES(2, "AffectedEntities"), AFFECTED_ITEMS(3, "AffectedItems"), QUERY_RESULT(4, "QueryResult"); + + final int f; + final String g; + + private EnumCommandResult(int i, String s) { + this.f = i; + this.g = s; + } + + public int a() { + return this.f; + } + + public String b() { + return this.g; + } + + public static String[] c() { + String[] astring = new String[values().length]; + int i = 0; + CommandObjectiveExecutor.EnumCommandResult[] acommandobjectiveexecutor_enumcommandresult = values(); + int j = acommandobjectiveexecutor_enumcommandresult.length; + + for (int k = 0; k < j; ++k) { + CommandObjectiveExecutor.EnumCommandResult commandobjectiveexecutor_enumcommandresult = acommandobjectiveexecutor_enumcommandresult[k]; + + astring[i++] = commandobjectiveexecutor_enumcommandresult.b(); + } + + return astring; + } + + public static CommandObjectiveExecutor.EnumCommandResult a(String s) { + CommandObjectiveExecutor.EnumCommandResult[] acommandobjectiveexecutor_enumcommandresult = values(); + int i = acommandobjectiveexecutor_enumcommandresult.length; + + for (int j = 0; j < i; ++j) { + CommandObjectiveExecutor.EnumCommandResult commandobjectiveexecutor_enumcommandresult = acommandobjectiveexecutor_enumcommandresult[j]; + + if (commandobjectiveexecutor_enumcommandresult.b().equals(s)) { + return commandobjectiveexecutor_enumcommandresult; + } + } + + return null; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandOp.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandOp.java new file mode 100644 index 0000000..dedac55 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandOp.java @@ -0,0 +1,60 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import com.mojang.authlib.GameProfile; +import java.util.ArrayList; +import java.util.List; + +public class CommandOp extends CommandAbstract { + + public CommandOp() {} + + public String getCommand() { + return "op"; + } + + public int a() { + return 3; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.op.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length == 1 && astring[0].length() > 0) { + MinecraftServer minecraftserver = MinecraftServer.getServer(); + GameProfile gameprofile = minecraftserver.getUserCache().getProfile(astring[0]); + + if (gameprofile == null) { + throw new CommandException("commands.op.failed", new Object[] { astring[0]}); + } else { + minecraftserver.getPlayerList().addOp(gameprofile); + a(icommandlistener, this, "commands.op.success", new Object[] { astring[0]}); + } + } else { + throw new ExceptionUsage("commands.op.usage", new Object[0]); + } + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + if (astring.length == 1) { + String s = astring[astring.length - 1]; + ArrayList arraylist = Lists.newArrayList(); + GameProfile[] agameprofile = MinecraftServer.getServer().L(); + int i = agameprofile.length; + + for (int j = 0; j < i; ++j) { + GameProfile gameprofile = agameprofile[j]; + + if (!MinecraftServer.getServer().getPlayerList().isOp(gameprofile) && a(s, gameprofile.getName())) { + arraylist.add(gameprofile.getName()); + } + } + + return arraylist; + } else { + return null; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandPardon.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandPardon.java new file mode 100644 index 0000000..dd507b2 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandPardon.java @@ -0,0 +1,45 @@ +package net.minecraft.server; + +import com.mojang.authlib.GameProfile; +import java.util.List; + +public class CommandPardon extends CommandAbstract { + + public CommandPardon() {} + + public String getCommand() { + return "pardon"; + } + + public int a() { + return 3; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.unban.usage"; + } + + public boolean canUse(ICommandListener icommandlistener) { + return MinecraftServer.getServer().getPlayerList().getProfileBans().isEnabled() && super.canUse(icommandlistener); + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length == 1 && astring[0].length() > 0) { + MinecraftServer minecraftserver = MinecraftServer.getServer(); + GameProfile gameprofile = minecraftserver.getPlayerList().getProfileBans().a(astring[0]); + + if (gameprofile == null) { + throw new CommandException("commands.unban.failed", new Object[] { astring[0]}); + } else { + minecraftserver.getPlayerList().getProfileBans().remove(gameprofile); + a(icommandlistener, this, "commands.unban.success", new Object[] { astring[0]}); + } + } else { + throw new ExceptionUsage("commands.unban.usage", new Object[0]); + } + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + return astring.length == 1 ? a(astring, MinecraftServer.getServer().getPlayerList().getProfileBans().getEntries()) : null; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandPardonIP.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandPardonIP.java new file mode 100644 index 0000000..843513c --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandPardonIP.java @@ -0,0 +1,44 @@ +package net.minecraft.server; + +import java.util.List; +import java.util.regex.Matcher; + +public class CommandPardonIP extends CommandAbstract { + + public CommandPardonIP() {} + + public String getCommand() { + return "pardon-ip"; + } + + public int a() { + return 3; + } + + public boolean canUse(ICommandListener icommandlistener) { + return MinecraftServer.getServer().getPlayerList().getIPBans().isEnabled() && super.canUse(icommandlistener); + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.unbanip.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length == 1 && astring[0].length() > 1) { + Matcher matcher = CommandBanIp.a.matcher(astring[0]); + + if (matcher.matches()) { + MinecraftServer.getServer().getPlayerList().getIPBans().remove(astring[0]); + a(icommandlistener, this, "commands.unbanip.success", new Object[] { astring[0]}); + } else { + throw new ExceptionInvalidSyntax("commands.unbanip.invalid", new Object[0]); + } + } else { + throw new ExceptionUsage("commands.unbanip.usage", new Object[0]); + } + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + return astring.length == 1 ? a(astring, MinecraftServer.getServer().getPlayerList().getIPBans().getEntries()) : null; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandParticle.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandParticle.java new file mode 100644 index 0000000..4fd20bb --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandParticle.java @@ -0,0 +1,99 @@ +package net.minecraft.server; + +import java.util.List; + +public class CommandParticle extends CommandAbstract { + + public CommandParticle() {} + + public String getCommand() { + return "particle"; + } + + public int a() { + return 2; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.particle.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length < 8) { + throw new ExceptionUsage("commands.particle.usage", new Object[0]); + } else { + boolean flag = false; + EnumParticle enumparticle = null; + EnumParticle[] aenumparticle = EnumParticle.values(); + int i = aenumparticle.length; + + for (int j = 0; j < i; ++j) { + EnumParticle enumparticle1 = aenumparticle[j]; + + if (enumparticle1.f()) { + if (astring[0].startsWith(enumparticle1.b())) { + flag = true; + enumparticle = enumparticle1; + break; + } + } else if (astring[0].equals(enumparticle1.b())) { + flag = true; + enumparticle = enumparticle1; + break; + } + } + + if (!flag) { + throw new CommandException("commands.particle.notFound", new Object[] { astring[0]}); + } else { + String s = astring[0]; + Vec3D vec3d = icommandlistener.d(); + double d0 = (double) ((float) b(vec3d.a, astring[1], true)); + double d1 = (double) ((float) b(vec3d.b, astring[2], true)); + double d2 = (double) ((float) b(vec3d.c, astring[3], true)); + double d3 = (double) ((float) c(astring[4])); + double d4 = (double) ((float) c(astring[5])); + double d5 = (double) ((float) c(astring[6])); + double d6 = (double) ((float) c(astring[7])); + int k = 0; + + if (astring.length > 8) { + k = a(astring[8], 0); + } + + boolean flag1 = false; + + if (astring.length > 9 && "force".equals(astring[9])) { + flag1 = true; + } + + World world = icommandlistener.getWorld(); + + if (world instanceof WorldServer) { + WorldServer worldserver = (WorldServer) world; + int[] aint = new int[enumparticle.d()]; + + if (enumparticle.f()) { + String[] astring1 = astring[0].split("_", 3); + + for (int l = 1; l < astring1.length; ++l) { + try { + aint[l - 1] = Integer.parseInt(astring1[l]); + } catch (NumberFormatException numberformatexception) { + throw new CommandException("commands.particle.notFound", new Object[] { astring[0]}); + } + } + } + + worldserver.a(enumparticle, flag1, d0, d1, d2, k, d3, d4, d5, d6, aint); + a(icommandlistener, this, "commands.particle.success", new Object[] { s, Integer.valueOf(Math.max(k, 1))}); + } + + } + } + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + return astring.length == 1 ? a(astring, EnumParticle.a()) : (astring.length > 1 && astring.length <= 4 ? a(astring, 1, blockposition) : (astring.length == 10 ? a(astring, new String[] { "normal", "force"}) : null)); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandPlaySound.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandPlaySound.java new file mode 100644 index 0000000..5d051ff --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandPlaySound.java @@ -0,0 +1,100 @@ +package net.minecraft.server; + +import java.util.List; + +public class CommandPlaySound extends CommandAbstract { + + public CommandPlaySound() {} + + public String getCommand() { + return "playsound"; + } + + public int a() { + return 2; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.playsound.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length < 2) { + throw new ExceptionUsage(this.getUsage(icommandlistener), new Object[0]); + } else { + byte b0 = 0; + int i = b0 + 1; + String s = astring[b0]; + EntityPlayer entityplayer = a(icommandlistener, astring[i++]); + Vec3D vec3d = icommandlistener.d(); + double d0 = vec3d.a; + + if (astring.length > i) { + d0 = b(d0, astring[i++], true); + } + + double d1 = vec3d.b; + + if (astring.length > i) { + d1 = b(d1, astring[i++], 0, 0, false); + } + + double d2 = vec3d.c; + + if (astring.length > i) { + d2 = b(d2, astring[i++], true); + } + + double d3 = 1.0D; + + if (astring.length > i) { + d3 = a(astring[i++], 0.0D, 3.4028234663852886E38D); + } + + double d4 = 1.0D; + + if (astring.length > i) { + d4 = a(astring[i++], 0.0D, 2.0D); + } + + double d5 = 0.0D; + + if (astring.length > i) { + d5 = a(astring[i], 0.0D, 1.0D); + } + + double d6 = d3 > 1.0D ? d3 * 16.0D : 16.0D; + double d7 = entityplayer.f(d0, d1, d2); + + if (d7 > d6) { + if (d5 <= 0.0D) { + throw new CommandException("commands.playsound.playerTooFar", new Object[] { entityplayer.getName()}); + } + + double d8 = d0 - entityplayer.locX; + double d9 = d1 - entityplayer.locY; + double d10 = d2 - entityplayer.locZ; + double d11 = Math.sqrt(d8 * d8 + d9 * d9 + d10 * d10); + + if (d11 > 0.0D) { + d0 = entityplayer.locX + d8 / d11 * 2.0D; + d1 = entityplayer.locY + d9 / d11 * 2.0D; + d2 = entityplayer.locZ + d10 / d11 * 2.0D; + } + + d3 = d5; + } + + entityplayer.playerConnection.sendPacket(new PacketPlayOutNamedSoundEffect(s, d0, d1, d2, (float) d3, (float) d4)); + a(icommandlistener, this, "commands.playsound.success", new Object[] { s, entityplayer.getName()}); + } + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + return astring.length == 2 ? a(astring, MinecraftServer.getServer().getPlayers()) : (astring.length > 2 && astring.length <= 5 ? a(astring, 2, blockposition) : null); + } + + public boolean isListStart(String[] astring, int i) { + return i == 1; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandPublish.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandPublish.java new file mode 100644 index 0000000..0800672 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandPublish.java @@ -0,0 +1,25 @@ +package net.minecraft.server; + +public class CommandPublish extends CommandAbstract { + + public CommandPublish() {} + + public String getCommand() { + return "publish"; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.publish.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + String s = MinecraftServer.getServer().a(WorldSettings.EnumGamemode.SURVIVAL, false); + + if (s != null) { + a(icommandlistener, this, "commands.publish.started", new Object[] { s}); + } else { + a(icommandlistener, this, "commands.publish.failed", new Object[0]); + } + + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandReplaceItem.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandReplaceItem.java new file mode 100644 index 0000000..4f6b19b --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandReplaceItem.java @@ -0,0 +1,185 @@ +package net.minecraft.server; + +import com.google.common.collect.Maps; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +public class CommandReplaceItem extends CommandAbstract { + + private static final Map a = Maps.newHashMap(); + + public CommandReplaceItem() {} + + public String getCommand() { + return "replaceitem"; + } + + public int a() { + return 2; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.replaceitem.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length < 1) { + throw new ExceptionUsage("commands.replaceitem.usage", new Object[0]); + } else { + boolean flag; + + if (astring[0].equals("entity")) { + flag = false; + } else { + if (!astring[0].equals("block")) { + throw new ExceptionUsage("commands.replaceitem.usage", new Object[0]); + } + + flag = true; + } + + byte b0; + + if (flag) { + if (astring.length < 6) { + throw new ExceptionUsage("commands.replaceitem.block.usage", new Object[0]); + } + + b0 = 4; + } else { + if (astring.length < 4) { + throw new ExceptionUsage("commands.replaceitem.entity.usage", new Object[0]); + } + + b0 = 2; + } + + int i = b0 + 1; + int j = this.e(astring[b0]); + + Item item; + + try { + item = f(icommandlistener, astring[i]); + } catch (ExceptionInvalidNumber exceptioninvalidnumber) { + if (Block.getByName(astring[i]) != Blocks.AIR) { + throw exceptioninvalidnumber; + } + + item = null; + } + + ++i; + int k = astring.length > i ? a(astring[i++], 1, 64) : 1; + int l = astring.length > i ? a(astring[i++]) : 0; + ItemStack itemstack = new ItemStack(item, k, l); + + if (astring.length > i) { + String s = a(icommandlistener, astring, i).c(); + + try { + itemstack.setTag(MojangsonParser.parse(s)); + } catch (MojangsonParseException mojangsonparseexception) { + throw new CommandException("commands.replaceitem.tagError", new Object[] { mojangsonparseexception.getMessage()}); + } + } + + if (itemstack.getItem() == null) { + itemstack = null; + } + + if (flag) { + icommandlistener.a(CommandObjectiveExecutor.EnumCommandResult.AFFECTED_ITEMS, 0); + BlockPosition blockposition = a(icommandlistener, astring, 1, false); + World world = icommandlistener.getWorld(); + TileEntity tileentity = world.getTileEntity(blockposition); + + if (tileentity == null || !(tileentity instanceof IInventory)) { + throw new CommandException("commands.replaceitem.noContainer", new Object[] { Integer.valueOf(blockposition.getX()), Integer.valueOf(blockposition.getY()), Integer.valueOf(blockposition.getZ())}); + } + + IInventory iinventory = (IInventory) tileentity; + + if (j >= 0 && j < iinventory.getSize()) { + iinventory.setItem(j, itemstack); + } + } else { + Entity entity = b(icommandlistener, astring[1]); + + icommandlistener.a(CommandObjectiveExecutor.EnumCommandResult.AFFECTED_ITEMS, 0); + if (entity instanceof EntityHuman) { + ((EntityHuman) entity).defaultContainer.b(); + } + + if (!entity.d(j, itemstack)) { + throw new CommandException("commands.replaceitem.failed", new Object[] { Integer.valueOf(j), Integer.valueOf(k), itemstack == null ? "Air" : itemstack.C()}); + } + + if (entity instanceof EntityHuman) { + ((EntityHuman) entity).defaultContainer.b(); + } + } + + icommandlistener.a(CommandObjectiveExecutor.EnumCommandResult.AFFECTED_ITEMS, k); + a(icommandlistener, this, "commands.replaceitem.success", new Object[] { Integer.valueOf(j), Integer.valueOf(k), itemstack == null ? "Air" : itemstack.C()}); + } + } + + private int e(String s) throws CommandException { + if (!CommandReplaceItem.a.containsKey(s)) { + throw new CommandException("commands.generic.parameter.invalid", new Object[] { s}); + } else { + return ((Integer) CommandReplaceItem.a.get(s)).intValue(); + } + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + return astring.length == 1 ? a(astring, new String[] { "entity", "block"}) : (astring.length == 2 && astring[0].equals("entity") ? a(astring, this.d()) : (astring.length >= 2 && astring.length <= 4 && astring[0].equals("block") ? a(astring, 1, blockposition) : ((astring.length != 3 || !astring[0].equals("entity")) && (astring.length != 5 || !astring[0].equals("block")) ? ((astring.length != 4 || !astring[0].equals("entity")) && (astring.length != 6 || !astring[0].equals("block")) ? null : a(astring, (Collection) Item.REGISTRY.keySet())) : a(astring, (Collection) CommandReplaceItem.a.keySet())))); + } + + protected String[] d() { + return MinecraftServer.getServer().getPlayers(); + } + + public boolean isListStart(String[] astring, int i) { + return astring.length > 0 && astring[0].equals("entity") && i == 1; + } + + static { + int i; + + for (i = 0; i < 54; ++i) { + CommandReplaceItem.a.put("slot.container." + i, Integer.valueOf(i)); + } + + for (i = 0; i < 9; ++i) { + CommandReplaceItem.a.put("slot.hotbar." + i, Integer.valueOf(i)); + } + + for (i = 0; i < 27; ++i) { + CommandReplaceItem.a.put("slot.inventory." + i, Integer.valueOf(9 + i)); + } + + for (i = 0; i < 27; ++i) { + CommandReplaceItem.a.put("slot.enderchest." + i, Integer.valueOf(200 + i)); + } + + for (i = 0; i < 8; ++i) { + CommandReplaceItem.a.put("slot.villager." + i, Integer.valueOf(300 + i)); + } + + for (i = 0; i < 15; ++i) { + CommandReplaceItem.a.put("slot.horse." + i, Integer.valueOf(500 + i)); + } + + CommandReplaceItem.a.put("slot.weapon", Integer.valueOf(99)); + CommandReplaceItem.a.put("slot.armor.head", Integer.valueOf(103)); + CommandReplaceItem.a.put("slot.armor.chest", Integer.valueOf(102)); + CommandReplaceItem.a.put("slot.armor.legs", Integer.valueOf(101)); + CommandReplaceItem.a.put("slot.armor.feet", Integer.valueOf(100)); + CommandReplaceItem.a.put("slot.horse.saddle", Integer.valueOf(400)); + CommandReplaceItem.a.put("slot.horse.armor", Integer.valueOf(401)); + CommandReplaceItem.a.put("slot.horse.chest", Integer.valueOf(499)); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandSaveAll.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandSaveAll.java new file mode 100644 index 0000000..62b2e0f --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandSaveAll.java @@ -0,0 +1,60 @@ +package net.minecraft.server; + +public class CommandSaveAll extends CommandAbstract { + + public CommandSaveAll() {} + + public String getCommand() { + return "save-all"; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.save.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + MinecraftServer minecraftserver = MinecraftServer.getServer(); + + icommandlistener.sendMessage(new ChatMessage("commands.save.start", new Object[0])); + if (minecraftserver.getPlayerList() != null) { + minecraftserver.getPlayerList().savePlayers(); + } + + try { + int i; + WorldServer worldserver; + boolean flag; + + for (i = 0; i < minecraftserver.worldServer.length; ++i) { + if (minecraftserver.worldServer[i] != null) { + worldserver = minecraftserver.worldServer[i]; + flag = worldserver.savingDisabled; + worldserver.savingDisabled = false; + worldserver.save(true, (IProgressUpdate) null); + worldserver.savingDisabled = flag; + } + } + + if (astring.length > 0 && "flush".equals(astring[0])) { + icommandlistener.sendMessage(new ChatMessage("commands.save.flushStart", new Object[0])); + + for (i = 0; i < minecraftserver.worldServer.length; ++i) { + if (minecraftserver.worldServer[i] != null) { + worldserver = minecraftserver.worldServer[i]; + flag = worldserver.savingDisabled; + worldserver.savingDisabled = false; + worldserver.flushSave(); + worldserver.savingDisabled = flag; + } + } + + icommandlistener.sendMessage(new ChatMessage("commands.save.flushEnd", new Object[0])); + } + } catch (ExceptionWorldConflict exceptionworldconflict) { + a(icommandlistener, this, "commands.save.failed", new Object[] { exceptionworldconflict.getMessage()}); + return; + } + + a(icommandlistener, this, "commands.save.success", new Object[0]); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandSaveOff.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandSaveOff.java new file mode 100644 index 0000000..0b490e9 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandSaveOff.java @@ -0,0 +1,36 @@ +package net.minecraft.server; + +public class CommandSaveOff extends CommandAbstract { + + public CommandSaveOff() {} + + public String getCommand() { + return "save-off"; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.save-off.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + MinecraftServer minecraftserver = MinecraftServer.getServer(); + boolean flag = false; + + for (int i = 0; i < minecraftserver.worldServer.length; ++i) { + if (minecraftserver.worldServer[i] != null) { + WorldServer worldserver = minecraftserver.worldServer[i]; + + if (!worldserver.savingDisabled) { + worldserver.savingDisabled = true; + flag = true; + } + } + } + + if (flag) { + a(icommandlistener, this, "commands.save.disabled", new Object[0]); + } else { + throw new CommandException("commands.save-off.alreadyOff", new Object[0]); + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandSaveOn.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandSaveOn.java new file mode 100644 index 0000000..205c5c7 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandSaveOn.java @@ -0,0 +1,36 @@ +package net.minecraft.server; + +public class CommandSaveOn extends CommandAbstract { + + public CommandSaveOn() {} + + public String getCommand() { + return "save-on"; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.save-on.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + MinecraftServer minecraftserver = MinecraftServer.getServer(); + boolean flag = false; + + for (int i = 0; i < minecraftserver.worldServer.length; ++i) { + if (minecraftserver.worldServer[i] != null) { + WorldServer worldserver = minecraftserver.worldServer[i]; + + if (worldserver.savingDisabled) { + worldserver.savingDisabled = false; + flag = true; + } + } + } + + if (flag) { + a(icommandlistener, this, "commands.save.enabled", new Object[0]); + } else { + throw new CommandException("commands.save-on.alreadyOn", new Object[0]); + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandSay.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandSay.java new file mode 100644 index 0000000..501075c --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandSay.java @@ -0,0 +1,34 @@ +package net.minecraft.server; + +import java.util.List; + +public class CommandSay extends CommandAbstract { + + public CommandSay() {} + + public String getCommand() { + return "say"; + } + + public int a() { + return 1; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.say.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length > 0 && astring[0].length() > 0) { + IChatBaseComponent ichatbasecomponent = b(icommandlistener, astring, 0, true); + + MinecraftServer.getServer().getPlayerList().sendMessage(new ChatMessage("chat.type.announcement", new Object[] { icommandlistener.getScoreboardDisplayName(), ichatbasecomponent})); + } else { + throw new ExceptionUsage("commands.say.usage", new Object[0]); + } + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + return astring.length >= 1 ? a(astring, MinecraftServer.getServer().getPlayers()) : null; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/CommandScoreboard.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandScoreboard.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/CommandScoreboard.java rename to eSpigot-Server/src/main/java/net/minecraft/server/CommandScoreboard.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandSeed.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandSeed.java new file mode 100644 index 0000000..1545eb7 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandSeed.java @@ -0,0 +1,28 @@ +package net.minecraft.server; + +public class CommandSeed extends CommandAbstract { + + public CommandSeed() {} + + public boolean canUse(ICommandListener icommandlistener) { + return MinecraftServer.getServer().T() || super.canUse(icommandlistener); + } + + public String getCommand() { + return "seed"; + } + + public int a() { + return 2; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.seed.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + Object object = icommandlistener instanceof EntityHuman ? ((EntityHuman) icommandlistener).world : MinecraftServer.getServer().getWorldServer(0); + + icommandlistener.sendMessage(new ChatMessage("commands.seed.success", new Object[] { Long.valueOf(((World) object).getSeed())})); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandSetBlock.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandSetBlock.java new file mode 100644 index 0000000..0e4e11f --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandSetBlock.java @@ -0,0 +1,103 @@ +package net.minecraft.server; + +import java.util.Collection; +import java.util.List; + +public class CommandSetBlock extends CommandAbstract { + + public CommandSetBlock() {} + + public String getCommand() { + return "setblock"; + } + + public int a() { + return 2; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.setblock.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length < 4) { + throw new ExceptionUsage("commands.setblock.usage", new Object[0]); + } else { + icommandlistener.a(CommandObjectiveExecutor.EnumCommandResult.AFFECTED_BLOCKS, 0); + BlockPosition blockposition = a(icommandlistener, astring, 0, false); + Block block = CommandAbstract.g(icommandlistener, astring[3]); + int i = 0; + + if (astring.length >= 5) { + i = a(astring[4], 0, 15); + } + + World world = icommandlistener.getWorld(); + + if (!world.isLoaded(blockposition)) { + throw new CommandException("commands.setblock.outOfWorld", new Object[0]); + } else { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + boolean flag = false; + + if (astring.length >= 7 && block.isTileEntity()) { + String s = a(icommandlistener, astring, 6).c(); + + try { + nbttagcompound = MojangsonParser.parse(s); + flag = true; + } catch (MojangsonParseException mojangsonparseexception) { + throw new CommandException("commands.setblock.tagError", new Object[] { mojangsonparseexception.getMessage()}); + } + } + + if (astring.length >= 6) { + if (astring[5].equals("destroy")) { + world.setAir(blockposition, true); + if (block == Blocks.AIR) { + a(icommandlistener, this, "commands.setblock.success", new Object[0]); + return; + } + } else if (astring[5].equals("keep") && !world.isEmpty(blockposition)) { + throw new CommandException("commands.setblock.noChange", new Object[0]); + } + } + + TileEntity tileentity = world.getTileEntity(blockposition); + + if (tileentity != null) { + if (tileentity instanceof IInventory) { + ((IInventory) tileentity).l(); + } + + world.setTypeAndData(blockposition, Blocks.AIR.getBlockData(), block == Blocks.AIR ? 2 : 4); + } + + IBlockData iblockdata = block.fromLegacyData(i); + + if (!world.setTypeAndData(blockposition, iblockdata, 2)) { + throw new CommandException("commands.setblock.noChange", new Object[0]); + } else { + if (flag) { + TileEntity tileentity1 = world.getTileEntity(blockposition); + + if (tileentity1 != null) { + nbttagcompound.setInt("x", blockposition.getX()); + nbttagcompound.setInt("y", blockposition.getY()); + nbttagcompound.setInt("z", blockposition.getZ()); + tileentity1.a(nbttagcompound); + } + } + + world.update(blockposition, iblockdata.getBlock()); + icommandlistener.a(CommandObjectiveExecutor.EnumCommandResult.AFFECTED_BLOCKS, 1); + a(icommandlistener, this, "commands.setblock.success", new Object[0]); + } + } + } + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + return astring.length > 0 && astring.length <= 3 ? a(astring, 0, blockposition) : (astring.length == 4 ? a(astring, (Collection) Block.REGISTRY.keySet()) : (astring.length == 6 ? a(astring, new String[] { "replace", "destroy", "keep"}) : null)); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandSetWorldSpawn.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandSetWorldSpawn.java new file mode 100644 index 0000000..209d503 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandSetWorldSpawn.java @@ -0,0 +1,42 @@ +package net.minecraft.server; + +import java.util.List; + +public class CommandSetWorldSpawn extends CommandAbstract { + + public CommandSetWorldSpawn() {} + + public String getCommand() { + return "setworldspawn"; + } + + public int a() { + return 2; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.setworldspawn.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + BlockPosition blockposition; + + if (astring.length == 0) { + blockposition = b(icommandlistener).getChunkCoordinates(); + } else { + if (astring.length != 3 || icommandlistener.getWorld() == null) { + throw new ExceptionUsage("commands.setworldspawn.usage", new Object[0]); + } + + blockposition = a(icommandlistener, astring, 0, true); + } + + icommandlistener.getWorld().B(blockposition); + MinecraftServer.getServer().getPlayerList().sendAll(new PacketPlayOutSpawnPosition(blockposition)); + a(icommandlistener, this, "commands.setworldspawn.success", new Object[] { Integer.valueOf(blockposition.getX()), Integer.valueOf(blockposition.getY()), Integer.valueOf(blockposition.getZ())}); + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + return astring.length > 0 && astring.length <= 3 ? a(astring, 0, blockposition) : null; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandSpawnpoint.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandSpawnpoint.java new file mode 100644 index 0000000..aa9434b --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandSpawnpoint.java @@ -0,0 +1,43 @@ +package net.minecraft.server; + +import java.util.List; + +public class CommandSpawnpoint extends CommandAbstract { + + public CommandSpawnpoint() {} + + public String getCommand() { + return "spawnpoint"; + } + + public int a() { + return 2; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.spawnpoint.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length > 1 && astring.length < 4) { + throw new ExceptionUsage("commands.spawnpoint.usage", new Object[0]); + } else { + EntityPlayer entityplayer = astring.length > 0 ? a(icommandlistener, astring[0]) : b(icommandlistener); + BlockPosition blockposition = astring.length > 3 ? a(icommandlistener, astring, 1, true) : entityplayer.getChunkCoordinates(); + + if (entityplayer.world != null) { + entityplayer.setRespawnPosition(blockposition, true); + a(icommandlistener, this, "commands.spawnpoint.success", new Object[] { entityplayer.getName(), Integer.valueOf(blockposition.getX()), Integer.valueOf(blockposition.getY()), Integer.valueOf(blockposition.getZ())}); + } + + } + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + return astring.length == 1 ? a(astring, MinecraftServer.getServer().getPlayers()) : (astring.length > 1 && astring.length <= 4 ? a(astring, 1, blockposition) : null); + } + + public boolean isListStart(String[] astring, int i) { + return i == 0; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/CommandSpreadPlayers.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandSpreadPlayers.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/CommandSpreadPlayers.java rename to eSpigot-Server/src/main/java/net/minecraft/server/CommandSpreadPlayers.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandStats.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandStats.java new file mode 100644 index 0000000..7d58f6f --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandStats.java @@ -0,0 +1,166 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; + +public class CommandStats extends CommandAbstract { + + public CommandStats() {} + + public String getCommand() { + return "stats"; + } + + public int a() { + return 2; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.stats.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length < 1) { + throw new ExceptionUsage("commands.stats.usage", new Object[0]); + } else { + boolean flag; + + if (astring[0].equals("entity")) { + flag = false; + } else { + if (!astring[0].equals("block")) { + throw new ExceptionUsage("commands.stats.usage", new Object[0]); + } + + flag = true; + } + + byte b0; + + if (flag) { + if (astring.length < 5) { + throw new ExceptionUsage("commands.stats.block.usage", new Object[0]); + } + + b0 = 4; + } else { + if (astring.length < 3) { + throw new ExceptionUsage("commands.stats.entity.usage", new Object[0]); + } + + b0 = 2; + } + + int i = b0 + 1; + String s = astring[b0]; + + if ("set".equals(s)) { + if (astring.length < i + 3) { + if (i == 5) { + throw new ExceptionUsage("commands.stats.block.set.usage", new Object[0]); + } + + throw new ExceptionUsage("commands.stats.entity.set.usage", new Object[0]); + } + } else { + if (!"clear".equals(s)) { + throw new ExceptionUsage("commands.stats.usage", new Object[0]); + } + + if (astring.length < i + 1) { + if (i == 5) { + throw new ExceptionUsage("commands.stats.block.clear.usage", new Object[0]); + } + + throw new ExceptionUsage("commands.stats.entity.clear.usage", new Object[0]); + } + } + + CommandObjectiveExecutor.EnumCommandResult commandobjectiveexecutor_enumcommandresult = CommandObjectiveExecutor.EnumCommandResult.a(astring[i++]); + + if (commandobjectiveexecutor_enumcommandresult == null) { + throw new CommandException("commands.stats.failed", new Object[0]); + } else { + World world = icommandlistener.getWorld(); + CommandObjectiveExecutor commandobjectiveexecutor; + BlockPosition blockposition; + TileEntity tileentity; + + if (flag) { + blockposition = a(icommandlistener, astring, 1, false); + tileentity = world.getTileEntity(blockposition); + if (tileentity == null) { + throw new CommandException("commands.stats.noCompatibleBlock", new Object[] { Integer.valueOf(blockposition.getX()), Integer.valueOf(blockposition.getY()), Integer.valueOf(blockposition.getZ())}); + } + + if (tileentity instanceof TileEntityCommand) { + commandobjectiveexecutor = ((TileEntityCommand) tileentity).c(); + } else { + if (!(tileentity instanceof TileEntitySign)) { + throw new CommandException("commands.stats.noCompatibleBlock", new Object[] { Integer.valueOf(blockposition.getX()), Integer.valueOf(blockposition.getY()), Integer.valueOf(blockposition.getZ())}); + } + + commandobjectiveexecutor = ((TileEntitySign) tileentity).d(); + } + } else { + Entity entity = b(icommandlistener, astring[1]); + + commandobjectiveexecutor = entity.aU(); + } + + if ("set".equals(s)) { + String s1 = astring[i++]; + String s2 = astring[i]; + + if (s1.length() == 0 || s2.length() == 0) { + throw new CommandException("commands.stats.failed", new Object[0]); + } + + CommandObjectiveExecutor.a(commandobjectiveexecutor, commandobjectiveexecutor_enumcommandresult, s1, s2); + a(icommandlistener, this, "commands.stats.success", new Object[] { commandobjectiveexecutor_enumcommandresult.b(), s2, s1}); + } else if ("clear".equals(s)) { + CommandObjectiveExecutor.a(commandobjectiveexecutor, commandobjectiveexecutor_enumcommandresult, (String) null, (String) null); + a(icommandlistener, this, "commands.stats.cleared", new Object[] { commandobjectiveexecutor_enumcommandresult.b()}); + } + + if (flag) { + blockposition = a(icommandlistener, astring, 1, false); + tileentity = world.getTileEntity(blockposition); + tileentity.update(); + } + + } + } + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + return astring.length == 1 ? a(astring, new String[] { "entity", "block"}) : (astring.length == 2 && astring[0].equals("entity") ? a(astring, this.d()) : (astring.length >= 2 && astring.length <= 4 && astring[0].equals("block") ? a(astring, 1, blockposition) : ((astring.length != 3 || !astring[0].equals("entity")) && (astring.length != 5 || !astring[0].equals("block")) ? ((astring.length != 4 || !astring[0].equals("entity")) && (astring.length != 6 || !astring[0].equals("block")) ? ((astring.length != 6 || !astring[0].equals("entity")) && (astring.length != 8 || !astring[0].equals("block")) ? null : a(astring, (Collection) this.e())) : a(astring, CommandObjectiveExecutor.EnumCommandResult.c())) : a(astring, new String[] { "set", "clear"})))); + } + + protected String[] d() { + return MinecraftServer.getServer().getPlayers(); + } + + protected List e() { + Collection collection = MinecraftServer.getServer().getWorldServer(0).getScoreboard().getObjectives(); + ArrayList arraylist = Lists.newArrayList(); + Iterator iterator = collection.iterator(); + + while (iterator.hasNext()) { + ScoreboardObjective scoreboardobjective = (ScoreboardObjective) iterator.next(); + + if (!scoreboardobjective.getCriteria().isReadOnly()) { + arraylist.add(scoreboardobjective.getName()); + } + } + + return arraylist; + } + + public boolean isListStart(String[] astring, int i) { + return astring.length > 0 && astring[0].equals("entity") && i == 1; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandStop.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandStop.java new file mode 100644 index 0000000..40b8a57 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandStop.java @@ -0,0 +1,22 @@ +package net.minecraft.server; + +public class CommandStop extends CommandAbstract { + + public CommandStop() {} + + public String getCommand() { + return "stop"; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.stop.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (MinecraftServer.getServer().worldServer != null) { + a(icommandlistener, this, "commands.stop.start", new Object[0]); + } + + MinecraftServer.getServer().safeShutdown(); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandSummon.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandSummon.java new file mode 100644 index 0000000..0581ec1 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandSummon.java @@ -0,0 +1,104 @@ +package net.minecraft.server; + +import java.util.Collection; +import java.util.List; + +public class CommandSummon extends CommandAbstract { + + public CommandSummon() {} + + public String getCommand() { + return "summon"; + } + + public int a() { + return 2; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.summon.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length < 1) { + throw new ExceptionUsage("commands.summon.usage", new Object[0]); + } else { + String s = astring[0]; + BlockPosition blockposition = icommandlistener.getChunkCoordinates(); + Vec3D vec3d = icommandlistener.d(); + double d0 = vec3d.a; + double d1 = vec3d.b; + double d2 = vec3d.c; + + if (astring.length >= 4) { + d0 = b(d0, astring[1], true); + d1 = b(d1, astring[2], false); + d2 = b(d2, astring[3], true); + blockposition = new BlockPosition(d0, d1, d2); + } + + World world = icommandlistener.getWorld(); + + if (!world.isLoaded(blockposition)) { + throw new CommandException("commands.summon.outOfWorld", new Object[0]); + } else if ("LightningBolt".equals(s)) { + world.strikeLightning(new EntityLightning(world, d0, d1, d2)); + a(icommandlistener, this, "commands.summon.success", new Object[0]); + } else { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + boolean flag = false; + + if (astring.length >= 5) { + IChatBaseComponent ichatbasecomponent = a(icommandlistener, astring, 4); + + try { + nbttagcompound = MojangsonParser.parse(ichatbasecomponent.c()); + flag = true; + } catch (MojangsonParseException mojangsonparseexception) { + throw new CommandException("commands.summon.tagError", new Object[] { mojangsonparseexception.getMessage()}); + } + } + + nbttagcompound.setString("id", s); + + Entity entity; + + try { + entity = EntityTypes.a(nbttagcompound, world); + } catch (RuntimeException runtimeexception) { + throw new CommandException("commands.summon.failed", new Object[0]); + } + + if (entity == null) { + throw new CommandException("commands.summon.failed", new Object[0]); + } else { + entity.setPositionRotation(d0, d1, d2, entity.yaw, entity.pitch); + if (!flag && entity instanceof EntityInsentient) { + ((EntityInsentient) entity).prepare(world.E(new BlockPosition(entity)), (GroupDataEntity) null); + } + + world.addEntity(entity); + Entity entity1 = entity; + + for (NBTTagCompound nbttagcompound1 = nbttagcompound; entity1 != null && nbttagcompound1.hasKeyOfType("Riding", 10); nbttagcompound1 = nbttagcompound1.getCompound("Riding")) { + Entity entity2 = EntityTypes.a(nbttagcompound1.getCompound("Riding"), world); + + if (entity2 != null) { + entity2.setPositionRotation(d0, d1, d2, entity2.yaw, entity2.pitch); + world.addEntity(entity2); + entity1.mount(entity2); + } + + entity1 = entity2; + } + + a(icommandlistener, this, "commands.summon.success", new Object[0]); + } + } + } + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + return astring.length == 1 ? a(astring, (Collection) EntityTypes.b()) : (astring.length > 1 && astring.length <= 4 ? a(astring, 1, blockposition) : null); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandTell.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandTell.java new file mode 100644 index 0000000..2739214 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandTell.java @@ -0,0 +1,54 @@ +package net.minecraft.server; + +import java.util.Arrays; +import java.util.List; + +public class CommandTell extends CommandAbstract { + + public CommandTell() {} + + public List b() { + return Arrays.asList(new String[] { "w", "msg"}); + } + + public String getCommand() { + return "tell"; + } + + public int a() { + return 0; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.message.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length < 2) { + throw new ExceptionUsage("commands.message.usage", new Object[0]); + } else { + EntityPlayer entityplayer = a(icommandlistener, astring[0]); + + if (entityplayer == icommandlistener) { + throw new ExceptionPlayerNotFound("commands.message.sameTarget", new Object[0]); + } else { + IChatBaseComponent ichatbasecomponent = b(icommandlistener, astring, 1, !(icommandlistener instanceof EntityHuman)); + ChatMessage chatmessage = new ChatMessage("commands.message.display.incoming", new Object[] { icommandlistener.getScoreboardDisplayName(), ichatbasecomponent.f()}); + ChatMessage chatmessage1 = new ChatMessage("commands.message.display.outgoing", new Object[] { entityplayer.getScoreboardDisplayName(), ichatbasecomponent.f()}); + + chatmessage.getChatModifier().setColor(EnumChatFormat.GRAY).setItalic(Boolean.valueOf(true)); + chatmessage1.getChatModifier().setColor(EnumChatFormat.GRAY).setItalic(Boolean.valueOf(true)); + entityplayer.sendMessage(chatmessage); + icommandlistener.sendMessage(chatmessage1); + } + } + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + return a(astring, MinecraftServer.getServer().getPlayers()); + } + + public boolean isListStart(String[] astring, int i) { + return i == 0; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandTellRaw.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandTellRaw.java new file mode 100644 index 0000000..f7975a7 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandTellRaw.java @@ -0,0 +1,49 @@ +package net.minecraft.server; + +import com.google.gson.JsonParseException; +import java.util.List; +import org.apache.commons.lang3.exception.ExceptionUtils; + +public class CommandTellRaw extends CommandAbstract { + + public CommandTellRaw() {} + + public String getCommand() { + return "tellraw"; + } + + public int a() { + return 2; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.tellraw.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length < 2) { + throw new ExceptionUsage("commands.tellraw.usage", new Object[0]); + } else { + EntityPlayer entityplayer = a(icommandlistener, astring[0]); + String s = a(astring, 1); + + try { + IChatBaseComponent ichatbasecomponent = IChatBaseComponent.ChatSerializer.a(s); + + entityplayer.sendMessage(ChatComponentUtils.filterForDisplay(icommandlistener, ichatbasecomponent, entityplayer)); + } catch (JsonParseException jsonparseexception) { + Throwable throwable = ExceptionUtils.getRootCause(jsonparseexception); + + throw new ExceptionInvalidSyntax("commands.tellraw.jsonException", new Object[] { throwable == null ? "" : throwable.getMessage()}); + } + } + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + return astring.length == 1 ? a(astring, MinecraftServer.getServer().getPlayers()) : null; + } + + public boolean isListStart(String[] astring, int i) { + return i == 0; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandTestFor.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandTestFor.java new file mode 100644 index 0000000..07dbdc1 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandTestFor.java @@ -0,0 +1,56 @@ +package net.minecraft.server; + +import java.util.List; + +public class CommandTestFor extends CommandAbstract { + + public CommandTestFor() {} + + public String getCommand() { + return "testfor"; + } + + public int a() { + return 2; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.testfor.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length < 1) { + throw new ExceptionUsage("commands.testfor.usage", new Object[0]); + } else { + Entity entity = b(icommandlistener, astring[0]); + NBTTagCompound nbttagcompound = null; + + if (astring.length >= 2) { + try { + nbttagcompound = MojangsonParser.parse(a(astring, 1)); + } catch (MojangsonParseException mojangsonparseexception) { + throw new CommandException("commands.testfor.tagError", new Object[] { mojangsonparseexception.getMessage()}); + } + } + + if (nbttagcompound != null) { + NBTTagCompound nbttagcompound1 = new NBTTagCompound(); + + entity.e(nbttagcompound1); + if (!GameProfileSerializer.a(nbttagcompound, nbttagcompound1, true)) { + throw new CommandException("commands.testfor.failure", new Object[] { entity.getName()}); + } + } + + a(icommandlistener, this, "commands.testfor.success", new Object[] { entity.getName()}); + } + } + + public boolean isListStart(String[] astring, int i) { + return i == 0; + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + return astring.length == 1 ? a(astring, MinecraftServer.getServer().getPlayers()) : null; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandTestForBlock.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandTestForBlock.java new file mode 100644 index 0000000..6362d75 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandTestForBlock.java @@ -0,0 +1,98 @@ +package net.minecraft.server; + +import java.util.Collection; +import java.util.List; + +public class CommandTestForBlock extends CommandAbstract { + + public CommandTestForBlock() {} + + public String getCommand() { + return "testforblock"; + } + + public int a() { + return 2; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.testforblock.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length < 4) { + throw new ExceptionUsage("commands.testforblock.usage", new Object[0]); + } else { + icommandlistener.a(CommandObjectiveExecutor.EnumCommandResult.AFFECTED_BLOCKS, 0); + BlockPosition blockposition = a(icommandlistener, astring, 0, false); + Block block = Block.getByName(astring[3]); + + if (block == null) { + throw new ExceptionInvalidNumber("commands.setblock.notFound", new Object[] { astring[3]}); + } else { + int i = -1; + + if (astring.length >= 5) { + i = a(astring[4], -1, 15); + } + + World world = icommandlistener.getWorld(); + + if (!world.isLoaded(blockposition)) { + throw new CommandException("commands.testforblock.outOfWorld", new Object[0]); + } else { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + boolean flag = false; + + if (astring.length >= 6 && block.isTileEntity()) { + String s = a(icommandlistener, astring, 5).c(); + + try { + nbttagcompound = MojangsonParser.parse(s); + flag = true; + } catch (MojangsonParseException mojangsonparseexception) { + throw new CommandException("commands.setblock.tagError", new Object[] { mojangsonparseexception.getMessage()}); + } + } + + IBlockData iblockdata = world.getType(blockposition); + Block block1 = iblockdata.getBlock(); + + if (block1 != block) { + throw new CommandException("commands.testforblock.failed.tile", new Object[] { Integer.valueOf(blockposition.getX()), Integer.valueOf(blockposition.getY()), Integer.valueOf(blockposition.getZ()), block1.getName(), block.getName()}); + } else { + if (i > -1) { + int j = iblockdata.getBlock().toLegacyData(iblockdata); + + if (j != i) { + throw new CommandException("commands.testforblock.failed.data", new Object[] { Integer.valueOf(blockposition.getX()), Integer.valueOf(blockposition.getY()), Integer.valueOf(blockposition.getZ()), Integer.valueOf(j), Integer.valueOf(i)}); + } + } + + if (flag) { + TileEntity tileentity = world.getTileEntity(blockposition); + + if (tileentity == null) { + throw new CommandException("commands.testforblock.failed.tileEntity", new Object[] { Integer.valueOf(blockposition.getX()), Integer.valueOf(blockposition.getY()), Integer.valueOf(blockposition.getZ())}); + } + + NBTTagCompound nbttagcompound1 = new NBTTagCompound(); + + tileentity.b(nbttagcompound1); + if (!GameProfileSerializer.a(nbttagcompound, nbttagcompound1, true)) { + throw new CommandException("commands.testforblock.failed.nbt", new Object[] { Integer.valueOf(blockposition.getX()), Integer.valueOf(blockposition.getY()), Integer.valueOf(blockposition.getZ())}); + } + } + + icommandlistener.a(CommandObjectiveExecutor.EnumCommandResult.AFFECTED_BLOCKS, 1); + a(icommandlistener, this, "commands.testforblock.success", new Object[] { Integer.valueOf(blockposition.getX()), Integer.valueOf(blockposition.getY()), Integer.valueOf(blockposition.getZ())}); + } + } + } + } + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + return astring.length > 0 && astring.length <= 3 ? a(astring, 0, blockposition) : (astring.length == 4 ? a(astring, (Collection) Block.REGISTRY.keySet()) : null); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandTestForBlocks.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandTestForBlocks.java new file mode 100644 index 0000000..05d95ea --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandTestForBlocks.java @@ -0,0 +1,109 @@ +package net.minecraft.server; + +import java.util.List; + +public class CommandTestForBlocks extends CommandAbstract { + + public CommandTestForBlocks() {} + + public String getCommand() { + return "testforblocks"; + } + + public int a() { + return 2; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.compare.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length < 9) { + throw new ExceptionUsage("commands.compare.usage", new Object[0]); + } else { + icommandlistener.a(CommandObjectiveExecutor.EnumCommandResult.AFFECTED_BLOCKS, 0); + BlockPosition blockposition = a(icommandlistener, astring, 0, false); + BlockPosition blockposition1 = a(icommandlistener, astring, 3, false); + BlockPosition blockposition2 = a(icommandlistener, astring, 6, false); + StructureBoundingBox structureboundingbox = new StructureBoundingBox(blockposition, blockposition1); + StructureBoundingBox structureboundingbox1 = new StructureBoundingBox(blockposition2, blockposition2.a(structureboundingbox.b())); + int i = structureboundingbox.c() * structureboundingbox.d() * structureboundingbox.e(); + + if (i > 524288) { + throw new CommandException("commands.compare.tooManyBlocks", new Object[] { Integer.valueOf(i), Integer.valueOf(524288)}); + } else if (structureboundingbox.b >= 0 && structureboundingbox.e < 256 && structureboundingbox1.b >= 0 && structureboundingbox1.e < 256) { + World world = icommandlistener.getWorld(); + + if (world.a(structureboundingbox) && world.a(structureboundingbox1)) { + boolean flag = false; + + if (astring.length > 9 && astring[9].equals("masked")) { + flag = true; + } + + i = 0; + BlockPosition blockposition3 = new BlockPosition(structureboundingbox1.a - structureboundingbox.a, structureboundingbox1.b - structureboundingbox.b, structureboundingbox1.c - structureboundingbox.c); + BlockPosition.MutableBlockPosition blockposition_mutableblockposition = new BlockPosition.MutableBlockPosition(); + BlockPosition.MutableBlockPosition blockposition_mutableblockposition1 = new BlockPosition.MutableBlockPosition(); + + for (int j = structureboundingbox.c; j <= structureboundingbox.f; ++j) { + for (int k = structureboundingbox.b; k <= structureboundingbox.e; ++k) { + for (int l = structureboundingbox.a; l <= structureboundingbox.d; ++l) { + blockposition_mutableblockposition.c(l, k, j); + blockposition_mutableblockposition1.c(l + blockposition3.getX(), k + blockposition3.getY(), j + blockposition3.getZ()); + boolean flag1 = false; + IBlockData iblockdata = world.getType(blockposition_mutableblockposition); + + if (!flag || iblockdata.getBlock() != Blocks.AIR) { + if (iblockdata == world.getType(blockposition_mutableblockposition1)) { + TileEntity tileentity = world.getTileEntity(blockposition_mutableblockposition); + TileEntity tileentity1 = world.getTileEntity(blockposition_mutableblockposition1); + + if (tileentity != null && tileentity1 != null) { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + + tileentity.b(nbttagcompound); + nbttagcompound.remove("x"); + nbttagcompound.remove("y"); + nbttagcompound.remove("z"); + NBTTagCompound nbttagcompound1 = new NBTTagCompound(); + + tileentity1.b(nbttagcompound1); + nbttagcompound1.remove("x"); + nbttagcompound1.remove("y"); + nbttagcompound1.remove("z"); + if (!nbttagcompound.equals(nbttagcompound1)) { + flag1 = true; + } + } else if (tileentity != null) { + flag1 = true; + } + } else { + flag1 = true; + } + + ++i; + if (flag1) { + throw new CommandException("commands.compare.failed", new Object[0]); + } + } + } + } + } + + icommandlistener.a(CommandObjectiveExecutor.EnumCommandResult.AFFECTED_BLOCKS, i); + a(icommandlistener, this, "commands.compare.success", new Object[] { Integer.valueOf(i)}); + } else { + throw new CommandException("commands.compare.outOfWorld", new Object[0]); + } + } else { + throw new CommandException("commands.compare.outOfWorld", new Object[0]); + } + } + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + return astring.length > 0 && astring.length <= 3 ? a(astring, 0, blockposition) : (astring.length > 3 && astring.length <= 6 ? a(astring, 3, blockposition) : (astring.length > 6 && astring.length <= 9 ? a(astring, 6, blockposition) : (astring.length == 10 ? a(astring, new String[] { "masked", "all"}) : null))); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandTime.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandTime.java new file mode 100644 index 0000000..ec835de --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandTime.java @@ -0,0 +1,85 @@ +package net.minecraft.server; + +import java.util.List; + +public class CommandTime extends CommandAbstract { + + public CommandTime() {} + + public String getCommand() { + return "time"; + } + + public int a() { + return 2; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.time.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length > 1) { + int i; + + if (astring[0].equals("set")) { + if (astring[1].equals("day")) { + i = 1000; + } else if (astring[1].equals("night")) { + i = 13000; + } else { + i = a(astring[1], 0); + } + + this.a(icommandlistener, i); + a(icommandlistener, this, "commands.time.set", new Object[] { Integer.valueOf(i)}); + return; + } + + if (astring[0].equals("add")) { + i = a(astring[1], 0); + this.b(icommandlistener, i); + a(icommandlistener, this, "commands.time.added", new Object[] { Integer.valueOf(i)}); + return; + } + + if (astring[0].equals("query")) { + if (astring[1].equals("daytime")) { + i = (int) (icommandlistener.getWorld().getDayTime() % 2147483647L); + icommandlistener.a(CommandObjectiveExecutor.EnumCommandResult.QUERY_RESULT, i); + a(icommandlistener, this, "commands.time.query", new Object[] { Integer.valueOf(i)}); + return; + } + + if (astring[1].equals("gametime")) { + i = (int) (icommandlistener.getWorld().getTime() % 2147483647L); + icommandlistener.a(CommandObjectiveExecutor.EnumCommandResult.QUERY_RESULT, i); + a(icommandlistener, this, "commands.time.query", new Object[] { Integer.valueOf(i)}); + return; + } + } + } + + throw new ExceptionUsage("commands.time.usage", new Object[0]); + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + return astring.length == 1 ? a(astring, new String[] { "set", "add", "query"}) : (astring.length == 2 && astring[0].equals("set") ? a(astring, new String[] { "day", "night"}) : (astring.length == 2 && astring[0].equals("query") ? a(astring, new String[] { "daytime", "gametime"}) : null)); + } + + protected void a(ICommandListener icommandlistener, int i) { + for (int j = 0; j < MinecraftServer.getServer().worldServer.length; ++j) { + MinecraftServer.getServer().worldServer[j].setDayTime((long) i); + } + + } + + protected void b(ICommandListener icommandlistener, int i) { + for (int j = 0; j < MinecraftServer.getServer().worldServer.length; ++j) { + WorldServer worldserver = MinecraftServer.getServer().worldServer[j]; + + worldserver.setDayTime(worldserver.getDayTime() + (long) i); + } + + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandTitle.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandTitle.java new file mode 100644 index 0000000..74c40d8 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandTitle.java @@ -0,0 +1,95 @@ +package net.minecraft.server; + +import com.google.gson.JsonParseException; +import java.util.List; +import org.apache.commons.lang3.exception.ExceptionUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class CommandTitle extends CommandAbstract { + + private static final Logger a = LogManager.getLogger(); + + public CommandTitle() {} + + public String getCommand() { + return "title"; + } + + public int a() { + return 2; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.title.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length < 2) { + throw new ExceptionUsage("commands.title.usage", new Object[0]); + } else { + if (astring.length < 3) { + if ("title".equals(astring[1]) || "subtitle".equals(astring[1])) { + throw new ExceptionUsage("commands.title.usage.title", new Object[0]); + } + + if ("times".equals(astring[1])) { + throw new ExceptionUsage("commands.title.usage.times", new Object[0]); + } + } + + EntityPlayer entityplayer = a(icommandlistener, astring[0]); + PacketPlayOutTitle.EnumTitleAction packetplayouttitle_enumtitleaction = PacketPlayOutTitle.EnumTitleAction.a(astring[1]); + + if (packetplayouttitle_enumtitleaction != PacketPlayOutTitle.EnumTitleAction.CLEAR && packetplayouttitle_enumtitleaction != PacketPlayOutTitle.EnumTitleAction.RESET) { + if (packetplayouttitle_enumtitleaction == PacketPlayOutTitle.EnumTitleAction.TIMES) { + if (astring.length != 5) { + throw new ExceptionUsage("commands.title.usage", new Object[0]); + } else { + int i = a(astring[2]); + int j = a(astring[3]); + int k = a(astring[4]); + PacketPlayOutTitle packetplayouttitle = new PacketPlayOutTitle(i, j, k); + + entityplayer.playerConnection.sendPacket(packetplayouttitle); + a(icommandlistener, this, "commands.title.success", new Object[0]); + } + } else if (astring.length < 3) { + throw new ExceptionUsage("commands.title.usage", new Object[0]); + } else { + String s = a(astring, 2); + + IChatBaseComponent ichatbasecomponent; + + try { + ichatbasecomponent = IChatBaseComponent.ChatSerializer.a(s); + } catch (JsonParseException jsonparseexception) { + Throwable throwable = ExceptionUtils.getRootCause(jsonparseexception); + + throw new ExceptionInvalidSyntax("commands.tellraw.jsonException", new Object[] { throwable == null ? "" : throwable.getMessage()}); + } + + PacketPlayOutTitle packetplayouttitle1 = new PacketPlayOutTitle(packetplayouttitle_enumtitleaction, ChatComponentUtils.filterForDisplay(icommandlistener, ichatbasecomponent, entityplayer)); + + entityplayer.playerConnection.sendPacket(packetplayouttitle1); + a(icommandlistener, this, "commands.title.success", new Object[0]); + } + } else if (astring.length != 2) { + throw new ExceptionUsage("commands.title.usage", new Object[0]); + } else { + PacketPlayOutTitle packetplayouttitle2 = new PacketPlayOutTitle(packetplayouttitle_enumtitleaction, (IChatBaseComponent) null); + + entityplayer.playerConnection.sendPacket(packetplayouttitle2); + a(icommandlistener, this, "commands.title.success", new Object[0]); + } + } + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + return astring.length == 1 ? a(astring, MinecraftServer.getServer().getPlayers()) : (astring.length == 2 ? a(astring, PacketPlayOutTitle.EnumTitleAction.a()) : null); + } + + public boolean isListStart(String[] astring, int i) { + return i == 0; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandToggleDownfall.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandToggleDownfall.java new file mode 100644 index 0000000..54f2060 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandToggleDownfall.java @@ -0,0 +1,29 @@ +package net.minecraft.server; + +public class CommandToggleDownfall extends CommandAbstract { + + public CommandToggleDownfall() {} + + public String getCommand() { + return "toggledownfall"; + } + + public int a() { + return 2; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.downfall.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + this.d(); + a(icommandlistener, this, "commands.downfall.success", new Object[0]); + } + + protected void d() { + WorldData worlddata = MinecraftServer.getServer().worldServer[0].getWorldData(); + + worlddata.setStorm(!worlddata.hasStorm()); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/CommandTp.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandTp.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/CommandTp.java rename to eSpigot-Server/src/main/java/net/minecraft/server/CommandTp.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandTrigger.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandTrigger.java new file mode 100644 index 0000000..3b0d304 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandTrigger.java @@ -0,0 +1,98 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public class CommandTrigger extends CommandAbstract { + + public CommandTrigger() {} + + public String getCommand() { + return "trigger"; + } + + public int a() { + return 0; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.trigger.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length < 3) { + throw new ExceptionUsage("commands.trigger.usage", new Object[0]); + } else { + EntityPlayer entityplayer; + + if (icommandlistener instanceof EntityPlayer) { + entityplayer = (EntityPlayer) icommandlistener; + } else { + Entity entity = icommandlistener.f(); + + if (!(entity instanceof EntityPlayer)) { + throw new CommandException("commands.trigger.invalidPlayer", new Object[0]); + } + + entityplayer = (EntityPlayer) entity; + } + + Scoreboard scoreboard = MinecraftServer.getServer().getWorldServer(0).getScoreboard(); + ScoreboardObjective scoreboardobjective = scoreboard.getObjective(astring[0]); + + if (scoreboardobjective != null && scoreboardobjective.getCriteria() == IScoreboardCriteria.c) { + int i = a(astring[2]); + + if (!scoreboard.b(entityplayer.getName(), scoreboardobjective)) { + throw new CommandException("commands.trigger.invalidObjective", new Object[] { astring[0]}); + } else { + ScoreboardScore scoreboardscore = scoreboard.getPlayerScoreForObjective(entityplayer.getName(), scoreboardobjective); + + if (scoreboardscore.g()) { + throw new CommandException("commands.trigger.disabled", new Object[] { astring[0]}); + } else { + if ("set".equals(astring[1])) { + scoreboardscore.setScore(i); + } else { + if (!"add".equals(astring[1])) { + throw new CommandException("commands.trigger.invalidMode", new Object[] { astring[1]}); + } + + scoreboardscore.addScore(i); + } + + scoreboardscore.a(true); + if (entityplayer.playerInteractManager.isCreative()) { + a(icommandlistener, this, "commands.trigger.success", new Object[] { astring[0], astring[1], astring[2]}); + } + + } + } + } else { + throw new CommandException("commands.trigger.invalidObjective", new Object[] { astring[0]}); + } + } + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + if (astring.length == 1) { + Scoreboard scoreboard = MinecraftServer.getServer().getWorldServer(0).getScoreboard(); + ArrayList arraylist = Lists.newArrayList(); + Iterator iterator = scoreboard.getObjectives().iterator(); + + while (iterator.hasNext()) { + ScoreboardObjective scoreboardobjective = (ScoreboardObjective) iterator.next(); + + if (scoreboardobjective.getCriteria() == IScoreboardCriteria.c) { + arraylist.add(scoreboardobjective.getName()); + } + } + + return a(astring, (String[]) arraylist.toArray(new String[arraylist.size()])); + } else { + return astring.length == 2 ? a(astring, new String[] { "add", "set"}) : null; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandWeather.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandWeather.java new file mode 100644 index 0000000..2a8861f --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandWeather.java @@ -0,0 +1,68 @@ +package net.minecraft.server; + +import java.util.List; +import java.util.Random; + +public class CommandWeather extends CommandAbstract { + + public CommandWeather() {} + + public String getCommand() { + return "weather"; + } + + public int a() { + return 2; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.weather.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length >= 1 && astring.length <= 2) { + int i = (300 + (new Random()).nextInt(600)) * 20; + + if (astring.length >= 2) { + i = a(astring[1], 1, 1000000) * 20; + } + + WorldServer worldserver = MinecraftServer.getServer().worldServer[0]; + WorldData worlddata = worldserver.getWorldData(); + + if ("clear".equalsIgnoreCase(astring[0])) { + worlddata.i(i); + worlddata.setWeatherDuration(0); + worlddata.setThunderDuration(0); + worlddata.setStorm(false); + worlddata.setThundering(false); + a(icommandlistener, this, "commands.weather.clear", new Object[0]); + } else if ("rain".equalsIgnoreCase(astring[0])) { + worlddata.i(0); + worlddata.setWeatherDuration(i); + worlddata.setThunderDuration(i); + worlddata.setStorm(true); + worlddata.setThundering(false); + a(icommandlistener, this, "commands.weather.rain", new Object[0]); + } else { + if (!"thunder".equalsIgnoreCase(astring[0])) { + throw new ExceptionUsage("commands.weather.usage", new Object[0]); + } + + worlddata.i(0); + worlddata.setWeatherDuration(i); + worlddata.setThunderDuration(i); + worlddata.setStorm(true); + worlddata.setThundering(true); + a(icommandlistener, this, "commands.weather.thunder", new Object[0]); + } + + } else { + throw new ExceptionUsage("commands.weather.usage", new Object[0]); + } + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + return astring.length == 1 ? a(astring, new String[] { "clear", "rain", "thunder"}) : null; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandWhitelist.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandWhitelist.java new file mode 100644 index 0000000..7c29357 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandWhitelist.java @@ -0,0 +1,92 @@ +package net.minecraft.server; + +import com.mojang.authlib.GameProfile; +import java.util.List; + +public class CommandWhitelist extends CommandAbstract { + + public CommandWhitelist() {} + + public String getCommand() { + return "whitelist"; + } + + public int a() { + return 3; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.whitelist.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length < 1) { + throw new ExceptionUsage("commands.whitelist.usage", new Object[0]); + } else { + MinecraftServer minecraftserver = MinecraftServer.getServer(); + + if (astring[0].equals("on")) { + minecraftserver.getPlayerList().setHasWhitelist(true); + a(icommandlistener, this, "commands.whitelist.enabled", new Object[0]); + } else if (astring[0].equals("off")) { + minecraftserver.getPlayerList().setHasWhitelist(false); + a(icommandlistener, this, "commands.whitelist.disabled", new Object[0]); + } else if (astring[0].equals("list")) { + icommandlistener.sendMessage(new ChatMessage("commands.whitelist.list", new Object[] { Integer.valueOf(minecraftserver.getPlayerList().getWhitelisted().length), Integer.valueOf(minecraftserver.getPlayerList().getSeenPlayers().length)})); + String[] astring1 = minecraftserver.getPlayerList().getWhitelisted(); + + icommandlistener.sendMessage(new ChatComponentText(a((Object[]) astring1))); + } else { + GameProfile gameprofile; + + if (astring[0].equals("add")) { + if (astring.length < 2) { + throw new ExceptionUsage("commands.whitelist.add.usage", new Object[0]); + } + + gameprofile = minecraftserver.getUserCache().getProfile(astring[1]); + if (gameprofile == null) { + throw new CommandException("commands.whitelist.add.failed", new Object[] { astring[1]}); + } + + minecraftserver.getPlayerList().addWhitelist(gameprofile); + a(icommandlistener, this, "commands.whitelist.add.success", new Object[] { astring[1]}); + } else if (astring[0].equals("remove")) { + if (astring.length < 2) { + throw new ExceptionUsage("commands.whitelist.remove.usage", new Object[0]); + } + + gameprofile = minecraftserver.getPlayerList().getWhitelist().a(astring[1]); + if (gameprofile == null) { + throw new CommandException("commands.whitelist.remove.failed", new Object[] { astring[1]}); + } + + minecraftserver.getPlayerList().removeWhitelist(gameprofile); + a(icommandlistener, this, "commands.whitelist.remove.success", new Object[] { astring[1]}); + } else if (astring[0].equals("reload")) { + minecraftserver.getPlayerList().reloadWhitelist(); + a(icommandlistener, this, "commands.whitelist.reloaded", new Object[0]); + } + } + + } + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + if (astring.length == 1) { + return a(astring, new String[] { "on", "off", "list", "add", "remove", "reload"}); + } else { + if (astring.length == 2) { + if (astring[0].equals("remove")) { + return a(astring, MinecraftServer.getServer().getPlayerList().getWhitelisted()); + } + + if (astring[0].equals("add")) { + return a(astring, MinecraftServer.getServer().getUserCache().a()); + } + } + + return null; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandWorldBorder.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandWorldBorder.java new file mode 100644 index 0000000..fb24117 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandWorldBorder.java @@ -0,0 +1,148 @@ +package net.minecraft.server; + +import java.util.List; + +public class CommandWorldBorder extends CommandAbstract { + + public CommandWorldBorder() {} + + public String getCommand() { + return "worldborder"; + } + + public int a() { + return 2; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.worldborder.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length < 1) { + throw new ExceptionUsage("commands.worldborder.usage", new Object[0]); + } else { + WorldBorder worldborder = this.d(); + double d0; + double d1; + long i; + + if (astring[0].equals("set")) { + if (astring.length != 2 && astring.length != 3) { + throw new ExceptionUsage("commands.worldborder.set.usage", new Object[0]); + } + + d0 = worldborder.j(); + d1 = a(astring[1], 1.0D, 6.0E7D); + i = astring.length > 2 ? a(astring[2], 0L, 9223372036854775L) * 1000L : 0L; + if (i > 0L) { + worldborder.transitionSizeBetween(d0, d1, i); + if (d0 > d1) { + a(icommandlistener, this, "commands.worldborder.setSlowly.shrink.success", new Object[] { String.format("%.1f", new Object[] { Double.valueOf(d1)}), String.format("%.1f", new Object[] { Double.valueOf(d0)}), Long.toString(i / 1000L)}); + } else { + a(icommandlistener, this, "commands.worldborder.setSlowly.grow.success", new Object[] { String.format("%.1f", new Object[] { Double.valueOf(d1)}), String.format("%.1f", new Object[] { Double.valueOf(d0)}), Long.toString(i / 1000L)}); + } + } else { + worldborder.setSize(d1); + a(icommandlistener, this, "commands.worldborder.set.success", new Object[] { String.format("%.1f", new Object[] { Double.valueOf(d1)}), String.format("%.1f", new Object[] { Double.valueOf(d0)})}); + } + } else if (astring[0].equals("add")) { + if (astring.length != 2 && astring.length != 3) { + throw new ExceptionUsage("commands.worldborder.add.usage", new Object[0]); + } + + d0 = worldborder.getSize(); + d1 = d0 + a(astring[1], -d0, 6.0E7D - d0); + i = worldborder.i() + (astring.length > 2 ? a(astring[2], 0L, 9223372036854775L) * 1000L : 0L); + if (i > 0L) { + worldborder.transitionSizeBetween(d0, d1, i); + if (d0 > d1) { + a(icommandlistener, this, "commands.worldborder.setSlowly.shrink.success", new Object[] { String.format("%.1f", new Object[] { Double.valueOf(d1)}), String.format("%.1f", new Object[] { Double.valueOf(d0)}), Long.toString(i / 1000L)}); + } else { + a(icommandlistener, this, "commands.worldborder.setSlowly.grow.success", new Object[] { String.format("%.1f", new Object[] { Double.valueOf(d1)}), String.format("%.1f", new Object[] { Double.valueOf(d0)}), Long.toString(i / 1000L)}); + } + } else { + worldborder.setSize(d1); + a(icommandlistener, this, "commands.worldborder.set.success", new Object[] { String.format("%.1f", new Object[] { Double.valueOf(d1)}), String.format("%.1f", new Object[] { Double.valueOf(d0)})}); + } + } else if (astring[0].equals("center")) { + if (astring.length != 3) { + throw new ExceptionUsage("commands.worldborder.center.usage", new Object[0]); + } + + BlockPosition blockposition = icommandlistener.getChunkCoordinates(); + double d2 = b((double) blockposition.getX() + 0.5D, astring[1], true); + double d3 = b((double) blockposition.getZ() + 0.5D, astring[2], true); + + worldborder.setCenter(d2, d3); + a(icommandlistener, this, "commands.worldborder.center.success", new Object[] { Double.valueOf(d2), Double.valueOf(d3)}); + } else if (astring[0].equals("damage")) { + if (astring.length < 2) { + throw new ExceptionUsage("commands.worldborder.damage.usage", new Object[0]); + } + + if (astring[1].equals("buffer")) { + if (astring.length != 3) { + throw new ExceptionUsage("commands.worldborder.damage.buffer.usage", new Object[0]); + } + + d0 = a(astring[2], 0.0D); + d1 = worldborder.getDamageBuffer(); + worldborder.setDamageBuffer(d0); + a(icommandlistener, this, "commands.worldborder.damage.buffer.success", new Object[] { String.format("%.1f", new Object[] { Double.valueOf(d0)}), String.format("%.1f", new Object[] { Double.valueOf(d1)})}); + } else if (astring[1].equals("amount")) { + if (astring.length != 3) { + throw new ExceptionUsage("commands.worldborder.damage.amount.usage", new Object[0]); + } + + d0 = a(astring[2], 0.0D); + d1 = worldborder.getDamageAmount(); + worldborder.setDamageAmount(d0); + a(icommandlistener, this, "commands.worldborder.damage.amount.success", new Object[] { String.format("%.2f", new Object[] { Double.valueOf(d0)}), String.format("%.2f", new Object[] { Double.valueOf(d1)})}); + } + } else if (astring[0].equals("warning")) { + if (astring.length < 2) { + throw new ExceptionUsage("commands.worldborder.warning.usage", new Object[0]); + } + + int j = a(astring[2], 0); + int k; + + if (astring[1].equals("time")) { + if (astring.length != 3) { + throw new ExceptionUsage("commands.worldborder.warning.time.usage", new Object[0]); + } + + k = worldborder.getWarningTime(); + worldborder.setWarningTime(j); + a(icommandlistener, this, "commands.worldborder.warning.time.success", new Object[] { Integer.valueOf(j), Integer.valueOf(k)}); + } else if (astring[1].equals("distance")) { + if (astring.length != 3) { + throw new ExceptionUsage("commands.worldborder.warning.distance.usage", new Object[0]); + } + + k = worldborder.getWarningDistance(); + worldborder.setWarningDistance(j); + a(icommandlistener, this, "commands.worldborder.warning.distance.success", new Object[] { Integer.valueOf(j), Integer.valueOf(k)}); + } + } else { + if (!astring[0].equals("get")) { + throw new ExceptionUsage("commands.worldborder.usage", new Object[0]); + } + + d0 = worldborder.getSize(); + icommandlistener.a(CommandObjectiveExecutor.EnumCommandResult.QUERY_RESULT, MathHelper.floor(d0 + 0.5D)); + icommandlistener.sendMessage(new ChatMessage("commands.worldborder.get.success", new Object[] { String.format("%.0f", new Object[] { Double.valueOf(d0)})})); + } + + } + } + + protected WorldBorder d() { + return MinecraftServer.getServer().worldServer[0].getWorldBorder(); + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + return astring.length == 1 ? a(astring, new String[] { "set", "center", "damage", "warning", "add", "get"}) : (astring.length == 2 && astring[0].equals("damage") ? a(astring, new String[] { "buffer", "amount"}) : (astring.length >= 2 && astring.length <= 3 && astring[0].equals("center") ? b(astring, 1, blockposition) : (astring.length == 2 && astring[0].equals("warning") ? a(astring, new String[] { "time", "distance"}) : null))); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CommandXp.java b/eSpigot-Server/src/main/java/net/minecraft/server/CommandXp.java new file mode 100644 index 0000000..0f391b6 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CommandXp.java @@ -0,0 +1,74 @@ +package net.minecraft.server; + +import java.util.List; + +public class CommandXp extends CommandAbstract { + + public CommandXp() {} + + public String getCommand() { + return "xp"; + } + + public int a() { + return 2; + } + + public String getUsage(ICommandListener icommandlistener) { + return "commands.xp.usage"; + } + + public void execute(ICommandListener icommandlistener, String[] astring) throws CommandException { + if (astring.length <= 0) { + throw new ExceptionUsage("commands.xp.usage", new Object[0]); + } else { + String s = astring[0]; + boolean flag = s.endsWith("l") || s.endsWith("L"); + + if (flag && s.length() > 1) { + s = s.substring(0, s.length() - 1); + } + + int i = a(s); + boolean flag1 = i < 0; + + if (flag1) { + i *= -1; + } + + EntityPlayer entityplayer = astring.length > 1 ? a(icommandlistener, astring[1]) : b(icommandlistener); + + if (flag) { + icommandlistener.a(CommandObjectiveExecutor.EnumCommandResult.QUERY_RESULT, entityplayer.expLevel); + if (flag1) { + entityplayer.levelDown(-i); + a(icommandlistener, this, "commands.xp.success.negative.levels", new Object[] { Integer.valueOf(i), entityplayer.getName()}); + } else { + entityplayer.levelDown(i); + a(icommandlistener, this, "commands.xp.success.levels", new Object[] { Integer.valueOf(i), entityplayer.getName()}); + } + } else { + icommandlistener.a(CommandObjectiveExecutor.EnumCommandResult.QUERY_RESULT, entityplayer.expTotal); + if (flag1) { + throw new CommandException("commands.xp.failure.widthdrawXp", new Object[0]); + } + + entityplayer.giveExp(i); + a(icommandlistener, this, "commands.xp.success", new Object[] { Integer.valueOf(i), entityplayer.getName()}); + } + + } + } + + public List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition) { + return astring.length == 2 ? a(astring, this.d()) : null; + } + + protected String[] d() { + return MinecraftServer.getServer().getPlayers(); + } + + public boolean isListStart(String[] astring, int i) { + return i == 1; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/Container.java b/eSpigot-Server/src/main/java/net/minecraft/server/Container.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/Container.java rename to eSpigot-Server/src/main/java/net/minecraft/server/Container.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ContainerAnvil.java b/eSpigot-Server/src/main/java/net/minecraft/server/ContainerAnvil.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ContainerAnvil.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ContainerAnvil.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ContainerBeacon.java b/eSpigot-Server/src/main/java/net/minecraft/server/ContainerBeacon.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ContainerBeacon.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ContainerBeacon.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ContainerBrewingStand.java b/eSpigot-Server/src/main/java/net/minecraft/server/ContainerBrewingStand.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ContainerBrewingStand.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ContainerBrewingStand.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ContainerChest.java b/eSpigot-Server/src/main/java/net/minecraft/server/ContainerChest.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ContainerChest.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ContainerChest.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ContainerDispenser.java b/eSpigot-Server/src/main/java/net/minecraft/server/ContainerDispenser.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ContainerDispenser.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ContainerDispenser.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ContainerEnchantTable.java b/eSpigot-Server/src/main/java/net/minecraft/server/ContainerEnchantTable.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ContainerEnchantTable.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ContainerEnchantTable.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ContainerFurnace.java b/eSpigot-Server/src/main/java/net/minecraft/server/ContainerFurnace.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ContainerFurnace.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ContainerFurnace.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ContainerHopper.java b/eSpigot-Server/src/main/java/net/minecraft/server/ContainerHopper.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ContainerHopper.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ContainerHopper.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ContainerHorse.java b/eSpigot-Server/src/main/java/net/minecraft/server/ContainerHorse.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ContainerHorse.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ContainerHorse.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ContainerMerchant.java b/eSpigot-Server/src/main/java/net/minecraft/server/ContainerMerchant.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ContainerMerchant.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ContainerMerchant.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ContainerPlayer.java b/eSpigot-Server/src/main/java/net/minecraft/server/ContainerPlayer.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ContainerPlayer.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ContainerPlayer.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ContainerWorkbench.java b/eSpigot-Server/src/main/java/net/minecraft/server/ContainerWorkbench.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ContainerWorkbench.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ContainerWorkbench.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ControllerJump.java b/eSpigot-Server/src/main/java/net/minecraft/server/ControllerJump.java new file mode 100644 index 0000000..d447f9f --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ControllerJump.java @@ -0,0 +1,20 @@ +package net.minecraft.server; + +public class ControllerJump { + + private EntityInsentient b; + protected boolean a; + + public ControllerJump(EntityInsentient entityinsentient) { + this.b = entityinsentient; + } + + public void a() { + this.a = true; + } + + public void b() { + this.b.i(this.a); + this.a = false; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ControllerLook.java b/eSpigot-Server/src/main/java/net/minecraft/server/ControllerLook.java new file mode 100644 index 0000000..4f573ee --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ControllerLook.java @@ -0,0 +1,100 @@ +package net.minecraft.server; + +public class ControllerLook { + + private EntityInsentient a; + private float b; + private float c; + private boolean d; + private double e; + private double f; + private double g; + + public ControllerLook(EntityInsentient entityinsentient) { + this.a = entityinsentient; + } + + public void a(Entity entity, float f, float f1) { + this.e = entity.locX; + if (entity instanceof EntityLiving) { + this.f = entity.locY + (double) entity.getHeadHeight(); + } else { + this.f = (entity.getBoundingBox().b + entity.getBoundingBox().e) / 2.0D; + } + + this.g = entity.locZ; + this.b = f; + this.c = f1; + this.d = true; + } + + public void a(double d0, double d1, double d2, float f, float f1) { + this.e = d0; + this.f = d1; + this.g = d2; + this.b = f; + this.c = f1; + this.d = true; + } + + public void a() { + this.a.pitch = 0.0F; + if (this.d) { + this.d = false; + double d0 = this.e - this.a.locX; + double d1 = this.f - (this.a.locY + (double) this.a.getHeadHeight()); + double d2 = this.g - this.a.locZ; + double d3 = (double) MathHelper.sqrt(d0 * d0 + d2 * d2); + float f = (float) (MathHelper.b(d2, d0) * 180.0D / 3.1415927410125732D) - 90.0F; + float f1 = (float) (-(MathHelper.b(d1, d3) * 180.0D / 3.1415927410125732D)); + + this.a.pitch = this.a(this.a.pitch, f1, this.c); + this.a.aK = this.a(this.a.aK, f, this.b); + } else { + this.a.aK = this.a(this.a.aK, this.a.aI, 10.0F); + } + + float f2 = MathHelper.g(this.a.aK - this.a.aI); + + if (!this.a.getNavigation().m()) { + if (f2 < -75.0F) { + this.a.aK = this.a.aI - 75.0F; + } + + if (f2 > 75.0F) { + this.a.aK = this.a.aI + 75.0F; + } + } + + } + + private float a(float f, float f1, float f2) { + float f3 = MathHelper.g(f1 - f); + + if (f3 > f2) { + f3 = f2; + } + + if (f3 < -f2) { + f3 = -f2; + } + + return f + f3; + } + + public boolean b() { + return this.d; + } + + public double e() { + return this.e; + } + + public double f() { + return this.f; + } + + public double g() { + return this.g; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ControllerMove.java b/eSpigot-Server/src/main/java/net/minecraft/server/ControllerMove.java new file mode 100644 index 0000000..6fee887 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ControllerMove.java @@ -0,0 +1,91 @@ +package net.minecraft.server; + +public class ControllerMove { + + protected EntityInsentient a; + protected double b; + protected double c; + protected double d; + protected double e; + protected boolean f; + + public ControllerMove(EntityInsentient entityinsentient) { + this.a = entityinsentient; + this.b = entityinsentient.locX; + this.c = entityinsentient.locY; + this.d = entityinsentient.locZ; + } + + public boolean a() { + return this.f; + } + + public double b() { + return this.e; + } + + public void a(double d0, double d1, double d2, double d3) { + this.b = d0; + this.c = d1; + this.d = d2; + this.e = d3; + this.f = true; + } + + public void c() { + this.a.n(0.0F); + if (this.f) { + this.f = false; + int i = MathHelper.floor(this.a.getBoundingBox().b + 0.5D); + double d0 = this.b - this.a.locX; + double d1 = this.d - this.a.locZ; + double d2 = this.c - (double) i; + double d3 = d0 * d0 + d2 * d2 + d1 * d1; + + if (d3 >= 2.500000277905201E-7D) { + float f = (float) (MathHelper.b(d1, d0) * 180.0D / 3.1415927410125732D) - 90.0F; + + this.a.yaw = this.a(this.a.yaw, f, 30.0F); + this.a.k((float) (this.e * this.a.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).getValue())); + if (d2 > 0.0D && d0 * d0 + d1 * d1 < 1.0D) { + this.a.getControllerJump().a(); + } + + } + } + } + + protected float a(float f, float f1, float f2) { + float f3 = MathHelper.g(f1 - f); + + if (f3 > f2) { + f3 = f2; + } + + if (f3 < -f2) { + f3 = -f2; + } + + float f4 = f + f3; + + if (f4 < 0.0F) { + f4 += 360.0F; + } else if (f4 > 360.0F) { + f4 -= 360.0F; + } + + return f4; + } + + public double d() { + return this.b; + } + + public double e() { + return this.c; + } + + public double f() { + return this.d; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/Convertable.java b/eSpigot-Server/src/main/java/net/minecraft/server/Convertable.java new file mode 100644 index 0000000..92bfb05 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/Convertable.java @@ -0,0 +1,14 @@ +package net.minecraft.server; + +public interface Convertable { + + IDataManager a(String s, boolean flag); + + void d(); + + boolean e(String s); + + boolean isConvertable(String s); + + boolean convert(String s, IProgressUpdate iprogressupdate); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/Counter.java b/eSpigot-Server/src/main/java/net/minecraft/server/Counter.java new file mode 100644 index 0000000..cbfe88b --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/Counter.java @@ -0,0 +1,3 @@ +package net.minecraft.server; + +public interface Counter {} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CounterStatistic.java b/eSpigot-Server/src/main/java/net/minecraft/server/CounterStatistic.java new file mode 100644 index 0000000..a466533 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CounterStatistic.java @@ -0,0 +1,18 @@ +package net.minecraft.server; + +public class CounterStatistic extends Statistic { + + public CounterStatistic(String s, IChatBaseComponent ichatbasecomponent, Counter counter) { + super(s, ichatbasecomponent, counter); + } + + public CounterStatistic(String s, IChatBaseComponent ichatbasecomponent) { + super(s, ichatbasecomponent); + } + + public Statistic h() { + super.h(); + StatisticList.c.add(this); + return this; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/CraftingManager.java b/eSpigot-Server/src/main/java/net/minecraft/server/CraftingManager.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/CraftingManager.java rename to eSpigot-Server/src/main/java/net/minecraft/server/CraftingManager.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CraftingStatistic.java b/eSpigot-Server/src/main/java/net/minecraft/server/CraftingStatistic.java new file mode 100644 index 0000000..9f11859 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CraftingStatistic.java @@ -0,0 +1,17 @@ +package net.minecraft.server; + +public class CraftingStatistic extends Statistic { + + private final Item a; + + public CraftingStatistic(String s, String s1, IChatBaseComponent ichatbasecomponent, Item item) { + super(s + s1, ichatbasecomponent); + this.a = item; + int i = Item.getId(item); + + if (i != 0) { + IScoreboardCriteria.criteria.put(s + i, this.k()); + } + + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/CrashReport.java b/eSpigot-Server/src/main/java/net/minecraft/server/CrashReport.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/CrashReport.java rename to eSpigot-Server/src/main/java/net/minecraft/server/CrashReport.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CrashReportSystemDetails.java b/eSpigot-Server/src/main/java/net/minecraft/server/CrashReportSystemDetails.java new file mode 100644 index 0000000..cd972eb --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CrashReportSystemDetails.java @@ -0,0 +1,265 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import java.util.Iterator; +import java.util.List; +import java.util.concurrent.Callable; + +public class CrashReportSystemDetails { + + private final CrashReport a; + private final String b; + private final List c = Lists.newArrayList(); + private StackTraceElement[] d = new StackTraceElement[0]; + + public CrashReportSystemDetails(CrashReport crashreport, String s) { + this.a = crashreport; + this.b = s; + } + + public static String a(double d0, double d1, double d2) { + return String.format("%.2f,%.2f,%.2f - %s", new Object[] { Double.valueOf(d0), Double.valueOf(d1), Double.valueOf(d2), a(new BlockPosition(d0, d1, d2))}); + } + + public static String a(BlockPosition blockposition) { + int i = blockposition.getX(); + int j = blockposition.getY(); + int k = blockposition.getZ(); + StringBuilder stringbuilder = new StringBuilder(); + + try { + stringbuilder.append(String.format("World: (%d,%d,%d)", new Object[] { Integer.valueOf(i), Integer.valueOf(j), Integer.valueOf(k)})); + } catch (Throwable throwable) { + stringbuilder.append("(Error finding world loc)"); + } + + stringbuilder.append(", "); + + int l; + int i1; + int j1; + int k1; + int l1; + int i2; + int j2; + int k2; + int l2; + + try { + l = i >> 4; + i1 = k >> 4; + j1 = i & 15; + k1 = j >> 4; + l1 = k & 15; + i2 = l << 4; + j2 = i1 << 4; + k2 = (l + 1 << 4) - 1; + l2 = (i1 + 1 << 4) - 1; + stringbuilder.append(String.format("Chunk: (at %d,%d,%d in %d,%d; contains blocks %d,0,%d to %d,255,%d)", new Object[] { Integer.valueOf(j1), Integer.valueOf(k1), Integer.valueOf(l1), Integer.valueOf(l), Integer.valueOf(i1), Integer.valueOf(i2), Integer.valueOf(j2), Integer.valueOf(k2), Integer.valueOf(l2)})); + } catch (Throwable throwable1) { + stringbuilder.append("(Error finding chunk loc)"); + } + + stringbuilder.append(", "); + + try { + l = i >> 9; + i1 = k >> 9; + j1 = l << 5; + k1 = i1 << 5; + l1 = (l + 1 << 5) - 1; + i2 = (i1 + 1 << 5) - 1; + j2 = l << 9; + k2 = i1 << 9; + l2 = (l + 1 << 9) - 1; + int i3 = (i1 + 1 << 9) - 1; + + stringbuilder.append(String.format("Region: (%d,%d; contains chunks %d,%d to %d,%d, blocks %d,0,%d to %d,255,%d)", new Object[] { Integer.valueOf(l), Integer.valueOf(i1), Integer.valueOf(j1), Integer.valueOf(k1), Integer.valueOf(l1), Integer.valueOf(i2), Integer.valueOf(j2), Integer.valueOf(k2), Integer.valueOf(l2), Integer.valueOf(i3)})); + } catch (Throwable throwable2) { + stringbuilder.append("(Error finding world loc)"); + } + + return stringbuilder.toString(); + } + + public void a(String s, Callable callable) { + try { + this.a(s, callable.call()); + } catch (Throwable throwable) { + this.a(s, throwable); + } + + } + + public void a(String s, Object object) { + this.c.add(new CrashReportSystemDetails.CrashReportDetail(s, object)); + } + + public void a(String s, Throwable throwable) { + this.a(s, (Object) throwable); + } + + public int a(int i) { + StackTraceElement[] astacktraceelement = Thread.currentThread().getStackTrace(); + + if (astacktraceelement.length <= 0) { + return 0; + } else { + this.d = new StackTraceElement[astacktraceelement.length - 3 - i]; + System.arraycopy(astacktraceelement, 3 + i, this.d, 0, this.d.length); + return this.d.length; + } + } + + public boolean a(StackTraceElement stacktraceelement, StackTraceElement stacktraceelement1) { + if (this.d.length != 0 && stacktraceelement != null) { + StackTraceElement stacktraceelement2 = this.d[0]; + + if (stacktraceelement2.isNativeMethod() == stacktraceelement.isNativeMethod() && stacktraceelement2.getClassName().equals(stacktraceelement.getClassName()) && stacktraceelement2.getFileName().equals(stacktraceelement.getFileName()) && stacktraceelement2.getMethodName().equals(stacktraceelement.getMethodName())) { + if (stacktraceelement1 != null != this.d.length > 1) { + return false; + } else if (stacktraceelement1 != null && !this.d[1].equals(stacktraceelement1)) { + return false; + } else { + this.d[0] = stacktraceelement; + return true; + } + } else { + return false; + } + } else { + return false; + } + } + + public void b(int i) { + StackTraceElement[] astacktraceelement = new StackTraceElement[this.d.length - i]; + + System.arraycopy(this.d, 0, astacktraceelement, 0, astacktraceelement.length); + this.d = astacktraceelement; + } + + public void a(StringBuilder stringbuilder) { + stringbuilder.append("-- ").append(this.b).append(" --\n"); + stringbuilder.append("Details:"); + Iterator iterator = this.c.iterator(); + + while (iterator.hasNext()) { + CrashReportSystemDetails.CrashReportDetail crashreportsystemdetails_crashreportdetail = (CrashReportSystemDetails.CrashReportDetail) iterator.next(); + + stringbuilder.append("\n\t"); + stringbuilder.append(crashreportsystemdetails_crashreportdetail.a()); + stringbuilder.append(": "); + stringbuilder.append(crashreportsystemdetails_crashreportdetail.b()); + } + + if (this.d != null && this.d.length > 0) { + stringbuilder.append("\nStacktrace:"); + StackTraceElement[] astacktraceelement = this.d; + int i = astacktraceelement.length; + + for (int j = 0; j < i; ++j) { + StackTraceElement stacktraceelement = astacktraceelement[j]; + + stringbuilder.append("\n\tat "); + stringbuilder.append(stacktraceelement.toString()); + } + } + + } + + public StackTraceElement[] a() { + return this.d; + } + + public static void a(CrashReportSystemDetails crashreportsystemdetails, final BlockPosition blockposition, final Block block, final int i) { + final int j = Block.getId(block); + + crashreportsystemdetails.a("Block type", new Callable() { + public String a() throws Exception { + try { + return String.format("ID #%d (%s // %s)", new Object[] { Integer.valueOf(i), block.a(), block.getClass().getCanonicalName()}); + } catch (Throwable throwable) { + return "ID #" + i; + } + } + + public Object call() throws Exception { + return this.a(); + } + }); + crashreportsystemdetails.a("Block data value", new Callable() { + public String a() throws Exception { + if (i < 0) { + return "Unknown? (Got " + i + ")"; + } else { + String s = String.format("%4s", new Object[] { Integer.toBinaryString(i)}).replace(" ", "0"); + + return String.format("%1$d / 0x%1$X / 0b%2$s", new Object[] { Integer.valueOf(i), s}); + } + } + + public Object call() throws Exception { + return this.a(); + } + }); + crashreportsystemdetails.a("Block location", new Callable() { + public String a() throws Exception { + return CrashReportSystemDetails.a(blockposition); + } + + public Object call() throws Exception { + return this.a(); + } + }); + } + + public static void a(CrashReportSystemDetails crashreportsystemdetails, final BlockPosition blockposition, final IBlockData iblockdata) { + crashreportsystemdetails.a("Block", new Callable() { + public String a() throws Exception { + return iblockdata.toString(); + } + + public Object call() throws Exception { + return this.a(); + } + }); + crashreportsystemdetails.a("Block location", new Callable() { + public String a() throws Exception { + return CrashReportSystemDetails.a(blockposition); + } + + public Object call() throws Exception { + return this.a(); + } + }); + } + + static class CrashReportDetail { + + private final String a; + private final String b; + + public CrashReportDetail(String s, Object object) { + this.a = s; + if (object == null) { + this.b = "~~NULL~~"; + } else if (object instanceof Throwable) { + Throwable throwable = (Throwable) object; + + this.b = "~~ERROR~~ " + throwable.getClass().getSimpleName() + ": " + throwable.getMessage(); + } else { + this.b = object.toString(); + } + + } + + public String a() { + return this.a; + } + + public String b() { + return this.b; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CreativeModeTab.java b/eSpigot-Server/src/main/java/net/minecraft/server/CreativeModeTab.java new file mode 100644 index 0000000..f726a40 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CreativeModeTab.java @@ -0,0 +1,62 @@ +package net.minecraft.server; + +public abstract class CreativeModeTab { + + public static final CreativeModeTab[] a = new CreativeModeTab[12]; + public static final CreativeModeTab b = new CreativeModeTab(0, "buildingBlocks") { + }; + public static final CreativeModeTab c = new CreativeModeTab(1, "decorations") { + }; + public static final CreativeModeTab d = new CreativeModeTab(2, "redstone") { + }; + public static final CreativeModeTab e = new CreativeModeTab(3, "transportation") { + }; + public static final CreativeModeTab f = (new CreativeModeTab(4, "misc") { + }).a(new EnchantmentSlotType[] { EnchantmentSlotType.ALL}); + public static final CreativeModeTab g = (new CreativeModeTab(5, "search") { + }).a("item_search.png"); + public static final CreativeModeTab h = new CreativeModeTab(6, "food") { + }; + public static final CreativeModeTab i = (new CreativeModeTab(7, "tools") { + }).a(new EnchantmentSlotType[] { EnchantmentSlotType.DIGGER, EnchantmentSlotType.FISHING_ROD, EnchantmentSlotType.BREAKABLE}); + public static final CreativeModeTab j = (new CreativeModeTab(8, "combat") { + }).a(new EnchantmentSlotType[] { EnchantmentSlotType.ARMOR, EnchantmentSlotType.ARMOR_FEET, EnchantmentSlotType.ARMOR_HEAD, EnchantmentSlotType.ARMOR_LEGS, EnchantmentSlotType.ARMOR_TORSO, EnchantmentSlotType.BOW, EnchantmentSlotType.WEAPON}); + public static final CreativeModeTab k = new CreativeModeTab(9, "brewing") { + }; + public static final CreativeModeTab l = new CreativeModeTab(10, "materials") { + }; + public static final CreativeModeTab m = (new CreativeModeTab(11, "inventory") { + }).a("inventory.png").k().i(); + private final int n; + private final String o; + private String p = "items.png"; + private boolean q = true; + private boolean r = true; + private EnchantmentSlotType[] s; + + public CreativeModeTab(int i, String s) { + this.n = i; + this.o = s; + CreativeModeTab.a[i] = this; + } + + public CreativeModeTab a(String s) { + this.p = s; + return this; + } + + public CreativeModeTab i() { + this.r = false; + return this; + } + + public CreativeModeTab k() { + this.q = false; + return this; + } + + public CreativeModeTab a(EnchantmentSlotType... aenchantmentslottype) { + this.s = aenchantmentslottype; + return this; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/CustomWorldSettingsFinal.java b/eSpigot-Server/src/main/java/net/minecraft/server/CustomWorldSettingsFinal.java new file mode 100644 index 0000000..0b57856 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/CustomWorldSettingsFinal.java @@ -0,0 +1,659 @@ +package net.minecraft.server; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; +import java.lang.reflect.Type; + +public class CustomWorldSettingsFinal { + + public final float a; + public final float b; + public final float c; + public final float d; + public final float e; + public final float f; + public final float g; + public final float h; + public final float i; + public final float j; + public final float k; + public final float l; + public final float m; + public final float n; + public final float o; + public final float p; + public final int q; + public final boolean r; + public final boolean s; + public final int t; + public final boolean u; + public final boolean v; + public final boolean w; + public final boolean x; + public final boolean y; + public final boolean z; + public final boolean A; + public final int B; + public final boolean C; + public final int D; + public final boolean E; + public final int F; + public final int G; + public final int H; + public final int I; + public final int J; + public final int K; + public final int L; + public final int M; + public final int N; + public final int O; + public final int P; + public final int Q; + public final int R; + public final int S; + public final int T; + public final int U; + public final int V; + public final int W; + public final int X; + public final int Y; + public final int Z; + public final int aa; + public final int ab; + public final int ac; + public final int ad; + public final int ae; + public final int af; + public final int ag; + public final int ah; + public final int ai; + public final int aj; + public final int ak; + public final int al; + public final int am; + public final int an; + public final int ao; + public final int ap; + public final int aq; + public final int ar; + public final int as; + public final int at; + public final int au; + public final int av; + public final int aw; + public final int ax; + public final int ay; + public final int az; + + private CustomWorldSettingsFinal(CustomWorldSettingsFinal.CustomWorldSettings customworldsettingsfinal_customworldsettings) { + this.a = customworldsettingsfinal_customworldsettings.b; + this.b = customworldsettingsfinal_customworldsettings.c; + this.c = customworldsettingsfinal_customworldsettings.d; + this.d = customworldsettingsfinal_customworldsettings.e; + this.e = customworldsettingsfinal_customworldsettings.f; + this.f = customworldsettingsfinal_customworldsettings.g; + this.g = customworldsettingsfinal_customworldsettings.h; + this.h = customworldsettingsfinal_customworldsettings.i; + this.i = customworldsettingsfinal_customworldsettings.j; + this.j = customworldsettingsfinal_customworldsettings.k; + this.k = customworldsettingsfinal_customworldsettings.l; + this.l = customworldsettingsfinal_customworldsettings.m; + this.m = customworldsettingsfinal_customworldsettings.n; + this.n = customworldsettingsfinal_customworldsettings.o; + this.o = customworldsettingsfinal_customworldsettings.p; + this.p = customworldsettingsfinal_customworldsettings.q; + this.q = customworldsettingsfinal_customworldsettings.r; + this.r = customworldsettingsfinal_customworldsettings.s; + this.s = customworldsettingsfinal_customworldsettings.t; + this.t = customworldsettingsfinal_customworldsettings.u; + this.u = customworldsettingsfinal_customworldsettings.v; + this.v = customworldsettingsfinal_customworldsettings.w; + this.w = customworldsettingsfinal_customworldsettings.x; + this.x = customworldsettingsfinal_customworldsettings.y; + this.y = customworldsettingsfinal_customworldsettings.z; + this.z = customworldsettingsfinal_customworldsettings.A; + this.A = customworldsettingsfinal_customworldsettings.B; + this.B = customworldsettingsfinal_customworldsettings.C; + this.C = customworldsettingsfinal_customworldsettings.D; + this.D = customworldsettingsfinal_customworldsettings.E; + this.E = customworldsettingsfinal_customworldsettings.F; + this.F = customworldsettingsfinal_customworldsettings.G; + this.G = customworldsettingsfinal_customworldsettings.H; + this.H = customworldsettingsfinal_customworldsettings.I; + this.I = customworldsettingsfinal_customworldsettings.J; + this.J = customworldsettingsfinal_customworldsettings.K; + this.K = customworldsettingsfinal_customworldsettings.L; + this.L = customworldsettingsfinal_customworldsettings.M; + this.M = customworldsettingsfinal_customworldsettings.N; + this.N = customworldsettingsfinal_customworldsettings.O; + this.O = customworldsettingsfinal_customworldsettings.P; + this.P = customworldsettingsfinal_customworldsettings.Q; + this.Q = customworldsettingsfinal_customworldsettings.R; + this.R = customworldsettingsfinal_customworldsettings.S; + this.S = customworldsettingsfinal_customworldsettings.T; + this.T = customworldsettingsfinal_customworldsettings.U; + this.U = customworldsettingsfinal_customworldsettings.V; + this.V = customworldsettingsfinal_customworldsettings.W; + this.W = customworldsettingsfinal_customworldsettings.X; + this.X = customworldsettingsfinal_customworldsettings.Y; + this.Y = customworldsettingsfinal_customworldsettings.Z; + this.Z = customworldsettingsfinal_customworldsettings.aa; + this.aa = customworldsettingsfinal_customworldsettings.ab; + this.ab = customworldsettingsfinal_customworldsettings.ac; + this.ac = customworldsettingsfinal_customworldsettings.ad; + this.ad = customworldsettingsfinal_customworldsettings.ae; + this.ae = customworldsettingsfinal_customworldsettings.af; + this.af = customworldsettingsfinal_customworldsettings.ag; + this.ag = customworldsettingsfinal_customworldsettings.ah; + this.ah = customworldsettingsfinal_customworldsettings.ai; + this.ai = customworldsettingsfinal_customworldsettings.aj; + this.aj = customworldsettingsfinal_customworldsettings.ak; + this.ak = customworldsettingsfinal_customworldsettings.al; + this.al = customworldsettingsfinal_customworldsettings.am; + this.am = customworldsettingsfinal_customworldsettings.an; + this.an = customworldsettingsfinal_customworldsettings.ao; + this.ao = customworldsettingsfinal_customworldsettings.ap; + this.ap = customworldsettingsfinal_customworldsettings.aq; + this.aq = customworldsettingsfinal_customworldsettings.ar; + this.ar = customworldsettingsfinal_customworldsettings.as; + this.as = customworldsettingsfinal_customworldsettings.at; + this.at = customworldsettingsfinal_customworldsettings.au; + this.au = customworldsettingsfinal_customworldsettings.av; + this.av = customworldsettingsfinal_customworldsettings.aw; + this.aw = customworldsettingsfinal_customworldsettings.ax; + this.ax = customworldsettingsfinal_customworldsettings.ay; + this.ay = customworldsettingsfinal_customworldsettings.az; + this.az = customworldsettingsfinal_customworldsettings.aA; + } + + CustomWorldSettingsFinal(CustomWorldSettingsFinal.CustomWorldSettings customworldsettingsfinal_customworldsettings, CustomWorldSettingsFinal.SyntheticClass_1 customworldsettingsfinal_syntheticclass_1) { + this(customworldsettingsfinal_customworldsettings); + } + + static class SyntheticClass_1 { } + + public static class CustomWorldSettingsSerializer implements JsonDeserializer, JsonSerializer { + + public CustomWorldSettingsSerializer() {} + + public CustomWorldSettingsFinal.CustomWorldSettings a(JsonElement jsonelement, Type type, JsonDeserializationContext jsondeserializationcontext) throws JsonParseException { + JsonObject jsonobject = jsonelement.getAsJsonObject(); + CustomWorldSettingsFinal.CustomWorldSettings customworldsettingsfinal_customworldsettings = new CustomWorldSettingsFinal.CustomWorldSettings(); + + try { + customworldsettingsfinal_customworldsettings.b = ChatDeserializer.a(jsonobject, "coordinateScale", customworldsettingsfinal_customworldsettings.b); + customworldsettingsfinal_customworldsettings.c = ChatDeserializer.a(jsonobject, "heightScale", customworldsettingsfinal_customworldsettings.c); + customworldsettingsfinal_customworldsettings.e = ChatDeserializer.a(jsonobject, "lowerLimitScale", customworldsettingsfinal_customworldsettings.e); + customworldsettingsfinal_customworldsettings.d = ChatDeserializer.a(jsonobject, "upperLimitScale", customworldsettingsfinal_customworldsettings.d); + customworldsettingsfinal_customworldsettings.f = ChatDeserializer.a(jsonobject, "depthNoiseScaleX", customworldsettingsfinal_customworldsettings.f); + customworldsettingsfinal_customworldsettings.g = ChatDeserializer.a(jsonobject, "depthNoiseScaleZ", customworldsettingsfinal_customworldsettings.g); + customworldsettingsfinal_customworldsettings.h = ChatDeserializer.a(jsonobject, "depthNoiseScaleExponent", customworldsettingsfinal_customworldsettings.h); + customworldsettingsfinal_customworldsettings.i = ChatDeserializer.a(jsonobject, "mainNoiseScaleX", customworldsettingsfinal_customworldsettings.i); + customworldsettingsfinal_customworldsettings.j = ChatDeserializer.a(jsonobject, "mainNoiseScaleY", customworldsettingsfinal_customworldsettings.j); + customworldsettingsfinal_customworldsettings.k = ChatDeserializer.a(jsonobject, "mainNoiseScaleZ", customworldsettingsfinal_customworldsettings.k); + customworldsettingsfinal_customworldsettings.l = ChatDeserializer.a(jsonobject, "baseSize", customworldsettingsfinal_customworldsettings.l); + customworldsettingsfinal_customworldsettings.m = ChatDeserializer.a(jsonobject, "stretchY", customworldsettingsfinal_customworldsettings.m); + customworldsettingsfinal_customworldsettings.n = ChatDeserializer.a(jsonobject, "biomeDepthWeight", customworldsettingsfinal_customworldsettings.n); + customworldsettingsfinal_customworldsettings.o = ChatDeserializer.a(jsonobject, "biomeDepthOffset", customworldsettingsfinal_customworldsettings.o); + customworldsettingsfinal_customworldsettings.p = ChatDeserializer.a(jsonobject, "biomeScaleWeight", customworldsettingsfinal_customworldsettings.p); + customworldsettingsfinal_customworldsettings.q = ChatDeserializer.a(jsonobject, "biomeScaleOffset", customworldsettingsfinal_customworldsettings.q); + customworldsettingsfinal_customworldsettings.r = ChatDeserializer.a(jsonobject, "seaLevel", customworldsettingsfinal_customworldsettings.r); + customworldsettingsfinal_customworldsettings.s = ChatDeserializer.a(jsonobject, "useCaves", customworldsettingsfinal_customworldsettings.s); + customworldsettingsfinal_customworldsettings.t = ChatDeserializer.a(jsonobject, "useDungeons", customworldsettingsfinal_customworldsettings.t); + customworldsettingsfinal_customworldsettings.u = ChatDeserializer.a(jsonobject, "dungeonChance", customworldsettingsfinal_customworldsettings.u); + customworldsettingsfinal_customworldsettings.v = ChatDeserializer.a(jsonobject, "useStrongholds", customworldsettingsfinal_customworldsettings.v); + customworldsettingsfinal_customworldsettings.w = ChatDeserializer.a(jsonobject, "useVillages", customworldsettingsfinal_customworldsettings.w); + customworldsettingsfinal_customworldsettings.x = ChatDeserializer.a(jsonobject, "useMineShafts", customworldsettingsfinal_customworldsettings.x); + customworldsettingsfinal_customworldsettings.y = ChatDeserializer.a(jsonobject, "useTemples", customworldsettingsfinal_customworldsettings.y); + customworldsettingsfinal_customworldsettings.z = ChatDeserializer.a(jsonobject, "useMonuments", customworldsettingsfinal_customworldsettings.z); + customworldsettingsfinal_customworldsettings.A = ChatDeserializer.a(jsonobject, "useRavines", customworldsettingsfinal_customworldsettings.A); + customworldsettingsfinal_customworldsettings.B = ChatDeserializer.a(jsonobject, "useWaterLakes", customworldsettingsfinal_customworldsettings.B); + customworldsettingsfinal_customworldsettings.C = ChatDeserializer.a(jsonobject, "waterLakeChance", customworldsettingsfinal_customworldsettings.C); + customworldsettingsfinal_customworldsettings.D = ChatDeserializer.a(jsonobject, "useLavaLakes", customworldsettingsfinal_customworldsettings.D); + customworldsettingsfinal_customworldsettings.E = ChatDeserializer.a(jsonobject, "lavaLakeChance", customworldsettingsfinal_customworldsettings.E); + customworldsettingsfinal_customworldsettings.F = ChatDeserializer.a(jsonobject, "useLavaOceans", customworldsettingsfinal_customworldsettings.F); + customworldsettingsfinal_customworldsettings.G = ChatDeserializer.a(jsonobject, "fixedBiome", customworldsettingsfinal_customworldsettings.G); + if (customworldsettingsfinal_customworldsettings.G < 38 && customworldsettingsfinal_customworldsettings.G >= -1) { + if (customworldsettingsfinal_customworldsettings.G >= BiomeBase.HELL.id) { + customworldsettingsfinal_customworldsettings.G += 2; + } + } else { + customworldsettingsfinal_customworldsettings.G = -1; + } + + customworldsettingsfinal_customworldsettings.H = ChatDeserializer.a(jsonobject, "biomeSize", customworldsettingsfinal_customworldsettings.H); + customworldsettingsfinal_customworldsettings.I = ChatDeserializer.a(jsonobject, "riverSize", customworldsettingsfinal_customworldsettings.I); + customworldsettingsfinal_customworldsettings.J = ChatDeserializer.a(jsonobject, "dirtSize", customworldsettingsfinal_customworldsettings.J); + customworldsettingsfinal_customworldsettings.K = ChatDeserializer.a(jsonobject, "dirtCount", customworldsettingsfinal_customworldsettings.K); + customworldsettingsfinal_customworldsettings.L = ChatDeserializer.a(jsonobject, "dirtMinHeight", customworldsettingsfinal_customworldsettings.L); + customworldsettingsfinal_customworldsettings.M = ChatDeserializer.a(jsonobject, "dirtMaxHeight", customworldsettingsfinal_customworldsettings.M); + customworldsettingsfinal_customworldsettings.N = ChatDeserializer.a(jsonobject, "gravelSize", customworldsettingsfinal_customworldsettings.N); + customworldsettingsfinal_customworldsettings.O = ChatDeserializer.a(jsonobject, "gravelCount", customworldsettingsfinal_customworldsettings.O); + customworldsettingsfinal_customworldsettings.P = ChatDeserializer.a(jsonobject, "gravelMinHeight", customworldsettingsfinal_customworldsettings.P); + customworldsettingsfinal_customworldsettings.Q = ChatDeserializer.a(jsonobject, "gravelMaxHeight", customworldsettingsfinal_customworldsettings.Q); + customworldsettingsfinal_customworldsettings.R = ChatDeserializer.a(jsonobject, "graniteSize", customworldsettingsfinal_customworldsettings.R); + customworldsettingsfinal_customworldsettings.S = ChatDeserializer.a(jsonobject, "graniteCount", customworldsettingsfinal_customworldsettings.S); + customworldsettingsfinal_customworldsettings.T = ChatDeserializer.a(jsonobject, "graniteMinHeight", customworldsettingsfinal_customworldsettings.T); + customworldsettingsfinal_customworldsettings.U = ChatDeserializer.a(jsonobject, "graniteMaxHeight", customworldsettingsfinal_customworldsettings.U); + customworldsettingsfinal_customworldsettings.V = ChatDeserializer.a(jsonobject, "dioriteSize", customworldsettingsfinal_customworldsettings.V); + customworldsettingsfinal_customworldsettings.W = ChatDeserializer.a(jsonobject, "dioriteCount", customworldsettingsfinal_customworldsettings.W); + customworldsettingsfinal_customworldsettings.X = ChatDeserializer.a(jsonobject, "dioriteMinHeight", customworldsettingsfinal_customworldsettings.X); + customworldsettingsfinal_customworldsettings.Y = ChatDeserializer.a(jsonobject, "dioriteMaxHeight", customworldsettingsfinal_customworldsettings.Y); + customworldsettingsfinal_customworldsettings.Z = ChatDeserializer.a(jsonobject, "andesiteSize", customworldsettingsfinal_customworldsettings.Z); + customworldsettingsfinal_customworldsettings.aa = ChatDeserializer.a(jsonobject, "andesiteCount", customworldsettingsfinal_customworldsettings.aa); + customworldsettingsfinal_customworldsettings.ab = ChatDeserializer.a(jsonobject, "andesiteMinHeight", customworldsettingsfinal_customworldsettings.ab); + customworldsettingsfinal_customworldsettings.ac = ChatDeserializer.a(jsonobject, "andesiteMaxHeight", customworldsettingsfinal_customworldsettings.ac); + customworldsettingsfinal_customworldsettings.ad = ChatDeserializer.a(jsonobject, "coalSize", customworldsettingsfinal_customworldsettings.ad); + customworldsettingsfinal_customworldsettings.ae = ChatDeserializer.a(jsonobject, "coalCount", customworldsettingsfinal_customworldsettings.ae); + customworldsettingsfinal_customworldsettings.af = ChatDeserializer.a(jsonobject, "coalMinHeight", customworldsettingsfinal_customworldsettings.af); + customworldsettingsfinal_customworldsettings.ag = ChatDeserializer.a(jsonobject, "coalMaxHeight", customworldsettingsfinal_customworldsettings.ag); + customworldsettingsfinal_customworldsettings.ah = ChatDeserializer.a(jsonobject, "ironSize", customworldsettingsfinal_customworldsettings.ah); + customworldsettingsfinal_customworldsettings.ai = ChatDeserializer.a(jsonobject, "ironCount", customworldsettingsfinal_customworldsettings.ai); + customworldsettingsfinal_customworldsettings.aj = ChatDeserializer.a(jsonobject, "ironMinHeight", customworldsettingsfinal_customworldsettings.aj); + customworldsettingsfinal_customworldsettings.ak = ChatDeserializer.a(jsonobject, "ironMaxHeight", customworldsettingsfinal_customworldsettings.ak); + customworldsettingsfinal_customworldsettings.al = ChatDeserializer.a(jsonobject, "goldSize", customworldsettingsfinal_customworldsettings.al); + customworldsettingsfinal_customworldsettings.am = ChatDeserializer.a(jsonobject, "goldCount", customworldsettingsfinal_customworldsettings.am); + customworldsettingsfinal_customworldsettings.an = ChatDeserializer.a(jsonobject, "goldMinHeight", customworldsettingsfinal_customworldsettings.an); + customworldsettingsfinal_customworldsettings.ao = ChatDeserializer.a(jsonobject, "goldMaxHeight", customworldsettingsfinal_customworldsettings.ao); + customworldsettingsfinal_customworldsettings.ap = ChatDeserializer.a(jsonobject, "redstoneSize", customworldsettingsfinal_customworldsettings.ap); + customworldsettingsfinal_customworldsettings.aq = ChatDeserializer.a(jsonobject, "redstoneCount", customworldsettingsfinal_customworldsettings.aq); + customworldsettingsfinal_customworldsettings.ar = ChatDeserializer.a(jsonobject, "redstoneMinHeight", customworldsettingsfinal_customworldsettings.ar); + customworldsettingsfinal_customworldsettings.as = ChatDeserializer.a(jsonobject, "redstoneMaxHeight", customworldsettingsfinal_customworldsettings.as); + customworldsettingsfinal_customworldsettings.at = ChatDeserializer.a(jsonobject, "diamondSize", customworldsettingsfinal_customworldsettings.at); + customworldsettingsfinal_customworldsettings.au = ChatDeserializer.a(jsonobject, "diamondCount", customworldsettingsfinal_customworldsettings.au); + customworldsettingsfinal_customworldsettings.av = ChatDeserializer.a(jsonobject, "diamondMinHeight", customworldsettingsfinal_customworldsettings.av); + customworldsettingsfinal_customworldsettings.aw = ChatDeserializer.a(jsonobject, "diamondMaxHeight", customworldsettingsfinal_customworldsettings.aw); + customworldsettingsfinal_customworldsettings.ax = ChatDeserializer.a(jsonobject, "lapisSize", customworldsettingsfinal_customworldsettings.ax); + customworldsettingsfinal_customworldsettings.ay = ChatDeserializer.a(jsonobject, "lapisCount", customworldsettingsfinal_customworldsettings.ay); + customworldsettingsfinal_customworldsettings.az = ChatDeserializer.a(jsonobject, "lapisCenterHeight", customworldsettingsfinal_customworldsettings.az); + customworldsettingsfinal_customworldsettings.aA = ChatDeserializer.a(jsonobject, "lapisSpread", customworldsettingsfinal_customworldsettings.aA); + } catch (Exception exception) { + ; + } + + return customworldsettingsfinal_customworldsettings; + } + + public JsonElement a(CustomWorldSettingsFinal.CustomWorldSettings customworldsettingsfinal_customworldsettings, Type type, JsonSerializationContext jsonserializationcontext) { + JsonObject jsonobject = new JsonObject(); + + jsonobject.addProperty("coordinateScale", customworldsettingsfinal_customworldsettings.b); + jsonobject.addProperty("heightScale", customworldsettingsfinal_customworldsettings.c); + jsonobject.addProperty("lowerLimitScale", customworldsettingsfinal_customworldsettings.e); + jsonobject.addProperty("upperLimitScale", customworldsettingsfinal_customworldsettings.d); + jsonobject.addProperty("depthNoiseScaleX", customworldsettingsfinal_customworldsettings.f); + jsonobject.addProperty("depthNoiseScaleZ", customworldsettingsfinal_customworldsettings.g); + jsonobject.addProperty("depthNoiseScaleExponent", customworldsettingsfinal_customworldsettings.h); + jsonobject.addProperty("mainNoiseScaleX", customworldsettingsfinal_customworldsettings.i); + jsonobject.addProperty("mainNoiseScaleY", customworldsettingsfinal_customworldsettings.j); + jsonobject.addProperty("mainNoiseScaleZ", customworldsettingsfinal_customworldsettings.k); + jsonobject.addProperty("baseSize", customworldsettingsfinal_customworldsettings.l); + jsonobject.addProperty("stretchY", customworldsettingsfinal_customworldsettings.m); + jsonobject.addProperty("biomeDepthWeight", customworldsettingsfinal_customworldsettings.n); + jsonobject.addProperty("biomeDepthOffset", customworldsettingsfinal_customworldsettings.o); + jsonobject.addProperty("biomeScaleWeight", customworldsettingsfinal_customworldsettings.p); + jsonobject.addProperty("biomeScaleOffset", customworldsettingsfinal_customworldsettings.q); + jsonobject.addProperty("seaLevel", customworldsettingsfinal_customworldsettings.r); + jsonobject.addProperty("useCaves", customworldsettingsfinal_customworldsettings.s); + jsonobject.addProperty("useDungeons", customworldsettingsfinal_customworldsettings.t); + jsonobject.addProperty("dungeonChance", customworldsettingsfinal_customworldsettings.u); + jsonobject.addProperty("useStrongholds", customworldsettingsfinal_customworldsettings.v); + jsonobject.addProperty("useVillages", customworldsettingsfinal_customworldsettings.w); + jsonobject.addProperty("useMineShafts", customworldsettingsfinal_customworldsettings.x); + jsonobject.addProperty("useTemples", customworldsettingsfinal_customworldsettings.y); + jsonobject.addProperty("useMonuments", customworldsettingsfinal_customworldsettings.z); + jsonobject.addProperty("useRavines", customworldsettingsfinal_customworldsettings.A); + jsonobject.addProperty("useWaterLakes", customworldsettingsfinal_customworldsettings.B); + jsonobject.addProperty("waterLakeChance", customworldsettingsfinal_customworldsettings.C); + jsonobject.addProperty("useLavaLakes", customworldsettingsfinal_customworldsettings.D); + jsonobject.addProperty("lavaLakeChance", customworldsettingsfinal_customworldsettings.E); + jsonobject.addProperty("useLavaOceans", customworldsettingsfinal_customworldsettings.F); + jsonobject.addProperty("fixedBiome", customworldsettingsfinal_customworldsettings.G); + jsonobject.addProperty("biomeSize", customworldsettingsfinal_customworldsettings.H); + jsonobject.addProperty("riverSize", customworldsettingsfinal_customworldsettings.I); + jsonobject.addProperty("dirtSize", customworldsettingsfinal_customworldsettings.J); + jsonobject.addProperty("dirtCount", customworldsettingsfinal_customworldsettings.K); + jsonobject.addProperty("dirtMinHeight", customworldsettingsfinal_customworldsettings.L); + jsonobject.addProperty("dirtMaxHeight", customworldsettingsfinal_customworldsettings.M); + jsonobject.addProperty("gravelSize", customworldsettingsfinal_customworldsettings.N); + jsonobject.addProperty("gravelCount", customworldsettingsfinal_customworldsettings.O); + jsonobject.addProperty("gravelMinHeight", customworldsettingsfinal_customworldsettings.P); + jsonobject.addProperty("gravelMaxHeight", customworldsettingsfinal_customworldsettings.Q); + jsonobject.addProperty("graniteSize", customworldsettingsfinal_customworldsettings.R); + jsonobject.addProperty("graniteCount", customworldsettingsfinal_customworldsettings.S); + jsonobject.addProperty("graniteMinHeight", customworldsettingsfinal_customworldsettings.T); + jsonobject.addProperty("graniteMaxHeight", customworldsettingsfinal_customworldsettings.U); + jsonobject.addProperty("dioriteSize", customworldsettingsfinal_customworldsettings.V); + jsonobject.addProperty("dioriteCount", customworldsettingsfinal_customworldsettings.W); + jsonobject.addProperty("dioriteMinHeight", customworldsettingsfinal_customworldsettings.X); + jsonobject.addProperty("dioriteMaxHeight", customworldsettingsfinal_customworldsettings.Y); + jsonobject.addProperty("andesiteSize", customworldsettingsfinal_customworldsettings.Z); + jsonobject.addProperty("andesiteCount", customworldsettingsfinal_customworldsettings.aa); + jsonobject.addProperty("andesiteMinHeight", customworldsettingsfinal_customworldsettings.ab); + jsonobject.addProperty("andesiteMaxHeight", customworldsettingsfinal_customworldsettings.ac); + jsonobject.addProperty("coalSize", customworldsettingsfinal_customworldsettings.ad); + jsonobject.addProperty("coalCount", customworldsettingsfinal_customworldsettings.ae); + jsonobject.addProperty("coalMinHeight", customworldsettingsfinal_customworldsettings.af); + jsonobject.addProperty("coalMaxHeight", customworldsettingsfinal_customworldsettings.ag); + jsonobject.addProperty("ironSize", customworldsettingsfinal_customworldsettings.ah); + jsonobject.addProperty("ironCount", customworldsettingsfinal_customworldsettings.ai); + jsonobject.addProperty("ironMinHeight", customworldsettingsfinal_customworldsettings.aj); + jsonobject.addProperty("ironMaxHeight", customworldsettingsfinal_customworldsettings.ak); + jsonobject.addProperty("goldSize", customworldsettingsfinal_customworldsettings.al); + jsonobject.addProperty("goldCount", customworldsettingsfinal_customworldsettings.am); + jsonobject.addProperty("goldMinHeight", customworldsettingsfinal_customworldsettings.an); + jsonobject.addProperty("goldMaxHeight", customworldsettingsfinal_customworldsettings.ao); + jsonobject.addProperty("redstoneSize", customworldsettingsfinal_customworldsettings.ap); + jsonobject.addProperty("redstoneCount", customworldsettingsfinal_customworldsettings.aq); + jsonobject.addProperty("redstoneMinHeight", customworldsettingsfinal_customworldsettings.ar); + jsonobject.addProperty("redstoneMaxHeight", customworldsettingsfinal_customworldsettings.as); + jsonobject.addProperty("diamondSize", customworldsettingsfinal_customworldsettings.at); + jsonobject.addProperty("diamondCount", customworldsettingsfinal_customworldsettings.au); + jsonobject.addProperty("diamondMinHeight", customworldsettingsfinal_customworldsettings.av); + jsonobject.addProperty("diamondMaxHeight", customworldsettingsfinal_customworldsettings.aw); + jsonobject.addProperty("lapisSize", customworldsettingsfinal_customworldsettings.ax); + jsonobject.addProperty("lapisCount", customworldsettingsfinal_customworldsettings.ay); + jsonobject.addProperty("lapisCenterHeight", customworldsettingsfinal_customworldsettings.az); + jsonobject.addProperty("lapisSpread", customworldsettingsfinal_customworldsettings.aA); + return jsonobject; + } + + public CustomWorldSettingsFinal.CustomWorldSettings deserialize(JsonElement jsonelement, Type type, JsonDeserializationContext jsondeserializationcontext) throws JsonParseException { + return this.a(jsonelement, type, jsondeserializationcontext); + } + + public JsonElement serialize(CustomWorldSettingsFinal.CustomWorldSettings object, Type type, JsonSerializationContext jsonserializationcontext) { + return this.a((CustomWorldSettingsFinal.CustomWorldSettings) object, type, jsonserializationcontext); + } + } + + public static class CustomWorldSettings { + + static final Gson a = (new GsonBuilder()).registerTypeAdapter(CustomWorldSettingsFinal.CustomWorldSettings.class, new CustomWorldSettingsFinal.CustomWorldSettingsSerializer()).create(); + public float b = 684.412F; + public float c = 684.412F; + public float d = 512.0F; + public float e = 512.0F; + public float f = 200.0F; + public float g = 200.0F; + public float h = 0.5F; + public float i = 80.0F; + public float j = 160.0F; + public float k = 80.0F; + public float l = 8.5F; + public float m = 12.0F; + public float n = 1.0F; + public float o = 0.0F; + public float p = 1.0F; + public float q = 0.0F; + public int r = 63; + public boolean s = true; + public boolean t = true; + public int u = 8; + public boolean v = true; + public boolean w = true; + public boolean x = true; + public boolean y = true; + public boolean z = true; + public boolean A = true; + public boolean B = true; + public int C = 4; + public boolean D = true; + public int E = 80; + public boolean F = false; + public int G = -1; + public int H = 4; + public int I = 4; + public int J = 33; + public int K = 10; + public int L = 0; + public int M = 256; + public int N = 33; + public int O = 8; + public int P = 0; + public int Q = 256; + public int R = 33; + public int S = 10; + public int T = 0; + public int U = 80; + public int V = 33; + public int W = 10; + public int X = 0; + public int Y = 80; + public int Z = 33; + public int aa = 10; + public int ab = 0; + public int ac = 80; + public int ad = 17; + public int ae = 20; + public int af = 0; + public int ag = 128; + public int ah = 9; + public int ai = 20; + public int aj = 0; + public int ak = 64; + public int al = 9; + public int am = 2; + public int an = 0; + public int ao = 32; + public int ap = 8; + public int aq = 8; + public int ar = 0; + public int as = 16; + public int at = 8; + public int au = 1; + public int av = 0; + public int aw = 16; + public int ax = 7; + public int ay = 1; + public int az = 16; + public int aA = 16; + + public static CustomWorldSettingsFinal.CustomWorldSettings a(String s) { + if (s.length() == 0) { + return new CustomWorldSettingsFinal.CustomWorldSettings(); + } else { + try { + return (CustomWorldSettingsFinal.CustomWorldSettings) CustomWorldSettingsFinal.CustomWorldSettings.a.fromJson(s, CustomWorldSettingsFinal.CustomWorldSettings.class); + } catch (Exception exception) { + return new CustomWorldSettingsFinal.CustomWorldSettings(); + } + } + } + + public String toString() { + return CustomWorldSettingsFinal.CustomWorldSettings.a.toJson(this); + } + + public CustomWorldSettings() { + this.a(); + } + + public void a() { + this.b = 684.412F; + this.c = 684.412F; + this.d = 512.0F; + this.e = 512.0F; + this.f = 200.0F; + this.g = 200.0F; + this.h = 0.5F; + this.i = 80.0F; + this.j = 160.0F; + this.k = 80.0F; + this.l = 8.5F; + this.m = 12.0F; + this.n = 1.0F; + this.o = 0.0F; + this.p = 1.0F; + this.q = 0.0F; + this.r = 63; + this.s = true; + this.t = true; + this.u = 8; + this.v = true; + this.w = true; + this.x = true; + this.y = true; + this.z = true; + this.A = true; + this.B = true; + this.C = 4; + this.D = true; + this.E = 80; + this.F = false; + this.G = -1; + this.H = 4; + this.I = 4; + this.J = 33; + this.K = 10; + this.L = 0; + this.M = 256; + this.N = 33; + this.O = 8; + this.P = 0; + this.Q = 256; + this.R = 33; + this.S = 10; + this.T = 0; + this.U = 80; + this.V = 33; + this.W = 10; + this.X = 0; + this.Y = 80; + this.Z = 33; + this.aa = 10; + this.ab = 0; + this.ac = 80; + this.ad = 17; + this.ae = 20; + this.af = 0; + this.ag = 128; + this.ah = 9; + this.ai = 20; + this.aj = 0; + this.ak = 64; + this.al = 9; + this.am = 2; + this.an = 0; + this.ao = 32; + this.ap = 8; + this.aq = 8; + this.ar = 0; + this.as = 16; + this.at = 8; + this.au = 1; + this.av = 0; + this.aw = 16; + this.ax = 7; + this.ay = 1; + this.az = 16; + this.aA = 16; + } + + public boolean equals(Object object) { + if (this == object) { + return true; + } else if (object != null && this.getClass() == object.getClass()) { + CustomWorldSettingsFinal.CustomWorldSettings customworldsettingsfinal_customworldsettings = (CustomWorldSettingsFinal.CustomWorldSettings) object; + + return this.aa != customworldsettingsfinal_customworldsettings.aa ? false : (this.ac != customworldsettingsfinal_customworldsettings.ac ? false : (this.ab != customworldsettingsfinal_customworldsettings.ab ? false : (this.Z != customworldsettingsfinal_customworldsettings.Z ? false : (Float.compare(customworldsettingsfinal_customworldsettings.l, this.l) != 0 ? false : (Float.compare(customworldsettingsfinal_customworldsettings.o, this.o) != 0 ? false : (Float.compare(customworldsettingsfinal_customworldsettings.n, this.n) != 0 ? false : (Float.compare(customworldsettingsfinal_customworldsettings.q, this.q) != 0 ? false : (Float.compare(customworldsettingsfinal_customworldsettings.p, this.p) != 0 ? false : (this.H != customworldsettingsfinal_customworldsettings.H ? false : (this.ae != customworldsettingsfinal_customworldsettings.ae ? false : (this.ag != customworldsettingsfinal_customworldsettings.ag ? false : (this.af != customworldsettingsfinal_customworldsettings.af ? false : (this.ad != customworldsettingsfinal_customworldsettings.ad ? false : (Float.compare(customworldsettingsfinal_customworldsettings.b, this.b) != 0 ? false : (Float.compare(customworldsettingsfinal_customworldsettings.h, this.h) != 0 ? false : (Float.compare(customworldsettingsfinal_customworldsettings.f, this.f) != 0 ? false : (Float.compare(customworldsettingsfinal_customworldsettings.g, this.g) != 0 ? false : (this.au != customworldsettingsfinal_customworldsettings.au ? false : (this.aw != customworldsettingsfinal_customworldsettings.aw ? false : (this.av != customworldsettingsfinal_customworldsettings.av ? false : (this.at != customworldsettingsfinal_customworldsettings.at ? false : (this.W != customworldsettingsfinal_customworldsettings.W ? false : (this.Y != customworldsettingsfinal_customworldsettings.Y ? false : (this.X != customworldsettingsfinal_customworldsettings.X ? false : (this.V != customworldsettingsfinal_customworldsettings.V ? false : (this.K != customworldsettingsfinal_customworldsettings.K ? false : (this.M != customworldsettingsfinal_customworldsettings.M ? false : (this.L != customworldsettingsfinal_customworldsettings.L ? false : (this.J != customworldsettingsfinal_customworldsettings.J ? false : (this.u != customworldsettingsfinal_customworldsettings.u ? false : (this.G != customworldsettingsfinal_customworldsettings.G ? false : (this.am != customworldsettingsfinal_customworldsettings.am ? false : (this.ao != customworldsettingsfinal_customworldsettings.ao ? false : (this.an != customworldsettingsfinal_customworldsettings.an ? false : (this.al != customworldsettingsfinal_customworldsettings.al ? false : (this.S != customworldsettingsfinal_customworldsettings.S ? false : (this.U != customworldsettingsfinal_customworldsettings.U ? false : (this.T != customworldsettingsfinal_customworldsettings.T ? false : (this.R != customworldsettingsfinal_customworldsettings.R ? false : (this.O != customworldsettingsfinal_customworldsettings.O ? false : (this.Q != customworldsettingsfinal_customworldsettings.Q ? false : (this.P != customworldsettingsfinal_customworldsettings.P ? false : (this.N != customworldsettingsfinal_customworldsettings.N ? false : (Float.compare(customworldsettingsfinal_customworldsettings.c, this.c) != 0 ? false : (this.ai != customworldsettingsfinal_customworldsettings.ai ? false : (this.ak != customworldsettingsfinal_customworldsettings.ak ? false : (this.aj != customworldsettingsfinal_customworldsettings.aj ? false : (this.ah != customworldsettingsfinal_customworldsettings.ah ? false : (this.az != customworldsettingsfinal_customworldsettings.az ? false : (this.ay != customworldsettingsfinal_customworldsettings.ay ? false : (this.ax != customworldsettingsfinal_customworldsettings.ax ? false : (this.aA != customworldsettingsfinal_customworldsettings.aA ? false : (this.E != customworldsettingsfinal_customworldsettings.E ? false : (Float.compare(customworldsettingsfinal_customworldsettings.e, this.e) != 0 ? false : (Float.compare(customworldsettingsfinal_customworldsettings.i, this.i) != 0 ? false : (Float.compare(customworldsettingsfinal_customworldsettings.j, this.j) != 0 ? false : (Float.compare(customworldsettingsfinal_customworldsettings.k, this.k) != 0 ? false : (this.aq != customworldsettingsfinal_customworldsettings.aq ? false : (this.as != customworldsettingsfinal_customworldsettings.as ? false : (this.ar != customworldsettingsfinal_customworldsettings.ar ? false : (this.ap != customworldsettingsfinal_customworldsettings.ap ? false : (this.I != customworldsettingsfinal_customworldsettings.I ? false : (this.r != customworldsettingsfinal_customworldsettings.r ? false : (Float.compare(customworldsettingsfinal_customworldsettings.m, this.m) != 0 ? false : (Float.compare(customworldsettingsfinal_customworldsettings.d, this.d) != 0 ? false : (this.s != customworldsettingsfinal_customworldsettings.s ? false : (this.t != customworldsettingsfinal_customworldsettings.t ? false : (this.D != customworldsettingsfinal_customworldsettings.D ? false : (this.F != customworldsettingsfinal_customworldsettings.F ? false : (this.x != customworldsettingsfinal_customworldsettings.x ? false : (this.A != customworldsettingsfinal_customworldsettings.A ? false : (this.v != customworldsettingsfinal_customworldsettings.v ? false : (this.y != customworldsettingsfinal_customworldsettings.y ? false : (this.z != customworldsettingsfinal_customworldsettings.z ? false : (this.w != customworldsettingsfinal_customworldsettings.w ? false : (this.B != customworldsettingsfinal_customworldsettings.B ? false : this.C == customworldsettingsfinal_customworldsettings.C)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))); + } else { + return false; + } + } + + public int hashCode() { + int i = this.b != 0.0F ? Float.floatToIntBits(this.b) : 0; + + i = 31 * i + (this.c != 0.0F ? Float.floatToIntBits(this.c) : 0); + i = 31 * i + (this.d != 0.0F ? Float.floatToIntBits(this.d) : 0); + i = 31 * i + (this.e != 0.0F ? Float.floatToIntBits(this.e) : 0); + i = 31 * i + (this.f != 0.0F ? Float.floatToIntBits(this.f) : 0); + i = 31 * i + (this.g != 0.0F ? Float.floatToIntBits(this.g) : 0); + i = 31 * i + (this.h != 0.0F ? Float.floatToIntBits(this.h) : 0); + i = 31 * i + (this.i != 0.0F ? Float.floatToIntBits(this.i) : 0); + i = 31 * i + (this.j != 0.0F ? Float.floatToIntBits(this.j) : 0); + i = 31 * i + (this.k != 0.0F ? Float.floatToIntBits(this.k) : 0); + i = 31 * i + (this.l != 0.0F ? Float.floatToIntBits(this.l) : 0); + i = 31 * i + (this.m != 0.0F ? Float.floatToIntBits(this.m) : 0); + i = 31 * i + (this.n != 0.0F ? Float.floatToIntBits(this.n) : 0); + i = 31 * i + (this.o != 0.0F ? Float.floatToIntBits(this.o) : 0); + i = 31 * i + (this.p != 0.0F ? Float.floatToIntBits(this.p) : 0); + i = 31 * i + (this.q != 0.0F ? Float.floatToIntBits(this.q) : 0); + i = 31 * i + this.r; + i = 31 * i + (this.s ? 1 : 0); + i = 31 * i + (this.t ? 1 : 0); + i = 31 * i + this.u; + i = 31 * i + (this.v ? 1 : 0); + i = 31 * i + (this.w ? 1 : 0); + i = 31 * i + (this.x ? 1 : 0); + i = 31 * i + (this.y ? 1 : 0); + i = 31 * i + (this.z ? 1 : 0); + i = 31 * i + (this.A ? 1 : 0); + i = 31 * i + (this.B ? 1 : 0); + i = 31 * i + this.C; + i = 31 * i + (this.D ? 1 : 0); + i = 31 * i + this.E; + i = 31 * i + (this.F ? 1 : 0); + i = 31 * i + this.G; + i = 31 * i + this.H; + i = 31 * i + this.I; + i = 31 * i + this.J; + i = 31 * i + this.K; + i = 31 * i + this.L; + i = 31 * i + this.M; + i = 31 * i + this.N; + i = 31 * i + this.O; + i = 31 * i + this.P; + i = 31 * i + this.Q; + i = 31 * i + this.R; + i = 31 * i + this.S; + i = 31 * i + this.T; + i = 31 * i + this.U; + i = 31 * i + this.V; + i = 31 * i + this.W; + i = 31 * i + this.X; + i = 31 * i + this.Y; + i = 31 * i + this.Z; + i = 31 * i + this.aa; + i = 31 * i + this.ab; + i = 31 * i + this.ac; + i = 31 * i + this.ad; + i = 31 * i + this.ae; + i = 31 * i + this.af; + i = 31 * i + this.ag; + i = 31 * i + this.ah; + i = 31 * i + this.ai; + i = 31 * i + this.aj; + i = 31 * i + this.ak; + i = 31 * i + this.al; + i = 31 * i + this.am; + i = 31 * i + this.an; + i = 31 * i + this.ao; + i = 31 * i + this.ap; + i = 31 * i + this.aq; + i = 31 * i + this.ar; + i = 31 * i + this.as; + i = 31 * i + this.at; + i = 31 * i + this.au; + i = 31 * i + this.av; + i = 31 * i + this.aw; + i = 31 * i + this.ax; + i = 31 * i + this.ay; + i = 31 * i + this.az; + i = 31 * i + this.aA; + return i; + } + + public CustomWorldSettingsFinal b() { + return new CustomWorldSettingsFinal(this, (CustomWorldSettingsFinal.SyntheticClass_1) null); + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/DamageSource.java b/eSpigot-Server/src/main/java/net/minecraft/server/DamageSource.java new file mode 100644 index 0000000..bc02417 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/DamageSource.java @@ -0,0 +1,170 @@ +package net.minecraft.server; + +public class DamageSource { + + public static DamageSource FIRE = (new DamageSource("inFire")).setExplosion(); + public static DamageSource LIGHTNING = new DamageSource("lightningBolt"); + public static DamageSource BURN = (new DamageSource("onFire")).setIgnoreArmor().setExplosion(); + public static DamageSource LAVA = (new DamageSource("lava")).setExplosion(); + public static DamageSource STUCK = (new DamageSource("inWall")).setIgnoreArmor(); + public static DamageSource DROWN = (new DamageSource("drown")).setIgnoreArmor(); + public static DamageSource STARVE = (new DamageSource("starve")).setIgnoreArmor().m(); + public static DamageSource CACTUS = new DamageSource("cactus"); + public static DamageSource FALL = (new DamageSource("fall")).setIgnoreArmor(); + public static DamageSource OUT_OF_WORLD = (new DamageSource("outOfWorld")).setIgnoreArmor().l(); + public static DamageSource GENERIC = (new DamageSource("generic")).setIgnoreArmor(); + public static DamageSource MAGIC = (new DamageSource("magic")).setIgnoreArmor().setMagic(); + public static DamageSource WITHER = (new DamageSource("wither")).setIgnoreArmor(); + public static DamageSource ANVIL = new DamageSource("anvil"); + public static DamageSource FALLING_BLOCK = new DamageSource("fallingBlock"); + private boolean q; + private boolean r; + private boolean s; + private float t = 0.3F; + private boolean u; + private boolean v; + private boolean w; + private boolean x; + private boolean y; + public String translationIndex; + + public static DamageSource mobAttack(EntityLiving entityliving) { + return new EntityDamageSource("mob", entityliving); + } + + public static DamageSource playerAttack(EntityHuman entityhuman) { + return new EntityDamageSource("player", entityhuman); + } + + public static DamageSource arrow(EntityArrow entityarrow, Entity entity) { + return (new EntityDamageSourceIndirect("arrow", entityarrow, entity)).b(); + } + + public static DamageSource fireball(EntityFireball entityfireball, Entity entity) { + return entity == null ? (new EntityDamageSourceIndirect("onFire", entityfireball, entityfireball)).setExplosion().b() : (new EntityDamageSourceIndirect("fireball", entityfireball, entity)).setExplosion().b(); + } + + public static DamageSource projectile(Entity entity, Entity entity1) { + return (new EntityDamageSourceIndirect("thrown", entity, entity1)).b(); + } + + public static DamageSource b(Entity entity, Entity entity1) { + return (new EntityDamageSourceIndirect("indirectMagic", entity, entity1)).setIgnoreArmor().setMagic(); + } + + public static DamageSource a(Entity entity) { + return (new EntityDamageSource("thorns", entity)).v().setMagic(); + } + + public static DamageSource explosion(Explosion explosion) { + return explosion != null && explosion.getSource() != null ? (new EntityDamageSource("explosion.player", explosion.getSource())).q().d() : (new DamageSource("explosion")).q().d(); + } + + public boolean a() { + return this.v; + } + + public DamageSource b() { + this.v = true; + return this; + } + + public boolean isExplosion() { + return this.y; + } + + public DamageSource d() { + this.y = true; + return this; + } + + public boolean ignoresArmor() { + return this.q; + } + + public float getExhaustionCost() { + return this.t; + } + + public boolean ignoresInvulnerability() { + return this.r; + } + + public boolean isStarvation() { + return this.s; + } + + protected DamageSource(String s) { + this.translationIndex = s; + } + + public Entity i() { + return this.getEntity(); + } + + public Entity getEntity() { + return null; + } + + protected DamageSource setIgnoreArmor() { + this.q = true; + this.t = 0.0F; + return this; + } + + protected DamageSource l() { + this.r = true; + return this; + } + + protected DamageSource m() { + this.s = true; + this.t = 0.0F; + return this; + } + + protected DamageSource setExplosion() { + this.u = true; + return this; + } + + public IChatBaseComponent getLocalizedDeathMessage(EntityLiving entityliving) { + EntityLiving entityliving1 = entityliving.bt(); + String s = "death.attack." + this.translationIndex; + String s1 = s + ".player"; + + return entityliving1 != null && LocaleI18n.c(s1) ? new ChatMessage(s1, new Object[] { entityliving.getScoreboardDisplayName(), entityliving1.getScoreboardDisplayName()}) : new ChatMessage(s, new Object[] { entityliving.getScoreboardDisplayName()}); + } + + public boolean o() { + return this.u; + } + + public String p() { + return this.translationIndex; + } + + public DamageSource q() { + this.w = true; + return this; + } + + public boolean r() { + return this.w; + } + + public boolean isMagic() { + return this.x; + } + + public DamageSource setMagic() { + this.x = true; + return this; + } + + public boolean u() { + Entity entity = this.getEntity(); + + return entity instanceof EntityHuman && ((EntityHuman) entity).abilities.canInstantlyBuild; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/DataWatcher.java b/eSpigot-Server/src/main/java/net/minecraft/server/DataWatcher.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/DataWatcher.java rename to eSpigot-Server/src/main/java/net/minecraft/server/DataWatcher.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/DedicatedPlayerList.java b/eSpigot-Server/src/main/java/net/minecraft/server/DedicatedPlayerList.java new file mode 100644 index 0000000..75dc45f --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/DedicatedPlayerList.java @@ -0,0 +1,148 @@ +package net.minecraft.server; + +import com.mojang.authlib.GameProfile; +import java.io.IOException; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class DedicatedPlayerList extends PlayerList { + + private static final Logger f = LogManager.getLogger(); + + public DedicatedPlayerList(DedicatedServer dedicatedserver) { + super(dedicatedserver); + this.a(dedicatedserver.a("view-distance", 10)); + this.maxPlayers = dedicatedserver.a("max-players", 20); + this.setHasWhitelist(dedicatedserver.a("white-list", false)); + if (!dedicatedserver.T()) { + this.getProfileBans().a(true); + this.getIPBans().a(true); + } + + this.z(); + this.x(); + this.y(); + this.w(); + this.A(); + this.C(); + this.B(); + if (!this.getWhitelist().c().exists()) { + this.D(); + } + + } + + public void setHasWhitelist(boolean flag) { + super.setHasWhitelist(flag); + this.getServer().a("white-list", (Object) Boolean.valueOf(flag)); + this.getServer().a(); + } + + public void addOp(GameProfile gameprofile) { + super.addOp(gameprofile); + this.B(); + } + + public void removeOp(GameProfile gameprofile) { + super.removeOp(gameprofile); + this.B(); + } + + public void removeWhitelist(GameProfile gameprofile) { + super.removeWhitelist(gameprofile); + this.D(); + } + + public void addWhitelist(GameProfile gameprofile) { + super.addWhitelist(gameprofile); + this.D(); + } + + public void reloadWhitelist() { + this.C(); + } + + private void w() { + try { + this.getIPBans().save(); + } catch (IOException ioexception) { + DedicatedPlayerList.f.warn("Failed to save ip banlist: ", ioexception); + } + + } + + private void x() { + try { + this.getProfileBans().save(); + } catch (IOException ioexception) { + DedicatedPlayerList.f.warn("Failed to save user banlist: ", ioexception); + } + + } + + private void y() { + try { + this.getIPBans().load(); + } catch (IOException ioexception) { + DedicatedPlayerList.f.warn("Failed to load ip banlist: ", ioexception); + } + + } + + private void z() { + try { + this.getProfileBans().load(); + } catch (IOException ioexception) { + DedicatedPlayerList.f.warn("Failed to load user banlist: ", ioexception); + } + + } + + private void A() { + try { + this.getOPs().load(); + } catch (Exception exception) { + DedicatedPlayerList.f.warn("Failed to load operators list: ", exception); + } + + } + + private void B() { + try { + this.getOPs().save(); + } catch (Exception exception) { + DedicatedPlayerList.f.warn("Failed to save operators list: ", exception); + } + + } + + private void C() { + try { + this.getWhitelist().load(); + } catch (Exception exception) { + DedicatedPlayerList.f.warn("Failed to load white-list: ", exception); + } + + } + + private void D() { + try { + this.getWhitelist().save(); + } catch (Exception exception) { + DedicatedPlayerList.f.warn("Failed to save white-list: ", exception); + } + + } + + public boolean isWhitelisted(GameProfile gameprofile) { + return !this.getHasWhitelist() || this.isOp(gameprofile) || this.getWhitelist().isWhitelisted(gameprofile); + } + + public DedicatedServer getServer() { + return (DedicatedServer) super.getServer(); + } + + public boolean f(GameProfile gameprofile) { + return this.getOPs().b(gameprofile); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/DedicatedServer.java b/eSpigot-Server/src/main/java/net/minecraft/server/DedicatedServer.java similarity index 63% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/DedicatedServer.java rename to eSpigot-Server/src/main/java/net/minecraft/server/DedicatedServer.java index cd0efe0..594e1f8 100644 --- a/TacoSpigot-Server/src/main/java/net/minecraft/server/DedicatedServer.java +++ b/eSpigot-Server/src/main/java/net/minecraft/server/DedicatedServer.java @@ -1,13 +1,11 @@ package net.minecraft.server; -import com.google.common.collect.Lists; +import com.elevatemc.spigot.console.PandaConsole; import java.io.File; import java.io.IOException; import java.net.InetAddress; import java.net.Proxy; -import java.util.Collections; -import java.util.List; import java.util.Queue; import java.util.Random; import java.util.concurrent.Callable; @@ -33,7 +31,6 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer private RemoteStatusListener m; private RemoteControlListener n; public PropertyManager propertyManager; - private EULA p; private boolean generateStructures; private WorldSettings.EnumGamemode r; private boolean s; @@ -68,6 +65,10 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer } // CraftBukkit end + // PandaSpigot start - Use TerminalConsoleAppender + new PandaConsole(DedicatedServer.this).start(); + /* + // PandaSpigot end jline.console.ConsoleReader bufferedreader = reader; // CraftBukkit String s; @@ -87,6 +88,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer } catch (IOException ioexception) { DedicatedServer.LOGGER.error("Exception handling console input", ioexception); } + */ // PandaSpigot } }; @@ -99,6 +101,10 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer } global.addHandler(new org.bukkit.craftbukkit.util.ForwardLogHandler()); + // PandaSpigot start - Not needed with TerminalConsoleAppender + final org.apache.logging.log4j.Logger logger = LogManager.getRootLogger(); + /* + // PandaSpigot end final org.apache.logging.log4j.core.Logger logger = ((org.apache.logging.log4j.core.Logger) LogManager.getRootLogger()); for (org.apache.logging.log4j.core.Appender appender : logger.getAppenders().values()) { if (appender instanceof org.apache.logging.log4j.core.appender.ConsoleAppender) { @@ -107,6 +113,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer } new Thread(new org.bukkit.craftbukkit.util.TerminalConsoleWriterThread(System.out, this.reader)).start(); + */ System.setOut(new PrintStream(new LoggerOutputStream(logger, Level.INFO), true)); System.setErr(new PrintStream(new LoggerOutputStream(logger, Level.WARN), true)); @@ -121,198 +128,205 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer DedicatedServer.LOGGER.info("Loading properties"); this.propertyManager = new PropertyManager(this.options); // CraftBukkit - CLI argument support - this.p = new EULA(new File("eula.txt")); // Spigot Start - boolean eulaAgreed = true; - if ( eulaAgreed ) - { - System.err.println( "You have used the Spigot command line EULA agreement flag." ); - System.err.println( "By using this setting you are indicating your agreement to Mojang's EULA (https://account.mojang.com/documents/minecraft_eula)." ); - System.err.println( "If you do not agree to the above EULA please stop your server and remove this flag immediately." ); - } - // Spigot End - if (!this.p.a() && !eulaAgreed) { // Spigot - DedicatedServer.LOGGER.info("You need to agree to the EULA in order to run the server. Go to eula.txt for more info."); - this.p.b(); - return false; + if (this.T()) { + this.c("127.0.0.1"); } else { - if (this.T()) { - this.c("127.0.0.1"); - } else { - this.setOnlineMode(this.propertyManager.getBoolean("online-mode", true)); - this.c(this.propertyManager.getString("server-ip", "")); + this.setOnlineMode(this.propertyManager.getBoolean("online-mode", true)); + this.c(this.propertyManager.getString("server-ip", "")); + } + + this.setSpawnAnimals(this.propertyManager.getBoolean("spawn-animals", true)); + this.setSpawnNPCs(this.propertyManager.getBoolean("spawn-npcs", true)); + this.setPVP(this.propertyManager.getBoolean("pvp", true)); + this.setAllowFlight(this.propertyManager.getBoolean("allow-flight", false)); + this.setResourcePack(this.propertyManager.getString("resource-pack", ""), this.propertyManager.getString("resource-pack-hash", "")); + this.setMotd(this.propertyManager.getString("motd", "A Minecraft Server")); + this.setForceGamemode(this.propertyManager.getBoolean("force-gamemode", false)); + this.setIdleTimeout(this.propertyManager.getInt("player-idle-timeout", 0)); + if (this.propertyManager.getInt("difficulty", 1) < 0) { + this.propertyManager.setProperty("difficulty", 0); + } else if (this.propertyManager.getInt("difficulty", 1) > 3) { + this.propertyManager.setProperty("difficulty", 3); + } + + this.generateStructures = this.propertyManager.getBoolean("generate-structures", true); + int i = this.propertyManager.getInt("gamemode", WorldSettings.EnumGamemode.SURVIVAL.getId()); + + this.r = WorldSettings.a(i); + DedicatedServer.LOGGER.info("Default game type: " + this.r); + // PandaSpigot start - Unix domain socket support + // PandaSpigot - Move SpigotConfig to load earlier, so that we can check IP forwarding status here. + // Spigot start + this.a(new DedicatedPlayerList(this)); + org.spigotmc.SpigotConfig.init((File) options.valueOf("spigot-settings")); + org.spigotmc.SpigotConfig.registerCommands(); + // Spigot end + java.net.SocketAddress bindAddress; + if (this.getServerIp().startsWith("unix:")) { + if (!io.netty.channel.epoll.Epoll.isAvailable()) { + DedicatedServer.LOGGER.fatal("**** INVALID CONFIGURATION!"); + DedicatedServer.LOGGER.fatal("You are trying to use a Unix domain socket but you're not on a supported OS."); + return false; + } else if (!org.spigotmc.SpigotConfig.bungee) { + DedicatedServer.LOGGER.fatal("**** INVALID CONFIGURATION!"); + DedicatedServer.LOGGER.fatal("Unix domain sockets require IPs to be forwarded from a proxy."); + return false; } + bindAddress = new io.netty.channel.unix.DomainSocketAddress(this.getServerIp().substring("unix:".length())); + } else { + // PandaSpigot end - this.setSpawnAnimals(this.propertyManager.getBoolean("spawn-animals", true)); - this.setSpawnNPCs(this.propertyManager.getBoolean("spawn-npcs", true)); - this.setPVP(this.propertyManager.getBoolean("pvp", true)); - this.setAllowFlight(this.propertyManager.getBoolean("allow-flight", false)); - this.setResourcePack(this.propertyManager.getString("resource-pack", ""), this.propertyManager.getString("resource-pack-hash", "")); - this.setMotd(this.propertyManager.getString("motd", "A Minecraft Server")); - this.setForceGamemode(this.propertyManager.getBoolean("force-gamemode", false)); - this.setIdleTimeout(this.propertyManager.getInt("player-idle-timeout", 0)); - if (this.propertyManager.getInt("difficulty", 1) < 0) { - this.propertyManager.setProperty("difficulty", 0); - } else if (this.propertyManager.getInt("difficulty", 1) > 3) { - this.propertyManager.setProperty("difficulty", 3); - } + InetAddress inetaddress = null; - this.generateStructures = this.propertyManager.getBoolean("generate-structures", true); - int i = this.propertyManager.getInt("gamemode", WorldSettings.EnumGamemode.SURVIVAL.getId()); - - this.r = WorldSettings.a(i); - DedicatedServer.LOGGER.info("Default game type: " + this.r); - InetAddress inetaddress = null; - - if (this.getServerIp().length() > 0) { - inetaddress = InetAddress.getByName(this.getServerIp()); - } + if (this.getServerIp().length() > 0) { + inetaddress = InetAddress.getByName(this.getServerIp()); + } if (this.R() < 0) { this.setPort(this.propertyManager.getInt("server-port", 25565)); } - // Spigot start - this.a(new DedicatedPlayerList(this)); - org.spigotmc.SpigotConfig.init((File) options.valueOf("spigot-settings")); - org.spigotmc.SpigotConfig.registerCommands(); - // Spigot end - // PaperSpigot start - org.github.paperspigot.PaperSpigotConfig.init((File) options.valueOf("paper-settings")); - org.github.paperspigot.PaperSpigotConfig.registerCommands(); - // PaperSpigot end + bindAddress = new java.net.InetSocketAddress(inetaddress, this.R()); + } - DedicatedServer.LOGGER.info("Generating keypair"); - this.a(MinecraftEncryption.b()); - DedicatedServer.LOGGER.info("Starting Minecraft server on " + (this.getServerIp().length() == 0 ? "*" : this.getServerIp()) + ":" + this.R()); + // PandaSpigot end + // PaperSpigot start + org.github.paperspigot.PaperSpigotConfig.init((File) options.valueOf("paper-settings")); + org.github.paperspigot.PaperSpigotConfig.registerCommands(); + // PaperSpigot end + + DedicatedServer.LOGGER.info("Generating keypair"); + this.a(MinecraftEncryption.b()); + DedicatedServer.LOGGER.info("Starting Minecraft server on " + (this.getServerIp().length() == 0 ? "*" : this.getServerIp()) + ":" + this.R()); if (!org.spigotmc.SpigotConfig.lateBind) { - try { - this.aq().a(inetaddress, this.R()); - } catch (IOException ioexception) { - DedicatedServer.LOGGER.warn("**** FAILED TO BIND TO PORT!"); - DedicatedServer.LOGGER.warn("The exception was: {}", new Object[] { ioexception.toString()}); - DedicatedServer.LOGGER.warn("Perhaps a server is already running on that port?"); - return false; - } + try { + this.aq().bind(bindAddress); // PandaSpigot - Unix domain socket support + } catch (IOException ioexception) { + DedicatedServer.LOGGER.warn("**** FAILED TO BIND TO PORT!"); + DedicatedServer.LOGGER.warn("The exception was: {}", new Object[] { ioexception.toString()}); + DedicatedServer.LOGGER.warn("Perhaps a server is already running on that port?"); + return false; } + } - // Spigot Start - Move DedicatedPlayerList up and bring plugin loading from CraftServer to here - // this.a((PlayerList) (new DedicatedPlayerList(this))); // CraftBukkit - server.loadPlugins(); - server.enablePlugins(org.bukkit.plugin.PluginLoadOrder.STARTUP); - // Spigot End + // Spigot Start - Move DedicatedPlayerList up and bring plugin loading from CraftServer to here + // this.a((PlayerList) (new DedicatedPlayerList(this))); // CraftBukkit + server.loadPlugins(); + server.enablePlugins(org.bukkit.plugin.PluginLoadOrder.STARTUP); + // Spigot End - if (!this.getOnlineMode()) { - DedicatedServer.LOGGER.warn("**** SERVER IS RUNNING IN OFFLINE/INSECURE MODE!"); - DedicatedServer.LOGGER.warn("The server will make no attempt to authenticate usernames. Beware."); - // Spigot start - if (org.spigotmc.SpigotConfig.bungee) { - DedicatedServer.LOGGER.warn("Whilst this makes it possible to use BungeeCord, unless access to your server is properly restricted, it also opens up the ability for hackers to connect with any username they choose."); - DedicatedServer.LOGGER.warn("Please see http://www.spigotmc.org/wiki/firewall-guide/ for further information."); - } else { - DedicatedServer.LOGGER.warn("While this makes the game possible to play without internet access, it also opens up the ability for hackers to connect with any username they choose."); - } - // Spigot end - DedicatedServer.LOGGER.warn("To change this, set \"online-mode\" to \"true\" in the server.properties file."); - } - - if (this.aR()) { - this.getUserCache().c(); - } - - if (!NameReferencingFileConverter.a(this.propertyManager)) { - return false; + if (!this.getOnlineMode()) { + DedicatedServer.LOGGER.warn("**** SERVER IS RUNNING IN OFFLINE/INSECURE MODE!"); + DedicatedServer.LOGGER.warn("The server will make no attempt to authenticate usernames. Beware."); + // Spigot start + if (org.spigotmc.SpigotConfig.bungee) { + DedicatedServer.LOGGER.warn("Whilst this makes it possible to use BungeeCord, unless access to your server is properly restricted, it also opens up the ability for hackers to connect with any username they choose."); + DedicatedServer.LOGGER.warn("Please see http://www.spigotmc.org/wiki/firewall-guide/ for further information."); } else { - this.convertable = new WorldLoaderServer(server.getWorldContainer()); // CraftBukkit - moved from MinecraftServer constructor - long j = System.nanoTime(); + DedicatedServer.LOGGER.warn("While this makes the game possible to play without internet access, it also opens up the ability for hackers to connect with any username they choose."); + } + // Spigot end + DedicatedServer.LOGGER.warn("To change this, set \"online-mode\" to \"true\" in the server.properties file."); + } - if (this.U() == null) { - this.setWorld(this.propertyManager.getString("level-name", "world")); - } + if (this.aR()) { + this.getUserCache().c(); + } - String s = this.propertyManager.getString("level-seed", ""); - String s1 = this.propertyManager.getString("level-type", "DEFAULT"); - String s2 = this.propertyManager.getString("generator-settings", ""); - long k = (new Random()).nextLong(); + if (!NameReferencingFileConverter.a(this.propertyManager)) { + return false; + } else { + this.convertable = new WorldLoaderServer(server.getWorldContainer()); // CraftBukkit - moved from MinecraftServer constructor + long j = System.nanoTime(); - if (s.length() > 0) { - try { - long l = Long.parseLong(s); + if (this.U() == null) { + this.setWorld(this.propertyManager.getString("level-name", "world")); + } - if (l != 0L) { - k = l; - } - } catch (NumberFormatException numberformatexception) { - k = s.hashCode(); + String s = this.propertyManager.getString("level-seed", ""); + String s1 = this.propertyManager.getString("level-type", "DEFAULT"); + String s2 = this.propertyManager.getString("generator-settings", ""); + long k = (new Random()).nextLong(); + + if (s.length() > 0) { + try { + long l = Long.parseLong(s); + + if (l != 0L) { + k = l; } + } catch (NumberFormatException numberformatexception) { + k = s.hashCode(); } - - WorldType worldtype = WorldType.getType(s1); - - if (worldtype == null) { - worldtype = WorldType.NORMAL; - } - - this.aB(); - this.getEnableCommandBlock(); - this.p(); - this.getSnooperEnabled(); - this.aK(); - this.c(this.propertyManager.getInt("max-build-height", 256)); - this.c((this.getMaxBuildHeight() + 8) / 16 * 16); - this.c(MathHelper.clamp(this.getMaxBuildHeight(), 64, 256)); - this.propertyManager.setProperty("max-build-height", this.getMaxBuildHeight()); - DedicatedServer.LOGGER.info("Preparing level \"" + this.U() + "\""); - this.a(this.U(), this.U(), k, worldtype, s2); - long i1 = System.nanoTime() - j; - String s3 = String.format("%.3fs", new Object[] {(double) i1 / 1.0E9D}); - - DedicatedServer.LOGGER.info("Done (" + s3 + ")! For help, type \"help\" or \"?\""); - if (this.propertyManager.getBoolean("enable-query", false)) { - DedicatedServer.LOGGER.info("Starting GS4 status listener"); - this.m = new RemoteStatusListener(this); - this.m.a(); - } - - if (this.propertyManager.getBoolean("enable-rcon", false)) { - DedicatedServer.LOGGER.info("Starting remote control listener"); - this.n = new RemoteControlListener(this); - this.n.a(); - this.remoteConsole = new org.bukkit.craftbukkit.command.CraftRemoteConsoleCommandSender(); // CraftBukkit - } - - // CraftBukkit start - if (this.server.getBukkitSpawnRadius() > -1) { - DedicatedServer.LOGGER.info("'settings.spawn-radius' in bukkit.yml has been moved to 'spawn-protection' in server.properties. I will move your config for you."); - this.propertyManager.properties.remove("spawn-protection"); - this.propertyManager.getInt("spawn-protection", this.server.getBukkitSpawnRadius()); - this.server.removeBukkitSpawnRadius(); - this.propertyManager.savePropertiesFile(); - } - // CraftBukkit end - - if (org.spigotmc.SpigotConfig.lateBind) { - try { - this.aq().a(inetaddress, this.R()); - } catch (IOException ioexception) { - DedicatedServer.LOGGER.warn("**** FAILED TO BIND TO PORT!"); - DedicatedServer.LOGGER.warn("The exception was: {}", new Object[] { ioexception.toString()}); - DedicatedServer.LOGGER.warn("Perhaps a server is already running on that port?"); - return false; } + + WorldType worldtype = WorldType.getType(s1); + + if (worldtype == null) { + worldtype = WorldType.NORMAL; + } + + this.aB(); + this.getEnableCommandBlock(); + this.p(); + this.getSnooperEnabled(); + this.aK(); + this.c(this.propertyManager.getInt("max-build-height", 256)); + this.c((this.getMaxBuildHeight() + 8) / 16 * 16); + this.c(MathHelper.clamp(this.getMaxBuildHeight(), 64, 256)); + this.propertyManager.setProperty("max-build-height", this.getMaxBuildHeight()); + DedicatedServer.LOGGER.info("Preparing level \"" + this.U() + "\""); + this.a(this.U(), this.U(), k, worldtype, s2); + long i1 = System.nanoTime() - j; + String s3 = String.format("%.3fs", new Object[] {(double) i1 / 1.0E9D}); + + DedicatedServer.LOGGER.info("Done (" + s3 + ")! For help, type \"help\" or \"?\""); + if (this.propertyManager.getBoolean("enable-query", false)) { + DedicatedServer.LOGGER.info("Starting GS4 status listener"); + this.m = new RemoteStatusListener(this); + this.m.a(); + } + + if (this.propertyManager.getBoolean("enable-rcon", false)) { + DedicatedServer.LOGGER.info("Starting remote control listener"); + this.n = new RemoteControlListener(this); + this.n.a(); + this.remoteConsole = new org.bukkit.craftbukkit.command.CraftRemoteConsoleCommandSender(); // CraftBukkit + } + + // CraftBukkit start + if (this.server.getBukkitSpawnRadius() > -1) { + DedicatedServer.LOGGER.info("'settings.spawn-radius' in bukkit.yml has been moved to 'spawn-protection' in server.properties. I will move your config for you."); + this.propertyManager.properties.remove("spawn-protection"); + this.propertyManager.getInt("spawn-protection", this.server.getBukkitSpawnRadius()); + this.server.removeBukkitSpawnRadius(); + this.propertyManager.savePropertiesFile(); + } + // CraftBukkit end + + if (org.spigotmc.SpigotConfig.lateBind) { + try { + this.aq().bind(bindAddress); // PandaSpigot - Unix domain socket support + } catch (IOException ioexception) { + DedicatedServer.LOGGER.warn("**** FAILED TO BIND TO PORT!"); + DedicatedServer.LOGGER.warn("The exception was: {}", new Object[] { ioexception.toString()}); + DedicatedServer.LOGGER.warn("Perhaps a server is already running on that port?"); + return false; + } + } + + if (false && this.aS() > 0L) { // Spigot - disable + Thread thread1 = new Thread(new ThreadWatchdog(this)); + + thread1.setName("Server Watchdog"); + thread1.setDaemon(true); + thread1.start(); + } + + return true; } - if (false && this.aS() > 0L) { // Spigot - disable - Thread thread1 = new Thread(new ThreadWatchdog(this)); - - thread1.setName("Server Watchdog"); - thread1.setDaemon(true); - thread1.start(); - } - - return true; - } - } } // CraftBukkit start diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/DemoPlayerInteractManager.java b/eSpigot-Server/src/main/java/net/minecraft/server/DemoPlayerInteractManager.java new file mode 100644 index 0000000..15eeb6d --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/DemoPlayerInteractManager.java @@ -0,0 +1,91 @@ +package net.minecraft.server; + +public class DemoPlayerInteractManager extends PlayerInteractManager { + + private boolean c; + private boolean d; + private int e; + private int f; + + public DemoPlayerInteractManager(World world) { + super(world); + } + + public void a() { + super.a(); + ++this.f; + long i = this.world.getTime(); + long j = i / 24000L + 1L; + + if (!this.c && this.f > 20) { + this.c = true; + this.player.playerConnection.sendPacket(new PacketPlayOutGameStateChange(5, 0.0F)); + } + + this.d = i > 120500L; + if (this.d) { + ++this.e; + } + + if (i % 24000L == 500L) { + if (j <= 6L) { + this.player.sendMessage(new ChatMessage("demo.day." + j, new Object[0])); + } + } else if (j == 1L) { + if (i == 100L) { + this.player.playerConnection.sendPacket(new PacketPlayOutGameStateChange(5, 101.0F)); + } else if (i == 175L) { + this.player.playerConnection.sendPacket(new PacketPlayOutGameStateChange(5, 102.0F)); + } else if (i == 250L) { + this.player.playerConnection.sendPacket(new PacketPlayOutGameStateChange(5, 103.0F)); + } + } else if (j == 5L && i % 24000L == 22000L) { + this.player.sendMessage(new ChatMessage("demo.day.warning", new Object[0])); + } + + } + + private void f() { + if (this.e > 100) { + this.player.sendMessage(new ChatMessage("demo.reminder", new Object[0])); + this.e = 0; + } + + } + + public void a(BlockPosition blockposition, EnumDirection enumdirection) { + if (this.d) { + this.f(); + } else { + super.a(blockposition, enumdirection); + } + } + + public void a(BlockPosition blockposition) { + if (!this.d) { + super.a(blockposition); + } + } + + public boolean breakBlock(BlockPosition blockposition) { + return this.d ? false : super.breakBlock(blockposition); + } + + public boolean useItem(EntityHuman entityhuman, World world, ItemStack itemstack) { + if (this.d) { + this.f(); + return false; + } else { + return super.useItem(entityhuman, world, itemstack); + } + } + + public boolean interact(EntityHuman entityhuman, World world, ItemStack itemstack, BlockPosition blockposition, EnumDirection enumdirection, float f, float f1, float f2) { + if (this.d) { + this.f(); + return false; + } else { + return super.interact(entityhuman, world, itemstack, blockposition, enumdirection, f, f1, f2); + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/DemoWorldServer.java b/eSpigot-Server/src/main/java/net/minecraft/server/DemoWorldServer.java new file mode 100644 index 0000000..de19f10 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/DemoWorldServer.java @@ -0,0 +1,12 @@ +package net.minecraft.server; + +public class DemoWorldServer extends WorldServer { + + private static final long I = (long) "North Carolina".hashCode(); + public static final WorldSettings a = (new WorldSettings(DemoWorldServer.I, WorldSettings.EnumGamemode.SURVIVAL, true, false, WorldType.NORMAL)).a(); + + public DemoWorldServer(MinecraftServer minecraftserver, IDataManager idatamanager, WorldData worlddata, int i, MethodProfiler methodprofiler, org.bukkit.World.Environment env, org.bukkit.generator.ChunkGenerator gen) { + super(minecraftserver, idatamanager, worlddata, i, methodprofiler, env, gen); + this.worldData.a(DemoWorldServer.a); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/DifficultyDamageScaler.java b/eSpigot-Server/src/main/java/net/minecraft/server/DifficultyDamageScaler.java new file mode 100644 index 0000000..a8fe1bd --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/DifficultyDamageScaler.java @@ -0,0 +1,38 @@ +package net.minecraft.server; + +public class DifficultyDamageScaler { + + private final EnumDifficulty a; + private final float b; + + public DifficultyDamageScaler(EnumDifficulty enumdifficulty, long i, long j, float f) { + this.a = enumdifficulty; + this.b = this.a(enumdifficulty, i, j, f); + } + + public float c() { + return this.b < 2.0F ? 0.0F : (this.b > 4.0F ? 1.0F : (this.b - 2.0F) / 2.0F); + } + + private float a(EnumDifficulty enumdifficulty, long i, long j, float f) { + if (enumdifficulty == EnumDifficulty.PEACEFUL) { + return 0.0F; + } else { + boolean flag = enumdifficulty == EnumDifficulty.HARD; + float f1 = 0.75F; + float f2 = MathHelper.a(((float) i + -72000.0F) / 1440000.0F, 0.0F, 1.0F) * 0.25F; + + f1 += f2; + float f3 = 0.0F; + + f3 += MathHelper.a((float) j / 3600000.0F, 0.0F, 1.0F) * (flag ? 1.0F : 0.75F); + f3 += MathHelper.a(f * 0.25F, 0.0F, f2); + if (enumdifficulty == EnumDifficulty.EASY) { + f3 *= 0.5F; + } + + f1 += f3; + return (float) enumdifficulty.a() * f1; + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/DispenseBehaviorItem.java b/eSpigot-Server/src/main/java/net/minecraft/server/DispenseBehaviorItem.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/DispenseBehaviorItem.java rename to eSpigot-Server/src/main/java/net/minecraft/server/DispenseBehaviorItem.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/DispenseBehaviorProjectile.java b/eSpigot-Server/src/main/java/net/minecraft/server/DispenseBehaviorProjectile.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/DispenseBehaviorProjectile.java rename to eSpigot-Server/src/main/java/net/minecraft/server/DispenseBehaviorProjectile.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/DispenserRegistry.java b/eSpigot-Server/src/main/java/net/minecraft/server/DispenserRegistry.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/DispenserRegistry.java rename to eSpigot-Server/src/main/java/net/minecraft/server/DispenserRegistry.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EULA.java b/eSpigot-Server/src/main/java/net/minecraft/server/EULA.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EULA.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EULA.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EmptyChunk.java b/eSpigot-Server/src/main/java/net/minecraft/server/EmptyChunk.java new file mode 100644 index 0000000..8bd79af --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EmptyChunk.java @@ -0,0 +1,90 @@ +package net.minecraft.server; + +import com.google.common.base.Predicate; +import java.util.List; +import java.util.Random; + +public class EmptyChunk extends Chunk { + + public EmptyChunk(World world, int i, int j) { + super(world, i, j); + } + + public boolean a(int i, int j) { + return i == this.locX && j == this.locZ; + } + + public int b(int i, int j) { + return 0; + } + + public void initLighting() {} + + public Block getType(BlockPosition blockposition) { + return Blocks.AIR; + } + + public int b(BlockPosition blockposition) { + return 255; + } + + public int c(BlockPosition blockposition) { + return 0; + } + + public int getBrightness(EnumSkyBlock enumskyblock, BlockPosition blockposition) { + return enumskyblock.c; + } + + public void a(EnumSkyBlock enumskyblock, BlockPosition blockposition, int i) {} + + public int a(BlockPosition blockposition, int i) { + return 0; + } + + public void a(Entity entity) {} + + public void b(Entity entity) {} + + public void a(Entity entity, int i) {} + + public boolean d(BlockPosition blockposition) { + return false; + } + + public TileEntity a(BlockPosition blockposition, Chunk.EnumTileEntityState chunk_enumtileentitystate) { + return null; + } + + public void a(TileEntity tileentity) {} + + public void a(BlockPosition blockposition, TileEntity tileentity) {} + + public void e(BlockPosition blockposition) {} + + public void addEntities() {} + + public void removeEntities() {} + + public void e() {} + + public void a(Entity entity, AxisAlignedBB axisalignedbb, List list, Predicate predicate) {} + + public void a(Class oclass, AxisAlignedBB axisalignedbb, List list, Predicate predicate) {} + + public boolean a(boolean flag) { + return false; + } + + public Random a(long i) { + return new Random(this.getWorld().getSeed() + (long) (this.locX * this.locX * 4987142) + (long) (this.locX * 5947611) + (long) (this.locZ * this.locZ) * 4392871L + (long) (this.locZ * 389711) ^ i); + } + + public boolean isEmpty() { + return true; + } + + public boolean c(int i, int j) { + return true; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/Enchantment.java b/eSpigot-Server/src/main/java/net/minecraft/server/Enchantment.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/Enchantment.java rename to eSpigot-Server/src/main/java/net/minecraft/server/Enchantment.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentArrowDamage.java b/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentArrowDamage.java new file mode 100644 index 0000000..4750b4b --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentArrowDamage.java @@ -0,0 +1,21 @@ +package net.minecraft.server; + +public class EnchantmentArrowDamage extends Enchantment { + + public EnchantmentArrowDamage(int i, MinecraftKey minecraftkey, int j) { + super(i, minecraftkey, j, EnchantmentSlotType.BOW); + this.c("arrowDamage"); + } + + public int a(int i) { + return 1 + (i - 1) * 10; + } + + public int b(int i) { + return this.a(i) + 15; + } + + public int getMaxLevel() { + return 5; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentArrowKnockback.java b/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentArrowKnockback.java new file mode 100644 index 0000000..e9d3489 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentArrowKnockback.java @@ -0,0 +1,21 @@ +package net.minecraft.server; + +public class EnchantmentArrowKnockback extends Enchantment { + + public EnchantmentArrowKnockback(int i, MinecraftKey minecraftkey, int j) { + super(i, minecraftkey, j, EnchantmentSlotType.BOW); + this.c("arrowKnockback"); + } + + public int a(int i) { + return 12 + (i - 1) * 20; + } + + public int b(int i) { + return this.a(i) + 25; + } + + public int getMaxLevel() { + return 2; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentDepthStrider.java b/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentDepthStrider.java new file mode 100644 index 0000000..c6e83cb --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentDepthStrider.java @@ -0,0 +1,21 @@ +package net.minecraft.server; + +public class EnchantmentDepthStrider extends Enchantment { + + public EnchantmentDepthStrider(int i, MinecraftKey minecraftkey, int j) { + super(i, minecraftkey, j, EnchantmentSlotType.ARMOR_FEET); + this.c("waterWalker"); + } + + public int a(int i) { + return i * 10; + } + + public int b(int i) { + return this.a(i) + 15; + } + + public int getMaxLevel() { + return 3; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentDigging.java b/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentDigging.java new file mode 100644 index 0000000..bd0050c --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentDigging.java @@ -0,0 +1,25 @@ +package net.minecraft.server; + +public class EnchantmentDigging extends Enchantment { + + protected EnchantmentDigging(int i, MinecraftKey minecraftkey, int j) { + super(i, minecraftkey, j, EnchantmentSlotType.DIGGER); + this.c("digging"); + } + + public int a(int i) { + return 1 + 10 * (i - 1); + } + + public int b(int i) { + return super.a(i) + 50; + } + + public int getMaxLevel() { + return 5; + } + + public boolean canEnchant(ItemStack itemstack) { + return itemstack.getItem() == Items.SHEARS ? true : super.canEnchant(itemstack); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentDurability.java b/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentDurability.java new file mode 100644 index 0000000..fe494bb --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentDurability.java @@ -0,0 +1,31 @@ +package net.minecraft.server; + +import java.util.Random; + +public class EnchantmentDurability extends Enchantment { + + protected EnchantmentDurability(int i, MinecraftKey minecraftkey, int j) { + super(i, minecraftkey, j, EnchantmentSlotType.BREAKABLE); + this.c("durability"); + } + + public int a(int i) { + return 5 + (i - 1) * 8; + } + + public int b(int i) { + return super.a(i) + 50; + } + + public int getMaxLevel() { + return 3; + } + + public boolean canEnchant(ItemStack itemstack) { + return itemstack.e() ? true : super.canEnchant(itemstack); + } + + public static boolean a(ItemStack itemstack, int i, Random random) { + return itemstack.getItem() instanceof ItemArmor && random.nextFloat() < 0.6F ? false : random.nextInt(i + 1) > 0; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentFire.java b/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentFire.java new file mode 100644 index 0000000..eab6fc3 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentFire.java @@ -0,0 +1,21 @@ +package net.minecraft.server; + +public class EnchantmentFire extends Enchantment { + + protected EnchantmentFire(int i, MinecraftKey minecraftkey, int j) { + super(i, minecraftkey, j, EnchantmentSlotType.WEAPON); + this.c("fire"); + } + + public int a(int i) { + return 10 + 20 * (i - 1); + } + + public int b(int i) { + return super.a(i) + 50; + } + + public int getMaxLevel() { + return 2; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentFlameArrows.java b/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentFlameArrows.java new file mode 100644 index 0000000..a7dc48e --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentFlameArrows.java @@ -0,0 +1,21 @@ +package net.minecraft.server; + +public class EnchantmentFlameArrows extends Enchantment { + + public EnchantmentFlameArrows(int i, MinecraftKey minecraftkey, int j) { + super(i, minecraftkey, j, EnchantmentSlotType.BOW); + this.c("arrowFire"); + } + + public int a(int i) { + return 20; + } + + public int b(int i) { + return 50; + } + + public int getMaxLevel() { + return 1; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentInfiniteArrows.java b/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentInfiniteArrows.java new file mode 100644 index 0000000..3f88e47 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentInfiniteArrows.java @@ -0,0 +1,21 @@ +package net.minecraft.server; + +public class EnchantmentInfiniteArrows extends Enchantment { + + public EnchantmentInfiniteArrows(int i, MinecraftKey minecraftkey, int j) { + super(i, minecraftkey, j, EnchantmentSlotType.BOW); + this.c("arrowInfinite"); + } + + public int a(int i) { + return 20; + } + + public int b(int i) { + return 50; + } + + public int getMaxLevel() { + return 1; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentKnockback.java b/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentKnockback.java new file mode 100644 index 0000000..c9aeb12 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentKnockback.java @@ -0,0 +1,21 @@ +package net.minecraft.server; + +public class EnchantmentKnockback extends Enchantment { + + protected EnchantmentKnockback(int i, MinecraftKey minecraftkey, int j) { + super(i, minecraftkey, j, EnchantmentSlotType.WEAPON); + this.c("knockback"); + } + + public int a(int i) { + return 5 + 20 * (i - 1); + } + + public int b(int i) { + return super.a(i) + 50; + } + + public int getMaxLevel() { + return 2; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentLootBonus.java b/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentLootBonus.java new file mode 100644 index 0000000..cd86a9f --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentLootBonus.java @@ -0,0 +1,32 @@ +package net.minecraft.server; + +public class EnchantmentLootBonus extends Enchantment { + + protected EnchantmentLootBonus(int i, MinecraftKey minecraftkey, int j, EnchantmentSlotType enchantmentslottype) { + super(i, minecraftkey, j, enchantmentslottype); + if (enchantmentslottype == EnchantmentSlotType.DIGGER) { + this.c("lootBonusDigger"); + } else if (enchantmentslottype == EnchantmentSlotType.FISHING_ROD) { + this.c("lootBonusFishing"); + } else { + this.c("lootBonus"); + } + + } + + public int a(int i) { + return 15 + (i - 1) * 9; + } + + public int b(int i) { + return super.a(i) + 50; + } + + public int getMaxLevel() { + return 3; + } + + public boolean a(Enchantment enchantment) { + return super.a(enchantment) && enchantment.id != EnchantmentLootBonus.SILK_TOUCH.id; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentLure.java b/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentLure.java new file mode 100644 index 0000000..0945deb --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentLure.java @@ -0,0 +1,21 @@ +package net.minecraft.server; + +public class EnchantmentLure extends Enchantment { + + protected EnchantmentLure(int i, MinecraftKey minecraftkey, int j, EnchantmentSlotType enchantmentslottype) { + super(i, minecraftkey, j, enchantmentslottype); + this.c("fishingSpeed"); + } + + public int a(int i) { + return 15 + (i - 1) * 9; + } + + public int b(int i) { + return super.a(i) + 50; + } + + public int getMaxLevel() { + return 3; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EnchantmentManager.java b/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentManager.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EnchantmentManager.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentManager.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentOxygen.java b/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentOxygen.java new file mode 100644 index 0000000..b539085 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentOxygen.java @@ -0,0 +1,21 @@ +package net.minecraft.server; + +public class EnchantmentOxygen extends Enchantment { + + public EnchantmentOxygen(int i, MinecraftKey minecraftkey, int j) { + super(i, minecraftkey, j, EnchantmentSlotType.ARMOR_HEAD); + this.c("oxygen"); + } + + public int a(int i) { + return 10 * i; + } + + public int b(int i) { + return this.a(i) + 30; + } + + public int getMaxLevel() { + return 3; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentProtection.java b/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentProtection.java new file mode 100644 index 0000000..4dd4f1f --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentProtection.java @@ -0,0 +1,75 @@ +package net.minecraft.server; + +public class EnchantmentProtection extends Enchantment { + + private static final String[] E = new String[] { "all", "fire", "fall", "explosion", "projectile"}; + private static final int[] F = new int[] { 1, 10, 5, 5, 3}; + private static final int[] G = new int[] { 11, 8, 6, 8, 6}; + private static final int[] H = new int[] { 20, 12, 10, 12, 15}; + public final int a; + + public EnchantmentProtection(int i, MinecraftKey minecraftkey, int j, int k) { + super(i, minecraftkey, j, EnchantmentSlotType.ARMOR); + this.a = k; + if (k == 2) { + this.slot = EnchantmentSlotType.ARMOR_FEET; + } + + } + + public int a(int i) { + return EnchantmentProtection.F[this.a] + (i - 1) * EnchantmentProtection.G[this.a]; + } + + public int b(int i) { + return this.a(i) + EnchantmentProtection.H[this.a]; + } + + public int getMaxLevel() { + return 4; + } + + public int a(int i, DamageSource damagesource) { + if (damagesource.ignoresInvulnerability()) { + return 0; + } else { + float f = (float) (6 + i * i) / 3.0F; + + return this.a == 0 ? MathHelper.d(f * 0.75F) : (this.a == 1 && damagesource.o() ? MathHelper.d(f * 1.25F) : (this.a == 2 && damagesource == DamageSource.FALL ? MathHelper.d(f * 2.5F) : (this.a == 3 && damagesource.isExplosion() ? MathHelper.d(f * 1.5F) : (this.a == 4 && damagesource.a() ? MathHelper.d(f * 1.5F) : 0)))); + } + } + + public String a() { + return "enchantment.protect." + EnchantmentProtection.E[this.a]; + } + + public boolean a(Enchantment enchantment) { + if (enchantment instanceof EnchantmentProtection) { + EnchantmentProtection enchantmentprotection = (EnchantmentProtection) enchantment; + + return enchantmentprotection.a == this.a ? false : this.a == 2 || enchantmentprotection.a == 2; + } else { + return super.a(enchantment); + } + } + + public static int a(Entity entity, int i) { + int j = EnchantmentManager.a(Enchantment.PROTECTION_FIRE.id, entity.getEquipment()); + + if (j > 0) { + i -= MathHelper.d((float) i * (float) j * 0.15F); + } + + return i; + } + + public static double a(Entity entity, double d0) { + int i = EnchantmentManager.a(Enchantment.PROTECTION_EXPLOSIONS.id, entity.getEquipment()); + + if (i > 0) { + d0 -= (double) MathHelper.floor(d0 * (double) ((float) i * 0.15F)); + } + + return d0; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentSilkTouch.java b/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentSilkTouch.java new file mode 100644 index 0000000..cda4a45 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentSilkTouch.java @@ -0,0 +1,29 @@ +package net.minecraft.server; + +public class EnchantmentSilkTouch extends Enchantment { + + protected EnchantmentSilkTouch(int i, MinecraftKey minecraftkey, int j) { + super(i, minecraftkey, j, EnchantmentSlotType.DIGGER); + this.c("untouching"); + } + + public int a(int i) { + return 15; + } + + public int b(int i) { + return super.a(i) + 50; + } + + public int getMaxLevel() { + return 1; + } + + public boolean a(Enchantment enchantment) { + return super.a(enchantment) && enchantment.id != EnchantmentSilkTouch.LOOT_BONUS_BLOCKS.id; + } + + public boolean canEnchant(ItemStack itemstack) { + return itemstack.getItem() == Items.SHEARS ? true : super.canEnchant(itemstack); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentSlotType.java b/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentSlotType.java new file mode 100644 index 0000000..d552656 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentSlotType.java @@ -0,0 +1,26 @@ +package net.minecraft.server; + +public enum EnchantmentSlotType { + + ALL, ARMOR, ARMOR_FEET, ARMOR_LEGS, ARMOR_TORSO, ARMOR_HEAD, WEAPON, DIGGER, FISHING_ROD, BREAKABLE, BOW; + + private EnchantmentSlotType() {} + + public boolean canEnchant(Item item) { + if (this == EnchantmentSlotType.ALL) { + return true; + } else if (this == EnchantmentSlotType.BREAKABLE && item.usesDurability()) { + return true; + } else if (item instanceof ItemArmor) { + if (this == EnchantmentSlotType.ARMOR) { + return true; + } else { + ItemArmor itemarmor = (ItemArmor) item; + + return itemarmor.b == 0 ? this == EnchantmentSlotType.ARMOR_HEAD : (itemarmor.b == 2 ? this == EnchantmentSlotType.ARMOR_LEGS : (itemarmor.b == 1 ? this == EnchantmentSlotType.ARMOR_TORSO : (itemarmor.b == 3 ? this == EnchantmentSlotType.ARMOR_FEET : false))); + } + } else { + return item instanceof ItemSword ? this == EnchantmentSlotType.WEAPON : (item instanceof ItemTool ? this == EnchantmentSlotType.DIGGER : (item instanceof ItemBow ? this == EnchantmentSlotType.BOW : (item instanceof ItemFishingRod ? this == EnchantmentSlotType.FISHING_ROD : false))); + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EnchantmentThorns.java b/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentThorns.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EnchantmentThorns.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentThorns.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentWaterWorker.java b/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentWaterWorker.java new file mode 100644 index 0000000..be8162d --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentWaterWorker.java @@ -0,0 +1,21 @@ +package net.minecraft.server; + +public class EnchantmentWaterWorker extends Enchantment { + + public EnchantmentWaterWorker(int i, MinecraftKey minecraftkey, int j) { + super(i, minecraftkey, j, EnchantmentSlotType.ARMOR_HEAD); + this.c("waterWorker"); + } + + public int a(int i) { + return 1; + } + + public int b(int i) { + return this.a(i) + 40; + } + + public int getMaxLevel() { + return 1; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentWeaponDamage.java b/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentWeaponDamage.java new file mode 100644 index 0000000..8545190 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EnchantmentWeaponDamage.java @@ -0,0 +1,56 @@ +package net.minecraft.server; + +public class EnchantmentWeaponDamage extends Enchantment { + + private static final String[] E = new String[] { "all", "undead", "arthropods"}; + private static final int[] F = new int[] { 1, 5, 5}; + private static final int[] G = new int[] { 11, 8, 8}; + private static final int[] H = new int[] { 20, 20, 20}; + public final int a; + + public EnchantmentWeaponDamage(int i, MinecraftKey minecraftkey, int j, int k) { + super(i, minecraftkey, j, EnchantmentSlotType.WEAPON); + this.a = k; + } + + public int a(int i) { + return EnchantmentWeaponDamage.F[this.a] + (i - 1) * EnchantmentWeaponDamage.G[this.a]; + } + + public int b(int i) { + return this.a(i) + EnchantmentWeaponDamage.H[this.a]; + } + + public int getMaxLevel() { + return 5; + } + + public float a(int i, EnumMonsterType enummonstertype) { + return this.a == 0 ? (float) i * 1.25F : (this.a == 1 && enummonstertype == EnumMonsterType.UNDEAD ? (float) i * 2.5F : (this.a == 2 && enummonstertype == EnumMonsterType.ARTHROPOD ? (float) i * 2.5F : 0.0F)); + } + + public String a() { + return "enchantment.damage." + EnchantmentWeaponDamage.E[this.a]; + } + + public boolean a(Enchantment enchantment) { + return !(enchantment instanceof EnchantmentWeaponDamage); + } + + public boolean canEnchant(ItemStack itemstack) { + return itemstack.getItem() instanceof ItemAxe ? true : super.canEnchant(itemstack); + } + + public void a(EntityLiving entityliving, Entity entity, int i) { + if (entity instanceof EntityLiving) { + EntityLiving entityliving1 = (EntityLiving) entity; + + if (this.a == 2 && entityliving1.getMonsterType() == EnumMonsterType.ARTHROPOD) { + int j = 20 + entityliving.bc().nextInt(10 * i); + + entityliving1.addEffect(new MobEffect(MobEffectList.SLOWER_MOVEMENT.id, j, 3)); + } + } + + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/Entity.java b/eSpigot-Server/src/main/java/net/minecraft/server/Entity.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/Entity.java rename to eSpigot-Server/src/main/java/net/minecraft/server/Entity.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EntityAIBodyControl.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityAIBodyControl.java new file mode 100644 index 0000000..10fd66a --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EntityAIBodyControl.java @@ -0,0 +1,54 @@ +package net.minecraft.server; + +public class EntityAIBodyControl { + + private EntityLiving a; + private int b; + private float c; + + public EntityAIBodyControl(EntityLiving entityliving) { + this.a = entityliving; + } + + public void a() { + double d0 = this.a.locX - this.a.lastX; + double d1 = this.a.locZ - this.a.lastZ; + + if (d0 * d0 + d1 * d1 > 2.500000277905201E-7D) { + this.a.aI = this.a.yaw; + this.a.aK = this.a(this.a.aI, this.a.aK, 75.0F); + this.c = this.a.aK; + this.b = 0; + } else { + float f = 75.0F; + + if (Math.abs(this.a.aK - this.c) > 15.0F) { + this.b = 0; + this.c = this.a.aK; + } else { + ++this.b; + boolean flag = true; + + if (this.b > 10) { + f = Math.max(1.0F - (float) (this.b - 10) / 10.0F, 0.0F) * 75.0F; + } + } + + this.a.aI = this.a(this.a.aK, this.a.aI, f); + } + } + + private float a(float f, float f1, float f2) { + float f3 = MathHelper.g(f - f1); + + if (f3 < -f2) { + f3 = -f2; + } + + if (f3 >= f2) { + f3 = f2; + } + + return f - f3; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityAgeable.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityAgeable.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityAgeable.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityAgeable.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EntityAmbient.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityAmbient.java new file mode 100644 index 0000000..df1e00d --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EntityAmbient.java @@ -0,0 +1,16 @@ +package net.minecraft.server; + +public abstract class EntityAmbient extends EntityInsentient implements IAnimal { + + public EntityAmbient(World world) { + super(world); + } + + public boolean cb() { + return false; + } + + protected boolean a(EntityHuman entityhuman) { + return false; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityAnimal.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityAnimal.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityAnimal.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityAnimal.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityArmorStand.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityArmorStand.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityArmorStand.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityArmorStand.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityArrow.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityArrow.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityArrow.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityArrow.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EntityBat.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityBat.java new file mode 100644 index 0000000..5241620 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EntityBat.java @@ -0,0 +1,186 @@ +package net.minecraft.server; + +import java.util.Calendar; + +public class EntityBat extends EntityAmbient { + + private BlockPosition a; + + public EntityBat(World world) { + super(world); + this.setSize(0.5F, 0.9F); + this.setAsleep(true); + } + + protected void h() { + super.h(); + this.datawatcher.a(16, new Byte((byte) 0)); + } + + protected float bB() { + return 0.1F; + } + + protected float bC() { + return super.bC() * 0.95F; + } + + protected String z() { + return this.isAsleep() && this.random.nextInt(4) != 0 ? null : "mob.bat.idle"; + } + + protected String bo() { + return "mob.bat.hurt"; + } + + protected String bp() { + return "mob.bat.death"; + } + + public boolean ae() { + return false; + } + + protected void s(Entity entity) {} + + protected void bL() {} + + protected void initAttributes() { + super.initAttributes(); + this.getAttributeInstance(GenericAttributes.maxHealth).setValue(6.0D); + } + + public boolean isAsleep() { + return (this.datawatcher.getByte(16) & 1) != 0; + } + + public void setAsleep(boolean flag) { + byte b0 = this.datawatcher.getByte(16); + + if (flag) { + this.datawatcher.watch(16, Byte.valueOf((byte) (b0 | 1))); + } else { + this.datawatcher.watch(16, Byte.valueOf((byte) (b0 & -2))); + } + + } + + public void t_() { + super.t_(); + if (this.isAsleep()) { + this.motX = this.motY = this.motZ = 0.0D; + this.locY = (double) MathHelper.floor(this.locY) + 1.0D - (double) this.length; + } else { + this.motY *= 0.6000000238418579D; + } + + } + + protected void E() { + super.E(); + BlockPosition blockposition = new BlockPosition(this); + BlockPosition blockposition1 = blockposition.up(); + + if (this.isAsleep()) { + if (!this.world.getType(blockposition1).getBlock().isOccluding()) { + this.setAsleep(false); + this.world.a((EntityHuman) null, 1015, blockposition, 0); + } else { + if (this.random.nextInt(200) == 0) { + this.aK = (float) this.random.nextInt(360); + } + + if (this.world.findNearbyPlayer(this, 4.0D) != null) { + this.setAsleep(false); + this.world.a((EntityHuman) null, 1015, blockposition, 0); + } + } + } else { + if (this.a != null && (!this.world.isEmpty(this.a) || this.a.getY() < 1)) { + this.a = null; + } + + if (this.a == null || this.random.nextInt(30) == 0 || this.a.c((double) ((int) this.locX), (double) ((int) this.locY), (double) ((int) this.locZ)) < 4.0D) { + this.a = new BlockPosition((int) this.locX + this.random.nextInt(7) - this.random.nextInt(7), (int) this.locY + this.random.nextInt(6) - 2, (int) this.locZ + this.random.nextInt(7) - this.random.nextInt(7)); + } + + double d0 = (double) this.a.getX() + 0.5D - this.locX; + double d1 = (double) this.a.getY() + 0.1D - this.locY; + double d2 = (double) this.a.getZ() + 0.5D - this.locZ; + + this.motX += (Math.signum(d0) * 0.5D - this.motX) * 0.10000000149011612D; + this.motY += (Math.signum(d1) * 0.699999988079071D - this.motY) * 0.10000000149011612D; + this.motZ += (Math.signum(d2) * 0.5D - this.motZ) * 0.10000000149011612D; + float f = (float) (MathHelper.b(this.motZ, this.motX) * 180.0D / 3.1415927410125732D) - 90.0F; + float f1 = MathHelper.g(f - this.yaw); + + this.ba = 0.5F; + this.yaw += f1; + if (this.random.nextInt(100) == 0 && this.world.getType(blockposition1).getBlock().isOccluding()) { + this.setAsleep(true); + } + } + + } + + protected boolean s_() { + return false; + } + + public void e(float f, float f1) {} + + protected void a(double d0, boolean flag, Block block, BlockPosition blockposition) {} + + public boolean aI() { + return true; + } + + public boolean damageEntity(DamageSource damagesource, float f) { + if (this.isInvulnerable(damagesource)) { + return false; + } else { + if (!this.world.isClientSide && this.isAsleep()) { + this.setAsleep(false); + } + + return super.damageEntity(damagesource, f); + } + } + + public void a(NBTTagCompound nbttagcompound) { + super.a(nbttagcompound); + this.datawatcher.watch(16, Byte.valueOf(nbttagcompound.getByte("BatFlags"))); + } + + public void b(NBTTagCompound nbttagcompound) { + super.b(nbttagcompound); + nbttagcompound.setByte("BatFlags", this.datawatcher.getByte(16)); + } + + public boolean bR() { + BlockPosition blockposition = new BlockPosition(this.locX, this.getBoundingBox().b, this.locZ); + + if (blockposition.getY() >= this.world.F()) { + return false; + } else { + int i = this.world.getLightLevel(blockposition); + byte b0 = 4; + + if (this.a(this.world.Y())) { + b0 = 7; + } else if (this.random.nextBoolean()) { + return false; + } + + return i > this.random.nextInt(b0) ? false : super.bR(); + } + } + + private boolean a(Calendar calendar) { + return calendar.get(2) + 1 == 10 && calendar.get(5) >= 20 || calendar.get(2) + 1 == 11 && calendar.get(5) <= 3; + } + + public float getHeadHeight() { + return this.length / 2.0F; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EntityBlaze.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityBlaze.java new file mode 100644 index 0000000..c6b7113 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EntityBlaze.java @@ -0,0 +1,207 @@ +package net.minecraft.server; + +public class EntityBlaze extends EntityMonster { + + private float a = 0.5F; + private int b; + + public EntityBlaze(World world) { + super(world); + this.fireProof = true; + this.b_ = 10; + this.goalSelector.a(4, new EntityBlaze.PathfinderGoalBlazeFireball(this)); + this.goalSelector.a(5, new PathfinderGoalMoveTowardsRestriction(this, 1.0D)); + this.goalSelector.a(7, new PathfinderGoalRandomStroll(this, 1.0D)); + this.goalSelector.a(8, new PathfinderGoalLookAtPlayer(this, EntityHuman.class, 8.0F)); + this.goalSelector.a(8, new PathfinderGoalRandomLookaround(this)); + this.targetSelector.a(1, new PathfinderGoalHurtByTarget(this, true, new Class[0])); + this.targetSelector.a(2, new PathfinderGoalNearestAttackableTarget(this, EntityHuman.class, true)); + } + + protected void initAttributes() { + super.initAttributes(); + this.getAttributeInstance(GenericAttributes.ATTACK_DAMAGE).setValue(6.0D); + this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).setValue(0.23000000417232513D); + this.getAttributeInstance(GenericAttributes.FOLLOW_RANGE).setValue(48.0D); + } + + protected void h() { + super.h(); + this.datawatcher.a(16, new Byte((byte) 0)); + } + + protected String z() { + return "mob.blaze.breathe"; + } + + protected String bo() { + return "mob.blaze.hit"; + } + + protected String bp() { + return "mob.blaze.death"; + } + + public float c(float f) { + return 1.0F; + } + + public void m() { + if (!this.onGround && this.motY < 0.0D) { + this.motY *= 0.6D; + } + + if (this.world.isClientSide) { + if (this.random.nextInt(24) == 0 && !this.R()) { + this.world.a(this.locX + 0.5D, this.locY + 0.5D, this.locZ + 0.5D, "fire.fire", 1.0F + this.random.nextFloat(), this.random.nextFloat() * 0.7F + 0.3F, false); + } + + for (int i = 0; i < 2; ++i) { + this.world.addParticle(EnumParticle.SMOKE_LARGE, this.locX + (this.random.nextDouble() - 0.5D) * (double) this.width, this.locY + this.random.nextDouble() * (double) this.length, this.locZ + (this.random.nextDouble() - 0.5D) * (double) this.width, 0.0D, 0.0D, 0.0D, new int[0]); + } + } + + super.m(); + } + + protected void E() { + if (this.U()) { + this.damageEntity(DamageSource.DROWN, 1.0F); + } + + --this.b; + if (this.b <= 0) { + this.b = 100; + this.a = 0.5F + (float) this.random.nextGaussian() * 3.0F; + } + + EntityLiving entityliving = this.getGoalTarget(); + + if (entityliving != null && entityliving.locY + (double) entityliving.getHeadHeight() > this.locY + (double) this.getHeadHeight() + (double) this.a) { + this.motY += (0.30000001192092896D - this.motY) * 0.30000001192092896D; + this.ai = true; + } + + super.E(); + } + + public void e(float f, float f1) {} + + protected Item getLoot() { + return Items.BLAZE_ROD; + } + + public boolean isBurning() { + return this.n(); + } + + protected void dropDeathLoot(boolean flag, int i) { + if (flag) { + int j = this.random.nextInt(2 + i); + + for (int k = 0; k < j; ++k) { + this.a(Items.BLAZE_ROD, 1); + } + } + + } + + public boolean n() { + return (this.datawatcher.getByte(16) & 1) != 0; + } + + public void a(boolean flag) { + byte b0 = this.datawatcher.getByte(16); + + if (flag) { + b0 = (byte) (b0 | 1); + } else { + b0 &= -2; + } + + this.datawatcher.watch(16, Byte.valueOf(b0)); + } + + protected boolean n_() { + return true; + } + + static class PathfinderGoalBlazeFireball extends PathfinderGoal { + + private EntityBlaze a; + private int b; + private int c; + + public PathfinderGoalBlazeFireball(EntityBlaze entityblaze) { + this.a = entityblaze; + this.a(3); + } + + public boolean a() { + EntityLiving entityliving = this.a.getGoalTarget(); + + return entityliving != null && entityliving.isAlive(); + } + + public void c() { + this.b = 0; + } + + public void d() { + this.a.a(false); + } + + public void e() { + --this.c; + EntityLiving entityliving = this.a.getGoalTarget(); + double d0 = this.a.h(entityliving); + + if (d0 < 4.0D) { + if (this.c <= 0) { + this.c = 20; + this.a.r(entityliving); + } + + this.a.getControllerMove().a(entityliving.locX, entityliving.locY, entityliving.locZ, 1.0D); + } else if (d0 < 256.0D) { + double d1 = entityliving.locX - this.a.locX; + double d2 = entityliving.getBoundingBox().b + (double) (entityliving.length / 2.0F) - (this.a.locY + (double) (this.a.length / 2.0F)); + double d3 = entityliving.locZ - this.a.locZ; + + if (this.c <= 0) { + ++this.b; + if (this.b == 1) { + this.c = 60; + this.a.a(true); + } else if (this.b <= 4) { + this.c = 6; + } else { + this.c = 100; + this.b = 0; + this.a.a(false); + } + + if (this.b > 1) { + float f = MathHelper.c(MathHelper.sqrt(d0)) * 0.5F; + + this.a.world.a((EntityHuman) null, 1009, new BlockPosition((int) this.a.locX, (int) this.a.locY, (int) this.a.locZ), 0); + + for (int i = 0; i < 1; ++i) { + EntitySmallFireball entitysmallfireball = new EntitySmallFireball(this.a.world, this.a, d1 + this.a.bc().nextGaussian() * (double) f, d2, d3 + this.a.bc().nextGaussian() * (double) f); + + entitysmallfireball.locY = this.a.locY + (double) (this.a.length / 2.0F) + 0.5D; + this.a.world.addEntity(entitysmallfireball); + } + } + } + + this.a.getControllerLook().a(entityliving, 10.0F, 10.0F); + } else { + this.a.getNavigation().n(); + this.a.getControllerMove().a(entityliving.locX, entityliving.locY, entityliving.locZ, 1.0D); + } + + super.e(); + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityBoat.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityBoat.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityBoat.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityBoat.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EntityCaveSpider.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityCaveSpider.java new file mode 100644 index 0000000..f26d52a --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EntityCaveSpider.java @@ -0,0 +1,44 @@ +package net.minecraft.server; + +public class EntityCaveSpider extends EntitySpider { + + public EntityCaveSpider(World world) { + super(world); + this.setSize(0.7F, 0.5F); + } + + protected void initAttributes() { + super.initAttributes(); + this.getAttributeInstance(GenericAttributes.maxHealth).setValue(12.0D); + } + + public boolean r(Entity entity) { + if (super.r(entity)) { + if (entity instanceof EntityLiving) { + byte b0 = 0; + + if (this.world.getDifficulty() == EnumDifficulty.NORMAL) { + b0 = 7; + } else if (this.world.getDifficulty() == EnumDifficulty.HARD) { + b0 = 15; + } + + if (b0 > 0) { + ((EntityLiving) entity).addEffect(new MobEffect(MobEffectList.POISON.id, b0 * 20, 0)); + } + } + + return true; + } else { + return false; + } + } + + public GroupDataEntity prepare(DifficultyDamageScaler difficultydamagescaler, GroupDataEntity groupdataentity) { + return groupdataentity; + } + + public float getHeadHeight() { + return 0.45F; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityChicken.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityChicken.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityChicken.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityChicken.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EntityComplexPart.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityComplexPart.java new file mode 100644 index 0000000..8addf6f --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EntityComplexPart.java @@ -0,0 +1,32 @@ +package net.minecraft.server; + +public class EntityComplexPart extends Entity { + + public final IComplex owner; + public final String b; + + public EntityComplexPart(IComplex icomplex, String s, float f, float f1) { + super(icomplex.a()); + this.setSize(f, f1); + this.owner = icomplex; + this.b = s; + } + + protected void h() {} + + protected void a(NBTTagCompound nbttagcompound) {} + + protected void b(NBTTagCompound nbttagcompound) {} + + public boolean ad() { + return true; + } + + public boolean damageEntity(DamageSource damagesource, float f) { + return this.isInvulnerable(damagesource) ? false : this.owner.a(this, damagesource, f); + } + + public boolean k(Entity entity) { + return this == entity || this.owner == entity; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityCow.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityCow.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityCow.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityCow.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityCreature.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityCreature.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityCreature.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityCreature.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityCreeper.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityCreeper.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityCreeper.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityCreeper.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EntityDamageSource.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityDamageSource.java new file mode 100644 index 0000000..b4b5a3f --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EntityDamageSource.java @@ -0,0 +1,37 @@ +package net.minecraft.server; + +public class EntityDamageSource extends DamageSource { + + protected Entity q; + private boolean r = false; + + public EntityDamageSource(String s, Entity entity) { + super(s); + this.q = entity; + } + + public EntityDamageSource v() { + this.r = true; + return this; + } + + public boolean w() { + return this.r; + } + + public Entity getEntity() { + return this.q; + } + + public IChatBaseComponent getLocalizedDeathMessage(EntityLiving entityliving) { + ItemStack itemstack = this.q instanceof EntityLiving ? ((EntityLiving) this.q).bA() : null; + String s = "death.attack." + this.translationIndex; + String s1 = s + ".item"; + + return itemstack != null && itemstack.hasName() && LocaleI18n.c(s1) ? new ChatMessage(s1, new Object[] { entityliving.getScoreboardDisplayName(), this.q.getScoreboardDisplayName(), itemstack.C()}) : new ChatMessage(s, new Object[] { entityliving.getScoreboardDisplayName(), this.q.getScoreboardDisplayName()}); + } + + public boolean r() { + return this.q != null && this.q instanceof EntityLiving && !(this.q instanceof EntityHuman); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityDamageSourceIndirect.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityDamageSourceIndirect.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityDamageSourceIndirect.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityDamageSourceIndirect.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityEgg.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityEgg.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityEgg.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityEgg.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityEnderCrystal.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityEnderCrystal.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityEnderCrystal.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityEnderCrystal.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityEnderDragon.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityEnderDragon.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityEnderDragon.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityEnderDragon.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityEnderPearl.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityEnderPearl.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityEnderPearl.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityEnderPearl.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EntityEnderSignal.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityEnderSignal.java new file mode 100644 index 0000000..1e4188c --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EntityEnderSignal.java @@ -0,0 +1,134 @@ +package net.minecraft.server; + +public class EntityEnderSignal extends Entity { + + private double a; + private double b; + private double c; + private int d; + private boolean e; + + public EntityEnderSignal(World world) { + super(world); + this.setSize(0.25F, 0.25F); + } + + protected void h() {} + + public EntityEnderSignal(World world, double d0, double d1, double d2) { + super(world); + this.d = 0; + this.setSize(0.25F, 0.25F); + this.setPosition(d0, d1, d2); + } + + public void a(BlockPosition blockposition) { + double d0 = (double) blockposition.getX(); + int i = blockposition.getY(); + double d1 = (double) blockposition.getZ(); + double d2 = d0 - this.locX; + double d3 = d1 - this.locZ; + float f = MathHelper.sqrt(d2 * d2 + d3 * d3); + + if (f > 12.0F) { + this.a = this.locX + d2 / (double) f * 12.0D; + this.c = this.locZ + d3 / (double) f * 12.0D; + this.b = this.locY + 8.0D; + } else { + this.a = d0; + this.b = (double) i; + this.c = d1; + } + + this.d = 0; + this.e = this.random.nextInt(5) > 0; + } + + public void t_() { + this.P = this.locX; + this.Q = this.locY; + this.R = this.locZ; + super.t_(); + this.locX += this.motX; + this.locY += this.motY; + this.locZ += this.motZ; + float f = MathHelper.sqrt(this.motX * this.motX + this.motZ * this.motZ); + + this.yaw = (float) (MathHelper.b(this.motX, this.motZ) * 180.0D / 3.1415927410125732D); + + for (this.pitch = (float) (MathHelper.b(this.motY, (double) f) * 180.0D / 3.1415927410125732D); this.pitch - this.lastPitch < -180.0F; this.lastPitch -= 360.0F) { + ; + } + + while (this.pitch - this.lastPitch >= 180.0F) { + this.lastPitch += 360.0F; + } + + while (this.yaw - this.lastYaw < -180.0F) { + this.lastYaw -= 360.0F; + } + + while (this.yaw - this.lastYaw >= 180.0F) { + this.lastYaw += 360.0F; + } + + this.pitch = this.lastPitch + (this.pitch - this.lastPitch) * 0.2F; + this.yaw = this.lastYaw + (this.yaw - this.lastYaw) * 0.2F; + if (!this.world.isClientSide) { + double d0 = this.a - this.locX; + double d1 = this.c - this.locZ; + float f1 = (float) Math.sqrt(d0 * d0 + d1 * d1); + float f2 = (float) MathHelper.b(d1, d0); + double d2 = (double) f + (double) (f1 - f) * 0.0025D; + + if (f1 < 1.0F) { + d2 *= 0.8D; + this.motY *= 0.8D; + } + + this.motX = Math.cos((double) f2) * d2; + this.motZ = Math.sin((double) f2) * d2; + if (this.locY < this.b) { + this.motY += (1.0D - this.motY) * 0.014999999664723873D; + } else { + this.motY += (-1.0D - this.motY) * 0.014999999664723873D; + } + } + + float f3 = 0.25F; + + if (this.V()) { + for (int i = 0; i < 4; ++i) { + this.world.addParticle(EnumParticle.WATER_BUBBLE, this.locX - this.motX * (double) f3, this.locY - this.motY * (double) f3, this.locZ - this.motZ * (double) f3, this.motX, this.motY, this.motZ, new int[0]); + } + } else { + this.world.addParticle(EnumParticle.PORTAL, this.locX - this.motX * (double) f3 + this.random.nextDouble() * 0.6D - 0.3D, this.locY - this.motY * (double) f3 - 0.5D, this.locZ - this.motZ * (double) f3 + this.random.nextDouble() * 0.6D - 0.3D, this.motX, this.motY, this.motZ, new int[0]); + } + + if (!this.world.isClientSide) { + this.setPosition(this.locX, this.locY, this.locZ); + ++this.d; + if (this.d > 80 && !this.world.isClientSide) { + this.die(); + if (this.e) { + this.world.addEntity(new EntityItem(this.world, this.locX, this.locY, this.locZ, new ItemStack(Items.ENDER_EYE))); + } else { + this.world.triggerEffect(2003, new BlockPosition(this), 0); + } + } + } + + } + + public void b(NBTTagCompound nbttagcompound) {} + + public void a(NBTTagCompound nbttagcompound) {} + + public float c(float f) { + return 1.0F; + } + + public boolean aD() { + return false; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityEnderman.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityEnderman.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityEnderman.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityEnderman.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EntityEndermite.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityEndermite.java new file mode 100644 index 0000000..be2bf9c --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EntityEndermite.java @@ -0,0 +1,116 @@ +package net.minecraft.server; + +public class EntityEndermite extends EntityMonster { + + private int a = 0; + private boolean b = false; + + public EntityEndermite(World world) { + super(world); + this.b_ = 3; + this.setSize(0.4F, 0.3F); + this.goalSelector.a(1, new PathfinderGoalFloat(this)); + this.goalSelector.a(2, new PathfinderGoalMeleeAttack(this, EntityHuman.class, 1.0D, false)); + this.goalSelector.a(3, new PathfinderGoalRandomStroll(this, 1.0D)); + this.goalSelector.a(7, new PathfinderGoalLookAtPlayer(this, EntityHuman.class, 8.0F)); + this.goalSelector.a(8, new PathfinderGoalRandomLookaround(this)); + this.targetSelector.a(1, new PathfinderGoalHurtByTarget(this, true, new Class[0])); + this.targetSelector.a(2, new PathfinderGoalNearestAttackableTarget(this, EntityHuman.class, true)); + } + + public float getHeadHeight() { + return 0.1F; + } + + protected void initAttributes() { + super.initAttributes(); + this.getAttributeInstance(GenericAttributes.maxHealth).setValue(8.0D); + this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).setValue(0.25D); + this.getAttributeInstance(GenericAttributes.ATTACK_DAMAGE).setValue(2.0D); + } + + protected boolean s_() { + return false; + } + + protected String z() { + return "mob.silverfish.say"; + } + + protected String bo() { + return "mob.silverfish.hit"; + } + + protected String bp() { + return "mob.silverfish.kill"; + } + + protected void a(BlockPosition blockposition, Block block) { + this.makeSound("mob.silverfish.step", 0.15F, 1.0F); + } + + protected Item getLoot() { + return null; + } + + public void a(NBTTagCompound nbttagcompound) { + super.a(nbttagcompound); + this.a = nbttagcompound.getInt("Lifetime"); + this.b = nbttagcompound.getBoolean("PlayerSpawned"); + } + + public void b(NBTTagCompound nbttagcompound) { + super.b(nbttagcompound); + nbttagcompound.setInt("Lifetime", this.a); + nbttagcompound.setBoolean("PlayerSpawned", this.b); + } + + public void t_() { + this.aI = this.yaw; + super.t_(); + } + + public boolean n() { + return this.b; + } + + public void a(boolean flag) { + this.b = flag; + } + + public void m() { + super.m(); + if (this.world.isClientSide) { + for (int i = 0; i < 2; ++i) { + this.world.addParticle(EnumParticle.PORTAL, this.locX + (this.random.nextDouble() - 0.5D) * (double) this.width, this.locY + this.random.nextDouble() * (double) this.length, this.locZ + (this.random.nextDouble() - 0.5D) * (double) this.width, (this.random.nextDouble() - 0.5D) * 2.0D, -this.random.nextDouble(), (this.random.nextDouble() - 0.5D) * 2.0D, new int[0]); + } + } else { + if (!this.isPersistent()) { + ++this.a; + } + + if (this.a >= 2400) { + this.die(); + } + } + + } + + protected boolean n_() { + return true; + } + + public boolean bR() { + if (super.bR()) { + EntityHuman entityhuman = this.world.findNearbyPlayer(this, 5.0D); + + return entityhuman == null; + } else { + return false; + } + } + + public EnumMonsterType getMonsterType() { + return EnumMonsterType.ARTHROPOD; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityExperienceOrb.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityExperienceOrb.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityExperienceOrb.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityExperienceOrb.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityFallingBlock.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityFallingBlock.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityFallingBlock.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityFallingBlock.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityFireball.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityFireball.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityFireball.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityFireball.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityFireworks.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityFireworks.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityFireworks.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityFireworks.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityFishingHook.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityFishingHook.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityFishingHook.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityFishingHook.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EntityFlying.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityFlying.java new file mode 100644 index 0000000..b60d080 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EntityFlying.java @@ -0,0 +1,63 @@ +package net.minecraft.server; + +public abstract class EntityFlying extends EntityInsentient { + + public EntityFlying(World world) { + super(world); + } + + public void e(float f, float f1) {} + + protected void a(double d0, boolean flag, Block block, BlockPosition blockposition) {} + + public void g(float f, float f1) { + if (this.V()) { + this.a(f, f1, 0.02F); + this.move(this.motX, this.motY, this.motZ); + this.motX *= 0.800000011920929D; + this.motY *= 0.800000011920929D; + this.motZ *= 0.800000011920929D; + } else if (this.ab()) { + this.a(f, f1, 0.02F); + this.move(this.motX, this.motY, this.motZ); + this.motX *= 0.5D; + this.motY *= 0.5D; + this.motZ *= 0.5D; + } else { + float f2 = 0.91F; + + if (this.onGround) { + f2 = this.world.getType(new BlockPosition(MathHelper.floor(this.locX), MathHelper.floor(this.getBoundingBox().b) - 1, MathHelper.floor(this.locZ))).getBlock().frictionFactor * 0.91F; + } + + float f3 = 0.16277136F / (f2 * f2 * f2); + + this.a(f, f1, this.onGround ? 0.1F * f3 : 0.02F); + f2 = 0.91F; + if (this.onGround) { + f2 = this.world.getType(new BlockPosition(MathHelper.floor(this.locX), MathHelper.floor(this.getBoundingBox().b) - 1, MathHelper.floor(this.locZ))).getBlock().frictionFactor * 0.91F; + } + + this.move(this.motX, this.motY, this.motZ); + this.motX *= (double) f2; + this.motY *= (double) f2; + this.motZ *= (double) f2; + } + + this.aA = this.aB; + double d0 = this.locX - this.lastX; + double d1 = this.locZ - this.lastZ; + float f4 = MathHelper.sqrt(d0 * d0 + d1 * d1) * 4.0F; + + if (f4 > 1.0F) { + f4 = 1.0F; + } + + this.aB += (f4 - this.aB) * 0.4F; + this.aC += this.aB; + } + + public boolean k_() { + return false; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityGhast.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityGhast.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityGhast.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityGhast.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EntityGiantZombie.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityGiantZombie.java new file mode 100644 index 0000000..558b3a6 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EntityGiantZombie.java @@ -0,0 +1,24 @@ +package net.minecraft.server; + +public class EntityGiantZombie extends EntityMonster { + + public EntityGiantZombie(World world) { + super(world); + this.setSize(this.width * 6.0F, this.length * 6.0F); + } + + public float getHeadHeight() { + return 10.440001F; + } + + protected void initAttributes() { + super.initAttributes(); + this.getAttributeInstance(GenericAttributes.maxHealth).setValue(100.0D); + this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).setValue(0.5D); + this.getAttributeInstance(GenericAttributes.ATTACK_DAMAGE).setValue(50.0D); + } + + public float a(BlockPosition blockposition) { + return this.world.o(blockposition) - 0.5F; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EntityGolem.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityGolem.java new file mode 100644 index 0000000..7952295 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EntityGolem.java @@ -0,0 +1,30 @@ +package net.minecraft.server; + +public abstract class EntityGolem extends EntityCreature implements IAnimal { + + public EntityGolem(World world) { + super(world); + } + + public void e(float f, float f1) {} + + protected String z() { + return "none"; + } + + protected String bo() { + return "none"; + } + + protected String bp() { + return "none"; + } + + public int w() { + return 120; + } + + protected boolean isTypeNotPersistent() { + return false; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EntityGuardian.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityGuardian.java new file mode 100644 index 0000000..4dfe5a6 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EntityGuardian.java @@ -0,0 +1,523 @@ +package net.minecraft.server; + +import com.google.common.base.Predicate; +import java.util.Iterator; +import java.util.List; + +public class EntityGuardian extends EntityMonster { + + private float a; + private float b; + private float c; + private float bm; + private float bn; + private EntityLiving bo; + private int bp; + private boolean bq; + public PathfinderGoalRandomStroll goalRandomStroll; + + public EntityGuardian(World world) { + super(world); + this.b_ = 10; + this.setSize(0.85F, 0.85F); + this.goalSelector.a(4, new EntityGuardian.PathfinderGoalGuardianAttack(this)); + PathfinderGoalMoveTowardsRestriction pathfindergoalmovetowardsrestriction; + + this.goalSelector.a(5, pathfindergoalmovetowardsrestriction = new PathfinderGoalMoveTowardsRestriction(this, 1.0D)); + this.goalSelector.a(7, this.goalRandomStroll = new PathfinderGoalRandomStroll(this, 1.0D, 80)); + this.goalSelector.a(8, new PathfinderGoalLookAtPlayer(this, EntityHuman.class, 8.0F)); + this.goalSelector.a(8, new PathfinderGoalLookAtPlayer(this, EntityGuardian.class, 12.0F, 0.01F)); + this.goalSelector.a(9, new PathfinderGoalRandomLookaround(this)); + this.goalRandomStroll.a(3); + pathfindergoalmovetowardsrestriction.a(3); + this.targetSelector.a(1, new PathfinderGoalNearestAttackableTarget(this, EntityLiving.class, 10, true, false, new EntityGuardian.EntitySelectorGuardianTargetHumanSquid(this))); + this.moveController = new EntityGuardian.ControllerMoveGuardian(this); + this.b = this.a = this.random.nextFloat(); + } + + public void initAttributes() { + super.initAttributes(); + this.getAttributeInstance(GenericAttributes.ATTACK_DAMAGE).setValue(6.0D); + this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).setValue(0.5D); + this.getAttributeInstance(GenericAttributes.FOLLOW_RANGE).setValue(16.0D); + this.getAttributeInstance(GenericAttributes.maxHealth).setValue(30.0D); + } + + public void a(NBTTagCompound nbttagcompound) { + super.a(nbttagcompound); + this.setElder(nbttagcompound.getBoolean("Elder")); + } + + public void b(NBTTagCompound nbttagcompound) { + super.b(nbttagcompound); + nbttagcompound.setBoolean("Elder", this.isElder()); + } + + protected NavigationAbstract b(World world) { + return new NavigationGuardian(this, world); + } + + protected void h() { + super.h(); + this.datawatcher.a(16, Integer.valueOf(0)); + this.datawatcher.a(17, Integer.valueOf(0)); + } + + private boolean a(int i) { + return (this.datawatcher.getInt(16) & i) != 0; + } + + private void a(int i, boolean flag) { + int j = this.datawatcher.getInt(16); + + if (flag) { + this.datawatcher.watch(16, Integer.valueOf(j | i)); + } else { + this.datawatcher.watch(16, Integer.valueOf(j & ~i)); + } + + } + + public boolean n() { + return this.a(2); + } + + private void l(boolean flag) { + this.a(2, flag); + } + + public int cm() { + return this.isElder() ? 60 : 80; + } + + public boolean isElder() { + return this.a(4); + } + + public void setElder(boolean flag) { + this.a(4, flag); + if (flag) { + this.setSize(1.9975F, 1.9975F); + this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).setValue(0.30000001192092896D); + this.getAttributeInstance(GenericAttributes.ATTACK_DAMAGE).setValue(8.0D); + this.getAttributeInstance(GenericAttributes.maxHealth).setValue(80.0D); + this.bX(); + this.goalRandomStroll.setTimeBetweenMovement(400); + } + + } + + private void b(int i) { + this.datawatcher.watch(17, Integer.valueOf(i)); + } + + public boolean cp() { + return this.datawatcher.getInt(17) != 0; + } + + public EntityLiving cq() { + if (!this.cp()) { + return null; + } else if (this.world.isClientSide) { + if (this.bo != null) { + return this.bo; + } else { + Entity entity = this.world.a(this.datawatcher.getInt(17)); + + if (entity instanceof EntityLiving) { + this.bo = (EntityLiving) entity; + return this.bo; + } else { + return null; + } + } + } else { + return this.getGoalTarget(); + } + } + + public void i(int i) { + super.i(i); + if (i == 16) { + if (this.isElder() && this.width < 1.0F) { + this.setSize(1.9975F, 1.9975F); + } + } else if (i == 17) { + this.bp = 0; + this.bo = null; + } + + } + + public int w() { + return 160; + } + + protected String z() { + return !this.V() ? "mob.guardian.land.idle" : (this.isElder() ? "mob.guardian.elder.idle" : "mob.guardian.idle"); + } + + protected String bo() { + return !this.V() ? "mob.guardian.land.hit" : (this.isElder() ? "mob.guardian.elder.hit" : "mob.guardian.hit"); + } + + protected String bp() { + return !this.V() ? "mob.guardian.land.death" : (this.isElder() ? "mob.guardian.elder.death" : "mob.guardian.death"); + } + + protected boolean s_() { + return false; + } + + public float getHeadHeight() { + return this.length * 0.5F; + } + + public float a(BlockPosition blockposition) { + return this.world.getType(blockposition).getBlock().getMaterial() == Material.WATER ? 10.0F + this.world.o(blockposition) - 0.5F : super.a(blockposition); + } + + public void m() { + if (this.world.isClientSide) { + this.b = this.a; + if (!this.V()) { + this.c = 2.0F; + if (this.motY > 0.0D && this.bq && !this.R()) { + this.world.a(this.locX, this.locY, this.locZ, "mob.guardian.flop", 1.0F, 1.0F, false); + } + + this.bq = this.motY < 0.0D && this.world.d((new BlockPosition(this)).down(), false); + } else if (this.n()) { + if (this.c < 0.5F) { + this.c = 4.0F; + } else { + this.c += (0.5F - this.c) * 0.1F; + } + } else { + this.c += (0.125F - this.c) * 0.2F; + } + + this.a += this.c; + this.bn = this.bm; + if (!this.V()) { + this.bm = this.random.nextFloat(); + } else if (this.n()) { + this.bm += (0.0F - this.bm) * 0.25F; + } else { + this.bm += (1.0F - this.bm) * 0.06F; + } + + if (this.n() && this.V()) { + Vec3D vec3d = this.d(0.0F); + + for (int i = 0; i < 2; ++i) { + this.world.addParticle(EnumParticle.WATER_BUBBLE, this.locX + (this.random.nextDouble() - 0.5D) * (double) this.width - vec3d.a * 1.5D, this.locY + this.random.nextDouble() * (double) this.length - vec3d.b * 1.5D, this.locZ + (this.random.nextDouble() - 0.5D) * (double) this.width - vec3d.c * 1.5D, 0.0D, 0.0D, 0.0D, new int[0]); + } + } + + if (this.cp()) { + if (this.bp < this.cm()) { + ++this.bp; + } + + EntityLiving entityliving = this.cq(); + + if (entityliving != null) { + this.getControllerLook().a(entityliving, 90.0F, 90.0F); + this.getControllerLook().a(); + double d0 = (double) this.q(0.0F); + double d1 = entityliving.locX - this.locX; + double d2 = entityliving.locY + (double) (entityliving.length * 0.5F) - (this.locY + (double) this.getHeadHeight()); + double d3 = entityliving.locZ - this.locZ; + double d4 = Math.sqrt(d1 * d1 + d2 * d2 + d3 * d3); + + d1 /= d4; + d2 /= d4; + d3 /= d4; + double d5 = this.random.nextDouble(); + + while (d5 < d4) { + d5 += 1.8D - d0 + this.random.nextDouble() * (1.7D - d0); + this.world.addParticle(EnumParticle.WATER_BUBBLE, this.locX + d1 * d5, this.locY + d2 * d5 + (double) this.getHeadHeight(), this.locZ + d3 * d5, 0.0D, 0.0D, 0.0D, new int[0]); + } + } + } + } + + if (this.inWater) { + this.setAirTicks(300); + } else if (this.onGround) { + this.motY += 0.5D; + this.motX += (double) ((this.random.nextFloat() * 2.0F - 1.0F) * 0.4F); + this.motZ += (double) ((this.random.nextFloat() * 2.0F - 1.0F) * 0.4F); + this.yaw = this.random.nextFloat() * 360.0F; + this.onGround = false; + this.ai = true; + } + + if (this.cp()) { + this.yaw = this.aK; + } + + super.m(); + } + + public float q(float f) { + return ((float) this.bp + f) / (float) this.cm(); + } + + protected void E() { + super.E(); + if (this.isElder()) { + boolean flag = true; + boolean flag1 = true; + boolean flag2 = true; + boolean flag3 = true; + + if ((this.ticksLived + this.getId()) % 1200 == 0) { + MobEffectList mobeffectlist = MobEffectList.SLOWER_DIG; + List list = this.world.b(EntityPlayer.class, new Predicate() { + public boolean a(EntityPlayer entityplayer) { + return EntityGuardian.this.h(entityplayer) < 2500.0D && entityplayer.playerInteractManager.c(); + } + + public boolean apply(Object object) { + return this.a((EntityPlayer) object); + } + }); + Iterator iterator = list.iterator(); + + while (iterator.hasNext()) { + EntityPlayer entityplayer = (EntityPlayer) iterator.next(); + + if (!entityplayer.hasEffect(mobeffectlist) || entityplayer.getEffect(mobeffectlist).getAmplifier() < 2 || entityplayer.getEffect(mobeffectlist).getDuration() < 1200) { + entityplayer.playerConnection.sendPacket(new PacketPlayOutGameStateChange(10, 0.0F)); + entityplayer.addEffect(new MobEffect(mobeffectlist.id, 6000, 2)); + } + } + } + + if (!this.ck()) { + this.a(new BlockPosition(this), 16); + } + } + + } + + protected void dropDeathLoot(boolean flag, int i) { + int j = this.random.nextInt(3) + this.random.nextInt(i + 1); + + if (j > 0) { + this.a(new ItemStack(Items.PRISMARINE_SHARD, j, 0), 1.0F); + } + + if (this.random.nextInt(3 + i) > 1) { + this.a(new ItemStack(Items.FISH, 1, ItemFish.EnumFish.COD.a()), 1.0F); + } else if (this.random.nextInt(3 + i) > 1) { + this.a(new ItemStack(Items.PRISMARINE_CRYSTALS, 1, 0), 1.0F); + } + + if (flag && this.isElder()) { + this.a(new ItemStack(Blocks.SPONGE, 1, 1), 1.0F); + } + + } + + protected void getRareDrop() { + ItemStack itemstack = ((PossibleFishingResult) WeightedRandom.a(this.random, EntityFishingHook.j())).a(this.random); + + this.a(itemstack, 1.0F); + } + + protected boolean n_() { + return true; + } + + public boolean canSpawn() { + return this.world.a(this.getBoundingBox(), (Entity) this) && this.world.getCubes(this, this.getBoundingBox()).isEmpty(); + } + + public boolean bR() { + return (this.random.nextInt(20) == 0 || !this.world.j(new BlockPosition(this))) && super.bR(); + } + + public boolean damageEntity(DamageSource damagesource, float f) { + if (!this.n() && !damagesource.isMagic() && damagesource.i() instanceof EntityLiving) { + EntityLiving entityliving = (EntityLiving) damagesource.i(); + + if (!damagesource.isExplosion()) { + entityliving.damageEntity(DamageSource.a(this), 2.0F); + entityliving.makeSound("damage.thorns", 0.5F, 1.0F); + } + } + + this.goalRandomStroll.f(); + return super.damageEntity(damagesource, f); + } + + public int bQ() { + return 180; + } + + public void g(float f, float f1) { + if (this.bM()) { + if (this.V()) { + this.a(f, f1, 0.1F); + this.move(this.motX, this.motY, this.motZ); + this.motX *= 0.8999999761581421D; + this.motY *= 0.8999999761581421D; + this.motZ *= 0.8999999761581421D; + if (!this.n() && this.getGoalTarget() == null) { + this.motY -= 0.005D; + } + } else { + super.g(f, f1); + } + } else { + super.g(f, f1); + } + + } + + static class ControllerMoveGuardian extends ControllerMove { + + private EntityGuardian g; + + public ControllerMoveGuardian(EntityGuardian entityguardian) { + super(entityguardian); + this.g = entityguardian; + } + + public void c() { + if (this.f && !this.g.getNavigation().m()) { + double d0 = this.b - this.g.locX; + double d1 = this.c - this.g.locY; + double d2 = this.d - this.g.locZ; + double d3 = d0 * d0 + d1 * d1 + d2 * d2; + + d3 = (double) MathHelper.sqrt(d3); + d1 /= d3; + float f = (float) (MathHelper.b(d2, d0) * 180.0D / 3.1415927410125732D) - 90.0F; + + this.g.yaw = this.a(this.g.yaw, f, 30.0F); + this.g.aI = this.g.yaw; + float f1 = (float) (this.e * this.g.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).getValue()); + + this.g.k(this.g.bI() + (f1 - this.g.bI()) * 0.125F); + double d4 = Math.sin((double) (this.g.ticksLived + this.g.getId()) * 0.5D) * 0.05D; + double d5 = Math.cos((double) (this.g.yaw * 3.1415927F / 180.0F)); + double d6 = Math.sin((double) (this.g.yaw * 3.1415927F / 180.0F)); + + this.g.motX += d4 * d5; + this.g.motZ += d4 * d6; + d4 = Math.sin((double) (this.g.ticksLived + this.g.getId()) * 0.75D) * 0.05D; + this.g.motY += d4 * (d6 + d5) * 0.25D; + this.g.motY += (double) this.g.bI() * d1 * 0.1D; + ControllerLook controllerlook = this.g.getControllerLook(); + double d7 = this.g.locX + d0 / d3 * 2.0D; + double d8 = (double) this.g.getHeadHeight() + this.g.locY + d1 / d3 * 1.0D; + double d9 = this.g.locZ + d2 / d3 * 2.0D; + double d10 = controllerlook.e(); + double d11 = controllerlook.f(); + double d12 = controllerlook.g(); + + if (!controllerlook.b()) { + d10 = d7; + d11 = d8; + d12 = d9; + } + + this.g.getControllerLook().a(d10 + (d7 - d10) * 0.125D, d11 + (d8 - d11) * 0.125D, d12 + (d9 - d12) * 0.125D, 10.0F, 40.0F); + this.g.l(true); + } else { + this.g.k(0.0F); + this.g.l(false); + } + } + } + + static class PathfinderGoalGuardianAttack extends PathfinderGoal { + + private EntityGuardian a; + private int b; + + public PathfinderGoalGuardianAttack(EntityGuardian entityguardian) { + this.a = entityguardian; + this.a(3); + } + + public boolean a() { + EntityLiving entityliving = this.a.getGoalTarget(); + + return entityliving != null && entityliving.isAlive(); + } + + public boolean b() { + return super.b() && (this.a.isElder() || this.a.h(this.a.getGoalTarget()) > 9.0D); + } + + public void c() { + this.b = -10; + this.a.getNavigation().n(); + this.a.getControllerLook().a(this.a.getGoalTarget(), 90.0F, 90.0F); + this.a.ai = true; + } + + public void d() { + this.a.b(0); + this.a.setGoalTarget((EntityLiving) null); + this.a.goalRandomStroll.f(); + } + + public void e() { + EntityLiving entityliving = this.a.getGoalTarget(); + + this.a.getNavigation().n(); + this.a.getControllerLook().a(entityliving, 90.0F, 90.0F); + if (!this.a.hasLineOfSight(entityliving)) { + this.a.setGoalTarget((EntityLiving) null); + } else { + ++this.b; + if (this.b == 0) { + this.a.b(this.a.getGoalTarget().getId()); + this.a.world.broadcastEntityEffect(this.a, (byte) 21); + } else if (this.b >= this.a.cm()) { + float f = 1.0F; + + if (this.a.world.getDifficulty() == EnumDifficulty.HARD) { + f += 2.0F; + } + + if (this.a.isElder()) { + f += 2.0F; + } + + entityliving.damageEntity(DamageSource.b(this.a, this.a), f); + entityliving.damageEntity(DamageSource.mobAttack(this.a), (float) this.a.getAttributeInstance(GenericAttributes.ATTACK_DAMAGE).getValue()); + this.a.setGoalTarget((EntityLiving) null); + } else if (this.b >= 60 && this.b % 20 == 0) { + ; + } + + super.e(); + } + } + } + + static class EntitySelectorGuardianTargetHumanSquid implements Predicate { + + private EntityGuardian a; + + public EntitySelectorGuardianTargetHumanSquid(EntityGuardian entityguardian) { + this.a = entityguardian; + } + + public boolean a(EntityLiving entityliving) { + return (entityliving instanceof EntityHuman || entityliving instanceof EntitySquid) && entityliving.h(this.a) > 9.0D; + } + + public boolean apply(EntityLiving object) { + return this.a(object); + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityHanging.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityHanging.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityHanging.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityHanging.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityHorse.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityHorse.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityHorse.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityHorse.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityHuman.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityHuman.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityHuman.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityHuman.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityInsentient.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityInsentient.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityInsentient.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityInsentient.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityIronGolem.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityIronGolem.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityIronGolem.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityIronGolem.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityItem.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityItem.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityItem.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityItem.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityItemFrame.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityItemFrame.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityItemFrame.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityItemFrame.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityLargeFireball.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityLargeFireball.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityLargeFireball.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityLargeFireball.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityLeash.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityLeash.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityLeash.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityLeash.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityLightning.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityLightning.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityLightning.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityLightning.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityLiving.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityLiving.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityLiving.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityLiving.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EntityMagmaCube.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityMagmaCube.java new file mode 100644 index 0000000..4647895 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EntityMagmaCube.java @@ -0,0 +1,99 @@ +package net.minecraft.server; + +public class EntityMagmaCube extends EntitySlime { + + public EntityMagmaCube(World world) { + super(world); + this.fireProof = true; + } + + protected void initAttributes() { + super.initAttributes(); + this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).setValue(0.20000000298023224D); + } + + public boolean bR() { + return this.world.getDifficulty() != EnumDifficulty.PEACEFUL; + } + + public boolean canSpawn() { + return this.world.a(this.getBoundingBox(), (Entity) this) && this.world.getCubes(this, this.getBoundingBox()).isEmpty() && !this.world.containsLiquid(this.getBoundingBox()); + } + + public int br() { + return this.getSize() * 3; + } + + public float c(float f) { + return 1.0F; + } + + protected EnumParticle n() { + return EnumParticle.FLAME; + } + + protected EntitySlime cf() { + return new EntityMagmaCube(this.world); + } + + protected Item getLoot() { + return Items.MAGMA_CREAM; + } + + protected void dropDeathLoot(boolean flag, int i) { + Item item = this.getLoot(); + + if (item != null && this.getSize() > 1) { + int j = this.random.nextInt(4) - 2; + + if (i > 0) { + j += this.random.nextInt(i + 1); + } + + for (int k = 0; k < j; ++k) { + this.a(item, 1); + } + } + + } + + public boolean isBurning() { + return false; + } + + protected int cg() { + return super.cg() * 4; + } + + protected void ch() { + this.a *= 0.9F; + } + + protected void bF() { + this.motY = (double) (0.42F + (float) this.getSize() * 0.1F); + this.ai = true; + } + + protected void bH() { + this.motY = (double) (0.22F + (float) this.getSize() * 0.05F); + this.ai = true; + } + + public void e(float f, float f1) {} + + protected boolean ci() { + return true; + } + + protected int cj() { + return super.cj() + 2; + } + + protected String ck() { + return this.getSize() > 1 ? "mob.magmacube.big" : "mob.magmacube.small"; + } + + protected boolean cl() { + return true; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityMinecartAbstract.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityMinecartAbstract.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityMinecartAbstract.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityMinecartAbstract.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EntityMinecartChest.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityMinecartChest.java new file mode 100644 index 0000000..dcee0df --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EntityMinecartChest.java @@ -0,0 +1,44 @@ +package net.minecraft.server; + +public class EntityMinecartChest extends EntityMinecartContainer { + + public EntityMinecartChest(World world) { + super(world); + } + + public EntityMinecartChest(World world, double d0, double d1, double d2) { + super(world, d0, d1, d2); + } + + public void a(DamageSource damagesource) { + super.a(damagesource); + if (this.world.getGameRules().getBoolean("doEntityDrops")) { + this.a(Item.getItemOf(Blocks.CHEST), 1, 0.0F); + } + + } + + public int getSize() { + return 27; + } + + public EntityMinecartAbstract.EnumMinecartType s() { + return EntityMinecartAbstract.EnumMinecartType.CHEST; + } + + public IBlockData u() { + return Blocks.CHEST.getBlockData().set(BlockChest.FACING, EnumDirection.NORTH); + } + + public int w() { + return 8; + } + + public String getContainerName() { + return "minecraft:chest"; + } + + public Container createContainer(PlayerInventory playerinventory, EntityHuman entityhuman) { + return new ContainerChest(playerinventory, this, entityhuman); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityMinecartCommandBlock.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityMinecartCommandBlock.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityMinecartCommandBlock.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityMinecartCommandBlock.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityMinecartContainer.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityMinecartContainer.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityMinecartContainer.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityMinecartContainer.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityMinecartFurnace.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityMinecartFurnace.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityMinecartFurnace.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityMinecartFurnace.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EntityMinecartHopper.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityMinecartHopper.java new file mode 100644 index 0000000..eefbdc6 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EntityMinecartHopper.java @@ -0,0 +1,147 @@ +package net.minecraft.server; + +import java.util.List; + +public class EntityMinecartHopper extends EntityMinecartContainer implements IHopper { + + private boolean a = true; + private int b = -1; + private BlockPosition c; + + public EntityMinecartHopper(World world) { + super(world); + this.c = BlockPosition.ZERO; + } + + public EntityMinecartHopper(World world, double d0, double d1, double d2) { + super(world, d0, d1, d2); + this.c = BlockPosition.ZERO; + } + + public EntityMinecartAbstract.EnumMinecartType s() { + return EntityMinecartAbstract.EnumMinecartType.HOPPER; + } + + public IBlockData u() { + return Blocks.HOPPER.getBlockData(); + } + + public int w() { + return 1; + } + + public int getSize() { + return 5; + } + + public boolean e(EntityHuman entityhuman) { + if (!this.world.isClientSide) { + entityhuman.openContainer(this); + } + + return true; + } + + public void a(int i, int j, int k, boolean flag) { + boolean flag1 = !flag; + + if (flag1 != this.y()) { + this.i(flag1); + } + + } + + public boolean y() { + return this.a; + } + + public void i(boolean flag) { + this.a = flag; + } + + public World getWorld() { + return this.world; + } + + public double A() { + return this.locX; + } + + public double B() { + return this.locY + 0.5D; + } + + public double C() { + return this.locZ; + } + + public void t_() { + super.t_(); + if (!this.world.isClientSide && this.isAlive() && this.y()) { + BlockPosition blockposition = new BlockPosition(this); + + if (blockposition.equals(this.c)) { + --this.b; + } else { + this.m(0); + } + + if (!this.E()) { + this.m(0); + if (this.D()) { + this.m(4); + this.update(); + } + } + } + + } + + public boolean D() { + if (TileEntityHopper.a((IHopper) this)) { + return true; + } else { + List list = this.world.a(EntityItem.class, this.getBoundingBox().grow(0.25D, 0.0D, 0.25D), IEntitySelector.a); + + if (list.size() > 0) { + TileEntityHopper.a((IInventory) this, (EntityItem) list.get(0)); + } + + return false; + } + } + + public void a(DamageSource damagesource) { + super.a(damagesource); + if (this.world.getGameRules().getBoolean("doEntityDrops")) { + this.a(Item.getItemOf(Blocks.HOPPER), 1, 0.0F); + } + + } + + protected void b(NBTTagCompound nbttagcompound) { + super.b(nbttagcompound); + nbttagcompound.setInt("TransferCooldown", this.b); + } + + protected void a(NBTTagCompound nbttagcompound) { + super.a(nbttagcompound); + this.b = nbttagcompound.getInt("TransferCooldown"); + } + + public void m(int i) { + this.b = i; + } + + public boolean E() { + return this.b > 0; + } + + public String getContainerName() { + return "minecraft:hopper"; + } + + public Container createContainer(PlayerInventory playerinventory, EntityHuman entityhuman) { + return new ContainerHopper(playerinventory, this, entityhuman); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EntityMinecartMobSpawner.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityMinecartMobSpawner.java new file mode 100644 index 0000000..1a8dc6b --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EntityMinecartMobSpawner.java @@ -0,0 +1,49 @@ +package net.minecraft.server; + +public class EntityMinecartMobSpawner extends EntityMinecartAbstract { + + private final MobSpawnerAbstract a = new MobSpawnerAbstract() { + public void a(int i) { + EntityMinecartMobSpawner.this.world.broadcastEntityEffect(EntityMinecartMobSpawner.this, (byte) i); + } + + public World a() { + return EntityMinecartMobSpawner.this.world; + } + + public BlockPosition b() { + return new BlockPosition(EntityMinecartMobSpawner.this); + } + }; + + public EntityMinecartMobSpawner(World world) { + super(world); + } + + public EntityMinecartMobSpawner(World world, double d0, double d1, double d2) { + super(world, d0, d1, d2); + } + + public EntityMinecartAbstract.EnumMinecartType s() { + return EntityMinecartAbstract.EnumMinecartType.SPAWNER; + } + + public IBlockData u() { + return Blocks.MOB_SPAWNER.getBlockData(); + } + + protected void a(NBTTagCompound nbttagcompound) { + super.a(nbttagcompound); + this.a.a(nbttagcompound); + } + + protected void b(NBTTagCompound nbttagcompound) { + super.b(nbttagcompound); + this.a.b(nbttagcompound); + } + + public void t_() { + super.t_(); + this.a.c(); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EntityMinecartRideable.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityMinecartRideable.java new file mode 100644 index 0000000..bcd9f62 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EntityMinecartRideable.java @@ -0,0 +1,46 @@ +package net.minecraft.server; + +public class EntityMinecartRideable extends EntityMinecartAbstract { + + public EntityMinecartRideable(World world) { + super(world); + } + + public EntityMinecartRideable(World world, double d0, double d1, double d2) { + super(world, d0, d1, d2); + } + + public boolean e(EntityHuman entityhuman) { + if (this.passenger != null && this.passenger instanceof EntityHuman && this.passenger != entityhuman) { + return true; + } else if (this.passenger != null && this.passenger != entityhuman) { + return false; + } else { + if (!this.world.isClientSide) { + entityhuman.mount(this); + } + + return true; + } + } + + public void a(int i, int j, int k, boolean flag) { + if (flag) { + if (this.passenger != null) { + this.passenger.mount((Entity) null); + } + + if (this.getType() == 0) { + this.k(-this.r()); + this.j(10); + this.setDamage(50.0F); + this.ac(); + } + } + + } + + public EntityMinecartAbstract.EnumMinecartType s() { + return EntityMinecartAbstract.EnumMinecartType.RIDEABLE; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EntityMinecartTNT.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityMinecartTNT.java new file mode 100644 index 0000000..98d3217 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EntityMinecartTNT.java @@ -0,0 +1,136 @@ +package net.minecraft.server; + +public class EntityMinecartTNT extends EntityMinecartAbstract { + + private int a = -1; + + public EntityMinecartTNT(World world) { + super(world); + } + + public EntityMinecartTNT(World world, double d0, double d1, double d2) { + super(world, d0, d1, d2); + } + + public EntityMinecartAbstract.EnumMinecartType s() { + return EntityMinecartAbstract.EnumMinecartType.TNT; + } + + public IBlockData u() { + return Blocks.TNT.getBlockData(); + } + + public void t_() { + super.t_(); + if (this.a > 0) { + --this.a; + this.world.addParticle(EnumParticle.SMOKE_NORMAL, this.locX, this.locY + 0.5D, this.locZ, 0.0D, 0.0D, 0.0D, new int[0]); + } else if (this.a == 0) { + this.b(this.motX * this.motX + this.motZ * this.motZ); + } + + if (this.positionChanged) { + double d0 = this.motX * this.motX + this.motZ * this.motZ; + + if (d0 >= 0.009999999776482582D) { + this.b(d0); + } + } + + } + + public boolean damageEntity(DamageSource damagesource, float f) { + Entity entity = damagesource.i(); + + if (entity instanceof EntityArrow) { + EntityArrow entityarrow = (EntityArrow) entity; + + if (entityarrow.isBurning()) { + this.b(entityarrow.motX * entityarrow.motX + entityarrow.motY * entityarrow.motY + entityarrow.motZ * entityarrow.motZ); + } + } + + return super.damageEntity(damagesource, f); + } + + public void a(DamageSource damagesource) { + super.a(damagesource); + double d0 = this.motX * this.motX + this.motZ * this.motZ; + + if (!damagesource.isExplosion() && this.world.getGameRules().getBoolean("doEntityDrops")) { + this.a(new ItemStack(Blocks.TNT, 1), 0.0F); + } + + if (damagesource.o() || damagesource.isExplosion() || d0 >= 0.009999999776482582D) { + this.b(d0); + } + + } + + protected void b(double d0) { + if (!this.world.isClientSide) { + double d1 = Math.sqrt(d0); + + if (d1 > 5.0D) { + d1 = 5.0D; + } + + this.world.explode(this, this.locX, this.locY, this.locZ, (float) (4.0D + this.random.nextDouble() * 1.5D * d1), true); + this.die(); + } + + } + + public void e(float f, float f1) { + if (f >= 3.0F) { + float f2 = f / 10.0F; + + this.b((double) (f2 * f2)); + } + + super.e(f, f1); + } + + public void a(int i, int j, int k, boolean flag) { + if (flag && this.a < 0) { + this.j(); + } + + } + + public void j() { + this.a = 80; + if (!this.world.isClientSide) { + this.world.broadcastEntityEffect(this, (byte) 10); + if (!this.R()) { + this.world.makeSound(this, "game.tnt.primed", 1.0F, 1.0F); + } + } + + } + + public boolean y() { + return this.a > -1; + } + + public float a(Explosion explosion, World world, BlockPosition blockposition, IBlockData iblockdata) { + return this.y() && (BlockMinecartTrackAbstract.d(iblockdata) || BlockMinecartTrackAbstract.e(world, blockposition.up())) ? 0.0F : super.a(explosion, world, blockposition, iblockdata); + } + + public boolean a(Explosion explosion, World world, BlockPosition blockposition, IBlockData iblockdata, float f) { + return this.y() && (BlockMinecartTrackAbstract.d(iblockdata) || BlockMinecartTrackAbstract.e(world, blockposition.up())) ? false : super.a(explosion, world, blockposition, iblockdata, f); + } + + protected void a(NBTTagCompound nbttagcompound) { + super.a(nbttagcompound); + if (nbttagcompound.hasKeyOfType("TNTFuse", 99)) { + this.a = nbttagcompound.getInt("TNTFuse"); + } + + } + + protected void b(NBTTagCompound nbttagcompound) { + super.b(nbttagcompound); + nbttagcompound.setInt("TNTFuse", this.a); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityMonster.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityMonster.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityMonster.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityMonster.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityMushroomCow.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityMushroomCow.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityMushroomCow.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityMushroomCow.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityOcelot.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityOcelot.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityOcelot.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityOcelot.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EntityOwnable.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityOwnable.java new file mode 100644 index 0000000..c5d6620 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EntityOwnable.java @@ -0,0 +1,8 @@ +package net.minecraft.server; + +public interface EntityOwnable { + + String getOwnerUUID(); + + Entity getOwner(); +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityPainting.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityPainting.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityPainting.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityPainting.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityPig.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityPig.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityPig.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityPig.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EntityPigZombie.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityPigZombie.java new file mode 100644 index 0000000..10f363a --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EntityPigZombie.java @@ -0,0 +1,206 @@ +package net.minecraft.server; + +import java.util.UUID; + +public class EntityPigZombie extends EntityZombie { + + private static final UUID b = UUID.fromString("49455A49-7EC5-45BA-B886-3B90B23A1718"); + private static final AttributeModifier c = (new AttributeModifier(EntityPigZombie.b, "Attacking speed boost", 0.05D, 0)).a(false); + public int angerLevel; + private int soundDelay; + private UUID hurtBy; + + public EntityPigZombie(World world) { + super(world); + this.fireProof = true; + } + + public void b(EntityLiving entityliving) { + super.b(entityliving); + if (entityliving != null) { + this.hurtBy = entityliving.getUniqueID(); + } + + } + + protected void n() { + this.targetSelector.a(1, new EntityPigZombie.PathfinderGoalAngerOther(this)); + this.targetSelector.a(2, new EntityPigZombie.PathfinderGoalAnger(this)); + } + + protected void initAttributes() { + super.initAttributes(); + this.getAttributeInstance(EntityPigZombie.a).setValue(0.0D); + this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).setValue(0.23000000417232513D); + this.getAttributeInstance(GenericAttributes.ATTACK_DAMAGE).setValue(5.0D); + } + + public void t_() { + super.t_(); + } + + protected void E() { + AttributeInstance attributeinstance = this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED); + + if (this.cm()) { + if (!this.isBaby() && !attributeinstance.a(EntityPigZombie.c)) { + attributeinstance.b(EntityPigZombie.c); + } + + --this.angerLevel; + } else if (attributeinstance.a(EntityPigZombie.c)) { + attributeinstance.c(EntityPigZombie.c); + } + + if (this.soundDelay > 0 && --this.soundDelay == 0) { + this.makeSound("mob.zombiepig.zpigangry", this.bB() * 2.0F, ((this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.0F) * 1.8F); + } + + if (this.angerLevel > 0 && this.hurtBy != null && this.getLastDamager() == null) { + EntityHuman entityhuman = this.world.b(this.hurtBy); + + this.b((EntityLiving) entityhuman); + this.killer = entityhuman; + this.lastDamageByPlayerTime = this.be(); + } + + super.E(); + } + + public boolean bR() { + return this.world.getDifficulty() != EnumDifficulty.PEACEFUL; + } + + public boolean canSpawn() { + return this.world.a(this.getBoundingBox(), (Entity) this) && this.world.getCubes(this, this.getBoundingBox()).isEmpty() && !this.world.containsLiquid(this.getBoundingBox()); + } + + public void b(NBTTagCompound nbttagcompound) { + super.b(nbttagcompound); + nbttagcompound.setShort("Anger", (short) this.angerLevel); + if (this.hurtBy != null) { + nbttagcompound.setString("HurtBy", this.hurtBy.toString()); + } else { + nbttagcompound.setString("HurtBy", ""); + } + + } + + public void a(NBTTagCompound nbttagcompound) { + super.a(nbttagcompound); + this.angerLevel = nbttagcompound.getShort("Anger"); + String s = nbttagcompound.getString("HurtBy"); + + if (s.length() > 0) { + this.hurtBy = UUID.fromString(s); + EntityHuman entityhuman = this.world.b(this.hurtBy); + + this.b((EntityLiving) entityhuman); + if (entityhuman != null) { + this.killer = entityhuman; + this.lastDamageByPlayerTime = this.be(); + } + } + + } + + public boolean damageEntity(DamageSource damagesource, float f) { + if (this.isInvulnerable(damagesource)) { + return false; + } else { + Entity entity = damagesource.getEntity(); + + if (entity instanceof EntityHuman) { + this.b(entity); + } + + return super.damageEntity(damagesource, f); + } + } + + private void b(Entity entity) { + this.angerLevel = 400 + this.random.nextInt(400); + this.soundDelay = this.random.nextInt(40); + if (entity instanceof EntityLiving) { + this.b((EntityLiving) entity); + } + + } + + public boolean cm() { + return this.angerLevel > 0; + } + + protected String z() { + return "mob.zombiepig.zpig"; + } + + protected String bo() { + return "mob.zombiepig.zpighurt"; + } + + protected String bp() { + return "mob.zombiepig.zpigdeath"; + } + + protected void dropDeathLoot(boolean flag, int i) { + int j = this.random.nextInt(2 + i); + + int k; + + for (k = 0; k < j; ++k) { + this.a(Items.ROTTEN_FLESH, 1); + } + + j = this.random.nextInt(2 + i); + + for (k = 0; k < j; ++k) { + this.a(Items.GOLD_NUGGET, 1); + } + + } + + public boolean a(EntityHuman entityhuman) { + return false; + } + + protected void getRareDrop() { + this.a(Items.GOLD_INGOT, 1); + } + + protected void a(DifficultyDamageScaler difficultydamagescaler) { + this.setEquipment(0, new ItemStack(Items.GOLDEN_SWORD)); + } + + public GroupDataEntity prepare(DifficultyDamageScaler difficultydamagescaler, GroupDataEntity groupdataentity) { + super.prepare(difficultydamagescaler, groupdataentity); + this.setVillager(false); + return groupdataentity; + } + + static class PathfinderGoalAnger extends PathfinderGoalNearestAttackableTarget { + + public PathfinderGoalAnger(EntityPigZombie entitypigzombie) { + super(entitypigzombie, EntityHuman.class, true); + } + + public boolean a() { + return ((EntityPigZombie) this.e).cm() && super.a(); + } + } + + static class PathfinderGoalAngerOther extends PathfinderGoalHurtByTarget { + + public PathfinderGoalAngerOther(EntityPigZombie entitypigzombie) { + super(entitypigzombie, true, new Class[0]); + } + + protected void a(EntityCreature entitycreature, EntityLiving entityliving) { + super.a(entitycreature, entityliving); + if (entitycreature instanceof EntityPigZombie) { + ((EntityPigZombie) entitycreature).b((Entity) entityliving); + } + + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityPlayer.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityPlayer.java similarity index 99% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityPlayer.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityPlayer.java index 2f15a6f..01f3ce4 100644 --- a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EntityPlayer.java @@ -218,7 +218,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { while (!this.removeQueue.isEmpty()) { int i = Math.min(this.removeQueue.size(), Integer.MAX_VALUE); int[] aint = new int[i]; - Iterator iterator = this.removeQueue.iterator(); + //Iterator iterator = this.removeQueue.iterator(); // PandaSpigot int j = 0; // Paper start diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EntityPositionTypes.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityPositionTypes.java new file mode 100644 index 0000000..9dbc596 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EntityPositionTypes.java @@ -0,0 +1,48 @@ +package net.minecraft.server; + +import com.google.common.collect.Maps; +import java.util.HashMap; + +public class EntityPositionTypes { + + private static final HashMap a = Maps.newHashMap(); + + public static EntityInsentient.EnumEntityPositionType a(Class oclass) { + return (EntityInsentient.EnumEntityPositionType) EntityPositionTypes.a.get(oclass); + } + + static { + EntityPositionTypes.a.put(EntityBat.class, EntityInsentient.EnumEntityPositionType.ON_GROUND); + EntityPositionTypes.a.put(EntityChicken.class, EntityInsentient.EnumEntityPositionType.ON_GROUND); + EntityPositionTypes.a.put(EntityCow.class, EntityInsentient.EnumEntityPositionType.ON_GROUND); + EntityPositionTypes.a.put(EntityHorse.class, EntityInsentient.EnumEntityPositionType.ON_GROUND); + EntityPositionTypes.a.put(EntityMushroomCow.class, EntityInsentient.EnumEntityPositionType.ON_GROUND); + EntityPositionTypes.a.put(EntityOcelot.class, EntityInsentient.EnumEntityPositionType.ON_GROUND); + EntityPositionTypes.a.put(EntityPig.class, EntityInsentient.EnumEntityPositionType.ON_GROUND); + EntityPositionTypes.a.put(EntityRabbit.class, EntityInsentient.EnumEntityPositionType.ON_GROUND); + EntityPositionTypes.a.put(EntitySheep.class, EntityInsentient.EnumEntityPositionType.ON_GROUND); + EntityPositionTypes.a.put(EntitySnowman.class, EntityInsentient.EnumEntityPositionType.ON_GROUND); + EntityPositionTypes.a.put(EntitySquid.class, EntityInsentient.EnumEntityPositionType.IN_WATER); + EntityPositionTypes.a.put(EntityIronGolem.class, EntityInsentient.EnumEntityPositionType.ON_GROUND); + EntityPositionTypes.a.put(EntityWolf.class, EntityInsentient.EnumEntityPositionType.ON_GROUND); + EntityPositionTypes.a.put(EntityVillager.class, EntityInsentient.EnumEntityPositionType.ON_GROUND); + EntityPositionTypes.a.put(EntityEnderDragon.class, EntityInsentient.EnumEntityPositionType.ON_GROUND); + EntityPositionTypes.a.put(EntityWither.class, EntityInsentient.EnumEntityPositionType.ON_GROUND); + EntityPositionTypes.a.put(EntityBlaze.class, EntityInsentient.EnumEntityPositionType.ON_GROUND); + EntityPositionTypes.a.put(EntityCaveSpider.class, EntityInsentient.EnumEntityPositionType.ON_GROUND); + EntityPositionTypes.a.put(EntityCreeper.class, EntityInsentient.EnumEntityPositionType.ON_GROUND); + EntityPositionTypes.a.put(EntityEnderman.class, EntityInsentient.EnumEntityPositionType.ON_GROUND); + EntityPositionTypes.a.put(EntityEndermite.class, EntityInsentient.EnumEntityPositionType.ON_GROUND); + EntityPositionTypes.a.put(EntityGhast.class, EntityInsentient.EnumEntityPositionType.ON_GROUND); + EntityPositionTypes.a.put(EntityGiantZombie.class, EntityInsentient.EnumEntityPositionType.ON_GROUND); + EntityPositionTypes.a.put(EntityGuardian.class, EntityInsentient.EnumEntityPositionType.IN_WATER); + EntityPositionTypes.a.put(EntityMagmaCube.class, EntityInsentient.EnumEntityPositionType.ON_GROUND); + EntityPositionTypes.a.put(EntityPigZombie.class, EntityInsentient.EnumEntityPositionType.ON_GROUND); + EntityPositionTypes.a.put(EntitySilverfish.class, EntityInsentient.EnumEntityPositionType.ON_GROUND); + EntityPositionTypes.a.put(EntitySkeleton.class, EntityInsentient.EnumEntityPositionType.ON_GROUND); + EntityPositionTypes.a.put(EntitySlime.class, EntityInsentient.EnumEntityPositionType.ON_GROUND); + EntityPositionTypes.a.put(EntitySpider.class, EntityInsentient.EnumEntityPositionType.ON_GROUND); + EntityPositionTypes.a.put(EntityWitch.class, EntityInsentient.EnumEntityPositionType.ON_GROUND); + EntityPositionTypes.a.put(EntityZombie.class, EntityInsentient.EnumEntityPositionType.ON_GROUND); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityPotion.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityPotion.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityPotion.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityPotion.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityProjectile.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityProjectile.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityProjectile.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityProjectile.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityRabbit.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityRabbit.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityRabbit.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityRabbit.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EntitySenses.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntitySenses.java new file mode 100644 index 0000000..141a1ef --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EntitySenses.java @@ -0,0 +1,40 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import java.util.List; + +public class EntitySenses { + + EntityInsentient a; + List b = Lists.newArrayList(); + List c = Lists.newArrayList(); + + public EntitySenses(EntityInsentient entityinsentient) { + this.a = entityinsentient; + } + + public void a() { + this.b.clear(); + this.c.clear(); + } + + public boolean a(Entity entity) { + if (this.b.contains(entity)) { + return true; + } else if (this.c.contains(entity)) { + return false; + } else { + this.a.world.methodProfiler.a("canSee"); + boolean flag = this.a.hasLineOfSight(entity); + + this.a.world.methodProfiler.b(); + if (flag) { + this.b.add(entity); + } else { + this.c.add(entity); + } + + return flag; + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntitySheep.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntitySheep.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntitySheep.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntitySheep.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntitySilverfish.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntitySilverfish.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntitySilverfish.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntitySilverfish.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntitySkeleton.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntitySkeleton.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntitySkeleton.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntitySkeleton.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntitySlice.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntitySlice.java similarity index 91% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntitySlice.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntitySlice.java index cd678d9..b56b3d0 100644 --- a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntitySlice.java +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EntitySlice.java @@ -4,11 +4,8 @@ import com.google.common.collect.Iterators; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; -import java.util.AbstractSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; + +import java.util.*; public class EntitySlice extends AbstractSet { @@ -106,7 +103,7 @@ public class EntitySlice extends AbstractSet { List list = EntitySlice.this.b.get(EntitySlice.this.b(oclass)); if (list == null) { - return Iterators.emptyIterator(); + return Collections.emptyIterator(); } else { Iterator iterator = list.iterator(); @@ -116,7 +113,7 @@ public class EntitySlice extends AbstractSet { } public Iterator iterator() { - return this.e.isEmpty() ? Iterators.emptyIterator() : Iterators.unmodifiableIterator(this.e.iterator()); + return this.e.isEmpty() ? Collections.emptyIterator() : Iterators.unmodifiableIterator(this.e.iterator()); } public int size() { diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntitySlime.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntitySlime.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntitySlime.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntitySlime.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntitySmallFireball.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntitySmallFireball.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntitySmallFireball.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntitySmallFireball.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EntitySnowball.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntitySnowball.java new file mode 100644 index 0000000..dade83b --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EntitySnowball.java @@ -0,0 +1,37 @@ +package net.minecraft.server; + +public class EntitySnowball extends EntityProjectile { + + public EntitySnowball(World world) { + super(world); + } + + public EntitySnowball(World world, EntityLiving entityliving) { + super(world, entityliving); + } + + public EntitySnowball(World world, double d0, double d1, double d2) { + super(world, d0, d1, d2); + } + + protected void a(MovingObjectPosition movingobjectposition) { + if (movingobjectposition.entity != null) { + byte b0 = 0; + + if (movingobjectposition.entity instanceof EntityBlaze) { + b0 = 3; + } + + movingobjectposition.entity.damageEntity(DamageSource.projectile(this, this.getShooter()), (float) b0); + } + + for (int i = 0; i < 8; ++i) { + this.world.addParticle(EnumParticle.SNOWBALL, this.locX, this.locY, this.locZ, 0.0D, 0.0D, 0.0D, new int[0]); + } + + if (!this.world.isClientSide) { + this.die(); + } + + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntitySnowman.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntitySnowman.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntitySnowman.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntitySnowman.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntitySpider.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntitySpider.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntitySpider.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntitySpider.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntitySquid.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntitySquid.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntitySquid.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntitySquid.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityTNTPrimed.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityTNTPrimed.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityTNTPrimed.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityTNTPrimed.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EntityTameableAnimal.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityTameableAnimal.java new file mode 100644 index 0000000..1cc087d --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EntityTameableAnimal.java @@ -0,0 +1,167 @@ +package net.minecraft.server; + +import java.util.UUID; + +public abstract class EntityTameableAnimal extends EntityAnimal implements EntityOwnable { + + protected PathfinderGoalSit bm = new PathfinderGoalSit(this); + + public EntityTameableAnimal(World world) { + super(world); + this.cm(); + } + + protected void h() { + super.h(); + this.datawatcher.a(16, Byte.valueOf((byte) 0)); + this.datawatcher.a(17, ""); + } + + public void b(NBTTagCompound nbttagcompound) { + super.b(nbttagcompound); + if (this.getOwnerUUID() == null) { + nbttagcompound.setString("OwnerUUID", ""); + } else { + nbttagcompound.setString("OwnerUUID", this.getOwnerUUID()); + } + + nbttagcompound.setBoolean("Sitting", this.isSitting()); + } + + public void a(NBTTagCompound nbttagcompound) { + super.a(nbttagcompound); + String s = ""; + + if (nbttagcompound.hasKeyOfType("OwnerUUID", 8)) { + s = nbttagcompound.getString("OwnerUUID"); + } else { + String s1 = nbttagcompound.getString("Owner"); + + s = NameReferencingFileConverter.a(s1); + } + + if (s.length() > 0) { + this.setOwnerUUID(s); + this.setTamed(true); + } + + this.bm.setSitting(nbttagcompound.getBoolean("Sitting")); + this.setSitting(nbttagcompound.getBoolean("Sitting")); + } + + protected void l(boolean flag) { + EnumParticle enumparticle = EnumParticle.HEART; + + if (!flag) { + enumparticle = EnumParticle.SMOKE_NORMAL; + } + + for (int i = 0; i < 7; ++i) { + double d0 = this.random.nextGaussian() * 0.02D; + double d1 = this.random.nextGaussian() * 0.02D; + double d2 = this.random.nextGaussian() * 0.02D; + + this.world.addParticle(enumparticle, this.locX + (double) (this.random.nextFloat() * this.width * 2.0F) - (double) this.width, this.locY + 0.5D + (double) (this.random.nextFloat() * this.length), this.locZ + (double) (this.random.nextFloat() * this.width * 2.0F) - (double) this.width, d0, d1, d2, new int[0]); + } + + } + + public boolean isTamed() { + return (this.datawatcher.getByte(16) & 4) != 0; + } + + public void setTamed(boolean flag) { + byte b0 = this.datawatcher.getByte(16); + + if (flag) { + this.datawatcher.watch(16, Byte.valueOf((byte) (b0 | 4))); + } else { + this.datawatcher.watch(16, Byte.valueOf((byte) (b0 & -5))); + } + + this.cm(); + } + + protected void cm() {} + + public boolean isSitting() { + return (this.datawatcher.getByte(16) & 1) != 0; + } + + public void setSitting(boolean flag) { + byte b0 = this.datawatcher.getByte(16); + + if (flag) { + this.datawatcher.watch(16, Byte.valueOf((byte) (b0 | 1))); + } else { + this.datawatcher.watch(16, Byte.valueOf((byte) (b0 & -2))); + } + + } + + public String getOwnerUUID() { + return this.datawatcher.getString(17); + } + + public void setOwnerUUID(String s) { + this.datawatcher.watch(17, s); + } + + public EntityLiving getOwner() { + try { + UUID uuid = UUID.fromString(this.getOwnerUUID()); + + return uuid == null ? null : this.world.b(uuid); + } catch (IllegalArgumentException illegalargumentexception) { + return null; + } + } + + public boolean e(EntityLiving entityliving) { + return entityliving == this.getOwner(); + } + + public PathfinderGoalSit getGoalSit() { + return this.bm; + } + + public boolean a(EntityLiving entityliving, EntityLiving entityliving1) { + return true; + } + + public ScoreboardTeamBase getScoreboardTeam() { + if (this.isTamed()) { + EntityLiving entityliving = this.getOwner(); + + if (entityliving != null) { + return entityliving.getScoreboardTeam(); + } + } + + return super.getScoreboardTeam(); + } + + public boolean c(EntityLiving entityliving) { + if (this.isTamed()) { + EntityLiving entityliving1 = this.getOwner(); + + if (entityliving == entityliving1) { + return true; + } + + if (entityliving1 != null) { + return entityliving1.c(entityliving); + } + } + + return super.c(entityliving); + } + + public void die(DamageSource damagesource) { + if (!this.world.isClientSide && this.world.getGameRules().getBoolean("showDeathMessages") && this.hasCustomName() && this.getOwner() instanceof EntityPlayer) { + ((EntityPlayer) this.getOwner()).sendMessage(this.bs().b()); + } + + super.die(damagesource); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityThrownExpBottle.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityThrownExpBottle.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityThrownExpBottle.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityThrownExpBottle.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityTracker.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityTracker.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityTracker.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityTracker.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityTrackerEntry.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityTrackerEntry.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityTrackerEntry.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityTrackerEntry.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EntityTypes.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityTypes.java new file mode 100644 index 0000000..064d0b2 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EntityTypes.java @@ -0,0 +1,244 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class EntityTypes { + + private static final Logger b = LogManager.getLogger(); + private static final Map> c = Maps.newHashMap(); + private static final Map, String> d = Maps.newHashMap(); + private static final Map> e = Maps.newHashMap(); + private static final Map, Integer> f = Maps.newHashMap(); + private static final Map g = Maps.newHashMap(); + public static final Map eggInfo = Maps.newLinkedHashMap(); + + private static void a(Class oclass, String s, int i) { + if (EntityTypes.c.containsKey(s)) { + throw new IllegalArgumentException("ID is already registered: " + s); + } else if (EntityTypes.e.containsKey(Integer.valueOf(i))) { + throw new IllegalArgumentException("ID is already registered: " + i); + } else if (i == 0) { + throw new IllegalArgumentException("Cannot register to reserved id: " + i); + } else if (oclass == null) { + throw new IllegalArgumentException("Cannot register null clazz for id: " + i); + } else { + EntityTypes.c.put(s, oclass); + EntityTypes.d.put(oclass, s); + EntityTypes.e.put(Integer.valueOf(i), oclass); + EntityTypes.f.put(oclass, Integer.valueOf(i)); + EntityTypes.g.put(s, Integer.valueOf(i)); + } + } + + private static void a(Class oclass, String s, int i, int j, int k) { + a(oclass, s, i); + EntityTypes.eggInfo.put(Integer.valueOf(i), new EntityTypes.MonsterEggInfo(i, j, k)); + } + + public static Entity createEntityByName(String s, World world) { + Entity entity = null; + + try { + Class oclass = (Class) EntityTypes.c.get(s); + + if (oclass != null) { + entity = (Entity) oclass.getConstructor(new Class[] { World.class}).newInstance(new Object[] { world}); + } + } catch (Exception exception) { + exception.printStackTrace(); + } + + return entity; + } + + public static Entity a(NBTTagCompound nbttagcompound, World world) { + Entity entity = null; + + if ("Minecart".equals(nbttagcompound.getString("id"))) { + nbttagcompound.setString("id", EntityMinecartAbstract.EnumMinecartType.a(nbttagcompound.getInt("Type")).b()); + nbttagcompound.remove("Type"); + } + + try { + Class oclass = (Class) EntityTypes.c.get(nbttagcompound.getString("id")); + + if (oclass != null) { + entity = (Entity) oclass.getConstructor(new Class[] { World.class}).newInstance(new Object[] { world}); + } + } catch (Exception exception) { + exception.printStackTrace(); + } + + if (entity != null) { + entity.f(nbttagcompound); + } else { + EntityTypes.b.warn("Skipping Entity with id " + nbttagcompound.getString("id")); + } + + return entity; + } + + public static Entity a(int i, World world) { + Entity entity = null; + + try { + Class oclass = a(i); + + if (oclass != null) { + entity = (Entity) oclass.getConstructor(new Class[] { World.class}).newInstance(new Object[] { world}); + } + } catch (Exception exception) { + exception.printStackTrace(); + } + + if (entity == null) { + EntityTypes.b.warn("Skipping Entity with id " + i); + } + + return entity; + } + + public static int a(Entity entity) { + Integer integer = (Integer) EntityTypes.f.get(entity.getClass()); + + return integer == null ? 0 : integer.intValue(); + } + + public static Class a(int i) { + return (Class) EntityTypes.e.get(Integer.valueOf(i)); + } + + public static String b(Entity entity) { + return (String) EntityTypes.d.get(entity.getClass()); + } + + public static String b(int i) { + return (String) EntityTypes.d.get(a(i)); + } + + public static void a() {} + + public static List b() { + Set set = EntityTypes.c.keySet(); + ArrayList arraylist = Lists.newArrayList(); + Iterator iterator = set.iterator(); + + while (iterator.hasNext()) { + String s = (String) iterator.next(); + Class oclass = (Class) EntityTypes.c.get(s); + + if ((oclass.getModifiers() & 1024) != 1024) { + arraylist.add(s); + } + } + + arraylist.add("LightningBolt"); + return arraylist; + } + + public static boolean a(Entity entity, String s) { + String s1 = b(entity); + + if (s1 == null && entity instanceof EntityHuman) { + s1 = "Player"; + } else if (s1 == null && entity instanceof EntityLightning) { + s1 = "LightningBolt"; + } + + return s.equals(s1); + } + + public static boolean b(String s) { + return "Player".equals(s) || b().contains(s); + } + + static { + a(EntityItem.class, "Item", 1); + a(EntityExperienceOrb.class, "XPOrb", 2); + a(EntityEgg.class, "ThrownEgg", 7); + a(EntityLeash.class, "LeashKnot", 8); + a(EntityPainting.class, "Painting", 9); + a(EntityArrow.class, "Arrow", 10); + a(EntitySnowball.class, "Snowball", 11); + a(EntityLargeFireball.class, "Fireball", 12); + a(EntitySmallFireball.class, "SmallFireball", 13); + a(EntityEnderPearl.class, "ThrownEnderpearl", 14); + a(EntityEnderSignal.class, "EyeOfEnderSignal", 15); + a(EntityPotion.class, "ThrownPotion", 16); + a(EntityThrownExpBottle.class, "ThrownExpBottle", 17); + a(EntityItemFrame.class, "ItemFrame", 18); + a(EntityWitherSkull.class, "WitherSkull", 19); + a(EntityTNTPrimed.class, "PrimedTnt", 20); + a(EntityFallingBlock.class, "FallingSand", 21); + a(EntityFireworks.class, "FireworksRocketEntity", 22); + a(EntityArmorStand.class, "ArmorStand", 30); + a(EntityBoat.class, "Boat", 41); + a(EntityMinecartRideable.class, EntityMinecartAbstract.EnumMinecartType.RIDEABLE.b(), 42); + a(EntityMinecartChest.class, EntityMinecartAbstract.EnumMinecartType.CHEST.b(), 43); + a(EntityMinecartFurnace.class, EntityMinecartAbstract.EnumMinecartType.FURNACE.b(), 44); + a(EntityMinecartTNT.class, EntityMinecartAbstract.EnumMinecartType.TNT.b(), 45); + a(EntityMinecartHopper.class, EntityMinecartAbstract.EnumMinecartType.HOPPER.b(), 46); + a(EntityMinecartMobSpawner.class, EntityMinecartAbstract.EnumMinecartType.SPAWNER.b(), 47); + a(EntityMinecartCommandBlock.class, EntityMinecartAbstract.EnumMinecartType.COMMAND_BLOCK.b(), 40); + a(EntityInsentient.class, "Mob", 48); + a(EntityMonster.class, "Monster", 49); + a(EntityCreeper.class, "Creeper", 50, 894731, 0); + a(EntitySkeleton.class, "Skeleton", 51, 12698049, 4802889); + a(EntitySpider.class, "Spider", 52, 3419431, 11013646); + a(EntityGiantZombie.class, "Giant", 53); + a(EntityZombie.class, "Zombie", 54, '\uafaf', 7969893); + a(EntitySlime.class, "Slime", 55, 5349438, 8306542); + a(EntityGhast.class, "Ghast", 56, 16382457, 12369084); + a(EntityPigZombie.class, "PigZombie", 57, 15373203, 5009705); + a(EntityEnderman.class, "Enderman", 58, 1447446, 0); + a(EntityCaveSpider.class, "CaveSpider", 59, 803406, 11013646); + a(EntitySilverfish.class, "Silverfish", 60, 7237230, 3158064); + a(EntityBlaze.class, "Blaze", 61, 16167425, 16775294); + a(EntityMagmaCube.class, "LavaSlime", 62, 3407872, 16579584); + a(EntityEnderDragon.class, "EnderDragon", 63); + a(EntityWither.class, "WitherBoss", 64); + a(EntityBat.class, "Bat", 65, 4996656, 986895); + a(EntityWitch.class, "Witch", 66, 3407872, 5349438); + a(EntityEndermite.class, "Endermite", 67, 1447446, 7237230); + a(EntityGuardian.class, "Guardian", 68, 5931634, 15826224); + a(EntityPig.class, "Pig", 90, 15771042, 14377823); + a(EntitySheep.class, "Sheep", 91, 15198183, 16758197); + a(EntityCow.class, "Cow", 92, 4470310, 10592673); + a(EntityChicken.class, "Chicken", 93, 10592673, 16711680); + a(EntitySquid.class, "Squid", 94, 2243405, 7375001); + a(EntityWolf.class, "Wolf", 95, 14144467, 13545366); + a(EntityMushroomCow.class, "MushroomCow", 96, 10489616, 12040119); + a(EntitySnowman.class, "SnowMan", 97); + a(EntityOcelot.class, "Ozelot", 98, 15720061, 5653556); + a(EntityIronGolem.class, "VillagerGolem", 99); + a(EntityHorse.class, "EntityHorse", 100, 12623485, 15656192); + a(EntityRabbit.class, "Rabbit", 101, 10051392, 7555121); + a(EntityVillager.class, "Villager", 120, 5651507, 12422002); + a(EntityEnderCrystal.class, "EnderCrystal", 200); + } + + public static class MonsterEggInfo { + + public final int a; + public final int b; + public final int c; + public final Statistic killEntityStatistic; + public final Statistic e; + + public MonsterEggInfo(int i, int j, int k) { + this.a = i; + this.b = j; + this.c = k; + this.killEntityStatistic = StatisticList.a(this); + this.e = StatisticList.b(this); + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityVillager.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityVillager.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityVillager.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityVillager.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EntityWaterAnimal.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityWaterAnimal.java new file mode 100644 index 0000000..0337aba --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EntityWaterAnimal.java @@ -0,0 +1,53 @@ +package net.minecraft.server; + +public abstract class EntityWaterAnimal extends EntityInsentient implements IAnimal { + + public EntityWaterAnimal(World world) { + super(world); + } + + public boolean aY() { + return true; + } + + public boolean bR() { + return true; + } + + public boolean canSpawn() { + return this.world.a(this.getBoundingBox(), (Entity) this); + } + + public int w() { + return 120; + } + + protected boolean isTypeNotPersistent() { + return true; + } + + protected int getExpValue(EntityHuman entityhuman) { + return 1 + this.world.random.nextInt(3); + } + + public void K() { + int i = this.getAirTicks(); + + super.K(); + if (this.isAlive() && !this.V()) { + --i; + this.setAirTicks(i); + if (this.getAirTicks() == -20) { + this.setAirTicks(0); + this.damageEntity(DamageSource.DROWN, 2.0F); + } + } else { + this.setAirTicks(300); + } + + } + + public boolean aL() { + return false; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EntityWeather.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityWeather.java new file mode 100644 index 0000000..03ff54c --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EntityWeather.java @@ -0,0 +1,8 @@ +package net.minecraft.server; + +public abstract class EntityWeather extends Entity { + + public EntityWeather(World world) { + super(world); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EntityWitch.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityWitch.java new file mode 100644 index 0000000..d59d779 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EntityWitch.java @@ -0,0 +1,173 @@ +package net.minecraft.server; + +import java.util.Iterator; +import java.util.List; +import java.util.UUID; + +public class EntityWitch extends EntityMonster implements IRangedEntity { + + private static final UUID a = UUID.fromString("5CD17E52-A79A-43D3-A529-90FDE04B181E"); + private static final AttributeModifier b = (new AttributeModifier(EntityWitch.a, "Drinking speed penalty", -0.25D, 0)).a(false); + private static final Item[] c = new Item[] { Items.GLOWSTONE_DUST, Items.SUGAR, Items.REDSTONE, Items.SPIDER_EYE, Items.GLASS_BOTTLE, Items.GUNPOWDER, Items.STICK, Items.STICK}; + private int bm; + + public EntityWitch(World world) { + super(world); + this.setSize(0.6F, 1.95F); + this.goalSelector.a(1, new PathfinderGoalFloat(this)); + this.goalSelector.a(2, new PathfinderGoalArrowAttack(this, 1.0D, 60, 10.0F)); + this.goalSelector.a(2, new PathfinderGoalRandomStroll(this, 1.0D)); + this.goalSelector.a(3, new PathfinderGoalLookAtPlayer(this, EntityHuman.class, 8.0F)); + this.goalSelector.a(3, new PathfinderGoalRandomLookaround(this)); + this.targetSelector.a(1, new PathfinderGoalHurtByTarget(this, false, new Class[0])); + this.targetSelector.a(2, new PathfinderGoalNearestAttackableTarget(this, EntityHuman.class, true)); + } + + protected void h() { + super.h(); + this.getDataWatcher().a(21, Byte.valueOf((byte) 0)); + } + + protected String z() { + return null; + } + + protected String bo() { + return null; + } + + protected String bp() { + return null; + } + + public void a(boolean flag) { + this.getDataWatcher().watch(21, Byte.valueOf((byte) (flag ? 1 : 0))); + } + + public boolean n() { + return this.getDataWatcher().getByte(21) == 1; + } + + protected void initAttributes() { + super.initAttributes(); + this.getAttributeInstance(GenericAttributes.maxHealth).setValue(26.0D); + this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).setValue(0.25D); + } + + public void m() { + if (!this.world.isClientSide) { + if (this.n()) { + if (this.bm-- <= 0) { + this.a(false); + ItemStack itemstack = this.bA(); + + this.setEquipment(0, (ItemStack) null); + if (itemstack != null && itemstack.getItem() == Items.POTION) { + List list = Items.POTION.h(itemstack); + + if (list != null) { + Iterator iterator = list.iterator(); + + while (iterator.hasNext()) { + MobEffect mobeffect = (MobEffect) iterator.next(); + + this.addEffect(new MobEffect(mobeffect)); + } + } + } + + this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).c(EntityWitch.b); + } + } else { + short short0 = -1; + + if (this.random.nextFloat() < 0.15F && this.a(Material.WATER) && !this.hasEffect(MobEffectList.WATER_BREATHING)) { + short0 = 8237; + } else if (this.random.nextFloat() < 0.15F && this.isBurning() && !this.hasEffect(MobEffectList.FIRE_RESISTANCE)) { + short0 = 16307; + } else if (this.random.nextFloat() < 0.05F && this.getHealth() < this.getMaxHealth()) { + short0 = 16341; + } else if (this.random.nextFloat() < 0.25F && this.getGoalTarget() != null && !this.hasEffect(MobEffectList.FASTER_MOVEMENT) && this.getGoalTarget().h(this) > 121.0D) { + short0 = 16274; + } else if (this.random.nextFloat() < 0.25F && this.getGoalTarget() != null && !this.hasEffect(MobEffectList.FASTER_MOVEMENT) && this.getGoalTarget().h(this) > 121.0D) { + short0 = 16274; + } + + if (short0 > -1) { + this.setEquipment(0, new ItemStack(Items.POTION, 1, short0)); + this.bm = this.bA().l(); + this.a(true); + AttributeInstance attributeinstance = this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED); + + attributeinstance.c(EntityWitch.b); + attributeinstance.b(EntityWitch.b); + } + } + + if (this.random.nextFloat() < 7.5E-4F) { + this.world.broadcastEntityEffect(this, (byte) 15); + } + } + + super.m(); + } + + protected float applyMagicModifier(DamageSource damagesource, float f) { + f = super.applyMagicModifier(damagesource, f); + if (damagesource.getEntity() == this) { + f = 0.0F; + } + + if (damagesource.isMagic()) { + f = (float) ((double) f * 0.15D); + } + + return f; + } + + protected void dropDeathLoot(boolean flag, int i) { + int j = this.random.nextInt(3) + 1; + + for (int k = 0; k < j; ++k) { + int l = this.random.nextInt(3); + Item item = EntityWitch.c[this.random.nextInt(EntityWitch.c.length)]; + + if (i > 0) { + l += this.random.nextInt(i + 1); + } + + for (int i1 = 0; i1 < l; ++i1) { + this.a(item, 1); + } + } + + } + + public void a(EntityLiving entityliving, float f) { + if (!this.n()) { + EntityPotion entitypotion = new EntityPotion(this.world, this, 32732); + double d0 = entityliving.locY + (double) entityliving.getHeadHeight() - 1.100000023841858D; + + entitypotion.pitch -= -20.0F; + double d1 = entityliving.locX + entityliving.motX - this.locX; + double d2 = d0 - this.locY; + double d3 = entityliving.locZ + entityliving.motZ - this.locZ; + float f1 = MathHelper.sqrt(d1 * d1 + d3 * d3); + + if (f1 >= 8.0F && !entityliving.hasEffect(MobEffectList.SLOWER_MOVEMENT)) { + entitypotion.setPotionValue(32698); + } else if (entityliving.getHealth() >= 8.0F && !entityliving.hasEffect(MobEffectList.POISON)) { + entitypotion.setPotionValue(32660); + } else if (f1 <= 3.0F && !entityliving.hasEffect(MobEffectList.WEAKNESS) && this.random.nextFloat() < 0.25F) { + entitypotion.setPotionValue(32696); + } + + entitypotion.shoot(d1, d2 + (double) (f1 * 0.2F), d3, 0.75F, 8.0F); + this.world.addEntity(entitypotion); + } + } + + public float getHeadHeight() { + return 1.62F; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityWither.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityWither.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityWither.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityWither.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityWitherSkull.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityWitherSkull.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityWitherSkull.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityWitherSkull.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityWolf.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityWolf.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityWolf.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityWolf.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/EntityZombie.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityZombie.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/EntityZombie.java rename to eSpigot-Server/src/main/java/net/minecraft/server/EntityZombie.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EnumAnimation.java b/eSpigot-Server/src/main/java/net/minecraft/server/EnumAnimation.java new file mode 100644 index 0000000..8c0088a --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EnumAnimation.java @@ -0,0 +1,8 @@ +package net.minecraft.server; + +public enum EnumAnimation { + + NONE, EAT, DRINK, BLOCK, BOW; + + private EnumAnimation() {} +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EnumChatFormat.java b/eSpigot-Server/src/main/java/net/minecraft/server/EnumChatFormat.java new file mode 100644 index 0000000..f0382a5 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EnumChatFormat.java @@ -0,0 +1,116 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Map; +import java.util.regex.Pattern; + +public enum EnumChatFormat { + + BLACK("BLACK", '0', 0), DARK_BLUE("DARK_BLUE", '1', 1), DARK_GREEN("DARK_GREEN", '2', 2), DARK_AQUA("DARK_AQUA", '3', 3), DARK_RED("DARK_RED", '4', 4), DARK_PURPLE("DARK_PURPLE", '5', 5), GOLD("GOLD", '6', 6), GRAY("GRAY", '7', 7), DARK_GRAY("DARK_GRAY", '8', 8), BLUE("BLUE", '9', 9), GREEN("GREEN", 'a', 10), AQUA("AQUA", 'b', 11), RED("RED", 'c', 12), LIGHT_PURPLE("LIGHT_PURPLE", 'd', 13), YELLOW("YELLOW", 'e', 14), WHITE("WHITE", 'f', 15), OBFUSCATED("OBFUSCATED", 'k', true), BOLD("BOLD", 'l', true), STRIKETHROUGH("STRIKETHROUGH", 'm', true), UNDERLINE("UNDERLINE", 'n', true), ITALIC("ITALIC", 'o', true), RESET("RESET", 'r', -1); + + private static final Map w = Maps.newHashMap(); + private static final Pattern x = Pattern.compile("(?i)" + String.valueOf('\u00a7') + "[0-9A-FK-OR]"); + private final String y; + private final char z; + private final boolean A; + private final String B; + private final int C; + + private static String c(String s) { + return s.toLowerCase().replaceAll("[^a-z]", ""); + } + + private EnumChatFormat(String s, char c0, int i) { + this(s, c0, false, i); + } + + private EnumChatFormat(String s, char c0, boolean flag) { + this(s, c0, flag, -1); + } + + private EnumChatFormat(String s, char c0, boolean flag, int i) { + this.y = s; + this.z = c0; + this.A = flag; + this.C = i; + this.B = "\u00a7" + c0; + } + + public int b() { + return this.C; + } + + public boolean isFormat() { + return this.A; + } + + public boolean d() { + return !this.A && this != EnumChatFormat.RESET; + } + + public String e() { + return this.name().toLowerCase(); + } + + public String toString() { + return this.B; + } + + public static String a(String s) { + return s == null ? null : EnumChatFormat.x.matcher(s).replaceAll(""); + } + + public static EnumChatFormat b(String s) { + return s == null ? null : (EnumChatFormat) EnumChatFormat.w.get(c(s)); + } + + public static EnumChatFormat a(int i) { + if (i < 0) { + return EnumChatFormat.RESET; + } else { + EnumChatFormat[] aenumchatformat = values(); + int j = aenumchatformat.length; + + for (int k = 0; k < j; ++k) { + EnumChatFormat enumchatformat = aenumchatformat[k]; + + if (enumchatformat.b() == i) { + return enumchatformat; + } + } + + return null; + } + } + + public static Collection a(boolean flag, boolean flag1) { + ArrayList arraylist = Lists.newArrayList(); + EnumChatFormat[] aenumchatformat = values(); + int i = aenumchatformat.length; + + for (int j = 0; j < i; ++j) { + EnumChatFormat enumchatformat = aenumchatformat[j]; + + if ((!enumchatformat.d() || flag) && (!enumchatformat.isFormat() || flag1)) { + arraylist.add(enumchatformat.e()); + } + } + + return arraylist; + } + + static { + EnumChatFormat[] aenumchatformat = values(); + int i = aenumchatformat.length; + + for (int j = 0; j < i; ++j) { + EnumChatFormat enumchatformat = aenumchatformat[j]; + + EnumChatFormat.w.put(c(enumchatformat.y), enumchatformat); + } + + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EnumColor.java b/eSpigot-Server/src/main/java/net/minecraft/server/EnumColor.java new file mode 100644 index 0000000..2bdaa0b --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EnumColor.java @@ -0,0 +1,77 @@ +package net.minecraft.server; + +public enum EnumColor implements INamable { + + WHITE(0, 15, "white", "white", MaterialMapColor.j, EnumChatFormat.WHITE), ORANGE(1, 14, "orange", "orange", MaterialMapColor.q, EnumChatFormat.GOLD), MAGENTA(2, 13, "magenta", "magenta", MaterialMapColor.r, EnumChatFormat.AQUA), LIGHT_BLUE(3, 12, "light_blue", "lightBlue", MaterialMapColor.s, EnumChatFormat.BLUE), YELLOW(4, 11, "yellow", "yellow", MaterialMapColor.t, EnumChatFormat.YELLOW), LIME(5, 10, "lime", "lime", MaterialMapColor.u, EnumChatFormat.GREEN), PINK(6, 9, "pink", "pink", MaterialMapColor.v, EnumChatFormat.LIGHT_PURPLE), GRAY(7, 8, "gray", "gray", MaterialMapColor.w, EnumChatFormat.DARK_GRAY), SILVER(8, 7, "silver", "silver", MaterialMapColor.x, EnumChatFormat.GRAY), CYAN(9, 6, "cyan", "cyan", MaterialMapColor.y, EnumChatFormat.DARK_AQUA), PURPLE(10, 5, "purple", "purple", MaterialMapColor.z, EnumChatFormat.DARK_PURPLE), BLUE(11, 4, "blue", "blue", MaterialMapColor.A, EnumChatFormat.DARK_BLUE), BROWN(12, 3, "brown", "brown", MaterialMapColor.B, EnumChatFormat.GOLD), GREEN(13, 2, "green", "green", MaterialMapColor.C, EnumChatFormat.DARK_GREEN), RED(14, 1, "red", "red", MaterialMapColor.D, EnumChatFormat.DARK_RED), BLACK(15, 0, "black", "black", MaterialMapColor.E, EnumChatFormat.BLACK); + + private static final EnumColor[] q = new EnumColor[values().length]; + private static final EnumColor[] r = new EnumColor[values().length]; + private final int s; + private final int t; + private final String u; + private final String v; + private final MaterialMapColor w; + private final EnumChatFormat x; + + private EnumColor(int i, int j, String s, String s1, MaterialMapColor materialmapcolor, EnumChatFormat enumchatformat) { + this.s = i; + this.t = j; + this.u = s; + this.v = s1; + this.w = materialmapcolor; + this.x = enumchatformat; + } + + public int getColorIndex() { + return this.s; + } + + public int getInvColorIndex() { + return this.t; + } + + public String d() { + return this.v; + } + + public MaterialMapColor e() { + return this.w; + } + + public static EnumColor fromInvColorIndex(int i) { + if (i < 0 || i >= EnumColor.r.length) { + i = 0; + } + + return EnumColor.r[i]; + } + + public static EnumColor fromColorIndex(int i) { + if (i < 0 || i >= EnumColor.q.length) { + i = 0; + } + + return EnumColor.q[i]; + } + + public String toString() { + return this.v; + } + + public String getName() { + return this.u; + } + + static { + EnumColor[] aenumcolor = values(); + int i = aenumcolor.length; + + for (int j = 0; j < i; ++j) { + EnumColor enumcolor = aenumcolor[j]; + + EnumColor.q[enumcolor.getColorIndex()] = enumcolor; + EnumColor.r[enumcolor.getInvColorIndex()] = enumcolor; + } + + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EnumCreatureType.java b/eSpigot-Server/src/main/java/net/minecraft/server/EnumCreatureType.java new file mode 100644 index 0000000..18d6f3a --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EnumCreatureType.java @@ -0,0 +1,36 @@ +package net.minecraft.server; + +public enum EnumCreatureType { + + MONSTER(IMonster.class, 70, Material.AIR, false, false), CREATURE(EntityAnimal.class, 10, Material.AIR, true, true), AMBIENT(EntityAmbient.class, 15, Material.AIR, true, false), WATER_CREATURE(EntityWaterAnimal.class, 5, Material.WATER, true, false); + + private final Class e; + private final int f; + private final Material g; + private final boolean h; + private final boolean i; + + EnumCreatureType(Class oclass, int i, Material material, boolean flag, boolean flag1) { + this.e = oclass; + this.f = i; + this.g = material; + this.h = flag; + this.i = flag1; + } + + public Class a() { + return this.e; + } + + public int b() { + return this.f; + } + + public boolean d() { + return this.h; + } + + public boolean e() { + return this.i; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EnumDifficulty.java b/eSpigot-Server/src/main/java/net/minecraft/server/EnumDifficulty.java new file mode 100644 index 0000000..7671000 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EnumDifficulty.java @@ -0,0 +1,39 @@ +package net.minecraft.server; + +public enum EnumDifficulty { + + PEACEFUL(0, "options.difficulty.peaceful"), EASY(1, "options.difficulty.easy"), NORMAL(2, "options.difficulty.normal"), HARD(3, "options.difficulty.hard"); + + private static final EnumDifficulty[] e = new EnumDifficulty[values().length]; + private final int f; + private final String g; + + private EnumDifficulty(int i, String s) { + this.f = i; + this.g = s; + } + + public int a() { + return this.f; + } + + public static EnumDifficulty getById(int i) { + return EnumDifficulty.e[i % EnumDifficulty.e.length]; + } + + public String b() { + return this.g; + } + + static { + EnumDifficulty[] aenumdifficulty = values(); + int i = aenumdifficulty.length; + + for (int j = 0; j < i; ++j) { + EnumDifficulty enumdifficulty = aenumdifficulty[j]; + + EnumDifficulty.e[enumdifficulty.f] = enumdifficulty; + } + + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EnumDirection.java b/eSpigot-Server/src/main/java/net/minecraft/server/EnumDirection.java new file mode 100644 index 0000000..938769b --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EnumDirection.java @@ -0,0 +1,361 @@ +package net.minecraft.server; + +import com.google.common.base.Predicate; +import com.google.common.collect.Iterators; +import com.google.common.collect.Maps; +import java.util.Iterator; +import java.util.Map; +import java.util.Random; + +public enum EnumDirection implements INamable { + + DOWN(0, 1, -1, "down", EnumDirection.EnumAxisDirection.NEGATIVE, EnumDirection.EnumAxis.Y, new BaseBlockPosition(0, -1, 0)), UP(1, 0, -1, "up", EnumDirection.EnumAxisDirection.POSITIVE, EnumDirection.EnumAxis.Y, new BaseBlockPosition(0, 1, 0)), NORTH(2, 3, 2, "north", EnumDirection.EnumAxisDirection.NEGATIVE, EnumDirection.EnumAxis.Z, new BaseBlockPosition(0, 0, -1)), SOUTH(3, 2, 0, "south", EnumDirection.EnumAxisDirection.POSITIVE, EnumDirection.EnumAxis.Z, new BaseBlockPosition(0, 0, 1)), WEST(4, 5, 1, "west", EnumDirection.EnumAxisDirection.NEGATIVE, EnumDirection.EnumAxis.X, new BaseBlockPosition(-1, 0, 0)), EAST(5, 4, 3, "east", EnumDirection.EnumAxisDirection.POSITIVE, EnumDirection.EnumAxis.X, new BaseBlockPosition(1, 0, 0)); + + private final int g; + private final int h; + private final int i; + private final String j; + private final EnumDirection.EnumAxis k; + private final EnumDirection.EnumAxisDirection l; + private final BaseBlockPosition m; + private static final EnumDirection[] n = new EnumDirection[6]; + private static final EnumDirection[] o = new EnumDirection[4]; + private static final Map p = Maps.newHashMap(); + + private EnumDirection(int i, int j, int k, String s, EnumDirection.EnumAxisDirection enumdirection_enumaxisdirection, EnumDirection.EnumAxis enumdirection_enumaxis, BaseBlockPosition baseblockposition) { + this.g = i; + this.i = k; + this.h = j; + this.j = s; + this.k = enumdirection_enumaxis; + this.l = enumdirection_enumaxisdirection; + this.m = baseblockposition; + } + + public int a() { + return this.g; + } + + public int b() { + return this.i; + } + + public EnumDirection.EnumAxisDirection c() { + return this.l; + } + + public EnumDirection opposite() { + return fromType1(this.h); + } + + public EnumDirection e() { + switch (EnumDirection.SyntheticClass_1.b[this.ordinal()]) { + case 1: + return EnumDirection.EAST; + + case 2: + return EnumDirection.SOUTH; + + case 3: + return EnumDirection.WEST; + + case 4: + return EnumDirection.NORTH; + + default: + throw new IllegalStateException("Unable to get Y-rotated facing of " + this); + } + } + + public EnumDirection f() { + switch (EnumDirection.SyntheticClass_1.b[this.ordinal()]) { + case 1: + return EnumDirection.WEST; + + case 2: + return EnumDirection.NORTH; + + case 3: + return EnumDirection.EAST; + + case 4: + return EnumDirection.SOUTH; + + default: + throw new IllegalStateException("Unable to get CCW facing of " + this); + } + } + + public int getAdjacentX() { + return this.k == EnumDirection.EnumAxis.X ? this.l.a() : 0; + } + + public int getAdjacentY() { + return this.k == EnumDirection.EnumAxis.Y ? this.l.a() : 0; + } + + public int getAdjacentZ() { + return this.k == EnumDirection.EnumAxis.Z ? this.l.a() : 0; + } + + public String j() { + return this.j; + } + + public EnumDirection.EnumAxis k() { + return this.k; + } + + public static EnumDirection fromType1(int i) { + return EnumDirection.n[MathHelper.a(i % EnumDirection.n.length)]; + } + + public static EnumDirection fromType2(int i) { + return EnumDirection.o[MathHelper.a(i % EnumDirection.o.length)]; + } + + public static EnumDirection fromAngle(double d0) { + return fromType2(MathHelper.floor(d0 / 90.0D + 0.5D) & 3); + } + + public static EnumDirection a(Random random) { + return values()[random.nextInt(values().length)]; + } + + public String toString() { + return this.j; + } + + public String getName() { + return this.j; + } + + public static EnumDirection a(EnumDirection.EnumAxisDirection enumdirection_enumaxisdirection, EnumDirection.EnumAxis enumdirection_enumaxis) { + EnumDirection[] aenumdirection = values(); + int i = aenumdirection.length; + + for (int j = 0; j < i; ++j) { + EnumDirection enumdirection = aenumdirection[j]; + + if (enumdirection.c() == enumdirection_enumaxisdirection && enumdirection.k() == enumdirection_enumaxis) { + return enumdirection; + } + } + + throw new IllegalArgumentException("No such direction: " + enumdirection_enumaxisdirection + " " + enumdirection_enumaxis); + } + + static { + EnumDirection[] aenumdirection = values(); + int i = aenumdirection.length; + + for (int j = 0; j < i; ++j) { + EnumDirection enumdirection = aenumdirection[j]; + + EnumDirection.n[enumdirection.g] = enumdirection; + if (enumdirection.k().c()) { + EnumDirection.o[enumdirection.i] = enumdirection; + } + + EnumDirection.p.put(enumdirection.j().toLowerCase(), enumdirection); + } + + } + + static class SyntheticClass_1 { + + static final int[] a; + static final int[] b; + static final int[] c = new int[EnumDirection.EnumDirectionLimit.values().length]; + + static { + try { + EnumDirection.SyntheticClass_1.c[EnumDirection.EnumDirectionLimit.HORIZONTAL.ordinal()] = 1; + } catch (NoSuchFieldError nosuchfielderror) { + ; + } + + try { + EnumDirection.SyntheticClass_1.c[EnumDirection.EnumDirectionLimit.VERTICAL.ordinal()] = 2; + } catch (NoSuchFieldError nosuchfielderror1) { + ; + } + + b = new int[EnumDirection.values().length]; + + try { + EnumDirection.SyntheticClass_1.b[EnumDirection.NORTH.ordinal()] = 1; + } catch (NoSuchFieldError nosuchfielderror2) { + ; + } + + try { + EnumDirection.SyntheticClass_1.b[EnumDirection.EAST.ordinal()] = 2; + } catch (NoSuchFieldError nosuchfielderror3) { + ; + } + + try { + EnumDirection.SyntheticClass_1.b[EnumDirection.SOUTH.ordinal()] = 3; + } catch (NoSuchFieldError nosuchfielderror4) { + ; + } + + try { + EnumDirection.SyntheticClass_1.b[EnumDirection.WEST.ordinal()] = 4; + } catch (NoSuchFieldError nosuchfielderror5) { + ; + } + + try { + EnumDirection.SyntheticClass_1.b[EnumDirection.UP.ordinal()] = 5; + } catch (NoSuchFieldError nosuchfielderror6) { + ; + } + + try { + EnumDirection.SyntheticClass_1.b[EnumDirection.DOWN.ordinal()] = 6; + } catch (NoSuchFieldError nosuchfielderror7) { + ; + } + + a = new int[EnumDirection.EnumAxis.values().length]; + + try { + EnumDirection.SyntheticClass_1.a[EnumDirection.EnumAxis.X.ordinal()] = 1; + } catch (NoSuchFieldError nosuchfielderror8) { + ; + } + + try { + EnumDirection.SyntheticClass_1.a[EnumDirection.EnumAxis.Y.ordinal()] = 2; + } catch (NoSuchFieldError nosuchfielderror9) { + ; + } + + try { + EnumDirection.SyntheticClass_1.a[EnumDirection.EnumAxis.Z.ordinal()] = 3; + } catch (NoSuchFieldError nosuchfielderror10) { + ; + } + + } + } + + public static enum EnumDirectionLimit implements Predicate, Iterable { + + HORIZONTAL, VERTICAL; + + private EnumDirectionLimit() {} + + public EnumDirection[] a() { + switch (EnumDirection.SyntheticClass_1.c[this.ordinal()]) { + case 1: + return new EnumDirection[] { EnumDirection.NORTH, EnumDirection.EAST, EnumDirection.SOUTH, EnumDirection.WEST}; + + case 2: + return new EnumDirection[] { EnumDirection.UP, EnumDirection.DOWN}; + + default: + throw new Error("Someone\'s been tampering with the universe!"); + } + } + + public EnumDirection a(Random random) { + EnumDirection[] aenumdirection = this.a(); + + return aenumdirection[random.nextInt(aenumdirection.length)]; + } + + public boolean a(EnumDirection enumdirection) { + return enumdirection != null && enumdirection.k().d() == this; + } + + public Iterator iterator() { + return Iterators.forArray(this.a()); + } + + public boolean apply(EnumDirection object) { + return this.a(object); + } + } + + public static enum EnumAxisDirection { + + POSITIVE(1, "Towards positive"), NEGATIVE(-1, "Towards negative"); + + private final int c; + private final String d; + + private EnumAxisDirection(int i, String s) { + this.c = i; + this.d = s; + } + + public int a() { + return this.c; + } + + public String toString() { + return this.d; + } + } + + public static enum EnumAxis implements Predicate, INamable { + + X("x", EnumDirection.EnumDirectionLimit.HORIZONTAL), Y("y", EnumDirection.EnumDirectionLimit.VERTICAL), Z("z", EnumDirection.EnumDirectionLimit.HORIZONTAL); + + private static final Map d = Maps.newHashMap(); + private final String e; + private final EnumDirection.EnumDirectionLimit f; + + private EnumAxis(String s, EnumDirection.EnumDirectionLimit enumdirection_enumdirectionlimit) { + this.e = s; + this.f = enumdirection_enumdirectionlimit; + } + + public String a() { + return this.e; + } + + public boolean b() { + return this.f == EnumDirection.EnumDirectionLimit.VERTICAL; + } + + public boolean c() { + return this.f == EnumDirection.EnumDirectionLimit.HORIZONTAL; + } + + public String toString() { + return this.e; + } + + public boolean a(EnumDirection enumdirection) { + return enumdirection != null && enumdirection.k() == this; + } + + public EnumDirection.EnumDirectionLimit d() { + return this.f; + } + + public String getName() { + return this.e; + } + + public boolean apply(EnumDirection object) { + return this.a(object); + } + + static { + EnumDirection.EnumAxis[] aenumdirection_enumaxis = values(); + int i = aenumdirection_enumaxis.length; + + for (int j = 0; j < i; ++j) { + EnumDirection.EnumAxis enumdirection_enumaxis = aenumdirection_enumaxis[j]; + + EnumDirection.EnumAxis.d.put(enumdirection_enumaxis.a().toLowerCase(), enumdirection_enumaxis); + } + + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EnumItemRarity.java b/eSpigot-Server/src/main/java/net/minecraft/server/EnumItemRarity.java new file mode 100644 index 0000000..85a1753 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EnumItemRarity.java @@ -0,0 +1,14 @@ +package net.minecraft.server; + +public enum EnumItemRarity { + + COMMON(EnumChatFormat.WHITE, "Common"), UNCOMMON(EnumChatFormat.YELLOW, "Uncommon"), RARE(EnumChatFormat.AQUA, "Rare"), EPIC(EnumChatFormat.LIGHT_PURPLE, "Epic"); + + public final EnumChatFormat e; + public final String f; + + private EnumItemRarity(EnumChatFormat enumchatformat, String s) { + this.e = enumchatformat; + this.f = s; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EnumMonsterType.java b/eSpigot-Server/src/main/java/net/minecraft/server/EnumMonsterType.java new file mode 100644 index 0000000..25aa9c0 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EnumMonsterType.java @@ -0,0 +1,8 @@ +package net.minecraft.server; + +public enum EnumMonsterType { + + UNDEFINED, UNDEAD, ARTHROPOD; + + private EnumMonsterType() {} +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EnumParticle.java b/eSpigot-Server/src/main/java/net/minecraft/server/EnumParticle.java new file mode 100644 index 0000000..f3b7d42 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EnumParticle.java @@ -0,0 +1,74 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import java.util.ArrayList; +import java.util.Map; + +public enum EnumParticle { + + EXPLOSION_NORMAL("explode", 0, true), EXPLOSION_LARGE("largeexplode", 1, true), EXPLOSION_HUGE("hugeexplosion", 2, true), FIREWORKS_SPARK("fireworksSpark", 3, false), WATER_BUBBLE("bubble", 4, false), WATER_SPLASH("splash", 5, false), WATER_WAKE("wake", 6, false), SUSPENDED("suspended", 7, false), SUSPENDED_DEPTH("depthsuspend", 8, false), CRIT("crit", 9, false), CRIT_MAGIC("magicCrit", 10, false), SMOKE_NORMAL("smoke", 11, false), SMOKE_LARGE("largesmoke", 12, false), SPELL("spell", 13, false), SPELL_INSTANT("instantSpell", 14, false), SPELL_MOB("mobSpell", 15, false), SPELL_MOB_AMBIENT("mobSpellAmbient", 16, false), SPELL_WITCH("witchMagic", 17, false), DRIP_WATER("dripWater", 18, false), DRIP_LAVA("dripLava", 19, false), VILLAGER_ANGRY("angryVillager", 20, false), VILLAGER_HAPPY("happyVillager", 21, false), TOWN_AURA("townaura", 22, false), NOTE("note", 23, false), PORTAL("portal", 24, false), ENCHANTMENT_TABLE("enchantmenttable", 25, false), FLAME("flame", 26, false), LAVA("lava", 27, false), FOOTSTEP("footstep", 28, false), CLOUD("cloud", 29, false), REDSTONE("reddust", 30, false), SNOWBALL("snowballpoof", 31, false), SNOW_SHOVEL("snowshovel", 32, false), SLIME("slime", 33, false), HEART("heart", 34, false), BARRIER("barrier", 35, false), ITEM_CRACK("iconcrack_", 36, false, 2), BLOCK_CRACK("blockcrack_", 37, false, 1), BLOCK_DUST("blockdust_", 38, false, 1), WATER_DROP("droplet", 39, false), ITEM_TAKE("take", 40, false), MOB_APPEARANCE("mobappearance", 41, true); + + private final String Q; + private final int R; + private final boolean S; + private final int T; + private static final Map U = Maps.newHashMap(); + private static final String[] V; + + private EnumParticle(String s, int i, boolean flag, int j) { + this.Q = s; + this.R = i; + this.S = flag; + this.T = j; + } + + private EnumParticle(String s, int i, boolean flag) { + this(s, i, flag, 0); + } + + public static String[] a() { + return EnumParticle.V; + } + + public String b() { + return this.Q; + } + + public int c() { + return this.R; + } + + public int d() { + return this.T; + } + + public boolean e() { + return this.S; + } + + public boolean f() { + return this.T > 0; + } + + public static EnumParticle a(int i) { + return (EnumParticle) EnumParticle.U.get(Integer.valueOf(i)); + } + + static { + ArrayList arraylist = Lists.newArrayList(); + EnumParticle[] aenumparticle = values(); + int i = aenumparticle.length; + + for (int j = 0; j < i; ++j) { + EnumParticle enumparticle = aenumparticle[j]; + + EnumParticle.U.put(Integer.valueOf(enumparticle.c()), enumparticle); + if (!enumparticle.b().endsWith("_")) { + arraylist.add(enumparticle.b()); + } + } + + V = (String[]) arraylist.toArray(new String[arraylist.size()]); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EnumProtocol.java b/eSpigot-Server/src/main/java/net/minecraft/server/EnumProtocol.java new file mode 100644 index 0000000..393ffc8 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EnumProtocol.java @@ -0,0 +1,225 @@ +package net.minecraft.server; + +import com.google.common.collect.BiMap; +import com.google.common.collect.HashBiMap; +import com.google.common.collect.Maps; +import java.util.Iterator; +import java.util.Map; +import org.apache.logging.log4j.LogManager; + +public enum EnumProtocol { + + HANDSHAKING(-1) {; + { + this.a(EnumProtocolDirection.SERVERBOUND, PacketHandshakingInSetProtocol.class); + } + }, PLAY(0) {; + { + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutKeepAlive.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutLogin.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutChat.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutUpdateTime.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutEntityEquipment.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutSpawnPosition.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutUpdateHealth.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutRespawn.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutPosition.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutHeldItemSlot.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutBed.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutAnimation.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutNamedEntitySpawn.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutCollect.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutSpawnEntity.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutSpawnEntityLiving.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutSpawnEntityPainting.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutSpawnEntityExperienceOrb.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutEntityVelocity.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutEntityDestroy.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutEntity.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutEntity.PacketPlayOutRelEntityMove.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutEntity.PacketPlayOutEntityLook.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutEntity.PacketPlayOutRelEntityMoveLook.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutEntityTeleport.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutEntityHeadRotation.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutEntityStatus.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutAttachEntity.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutEntityMetadata.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutEntityEffect.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutRemoveEntityEffect.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutExperience.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutUpdateAttributes.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutMapChunk.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutMultiBlockChange.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutBlockChange.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutBlockAction.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutBlockBreakAnimation.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutMapChunkBulk.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutExplosion.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutWorldEvent.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutNamedSoundEffect.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutWorldParticles.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutGameStateChange.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutSpawnEntityWeather.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutOpenWindow.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutCloseWindow.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutSetSlot.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutWindowItems.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutWindowData.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutTransaction.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutUpdateSign.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutMap.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutTileEntityData.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutOpenSignEditor.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutStatistic.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutPlayerInfo.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutAbilities.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutTabComplete.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutScoreboardObjective.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutScoreboardScore.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutScoreboardDisplayObjective.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutScoreboardTeam.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutCustomPayload.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutKickDisconnect.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutServerDifficulty.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutCombatEvent.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutCamera.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutWorldBorder.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutTitle.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutSetCompression.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutPlayerListHeaderFooter.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutResourcePackSend.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketPlayOutUpdateEntityNBT.class); + this.a(EnumProtocolDirection.SERVERBOUND, PacketPlayInKeepAlive.class); + this.a(EnumProtocolDirection.SERVERBOUND, PacketPlayInChat.class); + this.a(EnumProtocolDirection.SERVERBOUND, PacketPlayInUseEntity.class); + this.a(EnumProtocolDirection.SERVERBOUND, PacketPlayInFlying.class); + this.a(EnumProtocolDirection.SERVERBOUND, PacketPlayInFlying.PacketPlayInPosition.class); + this.a(EnumProtocolDirection.SERVERBOUND, PacketPlayInFlying.PacketPlayInLook.class); + this.a(EnumProtocolDirection.SERVERBOUND, PacketPlayInFlying.PacketPlayInPositionLook.class); + this.a(EnumProtocolDirection.SERVERBOUND, PacketPlayInBlockDig.class); + this.a(EnumProtocolDirection.SERVERBOUND, PacketPlayInBlockPlace.class); + this.a(EnumProtocolDirection.SERVERBOUND, PacketPlayInHeldItemSlot.class); + this.a(EnumProtocolDirection.SERVERBOUND, PacketPlayInArmAnimation.class); + this.a(EnumProtocolDirection.SERVERBOUND, PacketPlayInEntityAction.class); + this.a(EnumProtocolDirection.SERVERBOUND, PacketPlayInSteerVehicle.class); + this.a(EnumProtocolDirection.SERVERBOUND, PacketPlayInCloseWindow.class); + this.a(EnumProtocolDirection.SERVERBOUND, PacketPlayInWindowClick.class); + this.a(EnumProtocolDirection.SERVERBOUND, PacketPlayInTransaction.class); + this.a(EnumProtocolDirection.SERVERBOUND, PacketPlayInSetCreativeSlot.class); + this.a(EnumProtocolDirection.SERVERBOUND, PacketPlayInEnchantItem.class); + this.a(EnumProtocolDirection.SERVERBOUND, PacketPlayInUpdateSign.class); + this.a(EnumProtocolDirection.SERVERBOUND, PacketPlayInAbilities.class); + this.a(EnumProtocolDirection.SERVERBOUND, PacketPlayInTabComplete.class); + this.a(EnumProtocolDirection.SERVERBOUND, PacketPlayInSettings.class); + this.a(EnumProtocolDirection.SERVERBOUND, PacketPlayInClientCommand.class); + this.a(EnumProtocolDirection.SERVERBOUND, PacketPlayInCustomPayload.class); + this.a(EnumProtocolDirection.SERVERBOUND, PacketPlayInSpectate.class); + this.a(EnumProtocolDirection.SERVERBOUND, PacketPlayInResourcePackStatus.class); + } +}, STATUS(1) {; + { + this.a(EnumProtocolDirection.SERVERBOUND, PacketStatusInStart.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketStatusOutServerInfo.class); + this.a(EnumProtocolDirection.SERVERBOUND, PacketStatusInPing.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketStatusOutPong.class); + } +}, LOGIN(2) {; + { + this.a(EnumProtocolDirection.CLIENTBOUND, PacketLoginOutDisconnect.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketLoginOutEncryptionBegin.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketLoginOutSuccess.class); + this.a(EnumProtocolDirection.CLIENTBOUND, PacketLoginOutSetCompression.class); + this.a(EnumProtocolDirection.SERVERBOUND, PacketLoginInStart.class); + this.a(EnumProtocolDirection.SERVERBOUND, PacketLoginInEncryptionBegin.class); + } +}; + + private static int e = -1; + private static int f = 2; + private static final EnumProtocol[] g = new EnumProtocol[EnumProtocol.f - EnumProtocol.e + 1]; + private static final Map, EnumProtocol> h = Maps.newHashMap(); + private final int i; + private final Map>> j; + + private EnumProtocol(int i) { + this.j = Maps.newEnumMap(EnumProtocolDirection.class); + this.i = i; + } + + protected EnumProtocol a(EnumProtocolDirection enumprotocoldirection, Class oclass) { + BiMap> map = this.j.computeIfAbsent(enumprotocoldirection, k -> HashBiMap.create()); + + if (map.containsValue(oclass)) { + String s = enumprotocoldirection + " packet " + oclass + " is already known to ID " + ((BiMap) map).inverse().get(oclass); + + LogManager.getLogger().fatal(s); + throw new IllegalArgumentException(s); + } else { + map.put(map.size(), oclass); + return this; + } + } + + public Integer a(EnumProtocolDirection enumprotocoldirection, Packet packet) { + return (Integer) ((BiMap) this.j.get(enumprotocoldirection)).inverse().get(packet.getClass()); + } + + public Packet a(EnumProtocolDirection enumprotocoldirection, int i) throws IllegalAccessException, InstantiationException { + Class oclass = (Class) ((BiMap) this.j.get(enumprotocoldirection)).get(Integer.valueOf(i)); + + return oclass == null ? null : (Packet) oclass.newInstance(); + } + + public int a() { + return this.i; + } + + public static EnumProtocol a(int i) { + return i >= EnumProtocol.e && i <= EnumProtocol.f ? EnumProtocol.g[i - EnumProtocol.e] : null; + } + + public static EnumProtocol a(Packet packet) { + return (EnumProtocol) EnumProtocol.h.get(packet.getClass()); + } + + EnumProtocol(int i, Object object) { + this(i); + } + + static { + EnumProtocol[] aenumprotocol = values(); + int i = aenumprotocol.length; + + for (int j = 0; j < i; ++j) { + EnumProtocol enumprotocol = aenumprotocol[j]; + int k = enumprotocol.a(); + + if (k < EnumProtocol.e || k > EnumProtocol.f) { + throw new Error("Invalid protocol ID " + Integer.toString(k)); + } + + EnumProtocol.g[k - EnumProtocol.e] = enumprotocol; + Iterator iterator = enumprotocol.j.keySet().iterator(); + + while (iterator.hasNext()) { + EnumProtocolDirection enumprotocoldirection = (EnumProtocolDirection) iterator.next(); + + Class oclass; + + for (Iterator iterator1 = ((BiMap) enumprotocol.j.get(enumprotocoldirection)).values().iterator(); iterator1.hasNext(); EnumProtocol.h.put(oclass, enumprotocol)) { + oclass = (Class) iterator1.next(); + if (EnumProtocol.h.containsKey(oclass) && EnumProtocol.h.get(oclass) != enumprotocol) { + throw new Error("Packet " + oclass + " is already assigned to protocol " + EnumProtocol.h.get(oclass) + " - can\'t reassign to " + enumprotocol); + } + + try { + oclass.newInstance(); + } catch (Throwable throwable) { + throw new Error("Packet " + oclass + " fails instantiation checks! " + oclass); + } + } + } + } + + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EnumProtocolDirection.java b/eSpigot-Server/src/main/java/net/minecraft/server/EnumProtocolDirection.java new file mode 100644 index 0000000..c525fad --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EnumProtocolDirection.java @@ -0,0 +1,8 @@ +package net.minecraft.server; + +public enum EnumProtocolDirection { + + SERVERBOUND, CLIENTBOUND; + + private EnumProtocolDirection() {} +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EnumSkyBlock.java b/eSpigot-Server/src/main/java/net/minecraft/server/EnumSkyBlock.java new file mode 100644 index 0000000..5880922 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EnumSkyBlock.java @@ -0,0 +1,12 @@ +package net.minecraft.server; + +public enum EnumSkyBlock { + + SKY(15), BLOCK(0); + + public final int c; + + private EnumSkyBlock(int i) { + this.c = i; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EnumWorldBorderState.java b/eSpigot-Server/src/main/java/net/minecraft/server/EnumWorldBorderState.java new file mode 100644 index 0000000..32664e6 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EnumWorldBorderState.java @@ -0,0 +1,12 @@ +package net.minecraft.server; + +public enum EnumWorldBorderState { + + GROWING(4259712), SHRINKING(16724016), STATIONARY(2138367); + + private final int d; + + private EnumWorldBorderState(int i) { + this.d = i; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ExceptionEntityNotFound.java b/eSpigot-Server/src/main/java/net/minecraft/server/ExceptionEntityNotFound.java new file mode 100644 index 0000000..d01a15f --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ExceptionEntityNotFound.java @@ -0,0 +1,12 @@ +package net.minecraft.server; + +public class ExceptionEntityNotFound extends CommandException { + + public ExceptionEntityNotFound() { + this("commands.generic.entity.notFound", new Object[0]); + } + + public ExceptionEntityNotFound(String s, Object... aobject) { + super(s, aobject); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ExceptionInvalidNumber.java b/eSpigot-Server/src/main/java/net/minecraft/server/ExceptionInvalidNumber.java new file mode 100644 index 0000000..b66af35 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ExceptionInvalidNumber.java @@ -0,0 +1,12 @@ +package net.minecraft.server; + +public class ExceptionInvalidNumber extends CommandException { + + public ExceptionInvalidNumber() { + this("commands.generic.num.invalid", new Object[0]); + } + + public ExceptionInvalidNumber(String s, Object... aobject) { + super(s, aobject); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ExceptionInvalidSyntax.java b/eSpigot-Server/src/main/java/net/minecraft/server/ExceptionInvalidSyntax.java new file mode 100644 index 0000000..8f47be8 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ExceptionInvalidSyntax.java @@ -0,0 +1,12 @@ +package net.minecraft.server; + +public class ExceptionInvalidSyntax extends CommandException { + + public ExceptionInvalidSyntax() { + this("commands.generic.snytax", new Object[0]); + } + + public ExceptionInvalidSyntax(String s, Object... aobject) { + super(s, aobject); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ExceptionPlayerNotFound.java b/eSpigot-Server/src/main/java/net/minecraft/server/ExceptionPlayerNotFound.java new file mode 100644 index 0000000..76b2c68 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ExceptionPlayerNotFound.java @@ -0,0 +1,12 @@ +package net.minecraft.server; + +public class ExceptionPlayerNotFound extends CommandException { + + public ExceptionPlayerNotFound() { + this("commands.generic.player.notFound", new Object[0]); + } + + public ExceptionPlayerNotFound(String s, Object... aobject) { + super(s, aobject); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ExceptionUnknownCommand.java b/eSpigot-Server/src/main/java/net/minecraft/server/ExceptionUnknownCommand.java new file mode 100644 index 0000000..ed9a83a --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ExceptionUnknownCommand.java @@ -0,0 +1,12 @@ +package net.minecraft.server; + +public class ExceptionUnknownCommand extends CommandException { + + public ExceptionUnknownCommand() { + this("commands.generic.notFound", new Object[0]); + } + + public ExceptionUnknownCommand(String s, Object... aobject) { + super(s, aobject); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ExceptionUsage.java b/eSpigot-Server/src/main/java/net/minecraft/server/ExceptionUsage.java new file mode 100644 index 0000000..0f2606a --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ExceptionUsage.java @@ -0,0 +1,8 @@ +package net.minecraft.server; + +public class ExceptionUsage extends ExceptionInvalidSyntax { + + public ExceptionUsage(String s, Object... aobject) { + super(s, aobject); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ExceptionWorldConflict.java b/eSpigot-Server/src/main/java/net/minecraft/server/ExceptionWorldConflict.java new file mode 100644 index 0000000..11de72a --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ExceptionWorldConflict.java @@ -0,0 +1,8 @@ +package net.minecraft.server; + +public class ExceptionWorldConflict extends Exception { + + public ExceptionWorldConflict(String s) { + super(s); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ExpirableListEntry.java b/eSpigot-Server/src/main/java/net/minecraft/server/ExpirableListEntry.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ExpirableListEntry.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ExpirableListEntry.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/Explosion.java b/eSpigot-Server/src/main/java/net/minecraft/server/Explosion.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/Explosion.java rename to eSpigot-Server/src/main/java/net/minecraft/server/Explosion.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/FileIOThread.java b/eSpigot-Server/src/main/java/net/minecraft/server/FileIOThread.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/FileIOThread.java rename to eSpigot-Server/src/main/java/net/minecraft/server/FileIOThread.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/FoodMetaData.java b/eSpigot-Server/src/main/java/net/minecraft/server/FoodMetaData.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/FoodMetaData.java rename to eSpigot-Server/src/main/java/net/minecraft/server/FoodMetaData.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/GameProfileBanEntry.java b/eSpigot-Server/src/main/java/net/minecraft/server/GameProfileBanEntry.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/GameProfileBanEntry.java rename to eSpigot-Server/src/main/java/net/minecraft/server/GameProfileBanEntry.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/GameProfileBanList.java b/eSpigot-Server/src/main/java/net/minecraft/server/GameProfileBanList.java new file mode 100644 index 0000000..63fec2a --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/GameProfileBanList.java @@ -0,0 +1,54 @@ +package net.minecraft.server; + +import com.google.gson.JsonObject; +import com.mojang.authlib.GameProfile; +import java.io.File; +import java.util.Iterator; + +public class GameProfileBanList extends JsonList { + + public GameProfileBanList(File file) { + super(file); + } + + protected JsonListEntry a(JsonObject jsonobject) { + return new GameProfileBanEntry(jsonobject); + } + + public boolean isBanned(GameProfile gameprofile) { + return this.d(gameprofile); + } + + public String[] getEntries() { + String[] astring = new String[this.e().size()]; + int i = 0; + + GameProfileBanEntry gameprofilebanentry; + + for (Iterator iterator = this.e().values().iterator(); iterator.hasNext(); astring[i++] = ((GameProfile) gameprofilebanentry.getKey()).getName()) { + gameprofilebanentry = (GameProfileBanEntry) iterator.next(); + } + + return astring; + } + + protected String b(GameProfile gameprofile) { + return gameprofile.getId().toString(); + } + + public GameProfile a(String s) { + Iterator iterator = this.e().values().iterator(); + + GameProfileBanEntry gameprofilebanentry; + + do { + if (!iterator.hasNext()) { + return null; + } + + gameprofilebanentry = (GameProfileBanEntry) iterator.next(); + } while (!s.equalsIgnoreCase(((GameProfile) gameprofilebanentry.getKey()).getName())); + + return (GameProfile) gameprofilebanentry.getKey(); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/GameProfileSerializer.java b/eSpigot-Server/src/main/java/net/minecraft/server/GameProfileSerializer.java new file mode 100644 index 0000000..998cf70 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/GameProfileSerializer.java @@ -0,0 +1,164 @@ +package net.minecraft.server; + +import com.mojang.authlib.GameProfile; +import com.mojang.authlib.properties.Property; +import java.util.Iterator; +import java.util.UUID; + +public final class GameProfileSerializer { + + public static GameProfile deserialize(NBTTagCompound nbttagcompound) { + String s = null; + String s1 = null; + + if (nbttagcompound.hasKeyOfType("Name", 8)) { + s = nbttagcompound.getString("Name"); + } + + if (nbttagcompound.hasKeyOfType("Id", 8)) { + s1 = nbttagcompound.getString("Id"); + } + + if (UtilColor.b(s) && UtilColor.b(s1)) { + return null; + } else { + UUID uuid; + + try { + uuid = UUID.fromString(s1); + } catch (Throwable throwable) { + uuid = null; + } + + GameProfile gameprofile = new GameProfile(uuid, s); + + if (nbttagcompound.hasKeyOfType("Properties", 10)) { + NBTTagCompound nbttagcompound1 = nbttagcompound.getCompound("Properties"); + Iterator iterator = nbttagcompound1.c().iterator(); + + while (iterator.hasNext()) { + String s2 = (String) iterator.next(); + NBTTagList nbttaglist = nbttagcompound1.getList(s2, 10); + + for (int i = 0; i < nbttaglist.size(); ++i) { + NBTTagCompound nbttagcompound2 = nbttaglist.get(i); + String s3 = nbttagcompound2.getString("Value"); + + if (nbttagcompound2.hasKeyOfType("Signature", 8)) { + gameprofile.getProperties().put(s2, new Property(s2, s3, nbttagcompound2.getString("Signature"))); + } else { + gameprofile.getProperties().put(s2, new Property(s2, s3)); + } + } + } + } + + return gameprofile; + } + } + + public static NBTTagCompound serialize(NBTTagCompound nbttagcompound, GameProfile gameprofile) { + if (!UtilColor.b(gameprofile.getName())) { + nbttagcompound.setString("Name", gameprofile.getName()); + } + + if (gameprofile.getId() != null) { + nbttagcompound.setString("Id", gameprofile.getId().toString()); + } + + if (!gameprofile.getProperties().isEmpty()) { + NBTTagCompound nbttagcompound1 = new NBTTagCompound(); + Iterator iterator = gameprofile.getProperties().keySet().iterator(); + + while (iterator.hasNext()) { + String s = (String) iterator.next(); + NBTTagList nbttaglist = new NBTTagList(); + + NBTTagCompound nbttagcompound2; + + for (Iterator iterator1 = gameprofile.getProperties().get(s).iterator(); iterator1.hasNext(); nbttaglist.add(nbttagcompound2)) { + Property property = (Property) iterator1.next(); + + nbttagcompound2 = new NBTTagCompound(); + nbttagcompound2.setString("Value", property.getValue()); + if (property.hasSignature()) { + nbttagcompound2.setString("Signature", property.getSignature()); + } + } + + nbttagcompound1.set(s, nbttaglist); + } + + nbttagcompound.set("Properties", nbttagcompound1); + } + + return nbttagcompound; + } + + public static boolean a(NBTBase nbtbase, NBTBase nbtbase1, boolean flag) { + if (nbtbase == nbtbase1) { + return true; + } else if (nbtbase == null) { + return true; + } else if (nbtbase1 == null) { + return false; + } else if (!nbtbase.getClass().equals(nbtbase1.getClass())) { + return false; + } else if (nbtbase instanceof NBTTagCompound) { + NBTTagCompound nbttagcompound = (NBTTagCompound) nbtbase; + NBTTagCompound nbttagcompound1 = (NBTTagCompound) nbtbase1; + Iterator iterator = nbttagcompound.c().iterator(); + + String s; + NBTBase nbtbase2; + + do { + if (!iterator.hasNext()) { + return true; + } + + s = (String) iterator.next(); + nbtbase2 = nbttagcompound.get(s); + } while (a(nbtbase2, nbttagcompound1.get(s), flag)); + + return false; + } else if (nbtbase instanceof NBTTagList && flag) { + NBTTagList nbttaglist = (NBTTagList) nbtbase; + NBTTagList nbttaglist1 = (NBTTagList) nbtbase1; + + if (nbttaglist.size() == 0) { + return nbttaglist1.size() == 0; + } else { + int i = 0; + + while (i < nbttaglist.size()) { + NBTBase nbtbase3 = nbttaglist.g(i); + boolean flag1 = false; + int j = 0; + + while (true) { + if (j < nbttaglist1.size()) { + if (!a(nbtbase3, nbttaglist1.g(j), flag)) { + ++j; + continue; + } + + flag1 = true; + } + + if (!flag1) { + return false; + } + + ++i; + break; + } + } + + return true; + } + } else { + return nbtbase.equals(nbtbase1); + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/GameRules.java b/eSpigot-Server/src/main/java/net/minecraft/server/GameRules.java new file mode 100644 index 0000000..1c89c90 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/GameRules.java @@ -0,0 +1,160 @@ +package net.minecraft.server; + +import java.util.Iterator; +import java.util.Set; +import java.util.TreeMap; + +public class GameRules { + + private TreeMap a = new TreeMap(); + + public GameRules() { + this.a("doFireTick", "true", GameRules.EnumGameRuleType.BOOLEAN_VALUE); + this.a("mobGriefing", "true", GameRules.EnumGameRuleType.BOOLEAN_VALUE); + this.a("keepInventory", "false", GameRules.EnumGameRuleType.BOOLEAN_VALUE); + this.a("doMobSpawning", "true", GameRules.EnumGameRuleType.BOOLEAN_VALUE); + this.a("doMobLoot", "true", GameRules.EnumGameRuleType.BOOLEAN_VALUE); + this.a("doTileDrops", "true", GameRules.EnumGameRuleType.BOOLEAN_VALUE); + this.a("doEntityDrops", "true", GameRules.EnumGameRuleType.BOOLEAN_VALUE); + this.a("commandBlockOutput", "true", GameRules.EnumGameRuleType.BOOLEAN_VALUE); + this.a("naturalRegeneration", "true", GameRules.EnumGameRuleType.BOOLEAN_VALUE); + this.a("doDaylightCycle", "true", GameRules.EnumGameRuleType.BOOLEAN_VALUE); + this.a("logAdminCommands", "true", GameRules.EnumGameRuleType.BOOLEAN_VALUE); + this.a("showDeathMessages", "true", GameRules.EnumGameRuleType.BOOLEAN_VALUE); + this.a("randomTickSpeed", "3", GameRules.EnumGameRuleType.NUMERICAL_VALUE); + this.a("sendCommandFeedback", "true", GameRules.EnumGameRuleType.BOOLEAN_VALUE); + this.a("reducedDebugInfo", "false", GameRules.EnumGameRuleType.BOOLEAN_VALUE); + } + + public void a(String s, String s1, GameRules.EnumGameRuleType gamerules_enumgameruletype) { + this.a.put(s, new GameRules.GameRuleValue(s1, gamerules_enumgameruletype)); + } + + public void set(String s, String s1) { + GameRules.GameRuleValue gamerules_gamerulevalue = (GameRules.GameRuleValue) this.a.get(s); + + if (gamerules_gamerulevalue != null) { + gamerules_gamerulevalue.a(s1); + } else { + this.a(s, s1, GameRules.EnumGameRuleType.ANY_VALUE); + } + + } + + public String get(String s) { + GameRules.GameRuleValue gamerules_gamerulevalue = (GameRules.GameRuleValue) this.a.get(s); + + return gamerules_gamerulevalue != null ? gamerules_gamerulevalue.a() : ""; + } + + public boolean getBoolean(String s) { + GameRules.GameRuleValue gamerules_gamerulevalue = (GameRules.GameRuleValue) this.a.get(s); + + return gamerules_gamerulevalue != null ? gamerules_gamerulevalue.b() : false; + } + + public int c(String s) { + GameRules.GameRuleValue gamerules_gamerulevalue = (GameRules.GameRuleValue) this.a.get(s); + + return gamerules_gamerulevalue != null ? gamerules_gamerulevalue.c() : 0; + } + + public NBTTagCompound a() { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + Iterator iterator = this.a.keySet().iterator(); + + while (iterator.hasNext()) { + String s = (String) iterator.next(); + GameRules.GameRuleValue gamerules_gamerulevalue = (GameRules.GameRuleValue) this.a.get(s); + + nbttagcompound.setString(s, gamerules_gamerulevalue.a()); + } + + return nbttagcompound; + } + + public void a(NBTTagCompound nbttagcompound) { + Set set = nbttagcompound.c(); + Iterator iterator = set.iterator(); + + while (iterator.hasNext()) { + String s = (String) iterator.next(); + String s1 = nbttagcompound.getString(s); + + this.set(s, s1); + } + + } + + public String[] getGameRules() { + Set set = this.a.keySet(); + + return (String[]) set.toArray(new String[set.size()]); + } + + public boolean contains(String s) { + return this.a.containsKey(s); + } + + public boolean a(String s, GameRules.EnumGameRuleType gamerules_enumgameruletype) { + GameRules.GameRuleValue gamerules_gamerulevalue = (GameRules.GameRuleValue) this.a.get(s); + + return gamerules_gamerulevalue != null && (gamerules_gamerulevalue.e() == gamerules_enumgameruletype || gamerules_enumgameruletype == GameRules.EnumGameRuleType.ANY_VALUE); + } + + public static enum EnumGameRuleType { + + ANY_VALUE, BOOLEAN_VALUE, NUMERICAL_VALUE; + + private EnumGameRuleType() {} + } + + static class GameRuleValue { + + private String a; + private boolean b; + private int c; + private double d; + private final GameRules.EnumGameRuleType e; + + public GameRuleValue(String s, GameRules.EnumGameRuleType gamerules_enumgameruletype) { + this.e = gamerules_enumgameruletype; + this.a(s); + } + + public void a(String s) { + this.a = s; + this.b = Boolean.parseBoolean(s); + this.c = this.b ? 1 : 0; + + try { + this.c = Integer.parseInt(s); + } catch (NumberFormatException numberformatexception) { + ; + } + + try { + this.d = Double.parseDouble(s); + } catch (NumberFormatException numberformatexception1) { + ; + } + + } + + public String a() { + return this.a; + } + + public boolean b() { + return this.b; + } + + public int c() { + return this.c; + } + + public GameRules.EnumGameRuleType e() { + return this.e; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/GenLayer.java b/eSpigot-Server/src/main/java/net/minecraft/server/GenLayer.java new file mode 100644 index 0000000..a57c57d --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/GenLayer.java @@ -0,0 +1,184 @@ +package net.minecraft.server; + +import java.util.concurrent.Callable; + +public abstract class GenLayer { + + private long c; + protected GenLayer a; + private long d; + protected long b; + + public static GenLayer[] a(long i, WorldType worldtype, String s) { + LayerIsland layerisland = new LayerIsland(1L); + GenLayerZoomFuzzy genlayerzoomfuzzy = new GenLayerZoomFuzzy(2000L, layerisland); + GenLayerIsland genlayerisland = new GenLayerIsland(1L, genlayerzoomfuzzy); + GenLayerZoom genlayerzoom = new GenLayerZoom(2001L, genlayerisland); + + genlayerisland = new GenLayerIsland(2L, genlayerzoom); + genlayerisland = new GenLayerIsland(50L, genlayerisland); + genlayerisland = new GenLayerIsland(70L, genlayerisland); + GenLayerIcePlains genlayericeplains = new GenLayerIcePlains(2L, genlayerisland); + GenLayerTopSoil genlayertopsoil = new GenLayerTopSoil(2L, genlayericeplains); + + genlayerisland = new GenLayerIsland(3L, genlayertopsoil); + GenLayerSpecial genlayerspecial = new GenLayerSpecial(2L, genlayerisland, GenLayerSpecial.EnumGenLayerSpecial.COOL_WARM); + + genlayerspecial = new GenLayerSpecial(2L, genlayerspecial, GenLayerSpecial.EnumGenLayerSpecial.HEAT_ICE); + genlayerspecial = new GenLayerSpecial(3L, genlayerspecial, GenLayerSpecial.EnumGenLayerSpecial.SPECIAL); + genlayerzoom = new GenLayerZoom(2002L, genlayerspecial); + genlayerzoom = new GenLayerZoom(2003L, genlayerzoom); + genlayerisland = new GenLayerIsland(4L, genlayerzoom); + GenLayerMushroomIsland genlayermushroomisland = new GenLayerMushroomIsland(5L, genlayerisland); + GenLayerDeepOcean genlayerdeepocean = new GenLayerDeepOcean(4L, genlayermushroomisland); + GenLayer genlayer = GenLayerZoom.b(1000L, genlayerdeepocean, 0); + CustomWorldSettingsFinal customworldsettingsfinal = null; + int j = 4; + int k = j; + + if (worldtype == WorldType.CUSTOMIZED && s.length() > 0) { + customworldsettingsfinal = CustomWorldSettingsFinal.CustomWorldSettings.a(s).b(); + j = customworldsettingsfinal.G; + k = customworldsettingsfinal.H; + } + + if (worldtype == WorldType.LARGE_BIOMES) { + j = 6; + } + + GenLayer genlayer1 = GenLayerZoom.b(1000L, genlayer, 0); + GenLayerCleaner genlayercleaner = new GenLayerCleaner(100L, genlayer1); + GenLayerBiome genlayerbiome = new GenLayerBiome(200L, genlayer, worldtype, s); + GenLayer genlayer2 = GenLayerZoom.b(1000L, genlayerbiome, 2); + GenLayerDesert genlayerdesert = new GenLayerDesert(1000L, genlayer2); + GenLayer genlayer3 = GenLayerZoom.b(1000L, genlayercleaner, 2); + GenLayerRegionHills genlayerregionhills = new GenLayerRegionHills(1000L, genlayerdesert, genlayer3); + + genlayer1 = GenLayerZoom.b(1000L, genlayercleaner, 2); + genlayer1 = GenLayerZoom.b(1000L, genlayer1, k); + GenLayerRiver genlayerriver = new GenLayerRiver(1L, genlayer1); + GenLayerSmooth genlayersmooth = new GenLayerSmooth(1000L, genlayerriver); + Object object = new GenLayerPlains(1001L, genlayerregionhills); + + for (int l = 0; l < j; ++l) { + object = new GenLayerZoom((long) (1000 + l), (GenLayer) object); + if (l == 0) { + object = new GenLayerIsland(3L, (GenLayer) object); + } + + if (l == 1 || j == 1) { + object = new GenLayerMushroomShore(1000L, (GenLayer) object); + } + } + + GenLayerSmooth genlayersmooth1 = new GenLayerSmooth(1000L, (GenLayer) object); + GenLayerRiverMix genlayerrivermix = new GenLayerRiverMix(100L, genlayersmooth1, genlayersmooth); + GenLayerZoomVoronoi genlayerzoomvoronoi = new GenLayerZoomVoronoi(10L, genlayerrivermix); + + genlayerrivermix.a(i); + genlayerzoomvoronoi.a(i); + return new GenLayer[] { genlayerrivermix, genlayerzoomvoronoi, genlayerrivermix}; + } + + public GenLayer(long i) { + this.b = i; + this.b *= this.b * 6364136223846793005L + 1442695040888963407L; + this.b += i; + this.b *= this.b * 6364136223846793005L + 1442695040888963407L; + this.b += i; + this.b *= this.b * 6364136223846793005L + 1442695040888963407L; + this.b += i; + } + + public void a(long i) { + this.c = i; + if (this.a != null) { + this.a.a(i); + } + + this.c *= this.c * 6364136223846793005L + 1442695040888963407L; + this.c += this.b; + this.c *= this.c * 6364136223846793005L + 1442695040888963407L; + this.c += this.b; + this.c *= this.c * 6364136223846793005L + 1442695040888963407L; + this.c += this.b; + } + + public void a(long i, long j) { + this.d = this.c; + this.d *= this.d * 6364136223846793005L + 1442695040888963407L; + this.d += i; + this.d *= this.d * 6364136223846793005L + 1442695040888963407L; + this.d += j; + this.d *= this.d * 6364136223846793005L + 1442695040888963407L; + this.d += i; + this.d *= this.d * 6364136223846793005L + 1442695040888963407L; + this.d += j; + } + + protected int a(int i) { + int j = (int) ((this.d >> 24) % (long) i); + + if (j < 0) { + j += i; + } + + this.d *= this.d * 6364136223846793005L + 1442695040888963407L; + this.d += this.c; + return j; + } + + public abstract int[] a(int i, int j, int k, int l); + + protected static boolean a(int i, int j) { + if (i == j) { + return true; + } else if (i != BiomeBase.MESA_PLATEAU_F.id && i != BiomeBase.MESA_PLATEAU.id) { + final BiomeBase biomebase = BiomeBase.getBiome(i); + final BiomeBase biomebase1 = BiomeBase.getBiome(j); + + try { + return biomebase != null && biomebase1 != null ? biomebase.a(biomebase1) : false; + } catch (Throwable throwable) { + CrashReport crashreport = CrashReport.a(throwable, "Comparing biomes"); + CrashReportSystemDetails crashreportsystemdetails = crashreport.a("Biomes being compared"); + + crashreportsystemdetails.a("Biome A ID", (Object) Integer.valueOf(i)); + crashreportsystemdetails.a("Biome B ID", (Object) Integer.valueOf(j)); + crashreportsystemdetails.a("Biome A", new Callable() { + public String a() throws Exception { + return String.valueOf(biomebase); + } + + public Object call() throws Exception { + return this.a(); + } + }); + crashreportsystemdetails.a("Biome B", new Callable() { + public String a() throws Exception { + return String.valueOf(biomebase); + } + + public Object call() throws Exception { + return this.a(); + } + }); + throw new ReportedException(crashreport); + } + } else { + return j == BiomeBase.MESA_PLATEAU_F.id || j == BiomeBase.MESA_PLATEAU.id; + } + } + + protected static boolean b(int i) { + return i == BiomeBase.OCEAN.id || i == BiomeBase.DEEP_OCEAN.id || i == BiomeBase.FROZEN_OCEAN.id; + } + + protected int a(int... aint) { + return aint[this.a(aint.length)]; + } + + protected int b(int i, int j, int k, int l) { + return j == k && k == l ? j : (i == j && i == k ? i : (i == j && i == l ? i : (i == k && i == l ? i : (i == j && k != l ? i : (i == k && j != l ? i : (i == l && j != k ? i : (j == k && i != l ? j : (j == l && i != k ? j : (k == l && i != j ? k : this.a(new int[] { i, j, k, l})))))))))); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerBiome.java b/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerBiome.java new file mode 100644 index 0000000..7dd9fd7 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerBiome.java @@ -0,0 +1,78 @@ +package net.minecraft.server; + +public class GenLayerBiome extends GenLayer { + + private BiomeBase[] c; + private BiomeBase[] d; + private BiomeBase[] e; + private BiomeBase[] f; + private final CustomWorldSettingsFinal g; + + public GenLayerBiome(long i, GenLayer genlayer, WorldType worldtype, String s) { + super(i); + this.c = new BiomeBase[] { BiomeBase.DESERT, BiomeBase.DESERT, BiomeBase.DESERT, BiomeBase.SAVANNA, BiomeBase.SAVANNA, BiomeBase.PLAINS}; + this.d = new BiomeBase[] { BiomeBase.FOREST, BiomeBase.ROOFED_FOREST, BiomeBase.EXTREME_HILLS, BiomeBase.PLAINS, BiomeBase.BIRCH_FOREST, BiomeBase.SWAMPLAND}; + this.e = new BiomeBase[] { BiomeBase.FOREST, BiomeBase.EXTREME_HILLS, BiomeBase.TAIGA, BiomeBase.PLAINS}; + this.f = new BiomeBase[] { BiomeBase.ICE_PLAINS, BiomeBase.ICE_PLAINS, BiomeBase.ICE_PLAINS, BiomeBase.COLD_TAIGA}; + this.a = genlayer; + if (worldtype == WorldType.NORMAL_1_1) { + this.c = new BiomeBase[] { BiomeBase.DESERT, BiomeBase.FOREST, BiomeBase.EXTREME_HILLS, BiomeBase.SWAMPLAND, BiomeBase.PLAINS, BiomeBase.TAIGA}; + this.g = null; + } else if (worldtype == WorldType.CUSTOMIZED) { + this.g = CustomWorldSettingsFinal.CustomWorldSettings.a(s).b(); + } else { + this.g = null; + } + + } + + public int[] a(int i, int j, int k, int l) { + int[] aint = this.a.a(i, j, k, l); + int[] aint1 = IntCache.a(k * l); + + for (int i1 = 0; i1 < l; ++i1) { + for (int j1 = 0; j1 < k; ++j1) { + this.a((long) (j1 + i), (long) (i1 + j)); + int k1 = aint[j1 + i1 * k]; + int l1 = (k1 & 3840) >> 8; + + k1 &= -3841; + if (this.g != null && this.g.F >= 0) { + aint1[j1 + i1 * k] = this.g.F; + } else if (b(k1)) { + aint1[j1 + i1 * k] = k1; + } else if (k1 == BiomeBase.MUSHROOM_ISLAND.id) { + aint1[j1 + i1 * k] = k1; + } else if (k1 == 1) { + if (l1 > 0) { + if (this.a(3) == 0) { + aint1[j1 + i1 * k] = BiomeBase.MESA_PLATEAU.id; + } else { + aint1[j1 + i1 * k] = BiomeBase.MESA_PLATEAU_F.id; + } + } else { + aint1[j1 + i1 * k] = this.c[this.a(this.c.length)].id; + } + } else if (k1 == 2) { + if (l1 > 0) { + aint1[j1 + i1 * k] = BiomeBase.JUNGLE.id; + } else { + aint1[j1 + i1 * k] = this.d[this.a(this.d.length)].id; + } + } else if (k1 == 3) { + if (l1 > 0) { + aint1[j1 + i1 * k] = BiomeBase.MEGA_TAIGA.id; + } else { + aint1[j1 + i1 * k] = this.e[this.a(this.e.length)].id; + } + } else if (k1 == 4) { + aint1[j1 + i1 * k] = this.f[this.a(this.f.length)].id; + } else { + aint1[j1 + i1 * k] = BiomeBase.MUSHROOM_ISLAND.id; + } + } + } + + return aint1; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerCleaner.java b/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerCleaner.java new file mode 100644 index 0000000..4522236 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerCleaner.java @@ -0,0 +1,23 @@ +package net.minecraft.server; + +public class GenLayerCleaner extends GenLayer { + + public GenLayerCleaner(long i, GenLayer genlayer) { + super(i); + this.a = genlayer; + } + + public int[] a(int i, int j, int k, int l) { + int[] aint = this.a.a(i, j, k, l); + int[] aint1 = IntCache.a(k * l); + + for (int i1 = 0; i1 < l; ++i1) { + for (int j1 = 0; j1 < k; ++j1) { + this.a((long) (j1 + i), (long) (i1 + j)); + aint1[j1 + i1 * k] = aint[j1 + i1 * k] > 0 ? this.a(299999) + 2 : 0; + } + } + + return aint1; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerDeepOcean.java b/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerDeepOcean.java new file mode 100644 index 0000000..71d1df7 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerDeepOcean.java @@ -0,0 +1,53 @@ +package net.minecraft.server; + +public class GenLayerDeepOcean extends GenLayer { + + public GenLayerDeepOcean(long i, GenLayer genlayer) { + super(i); + this.a = genlayer; + } + + public int[] a(int i, int j, int k, int l) { + int i1 = i - 1; + int j1 = j - 1; + int k1 = k + 2; + int l1 = l + 2; + int[] aint = this.a.a(i1, j1, k1, l1); + int[] aint1 = IntCache.a(k * l); + + for (int i2 = 0; i2 < l; ++i2) { + for (int j2 = 0; j2 < k; ++j2) { + int k2 = aint[j2 + 1 + (i2 + 1 - 1) * (k + 2)]; + int l2 = aint[j2 + 1 + 1 + (i2 + 1) * (k + 2)]; + int i3 = aint[j2 + 1 - 1 + (i2 + 1) * (k + 2)]; + int j3 = aint[j2 + 1 + (i2 + 1 + 1) * (k + 2)]; + int k3 = aint[j2 + 1 + (i2 + 1) * k1]; + int l3 = 0; + + if (k2 == 0) { + ++l3; + } + + if (l2 == 0) { + ++l3; + } + + if (i3 == 0) { + ++l3; + } + + if (j3 == 0) { + ++l3; + } + + if (k3 == 0 && l3 > 3) { + aint1[j2 + i2 * k] = BiomeBase.DEEP_OCEAN.id; + } else { + aint1[j2 + i2 * k] = k3; + } + } + } + + return aint1; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerDesert.java b/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerDesert.java new file mode 100644 index 0000000..901beae --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerDesert.java @@ -0,0 +1,114 @@ +package net.minecraft.server; + +public class GenLayerDesert extends GenLayer { + + public GenLayerDesert(long i, GenLayer genlayer) { + super(i); + this.a = genlayer; + } + + public int[] a(int i, int j, int k, int l) { + int[] aint = this.a.a(i - 1, j - 1, k + 2, l + 2); + int[] aint1 = IntCache.a(k * l); + + for (int i1 = 0; i1 < l; ++i1) { + for (int j1 = 0; j1 < k; ++j1) { + this.a((long) (j1 + i), (long) (i1 + j)); + int k1 = aint[j1 + 1 + (i1 + 1) * (k + 2)]; + + if (!this.a(aint, aint1, j1, i1, k, k1, BiomeBase.EXTREME_HILLS.id, BiomeBase.SMALL_MOUNTAINS.id) && !this.b(aint, aint1, j1, i1, k, k1, BiomeBase.MESA_PLATEAU_F.id, BiomeBase.MESA.id) && !this.b(aint, aint1, j1, i1, k, k1, BiomeBase.MESA_PLATEAU.id, BiomeBase.MESA.id) && !this.b(aint, aint1, j1, i1, k, k1, BiomeBase.MEGA_TAIGA.id, BiomeBase.TAIGA.id)) { + int l1; + int i2; + int j2; + int k2; + + if (k1 == BiomeBase.DESERT.id) { + l1 = aint[j1 + 1 + (i1 + 1 - 1) * (k + 2)]; + i2 = aint[j1 + 1 + 1 + (i1 + 1) * (k + 2)]; + j2 = aint[j1 + 1 - 1 + (i1 + 1) * (k + 2)]; + k2 = aint[j1 + 1 + (i1 + 1 + 1) * (k + 2)]; + if (l1 != BiomeBase.ICE_PLAINS.id && i2 != BiomeBase.ICE_PLAINS.id && j2 != BiomeBase.ICE_PLAINS.id && k2 != BiomeBase.ICE_PLAINS.id) { + aint1[j1 + i1 * k] = k1; + } else { + aint1[j1 + i1 * k] = BiomeBase.EXTREME_HILLS_PLUS.id; + } + } else if (k1 == BiomeBase.SWAMPLAND.id) { + l1 = aint[j1 + 1 + (i1 + 1 - 1) * (k + 2)]; + i2 = aint[j1 + 1 + 1 + (i1 + 1) * (k + 2)]; + j2 = aint[j1 + 1 - 1 + (i1 + 1) * (k + 2)]; + k2 = aint[j1 + 1 + (i1 + 1 + 1) * (k + 2)]; + if (l1 != BiomeBase.DESERT.id && i2 != BiomeBase.DESERT.id && j2 != BiomeBase.DESERT.id && k2 != BiomeBase.DESERT.id && l1 != BiomeBase.COLD_TAIGA.id && i2 != BiomeBase.COLD_TAIGA.id && j2 != BiomeBase.COLD_TAIGA.id && k2 != BiomeBase.COLD_TAIGA.id && l1 != BiomeBase.ICE_PLAINS.id && i2 != BiomeBase.ICE_PLAINS.id && j2 != BiomeBase.ICE_PLAINS.id && k2 != BiomeBase.ICE_PLAINS.id) { + if (l1 != BiomeBase.JUNGLE.id && k2 != BiomeBase.JUNGLE.id && i2 != BiomeBase.JUNGLE.id && j2 != BiomeBase.JUNGLE.id) { + aint1[j1 + i1 * k] = k1; + } else { + aint1[j1 + i1 * k] = BiomeBase.JUNGLE_EDGE.id; + } + } else { + aint1[j1 + i1 * k] = BiomeBase.PLAINS.id; + } + } else { + aint1[j1 + i1 * k] = k1; + } + } + } + } + + return aint1; + } + + private boolean a(int[] aint, int[] aint1, int i, int j, int k, int l, int i1, int j1) { + if (!a(l, i1)) { + return false; + } else { + int k1 = aint[i + 1 + (j + 1 - 1) * (k + 2)]; + int l1 = aint[i + 1 + 1 + (j + 1) * (k + 2)]; + int i2 = aint[i + 1 - 1 + (j + 1) * (k + 2)]; + int j2 = aint[i + 1 + (j + 1 + 1) * (k + 2)]; + + if (this.b(k1, i1) && this.b(l1, i1) && this.b(i2, i1) && this.b(j2, i1)) { + aint1[i + j * k] = l; + } else { + aint1[i + j * k] = j1; + } + + return true; + } + } + + private boolean b(int[] aint, int[] aint1, int i, int j, int k, int l, int i1, int j1) { + if (l != i1) { + return false; + } else { + int k1 = aint[i + 1 + (j + 1 - 1) * (k + 2)]; + int l1 = aint[i + 1 + 1 + (j + 1) * (k + 2)]; + int i2 = aint[i + 1 - 1 + (j + 1) * (k + 2)]; + int j2 = aint[i + 1 + (j + 1 + 1) * (k + 2)]; + + if (a(k1, i1) && a(l1, i1) && a(i2, i1) && a(j2, i1)) { + aint1[i + j * k] = l; + } else { + aint1[i + j * k] = j1; + } + + return true; + } + } + + private boolean b(int i, int j) { + if (a(i, j)) { + return true; + } else { + BiomeBase biomebase = BiomeBase.getBiome(i); + BiomeBase biomebase1 = BiomeBase.getBiome(j); + + if (biomebase != null && biomebase1 != null) { + BiomeBase.EnumTemperature biomebase_enumtemperature = biomebase.m(); + BiomeBase.EnumTemperature biomebase_enumtemperature1 = biomebase1.m(); + + return biomebase_enumtemperature == biomebase_enumtemperature1 || biomebase_enumtemperature == BiomeBase.EnumTemperature.MEDIUM || biomebase_enumtemperature1 == BiomeBase.EnumTemperature.MEDIUM; + } else { + return false; + } + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerIcePlains.java b/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerIcePlains.java new file mode 100644 index 0000000..993f058 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerIcePlains.java @@ -0,0 +1,36 @@ +package net.minecraft.server; + +public class GenLayerIcePlains extends GenLayer { + + public GenLayerIcePlains(long i, GenLayer genlayer) { + super(i); + this.a = genlayer; + } + + public int[] a(int i, int j, int k, int l) { + int i1 = i - 1; + int j1 = j - 1; + int k1 = k + 2; + int l1 = l + 2; + int[] aint = this.a.a(i1, j1, k1, l1); + int[] aint1 = IntCache.a(k * l); + + for (int i2 = 0; i2 < l; ++i2) { + for (int j2 = 0; j2 < k; ++j2) { + int k2 = aint[j2 + 1 + (i2 + 1 - 1) * (k + 2)]; + int l2 = aint[j2 + 1 + 1 + (i2 + 1) * (k + 2)]; + int i3 = aint[j2 + 1 - 1 + (i2 + 1) * (k + 2)]; + int j3 = aint[j2 + 1 + (i2 + 1 + 1) * (k + 2)]; + int k3 = aint[j2 + 1 + (i2 + 1) * k1]; + + aint1[j2 + i2 * k] = k3; + this.a((long) (j2 + i), (long) (i2 + j)); + if (k3 == 0 && k2 == 0 && l2 == 0 && i3 == 0 && j3 == 0 && this.a(2) == 0) { + aint1[j2 + i2 * k] = 1; + } + } + } + + return aint1; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerIsland.java b/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerIsland.java new file mode 100644 index 0000000..ff8c936 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerIsland.java @@ -0,0 +1,72 @@ +package net.minecraft.server; + +public class GenLayerIsland extends GenLayer { + + public GenLayerIsland(long i, GenLayer genlayer) { + super(i); + this.a = genlayer; + } + + public int[] a(int i, int j, int k, int l) { + int i1 = i - 1; + int j1 = j - 1; + int k1 = k + 2; + int l1 = l + 2; + int[] aint = this.a.a(i1, j1, k1, l1); + int[] aint1 = IntCache.a(k * l); + + for (int i2 = 0; i2 < l; ++i2) { + for (int j2 = 0; j2 < k; ++j2) { + int k2 = aint[j2 + 0 + (i2 + 0) * k1]; + int l2 = aint[j2 + 2 + (i2 + 0) * k1]; + int i3 = aint[j2 + 0 + (i2 + 2) * k1]; + int j3 = aint[j2 + 2 + (i2 + 2) * k1]; + int k3 = aint[j2 + 1 + (i2 + 1) * k1]; + + this.a((long) (j2 + i), (long) (i2 + j)); + if (k3 == 0 && (k2 != 0 || l2 != 0 || i3 != 0 || j3 != 0)) { + int l3 = 1; + int i4 = 1; + + if (k2 != 0 && this.a(l3++) == 0) { + i4 = k2; + } + + if (l2 != 0 && this.a(l3++) == 0) { + i4 = l2; + } + + if (i3 != 0 && this.a(l3++) == 0) { + i4 = i3; + } + + if (j3 != 0 && this.a(l3++) == 0) { + i4 = j3; + } + + if (this.a(3) == 0) { + aint1[j2 + i2 * k] = i4; + } else if (i4 == 4) { + aint1[j2 + i2 * k] = 4; + } else { + aint1[j2 + i2 * k] = 0; + } + } else if (k3 > 0 && (k2 == 0 || l2 == 0 || i3 == 0 || j3 == 0)) { + if (this.a(5) == 0) { + if (k3 == 4) { + aint1[j2 + i2 * k] = 4; + } else { + aint1[j2 + i2 * k] = 0; + } + } else { + aint1[j2 + i2 * k] = k3; + } + } else { + aint1[j2 + i2 * k] = k3; + } + } + } + + return aint1; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerMushroomIsland.java b/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerMushroomIsland.java new file mode 100644 index 0000000..b04f04f --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerMushroomIsland.java @@ -0,0 +1,37 @@ +package net.minecraft.server; + +public class GenLayerMushroomIsland extends GenLayer { + + public GenLayerMushroomIsland(long i, GenLayer genlayer) { + super(i); + this.a = genlayer; + } + + public int[] a(int i, int j, int k, int l) { + int i1 = i - 1; + int j1 = j - 1; + int k1 = k + 2; + int l1 = l + 2; + int[] aint = this.a.a(i1, j1, k1, l1); + int[] aint1 = IntCache.a(k * l); + + for (int i2 = 0; i2 < l; ++i2) { + for (int j2 = 0; j2 < k; ++j2) { + int k2 = aint[j2 + 0 + (i2 + 0) * k1]; + int l2 = aint[j2 + 2 + (i2 + 0) * k1]; + int i3 = aint[j2 + 0 + (i2 + 2) * k1]; + int j3 = aint[j2 + 2 + (i2 + 2) * k1]; + int k3 = aint[j2 + 1 + (i2 + 1) * k1]; + + this.a((long) (j2 + i), (long) (i2 + j)); + if (k3 == 0 && k2 == 0 && l2 == 0 && i3 == 0 && j3 == 0 && this.a(100) == 0) { + aint1[j2 + i2 * k] = BiomeBase.MUSHROOM_ISLAND.id; + } else { + aint1[j2 + i2 * k] = k3; + } + } + } + + return aint1; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerMushroomShore.java b/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerMushroomShore.java new file mode 100644 index 0000000..96e2c31 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerMushroomShore.java @@ -0,0 +1,114 @@ +package net.minecraft.server; + +public class GenLayerMushroomShore extends GenLayer { + + public GenLayerMushroomShore(long i, GenLayer genlayer) { + super(i); + this.a = genlayer; + } + + public int[] a(int i, int j, int k, int l) { + int[] aint = this.a.a(i - 1, j - 1, k + 2, l + 2); + int[] aint1 = IntCache.a(k * l); + + for (int i1 = 0; i1 < l; ++i1) { + for (int j1 = 0; j1 < k; ++j1) { + this.a((long) (j1 + i), (long) (i1 + j)); + int k1 = aint[j1 + 1 + (i1 + 1) * (k + 2)]; + BiomeBase biomebase = BiomeBase.getBiome(k1); + int l1; + int i2; + int j2; + int k2; + + if (k1 == BiomeBase.MUSHROOM_ISLAND.id) { + l1 = aint[j1 + 1 + (i1 + 1 - 1) * (k + 2)]; + i2 = aint[j1 + 1 + 1 + (i1 + 1) * (k + 2)]; + j2 = aint[j1 + 1 - 1 + (i1 + 1) * (k + 2)]; + k2 = aint[j1 + 1 + (i1 + 1 + 1) * (k + 2)]; + if (l1 != BiomeBase.OCEAN.id && i2 != BiomeBase.OCEAN.id && j2 != BiomeBase.OCEAN.id && k2 != BiomeBase.OCEAN.id) { + aint1[j1 + i1 * k] = k1; + } else { + aint1[j1 + i1 * k] = BiomeBase.MUSHROOM_SHORE.id; + } + } else if (biomebase != null && biomebase.l() == BiomeJungle.class) { + l1 = aint[j1 + 1 + (i1 + 1 - 1) * (k + 2)]; + i2 = aint[j1 + 1 + 1 + (i1 + 1) * (k + 2)]; + j2 = aint[j1 + 1 - 1 + (i1 + 1) * (k + 2)]; + k2 = aint[j1 + 1 + (i1 + 1 + 1) * (k + 2)]; + if (this.c(l1) && this.c(i2) && this.c(j2) && this.c(k2)) { + if (!b(l1) && !b(i2) && !b(j2) && !b(k2)) { + aint1[j1 + i1 * k] = k1; + } else { + aint1[j1 + i1 * k] = BiomeBase.BEACH.id; + } + } else { + aint1[j1 + i1 * k] = BiomeBase.JUNGLE_EDGE.id; + } + } else if (k1 != BiomeBase.EXTREME_HILLS.id && k1 != BiomeBase.EXTREME_HILLS_PLUS.id && k1 != BiomeBase.SMALL_MOUNTAINS.id) { + if (biomebase != null && biomebase.j()) { + this.a(aint, aint1, j1, i1, k, k1, BiomeBase.COLD_BEACH.id); + } else if (k1 != BiomeBase.MESA.id && k1 != BiomeBase.MESA_PLATEAU_F.id) { + if (k1 != BiomeBase.OCEAN.id && k1 != BiomeBase.DEEP_OCEAN.id && k1 != BiomeBase.RIVER.id && k1 != BiomeBase.SWAMPLAND.id) { + l1 = aint[j1 + 1 + (i1 + 1 - 1) * (k + 2)]; + i2 = aint[j1 + 1 + 1 + (i1 + 1) * (k + 2)]; + j2 = aint[j1 + 1 - 1 + (i1 + 1) * (k + 2)]; + k2 = aint[j1 + 1 + (i1 + 1 + 1) * (k + 2)]; + if (!b(l1) && !b(i2) && !b(j2) && !b(k2)) { + aint1[j1 + i1 * k] = k1; + } else { + aint1[j1 + i1 * k] = BiomeBase.BEACH.id; + } + } else { + aint1[j1 + i1 * k] = k1; + } + } else { + l1 = aint[j1 + 1 + (i1 + 1 - 1) * (k + 2)]; + i2 = aint[j1 + 1 + 1 + (i1 + 1) * (k + 2)]; + j2 = aint[j1 + 1 - 1 + (i1 + 1) * (k + 2)]; + k2 = aint[j1 + 1 + (i1 + 1 + 1) * (k + 2)]; + if (!b(l1) && !b(i2) && !b(j2) && !b(k2)) { + if (this.d(l1) && this.d(i2) && this.d(j2) && this.d(k2)) { + aint1[j1 + i1 * k] = k1; + } else { + aint1[j1 + i1 * k] = BiomeBase.DESERT.id; + } + } else { + aint1[j1 + i1 * k] = k1; + } + } + } else { + this.a(aint, aint1, j1, i1, k, k1, BiomeBase.STONE_BEACH.id); + } + } + } + + return aint1; + } + + private void a(int[] aint, int[] aint1, int i, int j, int k, int l, int i1) { + if (b(l)) { + aint1[i + j * k] = l; + } else { + int j1 = aint[i + 1 + (j + 1 - 1) * (k + 2)]; + int k1 = aint[i + 1 + 1 + (j + 1) * (k + 2)]; + int l1 = aint[i + 1 - 1 + (j + 1) * (k + 2)]; + int i2 = aint[i + 1 + (j + 1 + 1) * (k + 2)]; + + if (!b(j1) && !b(k1) && !b(l1) && !b(i2)) { + aint1[i + j * k] = l; + } else { + aint1[i + j * k] = i1; + } + + } + } + + private boolean c(int i) { + return BiomeBase.getBiome(i) != null && BiomeBase.getBiome(i).l() == BiomeJungle.class ? true : i == BiomeBase.JUNGLE_EDGE.id || i == BiomeBase.JUNGLE.id || i == BiomeBase.JUNGLE_HILLS.id || i == BiomeBase.FOREST.id || i == BiomeBase.TAIGA.id || b(i); + } + + private boolean d(int i) { + return BiomeBase.getBiome(i) instanceof BiomeMesa; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerPlains.java b/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerPlains.java new file mode 100644 index 0000000..2a8a99f --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerPlains.java @@ -0,0 +1,33 @@ +package net.minecraft.server; + +public class GenLayerPlains extends GenLayer { + + public GenLayerPlains(long i, GenLayer genlayer) { + super(i); + this.a = genlayer; + } + + public int[] a(int i, int j, int k, int l) { + int[] aint = this.a.a(i - 1, j - 1, k + 2, l + 2); + int[] aint1 = IntCache.a(k * l); + + for (int i1 = 0; i1 < l; ++i1) { + for (int j1 = 0; j1 < k; ++j1) { + this.a((long) (j1 + i), (long) (i1 + j)); + int k1 = aint[j1 + 1 + (i1 + 1) * (k + 2)]; + + if (this.a(57) == 0) { + if (k1 == BiomeBase.PLAINS.id) { + aint1[j1 + i1 * k] = BiomeBase.PLAINS.id + 128; + } else { + aint1[j1 + i1 * k] = k1; + } + } else { + aint1[j1 + i1 * k] = k1; + } + } + } + + return aint1; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerRegionHills.java b/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerRegionHills.java new file mode 100644 index 0000000..5964c0b --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerRegionHills.java @@ -0,0 +1,131 @@ +package net.minecraft.server; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class GenLayerRegionHills extends GenLayer { + + private static final Logger c = LogManager.getLogger(); + private GenLayer d; + + public GenLayerRegionHills(long i, GenLayer genlayer, GenLayer genlayer1) { + super(i); + this.a = genlayer; + this.d = genlayer1; + } + + public int[] a(int i, int j, int k, int l) { + int[] aint = this.a.a(i - 1, j - 1, k + 2, l + 2); + int[] aint1 = this.d.a(i - 1, j - 1, k + 2, l + 2); + int[] aint2 = IntCache.a(k * l); + + for (int i1 = 0; i1 < l; ++i1) { + for (int j1 = 0; j1 < k; ++j1) { + this.a((long) (j1 + i), (long) (i1 + j)); + int k1 = aint[j1 + 1 + (i1 + 1) * (k + 2)]; + int l1 = aint1[j1 + 1 + (i1 + 1) * (k + 2)]; + boolean flag = (l1 - 2) % 29 == 0; + + if (k1 > 255) { + GenLayerRegionHills.c.debug("old! " + k1); + } + + if (k1 != 0 && l1 >= 2 && (l1 - 2) % 29 == 1 && k1 < 128) { + if (BiomeBase.getBiome(k1 + 128) != null) { + aint2[j1 + i1 * k] = k1 + 128; + } else { + aint2[j1 + i1 * k] = k1; + } + } else if (this.a(3) != 0 && !flag) { + aint2[j1 + i1 * k] = k1; + } else { + int i2 = k1; + int j2; + + if (k1 == BiomeBase.DESERT.id) { + i2 = BiomeBase.DESERT_HILLS.id; + } else if (k1 == BiomeBase.FOREST.id) { + i2 = BiomeBase.FOREST_HILLS.id; + } else if (k1 == BiomeBase.BIRCH_FOREST.id) { + i2 = BiomeBase.BIRCH_FOREST_HILLS.id; + } else if (k1 == BiomeBase.ROOFED_FOREST.id) { + i2 = BiomeBase.PLAINS.id; + } else if (k1 == BiomeBase.TAIGA.id) { + i2 = BiomeBase.TAIGA_HILLS.id; + } else if (k1 == BiomeBase.MEGA_TAIGA.id) { + i2 = BiomeBase.MEGA_TAIGA_HILLS.id; + } else if (k1 == BiomeBase.COLD_TAIGA.id) { + i2 = BiomeBase.COLD_TAIGA_HILLS.id; + } else if (k1 == BiomeBase.PLAINS.id) { + if (this.a(3) == 0) { + i2 = BiomeBase.FOREST_HILLS.id; + } else { + i2 = BiomeBase.FOREST.id; + } + } else if (k1 == BiomeBase.ICE_PLAINS.id) { + i2 = BiomeBase.ICE_MOUNTAINS.id; + } else if (k1 == BiomeBase.JUNGLE.id) { + i2 = BiomeBase.JUNGLE_HILLS.id; + } else if (k1 == BiomeBase.OCEAN.id) { + i2 = BiomeBase.DEEP_OCEAN.id; + } else if (k1 == BiomeBase.EXTREME_HILLS.id) { + i2 = BiomeBase.EXTREME_HILLS_PLUS.id; + } else if (k1 == BiomeBase.SAVANNA.id) { + i2 = BiomeBase.SAVANNA_PLATEAU.id; + } else if (a(k1, BiomeBase.MESA_PLATEAU_F.id)) { + i2 = BiomeBase.MESA.id; + } else if (k1 == BiomeBase.DEEP_OCEAN.id && this.a(3) == 0) { + j2 = this.a(2); + if (j2 == 0) { + i2 = BiomeBase.PLAINS.id; + } else { + i2 = BiomeBase.FOREST.id; + } + } + + if (flag && i2 != k1) { + if (BiomeBase.getBiome(i2 + 128) != null) { + i2 += 128; + } else { + i2 = k1; + } + } + + if (i2 == k1) { + aint2[j1 + i1 * k] = k1; + } else { + j2 = aint[j1 + 1 + (i1 + 1 - 1) * (k + 2)]; + int k2 = aint[j1 + 1 + 1 + (i1 + 1) * (k + 2)]; + int l2 = aint[j1 + 1 - 1 + (i1 + 1) * (k + 2)]; + int i3 = aint[j1 + 1 + (i1 + 1 + 1) * (k + 2)]; + int j3 = 0; + + if (a(j2, k1)) { + ++j3; + } + + if (a(k2, k1)) { + ++j3; + } + + if (a(l2, k1)) { + ++j3; + } + + if (a(i3, k1)) { + ++j3; + } + + if (j3 >= 3) { + aint2[j1 + i1 * k] = i2; + } else { + aint2[j1 + i1 * k] = k1; + } + } + } + } + } + + return aint2; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerRiver.java b/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerRiver.java new file mode 100644 index 0000000..d461683 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerRiver.java @@ -0,0 +1,40 @@ +package net.minecraft.server; + +public class GenLayerRiver extends GenLayer { + + public GenLayerRiver(long i, GenLayer genlayer) { + super(i); + super.a = genlayer; + } + + public int[] a(int i, int j, int k, int l) { + int i1 = i - 1; + int j1 = j - 1; + int k1 = k + 2; + int l1 = l + 2; + int[] aint = this.a.a(i1, j1, k1, l1); + int[] aint1 = IntCache.a(k * l); + + for (int i2 = 0; i2 < l; ++i2) { + for (int j2 = 0; j2 < k; ++j2) { + int k2 = this.c(aint[j2 + 0 + (i2 + 1) * k1]); + int l2 = this.c(aint[j2 + 2 + (i2 + 1) * k1]); + int i3 = this.c(aint[j2 + 1 + (i2 + 0) * k1]); + int j3 = this.c(aint[j2 + 1 + (i2 + 2) * k1]); + int k3 = this.c(aint[j2 + 1 + (i2 + 1) * k1]); + + if (k3 == k2 && k3 == i3 && k3 == l2 && k3 == j3) { + aint1[j2 + i2 * k] = -1; + } else { + aint1[j2 + i2 * k] = BiomeBase.RIVER.id; + } + } + } + + return aint1; + } + + private int c(int i) { + return i >= 2 ? 2 + (i & 1) : i; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerRiverMix.java b/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerRiverMix.java new file mode 100644 index 0000000..9f02d40 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerRiverMix.java @@ -0,0 +1,45 @@ +package net.minecraft.server; + +public class GenLayerRiverMix extends GenLayer { + + private GenLayer c; + private GenLayer d; + + public GenLayerRiverMix(long i, GenLayer genlayer, GenLayer genlayer1) { + super(i); + this.c = genlayer; + this.d = genlayer1; + } + + public void a(long i) { + this.c.a(i); + this.d.a(i); + super.a(i); + } + + public int[] a(int i, int j, int k, int l) { + int[] aint = this.c.a(i, j, k, l); + int[] aint1 = this.d.a(i, j, k, l); + int[] aint2 = IntCache.a(k * l); + + for (int i1 = 0; i1 < k * l; ++i1) { + if (aint[i1] != BiomeBase.OCEAN.id && aint[i1] != BiomeBase.DEEP_OCEAN.id) { + if (aint1[i1] == BiomeBase.RIVER.id) { + if (aint[i1] == BiomeBase.ICE_PLAINS.id) { + aint2[i1] = BiomeBase.FROZEN_RIVER.id; + } else if (aint[i1] != BiomeBase.MUSHROOM_ISLAND.id && aint[i1] != BiomeBase.MUSHROOM_SHORE.id) { + aint2[i1] = aint1[i1] & 255; + } else { + aint2[i1] = BiomeBase.MUSHROOM_SHORE.id; + } + } else { + aint2[i1] = aint[i1]; + } + } else { + aint2[i1] = aint[i1]; + } + } + + return aint2; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerSmooth.java b/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerSmooth.java new file mode 100644 index 0000000..6dd1163 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerSmooth.java @@ -0,0 +1,49 @@ +package net.minecraft.server; + +public class GenLayerSmooth extends GenLayer { + + public GenLayerSmooth(long i, GenLayer genlayer) { + super(i); + super.a = genlayer; + } + + public int[] a(int i, int j, int k, int l) { + int i1 = i - 1; + int j1 = j - 1; + int k1 = k + 2; + int l1 = l + 2; + int[] aint = this.a.a(i1, j1, k1, l1); + int[] aint1 = IntCache.a(k * l); + + for (int i2 = 0; i2 < l; ++i2) { + for (int j2 = 0; j2 < k; ++j2) { + int k2 = aint[j2 + 0 + (i2 + 1) * k1]; + int l2 = aint[j2 + 2 + (i2 + 1) * k1]; + int i3 = aint[j2 + 1 + (i2 + 0) * k1]; + int j3 = aint[j2 + 1 + (i2 + 2) * k1]; + int k3 = aint[j2 + 1 + (i2 + 1) * k1]; + + if (k2 == l2 && i3 == j3) { + this.a((long) (j2 + i), (long) (i2 + j)); + if (this.a(2) == 0) { + k3 = k2; + } else { + k3 = i3; + } + } else { + if (k2 == l2) { + k3 = k2; + } + + if (i3 == j3) { + k3 = i3; + } + } + + aint1[j2 + i2 * k] = k3; + } + } + + return aint1; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerSpecial.java b/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerSpecial.java new file mode 100644 index 0000000..33b4cfb --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerSpecial.java @@ -0,0 +1,144 @@ +package net.minecraft.server; + +public class GenLayerSpecial extends GenLayer { + + private final GenLayerSpecial.EnumGenLayerSpecial c; + + public GenLayerSpecial(long i, GenLayer genlayer, GenLayerSpecial.EnumGenLayerSpecial genlayerspecial_enumgenlayerspecial) { + super(i); + this.a = genlayer; + this.c = genlayerspecial_enumgenlayerspecial; + } + + public int[] a(int i, int j, int k, int l) { + switch (GenLayerSpecial.SyntheticClass_1.a[this.c.ordinal()]) { + case 1: + default: + return this.c(i, j, k, l); + + case 2: + return this.d(i, j, k, l); + + case 3: + return this.e(i, j, k, l); + } + } + + private int[] c(int i, int j, int k, int l) { + int i1 = i - 1; + int j1 = j - 1; + int k1 = 1 + k + 1; + int l1 = 1 + l + 1; + int[] aint = this.a.a(i1, j1, k1, l1); + int[] aint1 = IntCache.a(k * l); + + for (int i2 = 0; i2 < l; ++i2) { + for (int j2 = 0; j2 < k; ++j2) { + this.a((long) (j2 + i), (long) (i2 + j)); + int k2 = aint[j2 + 1 + (i2 + 1) * k1]; + + if (k2 == 1) { + int l2 = aint[j2 + 1 + (i2 + 1 - 1) * k1]; + int i3 = aint[j2 + 1 + 1 + (i2 + 1) * k1]; + int j3 = aint[j2 + 1 - 1 + (i2 + 1) * k1]; + int k3 = aint[j2 + 1 + (i2 + 1 + 1) * k1]; + boolean flag = l2 == 3 || i3 == 3 || j3 == 3 || k3 == 3; + boolean flag1 = l2 == 4 || i3 == 4 || j3 == 4 || k3 == 4; + + if (flag || flag1) { + k2 = 2; + } + } + + aint1[j2 + i2 * k] = k2; + } + } + + return aint1; + } + + private int[] d(int i, int j, int k, int l) { + int i1 = i - 1; + int j1 = j - 1; + int k1 = 1 + k + 1; + int l1 = 1 + l + 1; + int[] aint = this.a.a(i1, j1, k1, l1); + int[] aint1 = IntCache.a(k * l); + + for (int i2 = 0; i2 < l; ++i2) { + for (int j2 = 0; j2 < k; ++j2) { + int k2 = aint[j2 + 1 + (i2 + 1) * k1]; + + if (k2 == 4) { + int l2 = aint[j2 + 1 + (i2 + 1 - 1) * k1]; + int i3 = aint[j2 + 1 + 1 + (i2 + 1) * k1]; + int j3 = aint[j2 + 1 - 1 + (i2 + 1) * k1]; + int k3 = aint[j2 + 1 + (i2 + 1 + 1) * k1]; + boolean flag = l2 == 2 || i3 == 2 || j3 == 2 || k3 == 2; + boolean flag1 = l2 == 1 || i3 == 1 || j3 == 1 || k3 == 1; + + if (flag1 || flag) { + k2 = 3; + } + } + + aint1[j2 + i2 * k] = k2; + } + } + + return aint1; + } + + private int[] e(int i, int j, int k, int l) { + int[] aint = this.a.a(i, j, k, l); + int[] aint1 = IntCache.a(k * l); + + for (int i1 = 0; i1 < l; ++i1) { + for (int j1 = 0; j1 < k; ++j1) { + this.a((long) (j1 + i), (long) (i1 + j)); + int k1 = aint[j1 + i1 * k]; + + if (k1 != 0 && this.a(13) == 0) { + k1 |= 1 + this.a(15) << 8 & 3840; + } + + aint1[j1 + i1 * k] = k1; + } + } + + return aint1; + } + + static class SyntheticClass_1 { + + static final int[] a = new int[GenLayerSpecial.EnumGenLayerSpecial.values().length]; + + static { + try { + GenLayerSpecial.SyntheticClass_1.a[GenLayerSpecial.EnumGenLayerSpecial.COOL_WARM.ordinal()] = 1; + } catch (NoSuchFieldError nosuchfielderror) { + ; + } + + try { + GenLayerSpecial.SyntheticClass_1.a[GenLayerSpecial.EnumGenLayerSpecial.HEAT_ICE.ordinal()] = 2; + } catch (NoSuchFieldError nosuchfielderror1) { + ; + } + + try { + GenLayerSpecial.SyntheticClass_1.a[GenLayerSpecial.EnumGenLayerSpecial.SPECIAL.ordinal()] = 3; + } catch (NoSuchFieldError nosuchfielderror2) { + ; + } + + } + } + + public static enum EnumGenLayerSpecial { + + COOL_WARM, HEAT_ICE, SPECIAL; + + private EnumGenLayerSpecial() {} + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerTopSoil.java b/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerTopSoil.java new file mode 100644 index 0000000..9e26498 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerTopSoil.java @@ -0,0 +1,44 @@ +package net.minecraft.server; + +public class GenLayerTopSoil extends GenLayer { + + public GenLayerTopSoil(long i, GenLayer genlayer) { + super(i); + this.a = genlayer; + } + + public int[] a(int i, int j, int k, int l) { + int i1 = i - 1; + int j1 = j - 1; + int k1 = k + 2; + int l1 = l + 2; + int[] aint = this.a.a(i1, j1, k1, l1); + int[] aint1 = IntCache.a(k * l); + + for (int i2 = 0; i2 < l; ++i2) { + for (int j2 = 0; j2 < k; ++j2) { + int k2 = aint[j2 + 1 + (i2 + 1) * k1]; + + this.a((long) (j2 + i), (long) (i2 + j)); + if (k2 == 0) { + aint1[j2 + i2 * k] = 0; + } else { + int l2 = this.a(6); + byte b0; + + if (l2 == 0) { + b0 = 4; + } else if (l2 <= 1) { + b0 = 3; + } else { + b0 = 1; + } + + aint1[j2 + i2 * k] = b0; + } + } + } + + return aint1; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerZoom.java b/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerZoom.java new file mode 100644 index 0000000..9bb3731 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerZoom.java @@ -0,0 +1,59 @@ +package net.minecraft.server; + +public class GenLayerZoom extends GenLayer { + + public GenLayerZoom(long i, GenLayer genlayer) { + super(i); + super.a = genlayer; + } + + public int[] a(int i, int j, int k, int l) { + int i1 = i >> 1; + int j1 = j >> 1; + int k1 = (k >> 1) + 2; + int l1 = (l >> 1) + 2; + int[] aint = this.a.a(i1, j1, k1, l1); + int i2 = k1 - 1 << 1; + int j2 = l1 - 1 << 1; + int[] aint1 = IntCache.a(i2 * j2); + + int k2; + + for (int l2 = 0; l2 < l1 - 1; ++l2) { + k2 = (l2 << 1) * i2; + int i3 = 0; + int j3 = aint[i3 + 0 + (l2 + 0) * k1]; + + for (int k3 = aint[i3 + 0 + (l2 + 1) * k1]; i3 < k1 - 1; ++i3) { + this.a((long) (i3 + i1 << 1), (long) (l2 + j1 << 1)); + int l3 = aint[i3 + 1 + (l2 + 0) * k1]; + int i4 = aint[i3 + 1 + (l2 + 1) * k1]; + + aint1[k2] = j3; + aint1[k2++ + i2] = this.a(new int[] { j3, k3}); + aint1[k2] = this.a(new int[] { j3, l3}); + aint1[k2++ + i2] = this.b(j3, l3, k3, i4); + j3 = l3; + k3 = i4; + } + } + + int[] aint2 = IntCache.a(k * l); + + for (k2 = 0; k2 < l; ++k2) { + System.arraycopy(aint1, (k2 + (j & 1)) * i2 + (i & 1), aint2, k2 * k, k); + } + + return aint2; + } + + public static GenLayer b(long i, GenLayer genlayer, int j) { + Object object = genlayer; + + for (int k = 0; k < j; ++k) { + object = new GenLayerZoom(i + (long) k, (GenLayer) object); + } + + return (GenLayer) object; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerZoomFuzzy.java b/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerZoomFuzzy.java new file mode 100644 index 0000000..b139208 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerZoomFuzzy.java @@ -0,0 +1,12 @@ +package net.minecraft.server; + +public class GenLayerZoomFuzzy extends GenLayerZoom { + + public GenLayerZoomFuzzy(long i, GenLayer genlayer) { + super(i, genlayer); + } + + protected int b(int i, int j, int k, int l) { + return this.a(new int[] { i, j, k, l}); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerZoomVoronoi.java b/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerZoomVoronoi.java new file mode 100644 index 0000000..4b71fcd --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/GenLayerZoomVoronoi.java @@ -0,0 +1,83 @@ +package net.minecraft.server; + +public class GenLayerZoomVoronoi extends GenLayer { + + public GenLayerZoomVoronoi(long i, GenLayer genlayer) { + super(i); + super.a = genlayer; + } + + public int[] a(int i, int j, int k, int l) { + i -= 2; + j -= 2; + int i1 = i >> 2; + int j1 = j >> 2; + int k1 = (k >> 2) + 2; + int l1 = (l >> 2) + 2; + int[] aint = this.a.a(i1, j1, k1, l1); + int i2 = k1 - 1 << 2; + int j2 = l1 - 1 << 2; + int[] aint1 = IntCache.a(i2 * j2); + + int k2; + + for (int l2 = 0; l2 < l1 - 1; ++l2) { + k2 = 0; + int i3 = aint[k2 + 0 + (l2 + 0) * k1]; + + for (int j3 = aint[k2 + 0 + (l2 + 1) * k1]; k2 < k1 - 1; ++k2) { + double d0 = 3.6D; + + this.a((long) (k2 + i1 << 2), (long) (l2 + j1 << 2)); + double d1 = ((double) this.a(1024) / 1024.0D - 0.5D) * 3.6D; + double d2 = ((double) this.a(1024) / 1024.0D - 0.5D) * 3.6D; + + this.a((long) (k2 + i1 + 1 << 2), (long) (l2 + j1 << 2)); + double d3 = ((double) this.a(1024) / 1024.0D - 0.5D) * 3.6D + 4.0D; + double d4 = ((double) this.a(1024) / 1024.0D - 0.5D) * 3.6D; + + this.a((long) (k2 + i1 << 2), (long) (l2 + j1 + 1 << 2)); + double d5 = ((double) this.a(1024) / 1024.0D - 0.5D) * 3.6D; + double d6 = ((double) this.a(1024) / 1024.0D - 0.5D) * 3.6D + 4.0D; + + this.a((long) (k2 + i1 + 1 << 2), (long) (l2 + j1 + 1 << 2)); + double d7 = ((double) this.a(1024) / 1024.0D - 0.5D) * 3.6D + 4.0D; + double d8 = ((double) this.a(1024) / 1024.0D - 0.5D) * 3.6D + 4.0D; + int k3 = aint[k2 + 1 + (l2 + 0) * k1] & 255; + int l3 = aint[k2 + 1 + (l2 + 1) * k1] & 255; + + for (int i4 = 0; i4 < 4; ++i4) { + int j4 = ((l2 << 2) + i4) * i2 + (k2 << 2); + + for (int k4 = 0; k4 < 4; ++k4) { + double d9 = ((double) i4 - d2) * ((double) i4 - d2) + ((double) k4 - d1) * ((double) k4 - d1); + double d10 = ((double) i4 - d4) * ((double) i4 - d4) + ((double) k4 - d3) * ((double) k4 - d3); + double d11 = ((double) i4 - d6) * ((double) i4 - d6) + ((double) k4 - d5) * ((double) k4 - d5); + double d12 = ((double) i4 - d8) * ((double) i4 - d8) + ((double) k4 - d7) * ((double) k4 - d7); + + if (d9 < d10 && d9 < d11 && d9 < d12) { + aint1[j4++] = i3; + } else if (d10 < d9 && d10 < d11 && d10 < d12) { + aint1[j4++] = k3; + } else if (d11 < d9 && d11 < d10 && d11 < d12) { + aint1[j4++] = j3; + } else { + aint1[j4++] = l3; + } + } + } + + i3 = k3; + j3 = l3; + } + } + + int[] aint2 = IntCache.a(k * l); + + for (k2 = 0; k2 < l; ++k2) { + System.arraycopy(aint1, (k2 + (j & 3)) * i2 + (i & 3), aint2, k2 * k, k); + } + + return aint2; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/GenericAttributes.java b/eSpigot-Server/src/main/java/net/minecraft/server/GenericAttributes.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/GenericAttributes.java rename to eSpigot-Server/src/main/java/net/minecraft/server/GenericAttributes.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/GroupDataEntity.java b/eSpigot-Server/src/main/java/net/minecraft/server/GroupDataEntity.java new file mode 100644 index 0000000..464d2fa --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/GroupDataEntity.java @@ -0,0 +1,3 @@ +package net.minecraft.server; + +public interface GroupDataEntity {} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/GuiStatsComponent.java b/eSpigot-Server/src/main/java/net/minecraft/server/GuiStatsComponent.java new file mode 100644 index 0000000..0325109 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/GuiStatsComponent.java @@ -0,0 +1,76 @@ +package net.minecraft.server; + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.text.DecimalFormat; +import javax.swing.JComponent; +import javax.swing.Timer; + +public class GuiStatsComponent extends JComponent { + + private static final DecimalFormat a = new DecimalFormat("########0.000"); + private int[] b = new int[256]; + private int c; + private String[] d = new String[11]; + private final MinecraftServer e; + + public GuiStatsComponent(MinecraftServer minecraftserver) { + this.e = minecraftserver; + this.setPreferredSize(new Dimension(456, 246)); + this.setMinimumSize(new Dimension(456, 246)); + this.setMaximumSize(new Dimension(456, 246)); + (new Timer(500, new ActionListener() { + public void actionPerformed(ActionEvent actionevent) { + GuiStatsComponent.this.a(); + } + })).start(); + this.setBackground(Color.BLACK); + } + + private void a() { + long i = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory(); + + System.gc(); + this.d[0] = "Memory use: " + i / 1024L / 1024L + " mb (" + Runtime.getRuntime().freeMemory() * 100L / Runtime.getRuntime().maxMemory() + "% free)"; + this.d[1] = "Avg tick: " + GuiStatsComponent.a.format(this.a(this.e.h) * 1.0E-6D) + " ms"; + this.repaint(); + } + + private double a(long[] along) { + long i = 0L; + + for (int j = 0; j < along.length; ++j) { + i += along[j]; + } + + return (double) i / (double) along.length; + } + + public void paint(Graphics graphics) { + graphics.setColor(new Color(16777215)); + graphics.fillRect(0, 0, 456, 246); + + int i; + + for (i = 0; i < 256; ++i) { + int j = this.b[i + this.c & 255]; + + graphics.setColor(new Color(j + 28 << 16)); + graphics.fillRect(i, 100 - j, 1, j); + } + + graphics.setColor(Color.BLACK); + + for (i = 0; i < this.d.length; ++i) { + String s = this.d[i]; + + if (s != null) { + graphics.drawString(s, 32, 116 + i * 16); + } + } + + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/HandshakeListener.java b/eSpigot-Server/src/main/java/net/minecraft/server/HandshakeListener.java similarity index 67% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/HandshakeListener.java rename to eSpigot-Server/src/main/java/net/minecraft/server/HandshakeListener.java index 7ff8cae..4d40a43 100644 --- a/TacoSpigot-Server/src/main/java/net/minecraft/server/HandshakeListener.java +++ b/eSpigot-Server/src/main/java/net/minecraft/server/HandshakeListener.java @@ -29,34 +29,36 @@ public class HandshakeListener implements PacketHandshakingInListener { // CraftBukkit start - Connection throttle try { - long currentTime = System.currentTimeMillis(); - long connectionThrottle = MinecraftServer.getServer().server.getConnectionThrottle(); - InetAddress address = ((java.net.InetSocketAddress) this.b.getSocketAddress()).getAddress(); + if (!(this.b.channel.localAddress() instanceof io.netty.channel.unix.DomainSocketAddress)) { // PandaSpigot - the connection throttle is useless when you have a Unix domain socket + long currentTime = System.currentTimeMillis(); + long connectionThrottle = MinecraftServer.getServer().server.getConnectionThrottle(); + InetAddress address = ((java.net.InetSocketAddress) this.b.getSocketAddress()).getAddress(); + + synchronized (throttleTracker) { + if (throttleTracker.containsKey(address) && !"127.0.0.1".equals(address.getHostAddress()) && currentTime - throttleTracker.get(address) < connectionThrottle) { + throttleTracker.put(address, currentTime); + chatcomponenttext = new ChatComponentText("Connection throttled! Please wait before reconnecting."); + this.b.handle(new PacketLoginOutDisconnect(chatcomponenttext)); + this.b.close(chatcomponenttext); + return; + } - synchronized (throttleTracker) { - if (throttleTracker.containsKey(address) && !"127.0.0.1".equals(address.getHostAddress()) && currentTime - throttleTracker.get(address) < connectionThrottle) { throttleTracker.put(address, currentTime); - chatcomponenttext = new ChatComponentText("Connection throttled! Please wait before reconnecting."); - this.b.handle(new PacketLoginOutDisconnect(chatcomponenttext)); - this.b.close(chatcomponenttext); - return; - } + throttleCounter++; + if (throttleCounter > 200) { + throttleCounter = 0; - throttleTracker.put(address, currentTime); - throttleCounter++; - if (throttleCounter > 200) { - throttleCounter = 0; - - // Cleanup stale entries - java.util.Iterator iter = throttleTracker.entrySet().iterator(); - while (iter.hasNext()) { - java.util.Map.Entry entry = (java.util.Map.Entry) iter.next(); - if (entry.getValue() > connectionThrottle) { - iter.remove(); + // Cleanup stale entries + java.util.Iterator iter = throttleTracker.entrySet().iterator(); + while (iter.hasNext()) { + java.util.Map.Entry entry = (java.util.Map.Entry) iter.next(); + if (entry.getValue() > connectionThrottle) { + iter.remove(); + } } } } - } + } // PandaSpigot - add closing bracket for if check above } catch (Throwable t) { org.apache.logging.log4j.LogManager.getLogger().debug("Failed to check connection throttle", t); } @@ -76,8 +78,11 @@ public class HandshakeListener implements PacketHandshakingInListener { if (org.spigotmc.SpigotConfig.bungee) { String[] split = packethandshakinginsetprotocol.hostname.split("\00"); if ( split.length == 3 || split.length == 4 ) { + // PandaSpigot start - Unix domain socket support + java.net.SocketAddress socketAddress = b.getSocketAddress(); packethandshakinginsetprotocol.hostname = split[0]; - b.l = new java.net.InetSocketAddress(split[1], ((java.net.InetSocketAddress) b.getSocketAddress()).getPort()); + b.l = new java.net.InetSocketAddress(split[1], socketAddress instanceof java.net.InetSocketAddress ? ((java.net.InetSocketAddress) socketAddress).getPort() : 0); + // PandaSpigot end b.spoofedUUID = com.mojang.util.UUIDTypeAdapter.fromString( split[2] ); } else { diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/HttpUtilities.java b/eSpigot-Server/src/main/java/net/minecraft/server/HttpUtilities.java new file mode 100644 index 0000000..4132d8b --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/HttpUtilities.java @@ -0,0 +1,105 @@ +package net.minecraft.server; + +import com.google.common.util.concurrent.ListeningExecutorService; +import com.google.common.util.concurrent.MoreExecutors; +import com.google.common.util.concurrent.ThreadFactoryBuilder; +import java.io.BufferedReader; +import java.io.DataOutputStream; +import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; +import java.net.HttpURLConnection; +import java.net.Proxy; +import java.net.URL; +import java.net.URLEncoder; +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; +import java.util.concurrent.Executors; +import java.util.concurrent.atomic.AtomicInteger; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class HttpUtilities { + + public static final ListeningExecutorService a = MoreExecutors.listeningDecorator(Executors.newCachedThreadPool((new ThreadFactoryBuilder()).setDaemon(true).setNameFormat("Downloader %d").build())); + private static final AtomicInteger b = new AtomicInteger(0); + private static final Logger c = LogManager.getLogger(); + + public static String a(Map map) { + StringBuilder stringbuilder = new StringBuilder(); + Iterator iterator = map.entrySet().iterator(); + + while (iterator.hasNext()) { + Entry entry = (Entry) iterator.next(); + + if (stringbuilder.length() > 0) { + stringbuilder.append('&'); + } + + try { + stringbuilder.append(URLEncoder.encode((String) entry.getKey(), "UTF-8")); + } catch (UnsupportedEncodingException unsupportedencodingexception) { + unsupportedencodingexception.printStackTrace(); + } + + if (entry.getValue() != null) { + stringbuilder.append('='); + + try { + stringbuilder.append(URLEncoder.encode(entry.getValue().toString(), "UTF-8")); + } catch (UnsupportedEncodingException unsupportedencodingexception1) { + unsupportedencodingexception1.printStackTrace(); + } + } + } + + return stringbuilder.toString(); + } + + public static String a(URL url, Map map, boolean flag) { + return a(url, a(map), flag); + } + + private static String a(URL url, String s, boolean flag) { + try { + Proxy proxy = MinecraftServer.getServer() == null ? null : MinecraftServer.getServer().ay(); + + if (proxy == null) { + proxy = Proxy.NO_PROXY; + } + + HttpURLConnection httpurlconnection = (HttpURLConnection) url.openConnection(proxy); + + httpurlconnection.setRequestMethod("POST"); + httpurlconnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); + httpurlconnection.setRequestProperty("Content-Length", "" + s.getBytes().length); + httpurlconnection.setRequestProperty("Content-Language", "en-US"); + httpurlconnection.setUseCaches(false); + httpurlconnection.setDoInput(true); + httpurlconnection.setDoOutput(true); + DataOutputStream dataoutputstream = new DataOutputStream(httpurlconnection.getOutputStream()); + + dataoutputstream.writeBytes(s); + dataoutputstream.flush(); + dataoutputstream.close(); + BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(httpurlconnection.getInputStream())); + StringBuffer stringbuffer = new StringBuffer(); + + String s1; + + while ((s1 = bufferedreader.readLine()) != null) { + stringbuffer.append(s1); + stringbuffer.append('\r'); + } + + bufferedreader.close(); + return stringbuffer.toString(); + } catch (Exception exception) { + if (!flag) { + HttpUtilities.c.error("Could not post to " + url, exception); + } + + return ""; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/IAnimal.java b/eSpigot-Server/src/main/java/net/minecraft/server/IAnimal.java new file mode 100644 index 0000000..78d3914 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/IAnimal.java @@ -0,0 +1,3 @@ +package net.minecraft.server; + +public interface IAnimal {} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/IAsyncChunkSaver.java b/eSpigot-Server/src/main/java/net/minecraft/server/IAsyncChunkSaver.java new file mode 100644 index 0000000..dde4c47 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/IAsyncChunkSaver.java @@ -0,0 +1,6 @@ +package net.minecraft.server; + +public interface IAsyncChunkSaver { + + boolean c(); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/IAsyncTaskHandler.java b/eSpigot-Server/src/main/java/net/minecraft/server/IAsyncTaskHandler.java new file mode 100644 index 0000000..41cdbe7 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/IAsyncTaskHandler.java @@ -0,0 +1,10 @@ +package net.minecraft.server; + +import com.google.common.util.concurrent.ListenableFuture; + +public interface IAsyncTaskHandler { + + ListenableFuture postToMainThread(Runnable runnable); + + boolean isMainThread(); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/IAttribute.java b/eSpigot-Server/src/main/java/net/minecraft/server/IAttribute.java new file mode 100644 index 0000000..e76405d --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/IAttribute.java @@ -0,0 +1,14 @@ +package net.minecraft.server; + +public interface IAttribute { + + String getName(); + + double a(double d0); + + double b(); + + boolean c(); + + IAttribute d(); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/IBlockAccess.java b/eSpigot-Server/src/main/java/net/minecraft/server/IBlockAccess.java new file mode 100644 index 0000000..304e827 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/IBlockAccess.java @@ -0,0 +1,12 @@ +package net.minecraft.server; + +public interface IBlockAccess { + + TileEntity getTileEntity(BlockPosition blockposition); + + IBlockData getType(BlockPosition blockposition); + + boolean isEmpty(BlockPosition blockposition); + + int getBlockPower(BlockPosition blockposition, EnumDirection enumdirection); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/IBlockData.java b/eSpigot-Server/src/main/java/net/minecraft/server/IBlockData.java new file mode 100644 index 0000000..3c3ab0c --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/IBlockData.java @@ -0,0 +1,19 @@ +package net.minecraft.server; + +import com.google.common.collect.ImmutableMap; +import java.util.Collection; + +public interface IBlockData { + + Collection a(); + + > T get(IBlockState iblockstate); + + , V extends T> IBlockData set(IBlockState iblockstate, V v0); + + > IBlockData a(IBlockState iblockstate); + + ImmutableMap b(); + + Block getBlock(); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/IBlockFragilePlantElement.java b/eSpigot-Server/src/main/java/net/minecraft/server/IBlockFragilePlantElement.java new file mode 100644 index 0000000..2df9744 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/IBlockFragilePlantElement.java @@ -0,0 +1,12 @@ +package net.minecraft.server; + +import java.util.Random; + +public interface IBlockFragilePlantElement { + + boolean a(World world, BlockPosition blockposition, IBlockData iblockdata, boolean flag); + + boolean a(World world, Random random, BlockPosition blockposition, IBlockData iblockdata); + + void b(World world, Random random, BlockPosition blockposition, IBlockData iblockdata); +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/IBlockState.java b/eSpigot-Server/src/main/java/net/minecraft/server/IBlockState.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/IBlockState.java rename to eSpigot-Server/src/main/java/net/minecraft/server/IBlockState.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/IChatBaseComponent.java b/eSpigot-Server/src/main/java/net/minecraft/server/IChatBaseComponent.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/IChatBaseComponent.java rename to eSpigot-Server/src/main/java/net/minecraft/server/IChatBaseComponent.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/IChunkLoader.java b/eSpigot-Server/src/main/java/net/minecraft/server/IChunkLoader.java new file mode 100644 index 0000000..df4c1e0 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/IChunkLoader.java @@ -0,0 +1,16 @@ +package net.minecraft.server; + +import java.io.IOException; + +public interface IChunkLoader { + + Chunk a(World world, int i, int j) throws IOException; + + void a(World world, Chunk chunk) throws IOException, ExceptionWorldConflict; + + void b(World world, Chunk chunk) throws IOException; + + void a(); + + void b(); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/IChunkProvider.java b/eSpigot-Server/src/main/java/net/minecraft/server/IChunkProvider.java new file mode 100644 index 0000000..c68ffe0 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/IChunkProvider.java @@ -0,0 +1,34 @@ +package net.minecraft.server; + +import java.util.List; + +public interface IChunkProvider { + + boolean isChunkLoaded(int i, int j); + + Chunk getOrCreateChunk(int i, int j); + + Chunk getChunkAt(BlockPosition blockposition); + + void getChunkAt(IChunkProvider ichunkprovider, int i, int j); + + boolean a(IChunkProvider ichunkprovider, Chunk chunk, int i, int j); + + boolean saveChunks(boolean flag, IProgressUpdate iprogressupdate); + + boolean unloadChunks(); + + boolean canSave(); + + String getName(); + + List getMobsFor(EnumCreatureType enumcreaturetype, BlockPosition blockposition); + + BlockPosition findNearestMapFeature(World world, String s, BlockPosition blockposition); + + int getLoadedChunks(); + + void recreateStructures(Chunk chunk, int i, int j); + + void c(); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ICommand.java b/eSpigot-Server/src/main/java/net/minecraft/server/ICommand.java new file mode 100644 index 0000000..7c87a09 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ICommand.java @@ -0,0 +1,20 @@ +package net.minecraft.server; + +import java.util.List; + +public interface ICommand extends Comparable { + + String getCommand(); + + String getUsage(ICommandListener icommandlistener); + + List b(); + + void execute(ICommandListener icommandlistener, String[] astring) throws CommandException; + + boolean canUse(ICommandListener icommandlistener); + + List tabComplete(ICommandListener icommandlistener, String[] astring, BlockPosition blockposition); + + boolean isListStart(String[] astring, int i); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ICommandDispatcher.java b/eSpigot-Server/src/main/java/net/minecraft/server/ICommandDispatcher.java new file mode 100644 index 0000000..6fe2bba --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ICommandDispatcher.java @@ -0,0 +1,6 @@ +package net.minecraft.server; + +public interface ICommandDispatcher { + + void a(ICommandListener icommandlistener, ICommand icommand, int i, String s, Object... aobject); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ICommandHandler.java b/eSpigot-Server/src/main/java/net/minecraft/server/ICommandHandler.java new file mode 100644 index 0000000..1cc3bc0 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ICommandHandler.java @@ -0,0 +1,15 @@ +package net.minecraft.server; + +import java.util.List; +import java.util.Map; + +public interface ICommandHandler { + + int a(ICommandListener icommandlistener, String s); + + List a(ICommandListener icommandlistener, String s, BlockPosition blockposition); + + List a(ICommandListener icommandlistener); + + Map getCommands(); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ICommandListener.java b/eSpigot-Server/src/main/java/net/minecraft/server/ICommandListener.java new file mode 100644 index 0000000..443e967 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ICommandListener.java @@ -0,0 +1,24 @@ +package net.minecraft.server; + +public interface ICommandListener { + + String getName(); + + IChatBaseComponent getScoreboardDisplayName(); + + void sendMessage(IChatBaseComponent ichatbasecomponent); + + boolean a(int i, String s); + + BlockPosition getChunkCoordinates(); + + Vec3D d(); + + World getWorld(); + + Entity f(); + + boolean getSendCommandFeedback(); + + void a(CommandObjectiveExecutor.EnumCommandResult commandobjectiveexecutor_enumcommandresult, int i); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/IComplex.java b/eSpigot-Server/src/main/java/net/minecraft/server/IComplex.java new file mode 100644 index 0000000..b92a1f9 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/IComplex.java @@ -0,0 +1,8 @@ +package net.minecraft.server; + +public interface IComplex { + + World a(); + + boolean a(EntityComplexPart entitycomplexpart, DamageSource damagesource, float f); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/IContainer.java b/eSpigot-Server/src/main/java/net/minecraft/server/IContainer.java new file mode 100644 index 0000000..873c7a2 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/IContainer.java @@ -0,0 +1,6 @@ +package net.minecraft.server; + +public interface IContainer { + + TileEntity a(World world, int i); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ICrafting.java b/eSpigot-Server/src/main/java/net/minecraft/server/ICrafting.java new file mode 100644 index 0000000..f528e95 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ICrafting.java @@ -0,0 +1,14 @@ +package net.minecraft.server; + +import java.util.List; + +public interface ICrafting { + + void a(Container container, List list); + + void a(Container container, int i, ItemStack itemstack); + + void setContainerData(Container container, int i, int j); + + void setContainerData(Container container, IInventory iinventory); +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/IDataManager.java b/eSpigot-Server/src/main/java/net/minecraft/server/IDataManager.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/IDataManager.java rename to eSpigot-Server/src/main/java/net/minecraft/server/IDataManager.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/IDispenseBehavior.java b/eSpigot-Server/src/main/java/net/minecraft/server/IDispenseBehavior.java new file mode 100644 index 0000000..f045a6e --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/IDispenseBehavior.java @@ -0,0 +1,12 @@ +package net.minecraft.server; + +public interface IDispenseBehavior { + + IDispenseBehavior NONE = new IDispenseBehavior() { + public ItemStack a(ISourceBlock isourceblock, ItemStack itemstack) { + return itemstack; + } + }; + + ItemStack a(ISourceBlock isourceblock, ItemStack itemstack); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/IEntitySelector.java b/eSpigot-Server/src/main/java/net/minecraft/server/IEntitySelector.java new file mode 100644 index 0000000..1dd636d --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/IEntitySelector.java @@ -0,0 +1,68 @@ +package net.minecraft.server; + +import com.google.common.base.Predicate; + +public final class IEntitySelector { + + public static final Predicate a = new Predicate() { + public boolean a(Entity entity) { + return entity.isAlive(); + } + + public boolean apply(Object object) { + return this.a((Entity) object); + } + }; + public static final Predicate b = new Predicate() { + public boolean a(Entity entity) { + return entity.isAlive() && entity.passenger == null && entity.vehicle == null; + } + + public boolean apply(Object object) { + return this.a((Entity) object); + } + }; + public static final Predicate c = new Predicate() { + public boolean a(Entity entity) { + return entity instanceof IInventory && entity.isAlive(); + } + + public boolean apply(Object object) { + return this.a((Entity) object); + } + }; + public static final Predicate d = new Predicate() { + public boolean a(Entity entity) { + return !(entity instanceof EntityHuman) || !((EntityHuman) entity).isSpectator(); + } + + public boolean apply(Object object) { + return this.a((Entity) object); + } + }; + + public static class EntitySelectorEquipable implements Predicate { + + private final ItemStack a; + + public EntitySelectorEquipable(ItemStack itemstack) { + this.a = itemstack; + } + + public boolean a(Entity entity) { + if (!entity.isAlive()) { + return false; + } else if (!(entity instanceof EntityLiving)) { + return false; + } else { + EntityLiving entityliving = (EntityLiving) entity; + + return entityliving.getEquipment(EntityInsentient.c(this.a)) != null ? false : (entityliving instanceof EntityInsentient ? ((EntityInsentient) entityliving).bY() : (entityliving instanceof EntityArmorStand ? true : entityliving instanceof EntityHuman)); + } + } + + public boolean apply(Entity object) { + return this.a(object); + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/IHopper.java b/eSpigot-Server/src/main/java/net/minecraft/server/IHopper.java new file mode 100644 index 0000000..58ebe50 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/IHopper.java @@ -0,0 +1,12 @@ +package net.minecraft.server; + +public interface IHopper extends IInventory { + + World getWorld(); + + double A(); + + double B(); + + double C(); +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/IInventory.java b/eSpigot-Server/src/main/java/net/minecraft/server/IInventory.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/IInventory.java rename to eSpigot-Server/src/main/java/net/minecraft/server/IInventory.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/IInventoryListener.java b/eSpigot-Server/src/main/java/net/minecraft/server/IInventoryListener.java new file mode 100644 index 0000000..9950b76 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/IInventoryListener.java @@ -0,0 +1,6 @@ +package net.minecraft.server; + +public interface IInventoryListener { + + void a(InventorySubcontainer inventorysubcontainer); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/IJsonStatistic.java b/eSpigot-Server/src/main/java/net/minecraft/server/IJsonStatistic.java new file mode 100644 index 0000000..5df213b --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/IJsonStatistic.java @@ -0,0 +1,10 @@ +package net.minecraft.server; + +import com.google.gson.JsonElement; + +public interface IJsonStatistic { + + void a(JsonElement jsonelement); + + JsonElement a(); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ILocationSource.java b/eSpigot-Server/src/main/java/net/minecraft/server/ILocationSource.java new file mode 100644 index 0000000..21f31dd --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ILocationSource.java @@ -0,0 +1,3 @@ +package net.minecraft.server; + +public interface ILocationSource extends ISource {} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/IMerchant.java b/eSpigot-Server/src/main/java/net/minecraft/server/IMerchant.java new file mode 100644 index 0000000..07a68e3 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/IMerchant.java @@ -0,0 +1,16 @@ +package net.minecraft.server; + +public interface IMerchant { + + void a_(EntityHuman entityhuman); + + EntityHuman v_(); + + MerchantRecipeList getOffers(EntityHuman entityhuman); + + void a(MerchantRecipe merchantrecipe); + + void a_(ItemStack itemstack); + + IChatBaseComponent getScoreboardDisplayName(); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/IMinecraftServer.java b/eSpigot-Server/src/main/java/net/minecraft/server/IMinecraftServer.java new file mode 100644 index 0000000..5692a46 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/IMinecraftServer.java @@ -0,0 +1,44 @@ +package net.minecraft.server; + +public interface IMinecraftServer { + + int a(String s, int i); + + String a(String s, String s1); + + void a(String s, Object object); + + void a(); + + String b(); + + String E(); + + int F(); + + String G(); + + String getVersion(); + + int I(); + + int J(); + + String[] getPlayers(); + + String U(); + + String getPlugins(); + + String executeRemoteCommand(String s); + + boolean isDebugging(); + + void info(String s); + + void warning(String s); + + void g(String s); + + void h(String s); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/IMojangStatistics.java b/eSpigot-Server/src/main/java/net/minecraft/server/IMojangStatistics.java new file mode 100644 index 0000000..d906c9c --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/IMojangStatistics.java @@ -0,0 +1,10 @@ +package net.minecraft.server; + +public interface IMojangStatistics { + + void a(MojangStatisticsGenerator mojangstatisticsgenerator); + + void b(MojangStatisticsGenerator mojangstatisticsgenerator); + + boolean getSnooperEnabled(); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/IMonster.java b/eSpigot-Server/src/main/java/net/minecraft/server/IMonster.java new file mode 100644 index 0000000..8076121 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/IMonster.java @@ -0,0 +1,25 @@ +package net.minecraft.server; + +import com.google.common.base.Predicate; + +public interface IMonster extends IAnimal { + + Predicate d = new Predicate() { + public boolean a(Entity entity) { + return entity instanceof IMonster; + } + + public boolean apply(Object object) { + return this.a((Entity) object); + } + }; + Predicate e = new Predicate() { + public boolean a(Entity entity) { + return entity instanceof IMonster && !entity.isInvisible(); + } + + public boolean apply(Object object) { + return this.a((Entity) object); + } + }; +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/INamable.java b/eSpigot-Server/src/main/java/net/minecraft/server/INamable.java new file mode 100644 index 0000000..c957511 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/INamable.java @@ -0,0 +1,6 @@ +package net.minecraft.server; + +public interface INamable { + + String getName(); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/INamableTileEntity.java b/eSpigot-Server/src/main/java/net/minecraft/server/INamableTileEntity.java new file mode 100644 index 0000000..e82245d --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/INamableTileEntity.java @@ -0,0 +1,10 @@ +package net.minecraft.server; + +public interface INamableTileEntity { + + String getName(); + + boolean hasCustomName(); + + IChatBaseComponent getScoreboardDisplayName(); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/IPlayerFileData.java b/eSpigot-Server/src/main/java/net/minecraft/server/IPlayerFileData.java new file mode 100644 index 0000000..8b2d910 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/IPlayerFileData.java @@ -0,0 +1,10 @@ +package net.minecraft.server; + +public interface IPlayerFileData { + + void save(EntityHuman entityhuman); + + NBTTagCompound load(EntityHuman entityhuman); + + String[] getSeenPlayers(); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/IPosition.java b/eSpigot-Server/src/main/java/net/minecraft/server/IPosition.java new file mode 100644 index 0000000..b883ec9 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/IPosition.java @@ -0,0 +1,10 @@ +package net.minecraft.server; + +public interface IPosition { + + double getX(); + + double getY(); + + double getZ(); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/IProgressUpdate.java b/eSpigot-Server/src/main/java/net/minecraft/server/IProgressUpdate.java new file mode 100644 index 0000000..3ac3db1 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/IProgressUpdate.java @@ -0,0 +1,10 @@ +package net.minecraft.server; + +public interface IProgressUpdate { + + void a(String s); + + void c(String s); + + void a(int i); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/IProjectile.java b/eSpigot-Server/src/main/java/net/minecraft/server/IProjectile.java new file mode 100644 index 0000000..c043481 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/IProjectile.java @@ -0,0 +1,6 @@ +package net.minecraft.server; + +public interface IProjectile { + + void shoot(double d0, double d1, double d2, float f, float f1); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/IRangedEntity.java b/eSpigot-Server/src/main/java/net/minecraft/server/IRangedEntity.java new file mode 100644 index 0000000..b4178ce --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/IRangedEntity.java @@ -0,0 +1,6 @@ +package net.minecraft.server; + +public interface IRangedEntity { + + void a(EntityLiving entityliving, float f); +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/IRecipe.java b/eSpigot-Server/src/main/java/net/minecraft/server/IRecipe.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/IRecipe.java rename to eSpigot-Server/src/main/java/net/minecraft/server/IRecipe.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/IRegistry.java b/eSpigot-Server/src/main/java/net/minecraft/server/IRegistry.java new file mode 100644 index 0000000..fb8e5cc --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/IRegistry.java @@ -0,0 +1,3 @@ +package net.minecraft.server; + +public interface IRegistry extends Iterable {} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/IScoreboardCriteria.java b/eSpigot-Server/src/main/java/net/minecraft/server/IScoreboardCriteria.java new file mode 100644 index 0000000..5c9fd9a --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/IScoreboardCriteria.java @@ -0,0 +1,60 @@ +package net.minecraft.server; + +import com.google.common.collect.Maps; +import java.util.List; +import java.util.Map; + +public interface IScoreboardCriteria { + + Map criteria = Maps.newHashMap(); + IScoreboardCriteria b = new ScoreboardBaseCriteria("dummy"); + IScoreboardCriteria c = new ScoreboardBaseCriteria("trigger"); + IScoreboardCriteria d = new ScoreboardBaseCriteria("deathCount"); + IScoreboardCriteria e = new ScoreboardBaseCriteria("playerKillCount"); + IScoreboardCriteria f = new ScoreboardBaseCriteria("totalKillCount"); + IScoreboardCriteria g = new ScoreboardHealthCriteria("health"); + IScoreboardCriteria[] h = new IScoreboardCriteria[] { new ScoreboardCriteriaInteger("teamkill.", EnumChatFormat.BLACK), new ScoreboardCriteriaInteger("teamkill.", EnumChatFormat.DARK_BLUE), new ScoreboardCriteriaInteger("teamkill.", EnumChatFormat.DARK_GREEN), new ScoreboardCriteriaInteger("teamkill.", EnumChatFormat.DARK_AQUA), new ScoreboardCriteriaInteger("teamkill.", EnumChatFormat.DARK_RED), new ScoreboardCriteriaInteger("teamkill.", EnumChatFormat.DARK_PURPLE), new ScoreboardCriteriaInteger("teamkill.", EnumChatFormat.GOLD), new ScoreboardCriteriaInteger("teamkill.", EnumChatFormat.GRAY), new ScoreboardCriteriaInteger("teamkill.", EnumChatFormat.DARK_GRAY), new ScoreboardCriteriaInteger("teamkill.", EnumChatFormat.BLUE), new ScoreboardCriteriaInteger("teamkill.", EnumChatFormat.GREEN), new ScoreboardCriteriaInteger("teamkill.", EnumChatFormat.AQUA), new ScoreboardCriteriaInteger("teamkill.", EnumChatFormat.RED), new ScoreboardCriteriaInteger("teamkill.", EnumChatFormat.LIGHT_PURPLE), new ScoreboardCriteriaInteger("teamkill.", EnumChatFormat.YELLOW), new ScoreboardCriteriaInteger("teamkill.", EnumChatFormat.WHITE)}; + IScoreboardCriteria[] i = new IScoreboardCriteria[] { new ScoreboardCriteriaInteger("killedByTeam.", EnumChatFormat.BLACK), new ScoreboardCriteriaInteger("killedByTeam.", EnumChatFormat.DARK_BLUE), new ScoreboardCriteriaInteger("killedByTeam.", EnumChatFormat.DARK_GREEN), new ScoreboardCriteriaInteger("killedByTeam.", EnumChatFormat.DARK_AQUA), new ScoreboardCriteriaInteger("killedByTeam.", EnumChatFormat.DARK_RED), new ScoreboardCriteriaInteger("killedByTeam.", EnumChatFormat.DARK_PURPLE), new ScoreboardCriteriaInteger("killedByTeam.", EnumChatFormat.GOLD), new ScoreboardCriteriaInteger("killedByTeam.", EnumChatFormat.GRAY), new ScoreboardCriteriaInteger("killedByTeam.", EnumChatFormat.DARK_GRAY), new ScoreboardCriteriaInteger("killedByTeam.", EnumChatFormat.BLUE), new ScoreboardCriteriaInteger("killedByTeam.", EnumChatFormat.GREEN), new ScoreboardCriteriaInteger("killedByTeam.", EnumChatFormat.AQUA), new ScoreboardCriteriaInteger("killedByTeam.", EnumChatFormat.RED), new ScoreboardCriteriaInteger("killedByTeam.", EnumChatFormat.LIGHT_PURPLE), new ScoreboardCriteriaInteger("killedByTeam.", EnumChatFormat.YELLOW), new ScoreboardCriteriaInteger("killedByTeam.", EnumChatFormat.WHITE)}; + + String getName(); + + int getScoreModifier(List list); + + boolean isReadOnly(); + + IScoreboardCriteria.EnumScoreboardHealthDisplay c(); + + public static enum EnumScoreboardHealthDisplay { + + INTEGER("integer"), HEARTS("hearts"); + + private static final Map c = Maps.newHashMap(); + private final String d; + + private EnumScoreboardHealthDisplay(String s) { + this.d = s; + } + + public String a() { + return this.d; + } + + public static IScoreboardCriteria.EnumScoreboardHealthDisplay a(String s) { + IScoreboardCriteria.EnumScoreboardHealthDisplay iscoreboardcriteria_enumscoreboardhealthdisplay = (IScoreboardCriteria.EnumScoreboardHealthDisplay) IScoreboardCriteria.EnumScoreboardHealthDisplay.c.get(s); + + return iscoreboardcriteria_enumscoreboardhealthdisplay == null ? IScoreboardCriteria.EnumScoreboardHealthDisplay.INTEGER : iscoreboardcriteria_enumscoreboardhealthdisplay; + } + + static { + IScoreboardCriteria.EnumScoreboardHealthDisplay[] aiscoreboardcriteria_enumscoreboardhealthdisplay = values(); + int i = aiscoreboardcriteria_enumscoreboardhealthdisplay.length; + + for (int j = 0; j < i; ++j) { + IScoreboardCriteria.EnumScoreboardHealthDisplay iscoreboardcriteria_enumscoreboardhealthdisplay = aiscoreboardcriteria_enumscoreboardhealthdisplay[j]; + + IScoreboardCriteria.EnumScoreboardHealthDisplay.c.put(iscoreboardcriteria_enumscoreboardhealthdisplay.a(), iscoreboardcriteria_enumscoreboardhealthdisplay); + } + + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ISource.java b/eSpigot-Server/src/main/java/net/minecraft/server/ISource.java new file mode 100644 index 0000000..9424003 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ISource.java @@ -0,0 +1,6 @@ +package net.minecraft.server; + +public interface ISource extends IPosition { + + World getWorld(); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ISourceBlock.java b/eSpigot-Server/src/main/java/net/minecraft/server/ISourceBlock.java new file mode 100644 index 0000000..a028295 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ISourceBlock.java @@ -0,0 +1,16 @@ +package net.minecraft.server; + +public interface ISourceBlock extends ILocationSource { + + double getX(); + + double getY(); + + double getZ(); + + BlockPosition getBlockPosition(); + + int f(); + + T getTileEntity(); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ITileEntityContainer.java b/eSpigot-Server/src/main/java/net/minecraft/server/ITileEntityContainer.java new file mode 100644 index 0000000..4da4298 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ITileEntityContainer.java @@ -0,0 +1,8 @@ +package net.minecraft.server; + +public interface ITileEntityContainer extends INamableTileEntity { + + Container createContainer(PlayerInventory playerinventory, EntityHuman entityhuman); + + String getContainerName(); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ITileInventory.java b/eSpigot-Server/src/main/java/net/minecraft/server/ITileInventory.java new file mode 100644 index 0000000..6dc5cbc --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ITileInventory.java @@ -0,0 +1,10 @@ +package net.minecraft.server; + +public interface ITileInventory extends IInventory, ITileEntityContainer { + + boolean r_(); + + void a(ChestLock chestlock); + + ChestLock i(); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/IUpdatePlayerListBox.java b/eSpigot-Server/src/main/java/net/minecraft/server/IUpdatePlayerListBox.java new file mode 100644 index 0000000..63e38c9 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/IUpdatePlayerListBox.java @@ -0,0 +1,6 @@ +package net.minecraft.server; + +public interface IUpdatePlayerListBox { + + void c(); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/IWorldAccess.java b/eSpigot-Server/src/main/java/net/minecraft/server/IWorldAccess.java new file mode 100644 index 0000000..3070925 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/IWorldAccess.java @@ -0,0 +1,28 @@ +package net.minecraft.server; + +public interface IWorldAccess { + + void a(BlockPosition blockposition); + + void b(BlockPosition blockposition); + + void a(int i, int j, int k, int l, int i1, int j1); + + void a(String s, double d0, double d1, double d2, float f, float f1); + + void a(EntityHuman entityhuman, String s, double d0, double d1, double d2, float f, float f1); + + void a(int i, boolean flag, double d0, double d1, double d2, double d3, double d4, double d5, int... aint); + + void a(Entity entity); + + void b(Entity entity); + + void a(String s, BlockPosition blockposition); + + void a(int i, BlockPosition blockposition, int j); + + void a(EntityHuman entityhuman, int i, BlockPosition blockposition, int j); + + void b(int i, BlockPosition blockposition, int j); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/IWorldBorderListener.java b/eSpigot-Server/src/main/java/net/minecraft/server/IWorldBorderListener.java new file mode 100644 index 0000000..4552acd --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/IWorldBorderListener.java @@ -0,0 +1,18 @@ +package net.minecraft.server; + +public interface IWorldBorderListener { + + void a(WorldBorder worldborder, double d0); + + void a(WorldBorder worldborder, double d0, double d1, long i); + + void a(WorldBorder worldborder, double d0, double d1); + + void a(WorldBorder worldborder, int i); + + void b(WorldBorder worldborder, int i); + + void b(WorldBorder worldborder, double d0); + + void c(WorldBorder worldborder, double d0); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/IWorldInventory.java b/eSpigot-Server/src/main/java/net/minecraft/server/IWorldInventory.java new file mode 100644 index 0000000..e935b4d --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/IWorldInventory.java @@ -0,0 +1,10 @@ +package net.minecraft.server; + +public interface IWorldInventory extends IInventory { + + int[] getSlotsForFace(EnumDirection enumdirection); + + boolean canPlaceItemThroughFace(int i, ItemStack itemstack, EnumDirection enumdirection); + + boolean canTakeItemThroughFace(int i, ItemStack itemstack, EnumDirection enumdirection); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/InsensitiveStringMap.java b/eSpigot-Server/src/main/java/net/minecraft/server/InsensitiveStringMap.java new file mode 100644 index 0000000..1d67b28 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/InsensitiveStringMap.java @@ -0,0 +1,74 @@ +package net.minecraft.server; + +import com.google.common.collect.Maps; +import java.util.Collection; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import java.util.Map.Entry; + +public class InsensitiveStringMap implements Map { + + private final Map a = Maps.newLinkedHashMap(); + + public InsensitiveStringMap() {} + + public int size() { + return this.a.size(); + } + + public boolean isEmpty() { + return this.a.isEmpty(); + } + + public boolean containsKey(Object object) { + return this.a.containsKey(object.toString().toLowerCase()); + } + + public boolean containsValue(Object object) { + return this.a.containsKey(object); + } + + public V get(Object object) { + return this.a.get(object.toString().toLowerCase()); + } + + public V a(String s, V v0) { + return this.a.put(s.toLowerCase(), v0); + } + + public V remove(Object object) { + return this.a.remove(object.toString().toLowerCase()); + } + + public void putAll(Map map) { + Iterator iterator = map.entrySet().iterator(); + + while (iterator.hasNext()) { + Entry entry = (Entry) iterator.next(); + + this.a((String) entry.getKey(), (V) entry.getValue()); + } + + } + + public void clear() { + this.a.clear(); + } + + public Set keySet() { + return this.a.keySet(); + } + + public Collection values() { + return this.a.values(); + } + + public Set> entrySet() { + return this.a.entrySet(); + } + + public V put(String object, V object1) { + return this.a(object, object1); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/InstantMobEffect.java b/eSpigot-Server/src/main/java/net/minecraft/server/InstantMobEffect.java new file mode 100644 index 0000000..50a5124 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/InstantMobEffect.java @@ -0,0 +1,16 @@ +package net.minecraft.server; + +public class InstantMobEffect extends MobEffectList { + + public InstantMobEffect(int i, MinecraftKey minecraftkey, boolean flag, int j) { + super(i, minecraftkey, flag, j); + } + + public boolean isInstant() { + return true; + } + + public boolean a(int i, int j) { + return i >= 1; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/IntCache.java b/eSpigot-Server/src/main/java/net/minecraft/server/IntCache.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/IntCache.java rename to eSpigot-Server/src/main/java/net/minecraft/server/IntCache.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/IntHashMap.java b/eSpigot-Server/src/main/java/net/minecraft/server/IntHashMap.java new file mode 100644 index 0000000..f3dd9b5 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/IntHashMap.java @@ -0,0 +1,207 @@ +package net.minecraft.server; + +public class IntHashMap { + + private transient IntHashMap.IntHashMapEntry[] a = new IntHashMap.IntHashMapEntry[16]; + private transient int b; + private int c = 12; + private final float d = 0.75F; + + public IntHashMap() {} + + private static int g(int i) { + i ^= i >>> 20 ^ i >>> 12; + return i ^ i >>> 7 ^ i >>> 4; + } + + private static int a(int i, int j) { + return i & j - 1; + } + + public V get(int i) { + int j = g(i); + + for (IntHashMap.IntHashMapEntry inthashmap_inthashmapentry = this.a[a(j, this.a.length)]; inthashmap_inthashmapentry != null; inthashmap_inthashmapentry = inthashmap_inthashmapentry.c) { + if (inthashmap_inthashmapentry.a == i) { + return inthashmap_inthashmapentry.b; + } + } + + return null; + } + + public boolean b(int i) { + return this.c(i) != null; + } + + final IntHashMap.IntHashMapEntry c(int i) { + int j = g(i); + + for (IntHashMap.IntHashMapEntry inthashmap_inthashmapentry = this.a[a(j, this.a.length)]; inthashmap_inthashmapentry != null; inthashmap_inthashmapentry = inthashmap_inthashmapentry.c) { + if (inthashmap_inthashmapentry.a == i) { + return inthashmap_inthashmapentry; + } + } + + return null; + } + + public void a(int i, V v0) { + int j = g(i); + int k = a(j, this.a.length); + + for (IntHashMap.IntHashMapEntry inthashmap_inthashmapentry = this.a[k]; inthashmap_inthashmapentry != null; inthashmap_inthashmapentry = inthashmap_inthashmapentry.c) { + if (inthashmap_inthashmapentry.a == i) { + inthashmap_inthashmapentry.b = v0; + return; + } + } + + this.a(j, i, v0, k); + } + + private void h(int i) { + IntHashMap.IntHashMapEntry[] ainthashmap_inthashmapentry = this.a; + int j = ainthashmap_inthashmapentry.length; + + if (j == 1073741824) { + this.c = Integer.MAX_VALUE; + } else { + IntHashMap.IntHashMapEntry[] ainthashmap_inthashmapentry1 = new IntHashMap.IntHashMapEntry[i]; + + this.a(ainthashmap_inthashmapentry1); + this.a = ainthashmap_inthashmapentry1; + this.c = (int) ((float) i * this.d); + } + } + + private void a(IntHashMap.IntHashMapEntry[] ainthashmap_inthashmapentry) { + IntHashMap.IntHashMapEntry[] ainthashmap_inthashmapentry1 = this.a; + int i = ainthashmap_inthashmapentry.length; + + for (int j = 0; j < ainthashmap_inthashmapentry1.length; ++j) { + IntHashMap.IntHashMapEntry inthashmap_inthashmapentry = ainthashmap_inthashmapentry1[j]; + + if (inthashmap_inthashmapentry != null) { + ainthashmap_inthashmapentry1[j] = null; + + IntHashMap.IntHashMapEntry inthashmap_inthashmapentry1; + + do { + inthashmap_inthashmapentry1 = inthashmap_inthashmapentry.c; + int k = a(inthashmap_inthashmapentry.d, i); + + inthashmap_inthashmapentry.c = ainthashmap_inthashmapentry[k]; + ainthashmap_inthashmapentry[k] = inthashmap_inthashmapentry; + inthashmap_inthashmapentry = inthashmap_inthashmapentry1; + } while (inthashmap_inthashmapentry1 != null); + } + } + + } + + public V d(int i) { + IntHashMap.IntHashMapEntry inthashmap_inthashmapentry = this.e(i); + + return inthashmap_inthashmapentry == null ? null : inthashmap_inthashmapentry.b; + } + + final IntHashMap.IntHashMapEntry e(int i) { + int j = g(i); + int k = a(j, this.a.length); + IntHashMap.IntHashMapEntry inthashmap_inthashmapentry = this.a[k]; + + IntHashMap.IntHashMapEntry inthashmap_inthashmapentry1; + IntHashMap.IntHashMapEntry inthashmap_inthashmapentry2; + + for (inthashmap_inthashmapentry1 = inthashmap_inthashmapentry; inthashmap_inthashmapentry1 != null; inthashmap_inthashmapentry1 = inthashmap_inthashmapentry2) { + inthashmap_inthashmapentry2 = inthashmap_inthashmapentry1.c; + if (inthashmap_inthashmapentry1.a == i) { + --this.b; + if (inthashmap_inthashmapentry == inthashmap_inthashmapentry1) { + this.a[k] = inthashmap_inthashmapentry2; + } else { + inthashmap_inthashmapentry.c = inthashmap_inthashmapentry2; + } + + return inthashmap_inthashmapentry1; + } + + inthashmap_inthashmapentry = inthashmap_inthashmapentry1; + } + + return inthashmap_inthashmapentry1; + } + + public void c() { + IntHashMap.IntHashMapEntry[] ainthashmap_inthashmapentry = this.a; + + for (int i = 0; i < ainthashmap_inthashmapentry.length; ++i) { + ainthashmap_inthashmapentry[i] = null; + } + + this.b = 0; + } + + private void a(int i, int j, V v0, int k) { + IntHashMap.IntHashMapEntry inthashmap_inthashmapentry = this.a[k]; + + this.a[k] = new IntHashMap.IntHashMapEntry(i, j, v0, inthashmap_inthashmapentry); + if (this.b++ >= this.c) { + this.h(2 * this.a.length); + } + + } + + static class IntHashMapEntry { + + final int a; + V b; + IntHashMap.IntHashMapEntry c; + final int d; + + IntHashMapEntry(int i, int j, V v0, IntHashMap.IntHashMapEntry inthashmap_inthashmapentry) { + this.b = v0; + this.c = inthashmap_inthashmapentry; + this.a = j; + this.d = i; + } + + public final int a() { + return this.a; + } + + public final V b() { + return this.b; + } + + public final boolean equals(Object object) { + if (!(object instanceof IntHashMap.IntHashMapEntry)) { + return false; + } else { + IntHashMap.IntHashMapEntry inthashmap_inthashmapentry = (IntHashMap.IntHashMapEntry) object; + Integer integer = Integer.valueOf(this.a()); + Integer integer1 = Integer.valueOf(inthashmap_inthashmapentry.a()); + + if (integer == integer1 || integer != null && integer.equals(integer1)) { + Object object1 = this.b(); + Object object2 = inthashmap_inthashmapentry.b(); + + if (object1 == object2 || object1 != null && object1.equals(object2)) { + return true; + } + } + + return false; + } + } + + public final int hashCode() { + return IntHashMap.g(this.a); + } + + public final String toString() { + return this.a() + "=" + this.b(); + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/InventoryCraftResult.java b/eSpigot-Server/src/main/java/net/minecraft/server/InventoryCraftResult.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/InventoryCraftResult.java rename to eSpigot-Server/src/main/java/net/minecraft/server/InventoryCraftResult.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/InventoryCrafting.java b/eSpigot-Server/src/main/java/net/minecraft/server/InventoryCrafting.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/InventoryCrafting.java rename to eSpigot-Server/src/main/java/net/minecraft/server/InventoryCrafting.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/InventoryEnderChest.java b/eSpigot-Server/src/main/java/net/minecraft/server/InventoryEnderChest.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/InventoryEnderChest.java rename to eSpigot-Server/src/main/java/net/minecraft/server/InventoryEnderChest.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/InventoryHorseChest.java b/eSpigot-Server/src/main/java/net/minecraft/server/InventoryHorseChest.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/InventoryHorseChest.java rename to eSpigot-Server/src/main/java/net/minecraft/server/InventoryHorseChest.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/InventoryLargeChest.java b/eSpigot-Server/src/main/java/net/minecraft/server/InventoryLargeChest.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/InventoryLargeChest.java rename to eSpigot-Server/src/main/java/net/minecraft/server/InventoryLargeChest.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/InventoryMerchant.java b/eSpigot-Server/src/main/java/net/minecraft/server/InventoryMerchant.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/InventoryMerchant.java rename to eSpigot-Server/src/main/java/net/minecraft/server/InventoryMerchant.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/InventorySubcontainer.java b/eSpigot-Server/src/main/java/net/minecraft/server/InventorySubcontainer.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/InventorySubcontainer.java rename to eSpigot-Server/src/main/java/net/minecraft/server/InventorySubcontainer.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/InventoryUtils.java b/eSpigot-Server/src/main/java/net/minecraft/server/InventoryUtils.java new file mode 100644 index 0000000..55ab12f --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/InventoryUtils.java @@ -0,0 +1,56 @@ +package net.minecraft.server; + +import java.util.Random; + +public class InventoryUtils { + + private static final Random a = new Random(); + + public static void dropInventory(World world, BlockPosition blockposition, IInventory iinventory) { + dropInventory(world, (double) blockposition.getX(), (double) blockposition.getY(), (double) blockposition.getZ(), iinventory); + } + + public static void dropEntity(World world, Entity entity, IInventory iinventory) { + dropInventory(world, entity.locX, entity.locY, entity.locZ, iinventory); + } + + private static void dropInventory(World world, double d0, double d1, double d2, IInventory iinventory) { + for (int i = 0; i < iinventory.getSize(); ++i) { + ItemStack itemstack = iinventory.getItem(i); + + if (itemstack != null) { + dropItem(world, d0, d1, d2, itemstack); + } + } + + } + + private static void dropItem(World world, double d0, double d1, double d2, ItemStack itemstack) { + float f = InventoryUtils.a.nextFloat() * 0.8F + 0.1F; + float f1 = InventoryUtils.a.nextFloat() * 0.8F + 0.1F; + float f2 = InventoryUtils.a.nextFloat() * 0.8F + 0.1F; + + while (itemstack.count > 0) { + int i = InventoryUtils.a.nextInt(21) + 10; + + if (i > itemstack.count) { + i = itemstack.count; + } + + itemstack.count -= i; + EntityItem entityitem = new EntityItem(world, d0 + (double) f, d1 + (double) f1, d2 + (double) f2, new ItemStack(itemstack.getItem(), i, itemstack.getData())); + + if (itemstack.hasTag()) { + entityitem.getItemStack().setTag((NBTTagCompound) itemstack.getTag().clone()); + } + + float f3 = 0.05F; + + entityitem.motX = InventoryUtils.a.nextGaussian() * (double) f3; + entityitem.motY = InventoryUtils.a.nextGaussian() * (double) f3 + 0.20000000298023224D; + entityitem.motZ = InventoryUtils.a.nextGaussian() * (double) f3; + world.addEntity(entityitem); + } + + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/IpBanEntry.java b/eSpigot-Server/src/main/java/net/minecraft/server/IpBanEntry.java new file mode 100644 index 0000000..a9781bc --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/IpBanEntry.java @@ -0,0 +1,30 @@ +package net.minecraft.server; + +import com.google.gson.JsonObject; +import java.util.Date; + +public class IpBanEntry extends ExpirableListEntry { + + public IpBanEntry(String s) { + this(s, (Date) null, (String) null, (Date) null, (String) null); + } + + public IpBanEntry(String s, Date date, String s1, Date date1, String s2) { + super(s, date, s1, date1, s2); + } + + public IpBanEntry(JsonObject jsonobject) { + super(b(jsonobject), jsonobject); + } + + private static String b(JsonObject jsonobject) { + return jsonobject.has("ip") ? jsonobject.get("ip").getAsString() : null; + } + + protected void a(JsonObject jsonobject) { + if (this.getKey() != null) { + jsonobject.addProperty("ip", (String) this.getKey()); + super.a(jsonobject); + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/IpBanList.java b/eSpigot-Server/src/main/java/net/minecraft/server/IpBanList.java new file mode 100644 index 0000000..e91b964 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/IpBanList.java @@ -0,0 +1,42 @@ +package net.minecraft.server; + +import com.google.gson.JsonObject; +import java.io.File; +import java.net.SocketAddress; + +public class IpBanList extends JsonList { + + public IpBanList(File file) { + super(file); + } + + protected JsonListEntry a(JsonObject jsonobject) { + return new IpBanEntry(jsonobject); + } + + public boolean isBanned(SocketAddress socketaddress) { + String s = this.c(socketaddress); + + return this.d(s); + } + + public IpBanEntry get(SocketAddress socketaddress) { + String s = this.c(socketaddress); + + return this.get(s); + } + + private String c(SocketAddress socketaddress) { + String s = socketaddress.toString(); + + if (s.contains("/")) { + s = s.substring(s.indexOf(47) + 1); + } + + if (s.contains(":")) { + s = s.substring(0, s.indexOf(58)); + } + + return s; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/Item.java b/eSpigot-Server/src/main/java/net/minecraft/server/Item.java new file mode 100644 index 0000000..87a2d7b --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/Item.java @@ -0,0 +1,786 @@ +package net.minecraft.server; + +import com.google.common.base.Function; +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Maps; +import com.google.common.collect.Multimap; +import java.util.Map; +import java.util.Random; +import java.util.UUID; + +public class Item { + + public static final RegistryMaterials REGISTRY = new RegistryMaterials(); + private static final Map a = Maps.newHashMap(); + protected static final UUID f = UUID.fromString("CB3F55D3-645C-4F38-A497-9C13A33DB5CF"); + private CreativeModeTab b; + protected static Random g = new Random(); + protected int maxStackSize = 64; + private int durability; + protected boolean i; + protected boolean j; + private Item craftingResult; + private String k; + private String name; + + public Item() {} + + public static int getId(Item item) { + return item == null ? 0 : Item.REGISTRY.b(item); + } + + public static Item getById(int i) { + return (Item) Item.REGISTRY.a(i); + } + + public static Item getItemOf(Block block) { + return (Item) Item.a.get(block); + } + + public static Item d(String s) { + Item item = (Item) Item.REGISTRY.get(new MinecraftKey(s)); + + if (item == null) { + try { + return getById(Integer.parseInt(s)); + } catch (NumberFormatException numberformatexception) { + ; + } + } + + return item; + } + + public boolean a(NBTTagCompound nbttagcompound) { + return false; + } + + public Item c(int i) { + this.maxStackSize = i; + return this; + } + + public boolean interactWith(ItemStack itemstack, EntityHuman entityhuman, World world, BlockPosition blockposition, EnumDirection enumdirection, float f, float f1, float f2) { + return false; + } + + public float getDestroySpeed(ItemStack itemstack, Block block) { + return 1.0F; + } + + public ItemStack a(ItemStack itemstack, World world, EntityHuman entityhuman) { + return itemstack; + } + + public ItemStack b(ItemStack itemstack, World world, EntityHuman entityhuman) { + return itemstack; + } + + public int getMaxStackSize() { + return this.maxStackSize; + } + + public int filterData(int i) { + return 0; + } + + public boolean k() { + return this.j; + } + + protected Item a(boolean flag) { + this.j = flag; + return this; + } + + public int getMaxDurability() { + return this.durability; + } + + protected Item setMaxDurability(int i) { + this.durability = i; + return this; + } + + public boolean usesDurability() { + return this.durability > 0 && !this.j; + } + + public boolean a(ItemStack itemstack, EntityLiving entityliving, EntityLiving entityliving1) { + return false; + } + + public boolean a(ItemStack itemstack, World world, Block block, BlockPosition blockposition, EntityLiving entityliving) { + return false; + } + + public boolean canDestroySpecialBlock(Block block) { + return false; + } + + public boolean a(ItemStack itemstack, EntityHuman entityhuman, EntityLiving entityliving) { + return false; + } + + public Item n() { + this.i = true; + return this; + } + + public Item c(String s) { + this.name = s; + return this; + } + + public String k(ItemStack itemstack) { + String s = this.e_(itemstack); + + return s == null ? "" : LocaleI18n.get(s); + } + + public String getName() { + return "item." + this.name; + } + + public String e_(ItemStack itemstack) { + return "item." + this.name; + } + + public Item c(Item item) { + this.craftingResult = item; + return this; + } + + public boolean p() { + return true; + } + + public Item q() { + return this.craftingResult; + } + + public boolean r() { + return this.craftingResult != null; + } + + public void a(ItemStack itemstack, World world, Entity entity, int i, boolean flag) {} + + public void d(ItemStack itemstack, World world, EntityHuman entityhuman) {} + + public boolean f() { + return false; + } + + public EnumAnimation e(ItemStack itemstack) { + return EnumAnimation.NONE; + } + + public int d(ItemStack itemstack) { + return 0; + } + + public void a(ItemStack itemstack, World world, EntityHuman entityhuman, int i) {} + + protected Item e(String s) { + this.k = s; + return this; + } + + public String j(ItemStack itemstack) { + return this.k; + } + + public boolean l(ItemStack itemstack) { + return this.j(itemstack) != null; + } + + public String a(ItemStack itemstack) { + return ("" + LocaleI18n.get(this.k(itemstack) + ".name")).trim(); + } + + public EnumItemRarity g(ItemStack itemstack) { + return itemstack.hasEnchantments() ? EnumItemRarity.RARE : EnumItemRarity.COMMON; + } + + public boolean f_(ItemStack itemstack) { + return this.getMaxStackSize() == 1 && this.usesDurability(); + } + + protected MovingObjectPosition a(World world, EntityHuman entityhuman, boolean flag) { + float f = entityhuman.pitch; + float f1 = entityhuman.yaw; + double d0 = entityhuman.locX; + double d1 = entityhuman.locY + (double) entityhuman.getHeadHeight(); + double d2 = entityhuman.locZ; + Vec3D vec3d = new Vec3D(d0, d1, d2); + float f2 = MathHelper.cos(-f1 * 0.017453292F - 3.1415927F); + float f3 = MathHelper.sin(-f1 * 0.017453292F - 3.1415927F); + float f4 = -MathHelper.cos(-f * 0.017453292F); + float f5 = MathHelper.sin(-f * 0.017453292F); + float f6 = f3 * f4; + float f7 = f2 * f4; + double d3 = 5.0D; + Vec3D vec3d1 = vec3d.add((double) f6 * d3, (double) f5 * d3, (double) f7 * d3); + + return world.rayTrace(vec3d, vec3d1, flag, !flag, false); + } + + public int b() { + return 0; + } + + public Item a(CreativeModeTab creativemodetab) { + this.b = creativemodetab; + return this; + } + + public boolean s() { + return false; + } + + public boolean a(ItemStack itemstack, ItemStack itemstack1) { + return false; + } + + public Multimap i() { + return HashMultimap.create(); + } + + public static void t() { + a(Blocks.STONE, (Item) (new ItemMultiTexture(Blocks.STONE, Blocks.STONE, new Function() { + public String a(ItemStack itemstack) { + return BlockStone.EnumStoneVariant.a(itemstack.getData()).d(); + } + + public Object apply(Object object) { + return this.a((ItemStack) object); + } + })).b("stone")); + a((Block) Blocks.GRASS, (Item) (new ItemWithAuxData(Blocks.GRASS, false))); + a(Blocks.DIRT, (Item) (new ItemMultiTexture(Blocks.DIRT, Blocks.DIRT, new Function() { + public String a(ItemStack itemstack) { + return BlockDirt.EnumDirtVariant.a(itemstack.getData()).c(); + } + + public Object apply(Object object) { + return this.a((ItemStack) object); + } + })).b("dirt")); + c(Blocks.COBBLESTONE); + a(Blocks.PLANKS, (Item) (new ItemMultiTexture(Blocks.PLANKS, Blocks.PLANKS, new Function() { + public String a(ItemStack itemstack) { + return BlockWood.EnumLogVariant.a(itemstack.getData()).d(); + } + + public Object apply(Object object) { + return this.a((ItemStack) object); + } + })).b("wood")); + a(Blocks.SAPLING, (Item) (new ItemMultiTexture(Blocks.SAPLING, Blocks.SAPLING, new Function() { + public String a(ItemStack itemstack) { + return BlockWood.EnumLogVariant.a(itemstack.getData()).d(); + } + + public Object apply(Object object) { + return this.a((ItemStack) object); + } + })).b("sapling")); + c(Blocks.BEDROCK); + a((Block) Blocks.SAND, (Item) (new ItemMultiTexture(Blocks.SAND, Blocks.SAND, new Function() { + public String a(ItemStack itemstack) { + return BlockSand.EnumSandVariant.a(itemstack.getData()).d(); + } + + public Object apply(Object object) { + return this.a((ItemStack) object); + } + })).b("sand")); + c(Blocks.GRAVEL); + c(Blocks.GOLD_ORE); + c(Blocks.IRON_ORE); + c(Blocks.COAL_ORE); + a(Blocks.LOG, (Item) (new ItemMultiTexture(Blocks.LOG, Blocks.LOG, new Function() { + public String a(ItemStack itemstack) { + return BlockWood.EnumLogVariant.a(itemstack.getData()).d(); + } + + public Object apply(Object object) { + return this.a((ItemStack) object); + } + })).b("log")); + a(Blocks.LOG2, (Item) (new ItemMultiTexture(Blocks.LOG2, Blocks.LOG2, new Function() { + public String a(ItemStack itemstack) { + return BlockWood.EnumLogVariant.a(itemstack.getData() + 4).d(); + } + + public Object apply(Object object) { + return this.a((ItemStack) object); + } + })).b("log")); + a((Block) Blocks.LEAVES, (Item) (new ItemLeaves(Blocks.LEAVES)).b("leaves")); + a((Block) Blocks.LEAVES2, (Item) (new ItemLeaves(Blocks.LEAVES2)).b("leaves")); + a(Blocks.SPONGE, (Item) (new ItemMultiTexture(Blocks.SPONGE, Blocks.SPONGE, new Function() { + public String a(ItemStack itemstack) { + return (itemstack.getData() & 1) == 1 ? "wet" : "dry"; + } + + public Object apply(Object object) { + return this.a((ItemStack) object); + } + })).b("sponge")); + c(Blocks.GLASS); + c(Blocks.LAPIS_ORE); + c(Blocks.LAPIS_BLOCK); + c(Blocks.DISPENSER); + a(Blocks.SANDSTONE, (Item) (new ItemMultiTexture(Blocks.SANDSTONE, Blocks.SANDSTONE, new Function() { + public String a(ItemStack itemstack) { + return BlockSandStone.EnumSandstoneVariant.a(itemstack.getData()).c(); + } + + public Object apply(Object object) { + return this.a((ItemStack) object); + } + })).b("sandStone")); + c(Blocks.NOTEBLOCK); + c(Blocks.GOLDEN_RAIL); + c(Blocks.DETECTOR_RAIL); + a((Block) Blocks.STICKY_PISTON, (Item) (new ItemPiston(Blocks.STICKY_PISTON))); + c(Blocks.WEB); + a((Block) Blocks.TALLGRASS, (Item) (new ItemWithAuxData(Blocks.TALLGRASS, true)).a(new String[] { "shrub", "grass", "fern"})); + c((Block) Blocks.DEADBUSH); + a((Block) Blocks.PISTON, (Item) (new ItemPiston(Blocks.PISTON))); + a(Blocks.WOOL, (Item) (new ItemCloth(Blocks.WOOL)).b("cloth")); + a((Block) Blocks.YELLOW_FLOWER, (Item) (new ItemMultiTexture(Blocks.YELLOW_FLOWER, Blocks.YELLOW_FLOWER, new Function() { + public String a(ItemStack itemstack) { + return BlockFlowers.EnumFlowerVarient.a(BlockFlowers.EnumFlowerType.YELLOW, itemstack.getData()).d(); + } + + public Object apply(Object object) { + return this.a((ItemStack) object); + } + })).b("flower")); + a((Block) Blocks.RED_FLOWER, (Item) (new ItemMultiTexture(Blocks.RED_FLOWER, Blocks.RED_FLOWER, new Function() { + public String a(ItemStack itemstack) { + return BlockFlowers.EnumFlowerVarient.a(BlockFlowers.EnumFlowerType.RED, itemstack.getData()).d(); + } + + public Object apply(Object object) { + return this.a((ItemStack) object); + } + })).b("rose")); + c((Block) Blocks.BROWN_MUSHROOM); + c((Block) Blocks.RED_MUSHROOM); + c(Blocks.GOLD_BLOCK); + c(Blocks.IRON_BLOCK); + a((Block) Blocks.STONE_SLAB, (Item) (new ItemStep(Blocks.STONE_SLAB, Blocks.STONE_SLAB, Blocks.DOUBLE_STONE_SLAB)).b("stoneSlab")); + c(Blocks.BRICK_BLOCK); + c(Blocks.TNT); + c(Blocks.BOOKSHELF); + c(Blocks.MOSSY_COBBLESTONE); + c(Blocks.OBSIDIAN); + c(Blocks.TORCH); + c(Blocks.MOB_SPAWNER); + c(Blocks.OAK_STAIRS); + c((Block) Blocks.CHEST); + c(Blocks.DIAMOND_ORE); + c(Blocks.DIAMOND_BLOCK); + c(Blocks.CRAFTING_TABLE); + c(Blocks.FARMLAND); + c(Blocks.FURNACE); + c(Blocks.LIT_FURNACE); + c(Blocks.LADDER); + c(Blocks.RAIL); + c(Blocks.STONE_STAIRS); + c(Blocks.LEVER); + c(Blocks.STONE_PRESSURE_PLATE); + c(Blocks.WOODEN_PRESSURE_PLATE); + c(Blocks.REDSTONE_ORE); + c(Blocks.REDSTONE_TORCH); + c(Blocks.STONE_BUTTON); + a(Blocks.SNOW_LAYER, (Item) (new ItemSnow(Blocks.SNOW_LAYER))); + c(Blocks.ICE); + c(Blocks.SNOW); + c((Block) Blocks.CACTUS); + c(Blocks.CLAY); + c(Blocks.JUKEBOX); + c(Blocks.FENCE); + c(Blocks.SPRUCE_FENCE); + c(Blocks.BIRCH_FENCE); + c(Blocks.JUNGLE_FENCE); + c(Blocks.DARK_OAK_FENCE); + c(Blocks.ACACIA_FENCE); + c(Blocks.PUMPKIN); + c(Blocks.NETHERRACK); + c(Blocks.SOUL_SAND); + c(Blocks.GLOWSTONE); + c(Blocks.LIT_PUMPKIN); + c(Blocks.TRAPDOOR); + a(Blocks.MONSTER_EGG, (Item) (new ItemMultiTexture(Blocks.MONSTER_EGG, Blocks.MONSTER_EGG, new Function() { + public String a(ItemStack itemstack) { + return BlockMonsterEggs.EnumMonsterEggVarient.a(itemstack.getData()).c(); + } + + public Object apply(Object object) { + return this.a((ItemStack) object); + } + })).b("monsterStoneEgg")); + a(Blocks.STONEBRICK, (Item) (new ItemMultiTexture(Blocks.STONEBRICK, Blocks.STONEBRICK, new Function() { + public String a(ItemStack itemstack) { + return BlockSmoothBrick.EnumStonebrickType.a(itemstack.getData()).c(); + } + + public Object apply(Object object) { + return this.a((ItemStack) object); + } + })).b("stonebricksmooth")); + c(Blocks.BROWN_MUSHROOM_BLOCK); + c(Blocks.RED_MUSHROOM_BLOCK); + c(Blocks.IRON_BARS); + c(Blocks.GLASS_PANE); + c(Blocks.MELON_BLOCK); + a(Blocks.VINE, (Item) (new ItemWithAuxData(Blocks.VINE, false))); + c(Blocks.FENCE_GATE); + c(Blocks.SPRUCE_FENCE_GATE); + c(Blocks.BIRCH_FENCE_GATE); + c(Blocks.JUNGLE_FENCE_GATE); + c(Blocks.DARK_OAK_FENCE_GATE); + c(Blocks.ACACIA_FENCE_GATE); + c(Blocks.BRICK_STAIRS); + c(Blocks.STONE_BRICK_STAIRS); + c((Block) Blocks.MYCELIUM); + a(Blocks.WATERLILY, (Item) (new ItemWaterLily(Blocks.WATERLILY))); + c(Blocks.NETHER_BRICK); + c(Blocks.NETHER_BRICK_FENCE); + c(Blocks.NETHER_BRICK_STAIRS); + c(Blocks.ENCHANTING_TABLE); + c(Blocks.END_PORTAL_FRAME); + c(Blocks.END_STONE); + c(Blocks.DRAGON_EGG); + c(Blocks.REDSTONE_LAMP); + a((Block) Blocks.WOODEN_SLAB, (Item) (new ItemStep(Blocks.WOODEN_SLAB, Blocks.WOODEN_SLAB, Blocks.DOUBLE_WOODEN_SLAB)).b("woodSlab")); + c(Blocks.SANDSTONE_STAIRS); + c(Blocks.EMERALD_ORE); + c(Blocks.ENDER_CHEST); + c((Block) Blocks.TRIPWIRE_HOOK); + c(Blocks.EMERALD_BLOCK); + c(Blocks.SPRUCE_STAIRS); + c(Blocks.BIRCH_STAIRS); + c(Blocks.JUNGLE_STAIRS); + c(Blocks.COMMAND_BLOCK); + c((Block) Blocks.BEACON); + a(Blocks.COBBLESTONE_WALL, (Item) (new ItemMultiTexture(Blocks.COBBLESTONE_WALL, Blocks.COBBLESTONE_WALL, new Function() { + public String a(ItemStack itemstack) { + return BlockCobbleWall.EnumCobbleVariant.a(itemstack.getData()).c(); + } + + public Object apply(Object object) { + return this.a((ItemStack) object); + } + })).b("cobbleWall")); + c(Blocks.WOODEN_BUTTON); + a(Blocks.ANVIL, (Item) (new ItemAnvil(Blocks.ANVIL)).b("anvil")); + c(Blocks.TRAPPED_CHEST); + c(Blocks.LIGHT_WEIGHTED_PRESSURE_PLATE); + c(Blocks.HEAVY_WEIGHTED_PRESSURE_PLATE); + c((Block) Blocks.DAYLIGHT_DETECTOR); + c(Blocks.REDSTONE_BLOCK); + c(Blocks.QUARTZ_ORE); + c((Block) Blocks.HOPPER); + a(Blocks.QUARTZ_BLOCK, (Item) (new ItemMultiTexture(Blocks.QUARTZ_BLOCK, Blocks.QUARTZ_BLOCK, new String[] { "default", "chiseled", "lines"})).b("quartzBlock")); + c(Blocks.QUARTZ_STAIRS); + c(Blocks.ACTIVATOR_RAIL); + c(Blocks.DROPPER); + a(Blocks.STAINED_HARDENED_CLAY, (Item) (new ItemCloth(Blocks.STAINED_HARDENED_CLAY)).b("clayHardenedStained")); + c(Blocks.BARRIER); + c(Blocks.IRON_TRAPDOOR); + c(Blocks.HAY_BLOCK); + a(Blocks.CARPET, (Item) (new ItemCloth(Blocks.CARPET)).b("woolCarpet")); + c(Blocks.HARDENED_CLAY); + c(Blocks.COAL_BLOCK); + c(Blocks.PACKED_ICE); + c(Blocks.ACACIA_STAIRS); + c(Blocks.DARK_OAK_STAIRS); + c(Blocks.SLIME); + a((Block) Blocks.DOUBLE_PLANT, (Item) (new ItemTallPlant(Blocks.DOUBLE_PLANT, Blocks.DOUBLE_PLANT, new Function() { + public String a(ItemStack itemstack) { + return BlockTallPlant.EnumTallFlowerVariants.a(itemstack.getData()).c(); + } + + public Object apply(Object object) { + return this.a((ItemStack) object); + } + })).b("doublePlant")); + a((Block) Blocks.STAINED_GLASS, (Item) (new ItemCloth(Blocks.STAINED_GLASS)).b("stainedGlass")); + a((Block) Blocks.STAINED_GLASS_PANE, (Item) (new ItemCloth(Blocks.STAINED_GLASS_PANE)).b("stainedGlassPane")); + a(Blocks.PRISMARINE, (Item) (new ItemMultiTexture(Blocks.PRISMARINE, Blocks.PRISMARINE, new Function() { + public String a(ItemStack itemstack) { + return BlockPrismarine.EnumPrismarineVariant.a(itemstack.getData()).c(); + } + + public Object apply(Object object) { + return this.a((ItemStack) object); + } + })).b("prismarine")); + c(Blocks.SEA_LANTERN); + a(Blocks.RED_SANDSTONE, (Item) (new ItemMultiTexture(Blocks.RED_SANDSTONE, Blocks.RED_SANDSTONE, new Function() { + public String a(ItemStack itemstack) { + return BlockRedSandstone.EnumRedSandstoneVariant.a(itemstack.getData()).c(); + } + + public Object apply(Object object) { + return this.a((ItemStack) object); + } + })).b("redSandStone")); + c(Blocks.RED_SANDSTONE_STAIRS); + a((Block) Blocks.STONE_SLAB2, (Item) (new ItemStep(Blocks.STONE_SLAB2, Blocks.STONE_SLAB2, Blocks.DOUBLE_STONE_SLAB2)).b("stoneSlab2")); + a(256, "iron_shovel", (new ItemSpade(Item.EnumToolMaterial.IRON)).c("shovelIron")); + a(257, "iron_pickaxe", (new ItemPickaxe(Item.EnumToolMaterial.IRON)).c("pickaxeIron")); + a(258, "iron_axe", (new ItemAxe(Item.EnumToolMaterial.IRON)).c("hatchetIron")); + a(259, "flint_and_steel", (new ItemFlintAndSteel()).c("flintAndSteel")); + a(260, "apple", (new ItemFood(4, 0.3F, false)).c("apple")); + a(261, "bow", (new ItemBow()).c("bow")); + a(262, "arrow", (new Item()).c("arrow").a(CreativeModeTab.j)); + a(263, "coal", (new ItemCoal()).c("coal")); + a(264, "diamond", (new Item()).c("diamond").a(CreativeModeTab.l)); + a(265, "iron_ingot", (new Item()).c("ingotIron").a(CreativeModeTab.l)); + a(266, "gold_ingot", (new Item()).c("ingotGold").a(CreativeModeTab.l)); + a(267, "iron_sword", (new ItemSword(Item.EnumToolMaterial.IRON)).c("swordIron")); + a(268, "wooden_sword", (new ItemSword(Item.EnumToolMaterial.WOOD)).c("swordWood")); + a(269, "wooden_shovel", (new ItemSpade(Item.EnumToolMaterial.WOOD)).c("shovelWood")); + a(270, "wooden_pickaxe", (new ItemPickaxe(Item.EnumToolMaterial.WOOD)).c("pickaxeWood")); + a(271, "wooden_axe", (new ItemAxe(Item.EnumToolMaterial.WOOD)).c("hatchetWood")); + a(272, "stone_sword", (new ItemSword(Item.EnumToolMaterial.STONE)).c("swordStone")); + a(273, "stone_shovel", (new ItemSpade(Item.EnumToolMaterial.STONE)).c("shovelStone")); + a(274, "stone_pickaxe", (new ItemPickaxe(Item.EnumToolMaterial.STONE)).c("pickaxeStone")); + a(275, "stone_axe", (new ItemAxe(Item.EnumToolMaterial.STONE)).c("hatchetStone")); + a(276, "diamond_sword", (new ItemSword(Item.EnumToolMaterial.EMERALD)).c("swordDiamond")); + a(277, "diamond_shovel", (new ItemSpade(Item.EnumToolMaterial.EMERALD)).c("shovelDiamond")); + a(278, "diamond_pickaxe", (new ItemPickaxe(Item.EnumToolMaterial.EMERALD)).c("pickaxeDiamond")); + a(279, "diamond_axe", (new ItemAxe(Item.EnumToolMaterial.EMERALD)).c("hatchetDiamond")); + a(280, "stick", (new Item()).n().c("stick").a(CreativeModeTab.l)); + a(281, "bowl", (new Item()).c("bowl").a(CreativeModeTab.l)); + a(282, "mushroom_stew", (new ItemSoup(6)).c("mushroomStew")); + a(283, "golden_sword", (new ItemSword(Item.EnumToolMaterial.GOLD)).c("swordGold")); + a(284, "golden_shovel", (new ItemSpade(Item.EnumToolMaterial.GOLD)).c("shovelGold")); + a(285, "golden_pickaxe", (new ItemPickaxe(Item.EnumToolMaterial.GOLD)).c("pickaxeGold")); + a(286, "golden_axe", (new ItemAxe(Item.EnumToolMaterial.GOLD)).c("hatchetGold")); + a(287, "string", (new ItemReed(Blocks.TRIPWIRE)).c("string").a(CreativeModeTab.l)); + a(288, "feather", (new Item()).c("feather").a(CreativeModeTab.l)); + a(289, "gunpowder", (new Item()).c("sulphur").e(PotionBrewer.k).a(CreativeModeTab.l)); + a(290, "wooden_hoe", (new ItemHoe(Item.EnumToolMaterial.WOOD)).c("hoeWood")); + a(291, "stone_hoe", (new ItemHoe(Item.EnumToolMaterial.STONE)).c("hoeStone")); + a(292, "iron_hoe", (new ItemHoe(Item.EnumToolMaterial.IRON)).c("hoeIron")); + a(293, "diamond_hoe", (new ItemHoe(Item.EnumToolMaterial.EMERALD)).c("hoeDiamond")); + a(294, "golden_hoe", (new ItemHoe(Item.EnumToolMaterial.GOLD)).c("hoeGold")); + a(295, "wheat_seeds", (new ItemSeeds(Blocks.WHEAT, Blocks.FARMLAND)).c("seeds")); + a(296, "wheat", (new Item()).c("wheat").a(CreativeModeTab.l)); + a(297, "bread", (new ItemFood(5, 0.6F, false)).c("bread")); + a(298, "leather_helmet", (new ItemArmor(ItemArmor.EnumArmorMaterial.LEATHER, 0, 0)).c("helmetCloth")); + a(299, "leather_chestplate", (new ItemArmor(ItemArmor.EnumArmorMaterial.LEATHER, 0, 1)).c("chestplateCloth")); + a(300, "leather_leggings", (new ItemArmor(ItemArmor.EnumArmorMaterial.LEATHER, 0, 2)).c("leggingsCloth")); + a(301, "leather_boots", (new ItemArmor(ItemArmor.EnumArmorMaterial.LEATHER, 0, 3)).c("bootsCloth")); + a(302, "chainmail_helmet", (new ItemArmor(ItemArmor.EnumArmorMaterial.CHAIN, 1, 0)).c("helmetChain")); + a(303, "chainmail_chestplate", (new ItemArmor(ItemArmor.EnumArmorMaterial.CHAIN, 1, 1)).c("chestplateChain")); + a(304, "chainmail_leggings", (new ItemArmor(ItemArmor.EnumArmorMaterial.CHAIN, 1, 2)).c("leggingsChain")); + a(305, "chainmail_boots", (new ItemArmor(ItemArmor.EnumArmorMaterial.CHAIN, 1, 3)).c("bootsChain")); + a(306, "iron_helmet", (new ItemArmor(ItemArmor.EnumArmorMaterial.IRON, 2, 0)).c("helmetIron")); + a(307, "iron_chestplate", (new ItemArmor(ItemArmor.EnumArmorMaterial.IRON, 2, 1)).c("chestplateIron")); + a(308, "iron_leggings", (new ItemArmor(ItemArmor.EnumArmorMaterial.IRON, 2, 2)).c("leggingsIron")); + a(309, "iron_boots", (new ItemArmor(ItemArmor.EnumArmorMaterial.IRON, 2, 3)).c("bootsIron")); + a(310, "diamond_helmet", (new ItemArmor(ItemArmor.EnumArmorMaterial.DIAMOND, 3, 0)).c("helmetDiamond")); + a(311, "diamond_chestplate", (new ItemArmor(ItemArmor.EnumArmorMaterial.DIAMOND, 3, 1)).c("chestplateDiamond")); + a(312, "diamond_leggings", (new ItemArmor(ItemArmor.EnumArmorMaterial.DIAMOND, 3, 2)).c("leggingsDiamond")); + a(313, "diamond_boots", (new ItemArmor(ItemArmor.EnumArmorMaterial.DIAMOND, 3, 3)).c("bootsDiamond")); + a(314, "golden_helmet", (new ItemArmor(ItemArmor.EnumArmorMaterial.GOLD, 4, 0)).c("helmetGold")); + a(315, "golden_chestplate", (new ItemArmor(ItemArmor.EnumArmorMaterial.GOLD, 4, 1)).c("chestplateGold")); + a(316, "golden_leggings", (new ItemArmor(ItemArmor.EnumArmorMaterial.GOLD, 4, 2)).c("leggingsGold")); + a(317, "golden_boots", (new ItemArmor(ItemArmor.EnumArmorMaterial.GOLD, 4, 3)).c("bootsGold")); + a(318, "flint", (new Item()).c("flint").a(CreativeModeTab.l)); + a(319, "porkchop", (new ItemFood(3, 0.3F, true)).c("porkchopRaw")); + a(320, "cooked_porkchop", (new ItemFood(8, 0.8F, true)).c("porkchopCooked")); + a(321, "painting", (new ItemHanging(EntityPainting.class)).c("painting")); + a(322, "golden_apple", (new ItemGoldenApple(4, 1.2F, false)).h().a(MobEffectList.REGENERATION.id, 5, 1, 1.0F).c("appleGold")); + a(323, "sign", (new ItemSign()).c("sign")); + a(324, "wooden_door", (new ItemDoor(Blocks.WOODEN_DOOR)).c("doorOak")); + Item item = (new ItemBucket(Blocks.AIR)).c("bucket").c(16); + + a(325, "bucket", item); + a(326, "water_bucket", (new ItemBucket(Blocks.FLOWING_WATER)).c("bucketWater").c(item)); + a(327, "lava_bucket", (new ItemBucket(Blocks.FLOWING_LAVA)).c("bucketLava").c(item)); + a(328, "minecart", (new ItemMinecart(EntityMinecartAbstract.EnumMinecartType.RIDEABLE)).c("minecart")); + a(329, "saddle", (new ItemSaddle()).c("saddle")); + a(330, "iron_door", (new ItemDoor(Blocks.IRON_DOOR)).c("doorIron")); + a(331, "redstone", (new ItemRedstone()).c("redstone").e(PotionBrewer.i)); + a(332, "snowball", (new ItemSnowball()).c("snowball")); + a(333, "boat", (new ItemBoat()).c("boat")); + a(334, "leather", (new Item()).c("leather").a(CreativeModeTab.l)); + a(335, "milk_bucket", (new ItemMilkBucket()).c("milk").c(item)); + a(336, "brick", (new Item()).c("brick").a(CreativeModeTab.l)); + a(337, "clay_ball", (new Item()).c("clay").a(CreativeModeTab.l)); + a(338, "reeds", (new ItemReed(Blocks.REEDS)).c("reeds").a(CreativeModeTab.l)); + a(339, "paper", (new Item()).c("paper").a(CreativeModeTab.f)); + a(340, "book", (new ItemBook()).c("book").a(CreativeModeTab.f)); + a(341, "slime_ball", (new Item()).c("slimeball").a(CreativeModeTab.f)); + a(342, "chest_minecart", (new ItemMinecart(EntityMinecartAbstract.EnumMinecartType.CHEST)).c("minecartChest")); + a(343, "furnace_minecart", (new ItemMinecart(EntityMinecartAbstract.EnumMinecartType.FURNACE)).c("minecartFurnace")); + a(344, "egg", (new ItemEgg()).c("egg")); + a(345, "compass", (new Item()).c("compass").a(CreativeModeTab.i)); + a(346, "fishing_rod", (new ItemFishingRod()).c("fishingRod")); + a(347, "clock", (new Item()).c("clock").a(CreativeModeTab.i)); + a(348, "glowstone_dust", (new Item()).c("yellowDust").e(PotionBrewer.j).a(CreativeModeTab.l)); + a(349, "fish", (new ItemFish(false)).c("fish").a(true)); + a(350, "cooked_fish", (new ItemFish(true)).c("fish").a(true)); + a(351, "dye", (new ItemDye()).c("dyePowder")); + a(352, "bone", (new Item()).c("bone").n().a(CreativeModeTab.f)); + a(353, "sugar", (new Item()).c("sugar").e(PotionBrewer.b).a(CreativeModeTab.l)); + a(354, "cake", (new ItemReed(Blocks.CAKE)).c(1).c("cake").a(CreativeModeTab.h)); + a(355, "bed", (new ItemBed()).c(1).c("bed")); + a(356, "repeater", (new ItemReed(Blocks.UNPOWERED_REPEATER)).c("diode").a(CreativeModeTab.d)); + a(357, "cookie", (new ItemFood(2, 0.1F, false)).c("cookie")); + a(358, "filled_map", (new ItemWorldMap()).c("map")); + a(359, "shears", (new ItemShears()).c("shears")); + a(360, "melon", (new ItemFood(2, 0.3F, false)).c("melon")); + a(361, "pumpkin_seeds", (new ItemSeeds(Blocks.PUMPKIN_STEM, Blocks.FARMLAND)).c("seeds_pumpkin")); + a(362, "melon_seeds", (new ItemSeeds(Blocks.MELON_STEM, Blocks.FARMLAND)).c("seeds_melon")); + a(363, "beef", (new ItemFood(3, 0.3F, true)).c("beefRaw")); + a(364, "cooked_beef", (new ItemFood(8, 0.8F, true)).c("beefCooked")); + a(365, "chicken", (new ItemFood(2, 0.3F, true)).a(MobEffectList.HUNGER.id, 30, 0, 0.3F).c("chickenRaw")); + a(366, "cooked_chicken", (new ItemFood(6, 0.6F, true)).c("chickenCooked")); + a(367, "rotten_flesh", (new ItemFood(4, 0.1F, true)).a(MobEffectList.HUNGER.id, 30, 0, 0.8F).c("rottenFlesh")); + a(368, "ender_pearl", (new ItemEnderPearl()).c("enderPearl")); + a(369, "blaze_rod", (new Item()).c("blazeRod").a(CreativeModeTab.l).n()); + a(370, "ghast_tear", (new Item()).c("ghastTear").e(PotionBrewer.c).a(CreativeModeTab.k)); + a(371, "gold_nugget", (new Item()).c("goldNugget").a(CreativeModeTab.l)); + a(372, "nether_wart", (new ItemSeeds(Blocks.NETHER_WART, Blocks.SOUL_SAND)).c("netherStalkSeeds").e("+4")); + a(373, "potion", (new ItemPotion()).c("potion")); + a(374, "glass_bottle", (new ItemGlassBottle()).c("glassBottle")); + a(375, "spider_eye", (new ItemFood(2, 0.8F, false)).a(MobEffectList.POISON.id, 5, 0, 1.0F).c("spiderEye").e(PotionBrewer.d)); + a(376, "fermented_spider_eye", (new Item()).c("fermentedSpiderEye").e(PotionBrewer.e).a(CreativeModeTab.k)); + a(377, "blaze_powder", (new Item()).c("blazePowder").e(PotionBrewer.g).a(CreativeModeTab.k)); + a(378, "magma_cream", (new Item()).c("magmaCream").e(PotionBrewer.h).a(CreativeModeTab.k)); + a(379, "brewing_stand", (new ItemReed(Blocks.BREWING_STAND)).c("brewingStand").a(CreativeModeTab.k)); + a(380, "cauldron", (new ItemReed(Blocks.cauldron)).c("cauldron").a(CreativeModeTab.k)); + a(381, "ender_eye", (new ItemEnderEye()).c("eyeOfEnder")); + a(382, "speckled_melon", (new Item()).c("speckledMelon").e(PotionBrewer.f).a(CreativeModeTab.k)); + a(383, "spawn_egg", (new ItemMonsterEgg()).c("monsterPlacer")); + a(384, "experience_bottle", (new ItemExpBottle()).c("expBottle")); + a(385, "fire_charge", (new ItemFireball()).c("fireball")); + a(386, "writable_book", (new ItemBookAndQuill()).c("writingBook").a(CreativeModeTab.f)); + a(387, "written_book", (new ItemWrittenBook()).c("writtenBook").c(16)); + a(388, "emerald", (new Item()).c("emerald").a(CreativeModeTab.l)); + a(389, "item_frame", (new ItemHanging(EntityItemFrame.class)).c("frame")); + a(390, "flower_pot", (new ItemReed(Blocks.FLOWER_POT)).c("flowerPot").a(CreativeModeTab.c)); + a(391, "carrot", (new ItemSeedFood(3, 0.6F, Blocks.CARROTS, Blocks.FARMLAND)).c("carrots")); + a(392, "potato", (new ItemSeedFood(1, 0.3F, Blocks.POTATOES, Blocks.FARMLAND)).c("potato")); + a(393, "baked_potato", (new ItemFood(5, 0.6F, false)).c("potatoBaked")); + a(394, "poisonous_potato", (new ItemFood(2, 0.3F, false)).a(MobEffectList.POISON.id, 5, 0, 0.6F).c("potatoPoisonous")); + a(395, "map", (new ItemMapEmpty()).c("emptyMap")); + a(396, "golden_carrot", (new ItemFood(6, 1.2F, false)).c("carrotGolden").e(PotionBrewer.l).a(CreativeModeTab.k)); + a(397, "skull", (new ItemSkull()).c("skull")); + a(398, "carrot_on_a_stick", (new ItemCarrotStick()).c("carrotOnAStick")); + a(399, "nether_star", (new ItemNetherStar()).c("netherStar").a(CreativeModeTab.l)); + a(400, "pumpkin_pie", (new ItemFood(8, 0.3F, false)).c("pumpkinPie").a(CreativeModeTab.h)); + a(401, "fireworks", (new ItemFireworks()).c("fireworks")); + a(402, "firework_charge", (new ItemFireworksCharge()).c("fireworksCharge").a(CreativeModeTab.f)); + a(403, "enchanted_book", (new ItemEnchantedBook()).c(1).c("enchantedBook")); + a(404, "comparator", (new ItemReed(Blocks.UNPOWERED_COMPARATOR)).c("comparator").a(CreativeModeTab.d)); + a(405, "netherbrick", (new Item()).c("netherbrick").a(CreativeModeTab.l)); + a(406, "quartz", (new Item()).c("netherquartz").a(CreativeModeTab.l)); + a(407, "tnt_minecart", (new ItemMinecart(EntityMinecartAbstract.EnumMinecartType.TNT)).c("minecartTnt")); + a(408, "hopper_minecart", (new ItemMinecart(EntityMinecartAbstract.EnumMinecartType.HOPPER)).c("minecartHopper")); + a(409, "prismarine_shard", (new Item()).c("prismarineShard").a(CreativeModeTab.l)); + a(410, "prismarine_crystals", (new Item()).c("prismarineCrystals").a(CreativeModeTab.l)); + a(411, "rabbit", (new ItemFood(3, 0.3F, true)).c("rabbitRaw")); + a(412, "cooked_rabbit", (new ItemFood(5, 0.6F, true)).c("rabbitCooked")); + a(413, "rabbit_stew", (new ItemSoup(10)).c("rabbitStew")); + a(414, "rabbit_foot", (new Item()).c("rabbitFoot").e(PotionBrewer.n).a(CreativeModeTab.k)); + a(415, "rabbit_hide", (new Item()).c("rabbitHide").a(CreativeModeTab.l)); + a(416, "armor_stand", (new ItemArmorStand()).c("armorStand").c(16)); + a(417, "iron_horse_armor", (new Item()).c("horsearmormetal").c(1).a(CreativeModeTab.f)); + a(418, "golden_horse_armor", (new Item()).c("horsearmorgold").c(1).a(CreativeModeTab.f)); + a(419, "diamond_horse_armor", (new Item()).c("horsearmordiamond").c(1).a(CreativeModeTab.f)); + a(420, "lead", (new ItemLeash()).c("leash")); + a(421, "name_tag", (new ItemNameTag()).c("nameTag")); + a(422, "command_block_minecart", (new ItemMinecart(EntityMinecartAbstract.EnumMinecartType.COMMAND_BLOCK)).c("minecartCommandBlock").a((CreativeModeTab) null)); + a(423, "mutton", (new ItemFood(2, 0.3F, true)).c("muttonRaw")); + a(424, "cooked_mutton", (new ItemFood(6, 0.8F, true)).c("muttonCooked")); + a(425, "banner", (new ItemBanner()).b("banner")); + a(427, "spruce_door", (new ItemDoor(Blocks.SPRUCE_DOOR)).c("doorSpruce")); + a(428, "birch_door", (new ItemDoor(Blocks.BIRCH_DOOR)).c("doorBirch")); + a(429, "jungle_door", (new ItemDoor(Blocks.JUNGLE_DOOR)).c("doorJungle")); + a(430, "acacia_door", (new ItemDoor(Blocks.ACACIA_DOOR)).c("doorAcacia")); + a(431, "dark_oak_door", (new ItemDoor(Blocks.DARK_OAK_DOOR)).c("doorDarkOak")); + a(2256, "record_13", (new ItemRecord("13")).c("record")); + a(2257, "record_cat", (new ItemRecord("cat")).c("record")); + a(2258, "record_blocks", (new ItemRecord("blocks")).c("record")); + a(2259, "record_chirp", (new ItemRecord("chirp")).c("record")); + a(2260, "record_far", (new ItemRecord("far")).c("record")); + a(2261, "record_mall", (new ItemRecord("mall")).c("record")); + a(2262, "record_mellohi", (new ItemRecord("mellohi")).c("record")); + a(2263, "record_stal", (new ItemRecord("stal")).c("record")); + a(2264, "record_strad", (new ItemRecord("strad")).c("record")); + a(2265, "record_ward", (new ItemRecord("ward")).c("record")); + a(2266, "record_11", (new ItemRecord("11")).c("record")); + a(2267, "record_wait", (new ItemRecord("wait")).c("record")); + } + + private static void c(Block block) { + a(block, (Item) (new ItemBlock(block))); + } + + protected static void a(Block block, Item item) { + a(Block.getId(block), (MinecraftKey) Block.REGISTRY.c(block), item); + Item.a.put(block, item); + } + + private static void a(int i, String s, Item item) { + a(i, new MinecraftKey(s), item); + } + + private static void a(int i, MinecraftKey minecraftkey, Item item) { + Item.REGISTRY.a(i, minecraftkey, item); + } + + public static enum EnumToolMaterial { + + WOOD(0, 59, 2.0F, 0.0F, 15), STONE(1, 131, 4.0F, 1.0F, 5), IRON(2, 250, 6.0F, 2.0F, 14), EMERALD(3, 1561, 8.0F, 3.0F, 10), GOLD(0, 32, 12.0F, 0.0F, 22); + + private final int f; + private final int g; + private final float h; + private final float i; + private final int j; + + private EnumToolMaterial(int i, int j, float f, float f1, int k) { + this.f = i; + this.g = j; + this.h = f; + this.i = f1; + this.j = k; + } + + public int a() { + return this.g; + } + + public float b() { + return this.h; + } + + public float c() { + return this.i; + } + + public int d() { + return this.f; + } + + public int e() { + return this.j; + } + + public Item f() { + return this == Item.EnumToolMaterial.WOOD ? Item.getItemOf(Blocks.PLANKS) : (this == Item.EnumToolMaterial.STONE ? Item.getItemOf(Blocks.COBBLESTONE) : (this == Item.EnumToolMaterial.GOLD ? Items.GOLD_INGOT : (this == Item.EnumToolMaterial.IRON ? Items.IRON_INGOT : (this == Item.EnumToolMaterial.EMERALD ? Items.DIAMOND : null)))); + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemAnvil.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemAnvil.java new file mode 100644 index 0000000..f3bf808 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemAnvil.java @@ -0,0 +1,12 @@ +package net.minecraft.server; + +public class ItemAnvil extends ItemMultiTexture { + + public ItemAnvil(Block block) { + super(block, block, new String[] { "intact", "slightlyDamaged", "veryDamaged"}); + } + + public int filterData(int i) { + return i << 2; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ItemArmor.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemArmor.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ItemArmor.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ItemArmor.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemArmorStand.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemArmorStand.java new file mode 100644 index 0000000..d8de619 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemArmorStand.java @@ -0,0 +1,78 @@ +package net.minecraft.server; + +import java.util.List; +import java.util.Random; + +public class ItemArmorStand extends Item { + + public ItemArmorStand() { + this.a(CreativeModeTab.c); + } + + public boolean interactWith(ItemStack itemstack, EntityHuman entityhuman, World world, BlockPosition blockposition, EnumDirection enumdirection, float f, float f1, float f2) { + if (enumdirection == EnumDirection.DOWN) { + return false; + } else { + boolean flag = world.getType(blockposition).getBlock().a(world, blockposition); + BlockPosition blockposition1 = flag ? blockposition : blockposition.shift(enumdirection); + + if (!entityhuman.a(blockposition1, enumdirection, itemstack)) { + return false; + } else { + BlockPosition blockposition2 = blockposition1.up(); + boolean flag1 = !world.isEmpty(blockposition1) && !world.getType(blockposition1).getBlock().a(world, blockposition1); + + flag1 |= !world.isEmpty(blockposition2) && !world.getType(blockposition2).getBlock().a(world, blockposition2); + if (flag1) { + return false; + } else { + double d0 = (double) blockposition1.getX(); + double d1 = (double) blockposition1.getY(); + double d2 = (double) blockposition1.getZ(); + List list = world.getEntities((Entity) null, AxisAlignedBB.a(d0, d1, d2, d0 + 1.0D, d1 + 2.0D, d2 + 1.0D)); + + if (list.size() > 0) { + return false; + } else { + if (!world.isClientSide) { + world.setAir(blockposition1); + world.setAir(blockposition2); + EntityArmorStand entityarmorstand = new EntityArmorStand(world, d0 + 0.5D, d1, d2 + 0.5D); + float f3 = (float) MathHelper.d((MathHelper.g(entityhuman.yaw - 180.0F) + 22.5F) / 45.0F) * 45.0F; + + entityarmorstand.setPositionRotation(d0 + 0.5D, d1, d2 + 0.5D, f3, 0.0F); + this.a(entityarmorstand, world.random); + NBTTagCompound nbttagcompound = itemstack.getTag(); + + if (nbttagcompound != null && nbttagcompound.hasKeyOfType("EntityTag", 10)) { + NBTTagCompound nbttagcompound1 = new NBTTagCompound(); + + entityarmorstand.d(nbttagcompound1); + nbttagcompound1.a(nbttagcompound.getCompound("EntityTag")); + entityarmorstand.f(nbttagcompound1); + } + + world.addEntity(entityarmorstand); + } + + --itemstack.count; + return true; + } + } + } + } + } + + private void a(EntityArmorStand entityarmorstand, Random random) { + Vector3f vector3f = entityarmorstand.t(); + float f = random.nextFloat() * 5.0F; + float f1 = random.nextFloat() * 20.0F - 10.0F; + Vector3f vector3f1 = new Vector3f(vector3f.getX() + f, vector3f.getY() + f1, vector3f.getZ()); + + entityarmorstand.setHeadPose(vector3f1); + vector3f = entityarmorstand.u(); + f = random.nextFloat() * 10.0F - 5.0F; + vector3f1 = new Vector3f(vector3f.getX(), vector3f.getY() + f, vector3f.getZ()); + entityarmorstand.setBodyPose(vector3f1); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemAxe.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemAxe.java new file mode 100644 index 0000000..7c3840c --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemAxe.java @@ -0,0 +1,17 @@ +package net.minecraft.server; + +import com.google.common.collect.Sets; +import java.util.Set; + +public class ItemAxe extends ItemTool { + + private static final Set c = Sets.newHashSet(new Block[] { Blocks.PLANKS, Blocks.BOOKSHELF, Blocks.LOG, Blocks.LOG2, Blocks.CHEST, Blocks.PUMPKIN, Blocks.LIT_PUMPKIN, Blocks.MELON_BLOCK, Blocks.LADDER}); + + protected ItemAxe(Item.EnumToolMaterial item_enumtoolmaterial) { + super(3.0F, item_enumtoolmaterial, ItemAxe.c); + } + + public float getDestroySpeed(ItemStack itemstack, Block block) { + return block.getMaterial() != Material.WOOD && block.getMaterial() != Material.PLANT && block.getMaterial() != Material.REPLACEABLE_PLANT ? super.getDestroySpeed(itemstack, block) : this.a; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemBanner.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemBanner.java new file mode 100644 index 0000000..9c7ff9b --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemBanner.java @@ -0,0 +1,67 @@ +package net.minecraft.server; + +public class ItemBanner extends ItemBlock { + + public ItemBanner() { + super(Blocks.STANDING_BANNER); + this.maxStackSize = 16; + this.a(CreativeModeTab.c); + this.a(true); + this.setMaxDurability(0); + } + + public boolean interactWith(ItemStack itemstack, EntityHuman entityhuman, World world, BlockPosition blockposition, EnumDirection enumdirection, float f, float f1, float f2) { + if (enumdirection == EnumDirection.DOWN) { + return false; + } else if (!world.getType(blockposition).getBlock().getMaterial().isBuildable()) { + return false; + } else { + blockposition = blockposition.shift(enumdirection); + if (!entityhuman.a(blockposition, enumdirection, itemstack)) { + return false; + } else if (!Blocks.STANDING_BANNER.canPlace(world, blockposition)) { + return false; + } else if (world.isClientSide) { + return true; + } else { + if (enumdirection == EnumDirection.UP) { + int i = MathHelper.floor((double) ((entityhuman.yaw + 180.0F) * 16.0F / 360.0F) + 0.5D) & 15; + + world.setTypeAndData(blockposition, Blocks.STANDING_BANNER.getBlockData().set(BlockFloorSign.ROTATION, Integer.valueOf(i)), 3); + } else { + world.setTypeAndData(blockposition, Blocks.WALL_BANNER.getBlockData().set(BlockWallSign.FACING, enumdirection), 3); + } + + --itemstack.count; + TileEntity tileentity = world.getTileEntity(blockposition); + + if (tileentity instanceof TileEntityBanner) { + ((TileEntityBanner) tileentity).a(itemstack); + } + + return true; + } + } + } + + public String a(ItemStack itemstack) { + String s = "item.banner."; + EnumColor enumcolor = this.h(itemstack); + + s = s + enumcolor.d() + ".name"; + return LocaleI18n.get(s); + } + + private EnumColor h(ItemStack itemstack) { + NBTTagCompound nbttagcompound = itemstack.a("BlockEntityTag", false); + EnumColor enumcolor = null; + + if (nbttagcompound != null && nbttagcompound.hasKey("Base")) { + enumcolor = EnumColor.fromInvColorIndex(nbttagcompound.getInt("Base")); + } else { + enumcolor = EnumColor.fromInvColorIndex(itemstack.getData()); + } + + return enumcolor; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemBed.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemBed.java new file mode 100644 index 0000000..6b38236 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemBed.java @@ -0,0 +1,51 @@ +package net.minecraft.server; + +public class ItemBed extends Item { + + public ItemBed() { + this.a(CreativeModeTab.c); + } + + public boolean interactWith(ItemStack itemstack, EntityHuman entityhuman, World world, BlockPosition blockposition, EnumDirection enumdirection, float f, float f1, float f2) { + if (world.isClientSide) { + return true; + } else if (enumdirection != EnumDirection.UP) { + return false; + } else { + IBlockData iblockdata = world.getType(blockposition); + Block block = iblockdata.getBlock(); + boolean flag = block.a(world, blockposition); + + if (!flag) { + blockposition = blockposition.up(); + } + + int i = MathHelper.floor((double) (entityhuman.yaw * 4.0F / 360.0F) + 0.5D) & 3; + EnumDirection enumdirection1 = EnumDirection.fromType2(i); + BlockPosition blockposition1 = blockposition.shift(enumdirection1); + + if (entityhuman.a(blockposition, enumdirection, itemstack) && entityhuman.a(blockposition1, enumdirection, itemstack)) { + boolean flag1 = world.getType(blockposition1).getBlock().a(world, blockposition1); + boolean flag2 = flag || world.isEmpty(blockposition); + boolean flag3 = flag1 || world.isEmpty(blockposition1); + + if (flag2 && flag3 && World.a((IBlockAccess) world, blockposition.down()) && World.a((IBlockAccess) world, blockposition1.down())) { + IBlockData iblockdata1 = Blocks.BED.getBlockData().set(BlockBed.OCCUPIED, Boolean.valueOf(false)).set(BlockBed.FACING, enumdirection1).set(BlockBed.PART, BlockBed.EnumBedPart.FOOT); + + if (world.setTypeAndData(blockposition, iblockdata1, 3)) { + IBlockData iblockdata2 = iblockdata1.set(BlockBed.PART, BlockBed.EnumBedPart.HEAD); + + world.setTypeAndData(blockposition1, iblockdata2, 3); + } + + --itemstack.count; + return true; + } else { + return false; + } + } else { + return false; + } + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ItemBlock.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemBlock.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ItemBlock.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ItemBlock.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ItemBoat.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemBoat.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ItemBoat.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ItemBoat.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemBook.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemBook.java new file mode 100644 index 0000000..24fd6dd --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemBook.java @@ -0,0 +1,14 @@ +package net.minecraft.server; + +public class ItemBook extends Item { + + public ItemBook() {} + + public boolean f_(ItemStack itemstack) { + return itemstack.count == 1; + } + + public int b() { + return 1; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemBookAndQuill.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemBookAndQuill.java new file mode 100644 index 0000000..a345507 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemBookAndQuill.java @@ -0,0 +1,38 @@ +package net.minecraft.server; + +public class ItemBookAndQuill extends Item { + + public ItemBookAndQuill() { + this.c(1); + } + + public ItemStack a(ItemStack itemstack, World world, EntityHuman entityhuman) { + entityhuman.openBook(itemstack); + entityhuman.b(StatisticList.USE_ITEM_COUNT[Item.getId(this)]); + return itemstack; + } + + public static boolean b(NBTTagCompound nbttagcompound) { + if (nbttagcompound == null) { + return false; + } else if (!nbttagcompound.hasKeyOfType("pages", 9)) { + return false; + } else { + NBTTagList nbttaglist = nbttagcompound.getList("pages", 8); + + for (int i = 0; i < nbttaglist.size(); ++i) { + String s = nbttaglist.getString(i); + + if (s == null) { + return false; + } + + if (s.length() > 32767) { + return false; + } + } + + return true; + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ItemBow.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemBow.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ItemBow.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ItemBow.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ItemBucket.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemBucket.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ItemBucket.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ItemBucket.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemCarrotStick.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemCarrotStick.java new file mode 100644 index 0000000..47a2786 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemCarrotStick.java @@ -0,0 +1,30 @@ +package net.minecraft.server; + +public class ItemCarrotStick extends Item { + + public ItemCarrotStick() { + this.a(CreativeModeTab.e); + this.c(1); + this.setMaxDurability(25); + } + + public ItemStack a(ItemStack itemstack, World world, EntityHuman entityhuman) { + if (entityhuman.au() && entityhuman.vehicle instanceof EntityPig) { + EntityPig entitypig = (EntityPig) entityhuman.vehicle; + + if (entitypig.cm().h() && itemstack.j() - itemstack.getData() >= 7) { + entitypig.cm().g(); + itemstack.damage(7, entityhuman); + if (itemstack.count == 0) { + ItemStack itemstack1 = new ItemStack(Items.FISHING_ROD); + + itemstack1.setTag(itemstack.getTag()); + return itemstack1; + } + } + } + + entityhuman.b(StatisticList.USE_ITEM_COUNT[Item.getId(this)]); + return itemstack; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemCloth.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemCloth.java new file mode 100644 index 0000000..3a89af4 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemCloth.java @@ -0,0 +1,18 @@ +package net.minecraft.server; + +public class ItemCloth extends ItemBlock { + + public ItemCloth(Block block) { + super(block); + this.setMaxDurability(0); + this.a(true); + } + + public int filterData(int i) { + return i; + } + + public String e_(ItemStack itemstack) { + return super.getName() + "." + EnumColor.fromColorIndex(itemstack.getData()).d(); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemCoal.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemCoal.java new file mode 100644 index 0000000..d398370 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemCoal.java @@ -0,0 +1,14 @@ +package net.minecraft.server; + +public class ItemCoal extends Item { + + public ItemCoal() { + this.a(true); + this.setMaxDurability(0); + this.a(CreativeModeTab.l); + } + + public String e_(ItemStack itemstack) { + return itemstack.getData() == 1 ? "item.charcoal" : "item.coal"; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ItemDoor.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemDoor.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ItemDoor.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ItemDoor.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ItemDye.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemDye.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ItemDye.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ItemDye.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemEgg.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemEgg.java new file mode 100644 index 0000000..41d6fb6 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemEgg.java @@ -0,0 +1,23 @@ +package net.minecraft.server; + +public class ItemEgg extends Item { + + public ItemEgg() { + this.maxStackSize = 16; + this.a(CreativeModeTab.l); + } + + public ItemStack a(ItemStack itemstack, World world, EntityHuman entityhuman) { + if (!entityhuman.abilities.canInstantlyBuild) { + --itemstack.count; + } + + world.makeSound(entityhuman, "random.bow", 0.5F, 0.4F / (ItemEgg.g.nextFloat() * 0.4F + 0.8F)); + if (!world.isClientSide) { + world.addEntity(new EntityEgg(world, entityhuman)); + } + + entityhuman.b(StatisticList.USE_ITEM_COUNT[Item.getId(this)]); + return itemstack; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemEnchantedBook.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemEnchantedBook.java new file mode 100644 index 0000000..801f14f --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemEnchantedBook.java @@ -0,0 +1,72 @@ +package net.minecraft.server; + +import java.util.Random; + +public class ItemEnchantedBook extends Item { + + public ItemEnchantedBook() {} + + public boolean f_(ItemStack itemstack) { + return false; + } + + public EnumItemRarity g(ItemStack itemstack) { + return this.h(itemstack).size() > 0 ? EnumItemRarity.UNCOMMON : super.g(itemstack); + } + + public NBTTagList h(ItemStack itemstack) { + NBTTagCompound nbttagcompound = itemstack.getTag(); + + return nbttagcompound != null && nbttagcompound.hasKeyOfType("StoredEnchantments", 9) ? (NBTTagList) nbttagcompound.get("StoredEnchantments") : new NBTTagList(); + } + + public void a(ItemStack itemstack, WeightedRandomEnchant weightedrandomenchant) { + NBTTagList nbttaglist = this.h(itemstack); + boolean flag = true; + + for (int i = 0; i < nbttaglist.size(); ++i) { + NBTTagCompound nbttagcompound = nbttaglist.get(i); + + if (nbttagcompound.getShort("id") == weightedrandomenchant.enchantment.id) { + if (nbttagcompound.getShort("lvl") < weightedrandomenchant.level) { + nbttagcompound.setShort("lvl", (short) weightedrandomenchant.level); + } + + flag = false; + break; + } + } + + if (flag) { + NBTTagCompound nbttagcompound1 = new NBTTagCompound(); + + nbttagcompound1.setShort("id", (short) weightedrandomenchant.enchantment.id); + nbttagcompound1.setShort("lvl", (short) weightedrandomenchant.level); + nbttaglist.add(nbttagcompound1); + } + + if (!itemstack.hasTag()) { + itemstack.setTag(new NBTTagCompound()); + } + + itemstack.getTag().set("StoredEnchantments", nbttaglist); + } + + public ItemStack a(WeightedRandomEnchant weightedrandomenchant) { + ItemStack itemstack = new ItemStack(this); + + this.a(itemstack, weightedrandomenchant); + return itemstack; + } + + public StructurePieceTreasure b(Random random) { + return this.a(random, 1, 1, 1); + } + + public StructurePieceTreasure a(Random random, int i, int j, int k) { + ItemStack itemstack = new ItemStack(Items.BOOK, 1, 0); + + EnchantmentManager.a(random, itemstack, 30); + return new StructurePieceTreasure(itemstack, i, j, k); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemEnderEye.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemEnderEye.java new file mode 100644 index 0000000..8c000a1 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemEnderEye.java @@ -0,0 +1,134 @@ +package net.minecraft.server; + +public class ItemEnderEye extends Item { + + public ItemEnderEye() { + this.a(CreativeModeTab.f); + } + + public boolean interactWith(ItemStack itemstack, EntityHuman entityhuman, World world, BlockPosition blockposition, EnumDirection enumdirection, float f, float f1, float f2) { + IBlockData iblockdata = world.getType(blockposition); + + if (entityhuman.a(blockposition.shift(enumdirection), enumdirection, itemstack) && iblockdata.getBlock() == Blocks.END_PORTAL_FRAME && !((Boolean) iblockdata.get(BlockEnderPortalFrame.EYE)).booleanValue()) { + if (world.isClientSide) { + return true; + } else { + world.setTypeAndData(blockposition, iblockdata.set(BlockEnderPortalFrame.EYE, Boolean.valueOf(true)), 2); + world.updateAdjacentComparators(blockposition, Blocks.END_PORTAL_FRAME); + --itemstack.count; + + for (int i = 0; i < 16; ++i) { + double d0 = (double) ((float) blockposition.getX() + (5.0F + ItemEnderEye.g.nextFloat() * 6.0F) / 16.0F); + double d1 = (double) ((float) blockposition.getY() + 0.8125F); + double d2 = (double) ((float) blockposition.getZ() + (5.0F + ItemEnderEye.g.nextFloat() * 6.0F) / 16.0F); + double d3 = 0.0D; + double d4 = 0.0D; + double d5 = 0.0D; + + world.addParticle(EnumParticle.SMOKE_NORMAL, d0, d1, d2, d3, d4, d5, new int[0]); + } + + EnumDirection enumdirection1 = (EnumDirection) iblockdata.get(BlockEnderPortalFrame.FACING); + int j = 0; + int k = 0; + boolean flag = false; + boolean flag1 = true; + EnumDirection enumdirection2 = enumdirection1.e(); + + for (int l = -2; l <= 2; ++l) { + BlockPosition blockposition1 = blockposition.shift(enumdirection2, l); + IBlockData iblockdata1 = world.getType(blockposition1); + + if (iblockdata1.getBlock() == Blocks.END_PORTAL_FRAME) { + if (!((Boolean) iblockdata1.get(BlockEnderPortalFrame.EYE)).booleanValue()) { + flag1 = false; + break; + } + + k = l; + if (!flag) { + j = l; + flag = true; + } + } + } + + if (flag1 && k == j + 2) { + BlockPosition blockposition2 = blockposition.shift(enumdirection1, 4); + + int i1; + + for (i1 = j; i1 <= k; ++i1) { + BlockPosition blockposition3 = blockposition2.shift(enumdirection2, i1); + IBlockData iblockdata2 = world.getType(blockposition3); + + if (iblockdata2.getBlock() != Blocks.END_PORTAL_FRAME || !((Boolean) iblockdata2.get(BlockEnderPortalFrame.EYE)).booleanValue()) { + flag1 = false; + break; + } + } + + int j1; + BlockPosition blockposition4; + + for (i1 = j - 1; i1 <= k + 1; i1 += 4) { + blockposition2 = blockposition.shift(enumdirection2, i1); + + for (j1 = 1; j1 <= 3; ++j1) { + blockposition4 = blockposition2.shift(enumdirection1, j1); + IBlockData iblockdata3 = world.getType(blockposition4); + + if (iblockdata3.getBlock() != Blocks.END_PORTAL_FRAME || !((Boolean) iblockdata3.get(BlockEnderPortalFrame.EYE)).booleanValue()) { + flag1 = false; + break; + } + } + } + + if (flag1) { + for (i1 = j; i1 <= k; ++i1) { + blockposition2 = blockposition.shift(enumdirection2, i1); + + for (j1 = 1; j1 <= 3; ++j1) { + blockposition4 = blockposition2.shift(enumdirection1, j1); + world.setTypeAndData(blockposition4, Blocks.END_PORTAL.getBlockData(), 2); + } + } + } + } + + return true; + } + } else { + return false; + } + } + + public ItemStack a(ItemStack itemstack, World world, EntityHuman entityhuman) { + MovingObjectPosition movingobjectposition = this.a(world, entityhuman, false); + + if (movingobjectposition != null && movingobjectposition.type == MovingObjectPosition.EnumMovingObjectType.BLOCK && world.getType(movingobjectposition.a()).getBlock() == Blocks.END_PORTAL_FRAME) { + return itemstack; + } else { + if (!world.isClientSide) { + BlockPosition blockposition = world.a("Stronghold", new BlockPosition(entityhuman)); + + if (blockposition != null) { + EntityEnderSignal entityendersignal = new EntityEnderSignal(world, entityhuman.locX, entityhuman.locY, entityhuman.locZ); + + entityendersignal.a(blockposition); + world.addEntity(entityendersignal); + world.makeSound(entityhuman, "random.bow", 0.5F, 0.4F / (ItemEnderEye.g.nextFloat() * 0.4F + 0.8F)); + world.a((EntityHuman) null, 1002, new BlockPosition(entityhuman), 0); + if (!entityhuman.abilities.canInstantlyBuild) { + --itemstack.count; + } + + entityhuman.b(StatisticList.USE_ITEM_COUNT[Item.getId(this)]); + } + } + + return itemstack; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemEnderPearl.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemEnderPearl.java new file mode 100644 index 0000000..fbc9ab2 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemEnderPearl.java @@ -0,0 +1,24 @@ +package net.minecraft.server; + +public class ItemEnderPearl extends Item { + + public ItemEnderPearl() { + this.maxStackSize = 16; + this.a(CreativeModeTab.f); + } + + public ItemStack a(ItemStack itemstack, World world, EntityHuman entityhuman) { + if (entityhuman.abilities.canInstantlyBuild) { + return itemstack; + } else { + --itemstack.count; + world.makeSound(entityhuman, "random.bow", 0.5F, 0.4F / (ItemEnderPearl.g.nextFloat() * 0.4F + 0.8F)); + if (!world.isClientSide) { + world.addEntity(new EntityEnderPearl(world, entityhuman)); + } + + entityhuman.b(StatisticList.USE_ITEM_COUNT[Item.getId(this)]); + return itemstack; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemExpBottle.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemExpBottle.java new file mode 100644 index 0000000..d919694 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemExpBottle.java @@ -0,0 +1,22 @@ +package net.minecraft.server; + +public class ItemExpBottle extends Item { + + public ItemExpBottle() { + this.a(CreativeModeTab.f); + } + + public ItemStack a(ItemStack itemstack, World world, EntityHuman entityhuman) { + if (!entityhuman.abilities.canInstantlyBuild) { + --itemstack.count; + } + + world.makeSound(entityhuman, "random.bow", 0.5F, 0.4F / (ItemExpBottle.g.nextFloat() * 0.4F + 0.8F)); + if (!world.isClientSide) { + world.addEntity(new EntityThrownExpBottle(world, entityhuman)); + } + + entityhuman.b(StatisticList.USE_ITEM_COUNT[Item.getId(this)]); + return itemstack; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ItemFireball.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemFireball.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ItemFireball.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ItemFireball.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemFireworks.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemFireworks.java new file mode 100644 index 0000000..e193a07 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemFireworks.java @@ -0,0 +1,21 @@ +package net.minecraft.server; + +public class ItemFireworks extends Item { + + public ItemFireworks() {} + + public boolean interactWith(ItemStack itemstack, EntityHuman entityhuman, World world, BlockPosition blockposition, EnumDirection enumdirection, float f, float f1, float f2) { + if (!world.isClientSide) { + EntityFireworks entityfireworks = new EntityFireworks(world, (double) ((float) blockposition.getX() + f), (double) ((float) blockposition.getY() + f1), (double) ((float) blockposition.getZ() + f2), itemstack); + + world.addEntity(entityfireworks); + if (!entityhuman.abilities.canInstantlyBuild) { + --itemstack.count; + } + + return true; + } else { + return false; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemFireworksCharge.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemFireworksCharge.java new file mode 100644 index 0000000..e7ca932 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemFireworksCharge.java @@ -0,0 +1,6 @@ +package net.minecraft.server; + +public class ItemFireworksCharge extends Item { + + public ItemFireworksCharge() {} +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemFish.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemFish.java new file mode 100644 index 0000000..409a064 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemFish.java @@ -0,0 +1,132 @@ +package net.minecraft.server; + +import com.google.common.collect.Maps; +import java.util.Map; + +public class ItemFish extends ItemFood { + + private final boolean b; + + public ItemFish(boolean flag) { + super(0, 0.0F, false); + this.b = flag; + } + + public int getNutrition(ItemStack itemstack) { + ItemFish.EnumFish itemfish_enumfish = ItemFish.EnumFish.a(itemstack); + + return this.b && itemfish_enumfish.g() ? itemfish_enumfish.e() : itemfish_enumfish.c(); + } + + public float getSaturationModifier(ItemStack itemstack) { + ItemFish.EnumFish itemfish_enumfish = ItemFish.EnumFish.a(itemstack); + + return this.b && itemfish_enumfish.g() ? itemfish_enumfish.f() : itemfish_enumfish.d(); + } + + public String j(ItemStack itemstack) { + return ItemFish.EnumFish.a(itemstack) == ItemFish.EnumFish.PUFFERFISH ? PotionBrewer.m : null; + } + + protected void c(ItemStack itemstack, World world, EntityHuman entityhuman) { + ItemFish.EnumFish itemfish_enumfish = ItemFish.EnumFish.a(itemstack); + + if (itemfish_enumfish == ItemFish.EnumFish.PUFFERFISH) { + entityhuman.addEffect(new MobEffect(MobEffectList.POISON.id, 1200, 3)); + entityhuman.addEffect(new MobEffect(MobEffectList.HUNGER.id, 300, 2)); + entityhuman.addEffect(new MobEffect(MobEffectList.CONFUSION.id, 300, 1)); + } + + super.c(itemstack, world, entityhuman); + } + + public String e_(ItemStack itemstack) { + ItemFish.EnumFish itemfish_enumfish = ItemFish.EnumFish.a(itemstack); + + return this.getName() + "." + itemfish_enumfish.b() + "." + (this.b && itemfish_enumfish.g() ? "cooked" : "raw"); + } + + public static enum EnumFish { + + COD(0, "cod", 2, 0.1F, 5, 0.6F), SALMON(1, "salmon", 2, 0.1F, 6, 0.8F), CLOWNFISH(2, "clownfish", 1, 0.1F), PUFFERFISH(3, "pufferfish", 1, 0.1F); + + private static final Map e = Maps.newHashMap(); + private final int f; + private final String g; + private final int h; + private final float i; + private final int j; + private final float k; + private boolean l = false; + + private EnumFish(int i, String s, int j, float f, int k, float f1) { + this.f = i; + this.g = s; + this.h = j; + this.i = f; + this.j = k; + this.k = f1; + this.l = true; + } + + private EnumFish(int i, String s, int j, float f) { + this.f = i; + this.g = s; + this.h = j; + this.i = f; + this.j = 0; + this.k = 0.0F; + this.l = false; + } + + public int a() { + return this.f; + } + + public String b() { + return this.g; + } + + public int c() { + return this.h; + } + + public float d() { + return this.i; + } + + public int e() { + return this.j; + } + + public float f() { + return this.k; + } + + public boolean g() { + return this.l; + } + + public static ItemFish.EnumFish a(int i) { + ItemFish.EnumFish itemfish_enumfish = (ItemFish.EnumFish) ItemFish.EnumFish.e.get(Integer.valueOf(i)); + + return itemfish_enumfish == null ? ItemFish.EnumFish.COD : itemfish_enumfish; + } + + public static ItemFish.EnumFish a(ItemStack itemstack) { + return itemstack.getItem() instanceof ItemFish ? a(itemstack.getData()) : ItemFish.EnumFish.COD; + } + + static { + ItemFish.EnumFish[] aitemfish_enumfish = values(); + int i = aitemfish_enumfish.length; + + for (int j = 0; j < i; ++j) { + ItemFish.EnumFish itemfish_enumfish = aitemfish_enumfish[j]; + + ItemFish.EnumFish.e.put(Integer.valueOf(itemfish_enumfish.a()), itemfish_enumfish); + } + + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ItemFishingRod.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemFishingRod.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ItemFishingRod.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ItemFishingRod.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ItemFlintAndSteel.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemFlintAndSteel.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ItemFlintAndSteel.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ItemFlintAndSteel.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemFood.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemFood.java new file mode 100644 index 0000000..4a2ec5d --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemFood.java @@ -0,0 +1,83 @@ +package net.minecraft.server; + +public class ItemFood extends Item { + + public final int a; + private final int b; + private final float c; + private final boolean d; + private boolean k; + private int l; + private int m; + private int n; + private float o; + + public ItemFood(int i, float f, boolean flag) { + this.a = 32; + this.b = i; + this.d = flag; + this.c = f; + this.a(CreativeModeTab.h); + } + + public ItemFood(int i, boolean flag) { + this(i, 0.6F, flag); + } + + public ItemStack b(ItemStack itemstack, World world, EntityHuman entityhuman) { + --itemstack.count; + entityhuman.getFoodData().a(this, itemstack); + world.makeSound(entityhuman, "random.burp", 0.5F, world.random.nextFloat() * 0.1F + 0.9F); + this.c(itemstack, world, entityhuman); + entityhuman.b(StatisticList.USE_ITEM_COUNT[Item.getId(this)]); + return itemstack; + } + + protected void c(ItemStack itemstack, World world, EntityHuman entityhuman) { + if (!world.isClientSide && this.l > 0 && world.random.nextFloat() < this.o) { + entityhuman.addEffect(new MobEffect(this.l, this.m * 20, this.n)); + } + + } + + public int d(ItemStack itemstack) { + return 32; + } + + public EnumAnimation e(ItemStack itemstack) { + return EnumAnimation.EAT; + } + + public ItemStack a(ItemStack itemstack, World world, EntityHuman entityhuman) { + if (entityhuman.j(this.k)) { + entityhuman.a(itemstack, this.d(itemstack)); + } + + return itemstack; + } + + public int getNutrition(ItemStack itemstack) { + return this.b; + } + + public float getSaturationModifier(ItemStack itemstack) { + return this.c; + } + + public boolean g() { + return this.d; + } + + public ItemFood a(int i, int j, int k, float f) { + this.l = i; + this.m = j; + this.n = k; + this.o = f; + return this; + } + + public ItemFood h() { + this.k = true; + return this; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemGlassBottle.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemGlassBottle.java new file mode 100644 index 0000000..fbda18d --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemGlassBottle.java @@ -0,0 +1,42 @@ +package net.minecraft.server; + +public class ItemGlassBottle extends Item { + + public ItemGlassBottle() { + this.a(CreativeModeTab.k); + } + + public ItemStack a(ItemStack itemstack, World world, EntityHuman entityhuman) { + MovingObjectPosition movingobjectposition = this.a(world, entityhuman, true); + + if (movingobjectposition == null) { + return itemstack; + } else { + if (movingobjectposition.type == MovingObjectPosition.EnumMovingObjectType.BLOCK) { + BlockPosition blockposition = movingobjectposition.a(); + + if (!world.a(entityhuman, blockposition)) { + return itemstack; + } + + if (!entityhuman.a(blockposition.shift(movingobjectposition.direction), movingobjectposition.direction, itemstack)) { + return itemstack; + } + + if (world.getType(blockposition).getBlock().getMaterial() == Material.WATER) { + --itemstack.count; + entityhuman.b(StatisticList.USE_ITEM_COUNT[Item.getId(this)]); + if (itemstack.count <= 0) { + return new ItemStack(Items.POTION); + } + + if (!entityhuman.inventory.pickup(new ItemStack(Items.POTION))) { + entityhuman.drop(new ItemStack(Items.POTION, 1, 0), false); + } + } + } + + return itemstack; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemGoldenApple.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemGoldenApple.java new file mode 100644 index 0000000..1537d21 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemGoldenApple.java @@ -0,0 +1,30 @@ +package net.minecraft.server; + +public class ItemGoldenApple extends ItemFood { + + public ItemGoldenApple(int i, float f, boolean flag) { + super(i, f, flag); + this.a(true); + } + + public EnumItemRarity g(ItemStack itemstack) { + return itemstack.getData() == 0 ? EnumItemRarity.RARE : EnumItemRarity.EPIC; + } + + protected void c(ItemStack itemstack, World world, EntityHuman entityhuman) { + if (!world.isClientSide) { + entityhuman.addEffect(new MobEffect(MobEffectList.ABSORBTION.id, 2400, 0)); + } + + if (itemstack.getData() > 0) { + if (!world.isClientSide) { + entityhuman.addEffect(new MobEffect(MobEffectList.REGENERATION.id, 600, 4)); + entityhuman.addEffect(new MobEffect(MobEffectList.RESISTANCE.id, 6000, 0)); + entityhuman.addEffect(new MobEffect(MobEffectList.FIRE_RESISTANCE.id, 6000, 0)); + } + } else { + super.c(itemstack, world, entityhuman); + } + + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ItemHanging.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemHanging.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ItemHanging.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ItemHanging.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemHoe.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemHoe.java new file mode 100644 index 0000000..7c041a0 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemHoe.java @@ -0,0 +1,75 @@ +package net.minecraft.server; + +public class ItemHoe extends Item { + + protected Item.EnumToolMaterial a; + + public ItemHoe(Item.EnumToolMaterial item_enumtoolmaterial) { + this.a = item_enumtoolmaterial; + this.maxStackSize = 1; + this.setMaxDurability(item_enumtoolmaterial.a()); + this.a(CreativeModeTab.i); + } + + public boolean interactWith(ItemStack itemstack, EntityHuman entityhuman, World world, BlockPosition blockposition, EnumDirection enumdirection, float f, float f1, float f2) { + if (!entityhuman.a(blockposition.shift(enumdirection), enumdirection, itemstack)) { + return false; + } else { + IBlockData iblockdata = world.getType(blockposition); + Block block = iblockdata.getBlock(); + + if (enumdirection != EnumDirection.DOWN && world.getType(blockposition.up()).getBlock().getMaterial() == Material.AIR) { + if (block == Blocks.GRASS) { + return this.a(itemstack, entityhuman, world, blockposition, Blocks.FARMLAND.getBlockData()); + } + + if (block == Blocks.DIRT) { + switch (ItemHoe.SyntheticClass_1.a[((BlockDirt.EnumDirtVariant) iblockdata.get(BlockDirt.VARIANT)).ordinal()]) { + case 1: + return this.a(itemstack, entityhuman, world, blockposition, Blocks.FARMLAND.getBlockData()); + + case 2: + return this.a(itemstack, entityhuman, world, blockposition, Blocks.DIRT.getBlockData().set(BlockDirt.VARIANT, BlockDirt.EnumDirtVariant.DIRT)); + } + } + } + + return false; + } + } + + protected boolean a(ItemStack itemstack, EntityHuman entityhuman, World world, BlockPosition blockposition, IBlockData iblockdata) { + world.makeSound((double) ((float) blockposition.getX() + 0.5F), (double) ((float) blockposition.getY() + 0.5F), (double) ((float) blockposition.getZ() + 0.5F), iblockdata.getBlock().stepSound.getStepSound(), (iblockdata.getBlock().stepSound.getVolume1() + 1.0F) / 2.0F, iblockdata.getBlock().stepSound.getVolume2() * 0.8F); + if (world.isClientSide) { + return true; + } else { + world.setTypeUpdate(blockposition, iblockdata); + itemstack.damage(1, entityhuman); + return true; + } + } + + public String g() { + return this.a.toString(); + } + + static class SyntheticClass_1 { + + static final int[] a = new int[BlockDirt.EnumDirtVariant.values().length]; + + static { + try { + ItemHoe.SyntheticClass_1.a[BlockDirt.EnumDirtVariant.DIRT.ordinal()] = 1; + } catch (NoSuchFieldError nosuchfielderror) { + ; + } + + try { + ItemHoe.SyntheticClass_1.a[BlockDirt.EnumDirtVariant.COARSE_DIRT.ordinal()] = 2; + } catch (NoSuchFieldError nosuchfielderror1) { + ; + } + + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ItemLeash.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemLeash.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ItemLeash.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ItemLeash.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemLeaves.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemLeaves.java new file mode 100644 index 0000000..31bb831 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemLeaves.java @@ -0,0 +1,21 @@ +package net.minecraft.server; + +public class ItemLeaves extends ItemBlock { + + private final BlockLeaves b; + + public ItemLeaves(BlockLeaves blockleaves) { + super(blockleaves); + this.b = blockleaves; + this.setMaxDurability(0); + this.a(true); + } + + public int filterData(int i) { + return i | 4; + } + + public String e_(ItemStack itemstack) { + return super.getName() + "." + this.b.b(itemstack.getData()).d(); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ItemMapEmpty.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemMapEmpty.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ItemMapEmpty.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ItemMapEmpty.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ItemMilkBucket.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemMilkBucket.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ItemMilkBucket.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ItemMilkBucket.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ItemMinecart.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemMinecart.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ItemMinecart.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ItemMinecart.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ItemMonsterEgg.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemMonsterEgg.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ItemMonsterEgg.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ItemMonsterEgg.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemMultiTexture.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemMultiTexture.java new file mode 100644 index 0000000..4bdc129 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemMultiTexture.java @@ -0,0 +1,43 @@ +package net.minecraft.server; + +import com.google.common.base.Function; + +public class ItemMultiTexture extends ItemBlock { + + protected final Block b; + protected final Function c; + + public ItemMultiTexture(Block block, Block block1, Function function) { + super(block); + this.b = block1; + this.c = function; + this.setMaxDurability(0); + this.a(true); + } + + public ItemMultiTexture(Block block, Block block1, final String[] astring) { + this(block, block1, new Function() { + public String a(ItemStack itemstack) { + int i = itemstack.getData(); + + if (i < 0 || i >= astring.length) { + i = 0; + } + + return astring[i]; + } + + public Object apply(Object object) { + return this.a((ItemStack) object); + } + }); + } + + public int filterData(int i) { + return i; + } + + public String e_(ItemStack itemstack) { + return super.getName() + "." + (String) this.c.apply(itemstack); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemNameTag.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemNameTag.java new file mode 100644 index 0000000..9c3b3c5 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemNameTag.java @@ -0,0 +1,23 @@ +package net.minecraft.server; + +public class ItemNameTag extends Item { + + public ItemNameTag() { + this.a(CreativeModeTab.i); + } + + public boolean a(ItemStack itemstack, EntityHuman entityhuman, EntityLiving entityliving) { + if (!itemstack.hasName()) { + return false; + } else if (entityliving instanceof EntityInsentient) { + EntityInsentient entityinsentient = (EntityInsentient) entityliving; + + entityinsentient.setCustomName(itemstack.getName()); + entityinsentient.bX(); + --itemstack.count; + return true; + } else { + return super.a(itemstack, entityhuman, entityliving); + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemNetherStar.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemNetherStar.java new file mode 100644 index 0000000..86319b7 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemNetherStar.java @@ -0,0 +1,6 @@ +package net.minecraft.server; + +public class ItemNetherStar extends Item { + + public ItemNetherStar() {} +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemPickaxe.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemPickaxe.java new file mode 100644 index 0000000..85405e6 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemPickaxe.java @@ -0,0 +1,21 @@ +package net.minecraft.server; + +import com.google.common.collect.Sets; +import java.util.Set; + +public class ItemPickaxe extends ItemTool { + + private static final Set c = Sets.newHashSet(new Block[] { Blocks.ACTIVATOR_RAIL, Blocks.COAL_ORE, Blocks.COBBLESTONE, Blocks.DETECTOR_RAIL, Blocks.DIAMOND_BLOCK, Blocks.DIAMOND_ORE, Blocks.DOUBLE_STONE_SLAB, Blocks.GOLDEN_RAIL, Blocks.GOLD_BLOCK, Blocks.GOLD_ORE, Blocks.ICE, Blocks.IRON_BLOCK, Blocks.IRON_ORE, Blocks.LAPIS_BLOCK, Blocks.LAPIS_ORE, Blocks.LIT_REDSTONE_ORE, Blocks.MOSSY_COBBLESTONE, Blocks.NETHERRACK, Blocks.PACKED_ICE, Blocks.RAIL, Blocks.REDSTONE_ORE, Blocks.SANDSTONE, Blocks.RED_SANDSTONE, Blocks.STONE, Blocks.STONE_SLAB}); + + protected ItemPickaxe(Item.EnumToolMaterial item_enumtoolmaterial) { + super(2.0F, item_enumtoolmaterial, ItemPickaxe.c); + } + + public boolean canDestroySpecialBlock(Block block) { + return block == Blocks.OBSIDIAN ? this.b.d() == 3 : (block != Blocks.DIAMOND_BLOCK && block != Blocks.DIAMOND_ORE ? (block != Blocks.EMERALD_ORE && block != Blocks.EMERALD_BLOCK ? (block != Blocks.GOLD_BLOCK && block != Blocks.GOLD_ORE ? (block != Blocks.IRON_BLOCK && block != Blocks.IRON_ORE ? (block != Blocks.LAPIS_BLOCK && block != Blocks.LAPIS_ORE ? (block != Blocks.REDSTONE_ORE && block != Blocks.LIT_REDSTONE_ORE ? (block.getMaterial() == Material.STONE ? true : (block.getMaterial() == Material.ORE ? true : block.getMaterial() == Material.HEAVY)) : this.b.d() >= 2) : this.b.d() >= 1) : this.b.d() >= 1) : this.b.d() >= 2) : this.b.d() >= 2) : this.b.d() >= 2); + } + + public float getDestroySpeed(ItemStack itemstack, Block block) { + return block.getMaterial() != Material.ORE && block.getMaterial() != Material.HEAVY && block.getMaterial() != Material.STONE ? super.getDestroySpeed(itemstack, block) : this.a; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemPiston.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemPiston.java new file mode 100644 index 0000000..85ff125 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemPiston.java @@ -0,0 +1,12 @@ +package net.minecraft.server; + +public class ItemPiston extends ItemBlock { + + public ItemPiston(Block block) { + super(block); + } + + public int filterData(int i) { + return 7; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemPotion.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemPotion.java new file mode 100644 index 0000000..45dd15b --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemPotion.java @@ -0,0 +1,145 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +public class ItemPotion extends Item { + + private Map> a = Maps.newHashMap(); + private static final Map, Integer> b = Maps.newLinkedHashMap(); + + public ItemPotion() { + this.c(1); + this.a(true); + this.setMaxDurability(0); + this.a(CreativeModeTab.k); + } + + public List h(ItemStack itemstack) { + if (itemstack.hasTag() && itemstack.getTag().hasKeyOfType("CustomPotionEffects", 9)) { + ArrayList arraylist = Lists.newArrayList(); + NBTTagList nbttaglist = itemstack.getTag().getList("CustomPotionEffects", 10); + + for (int i = 0; i < nbttaglist.size(); ++i) { + NBTTagCompound nbttagcompound = nbttaglist.get(i); + MobEffect mobeffect = MobEffect.b(nbttagcompound); + + if (mobeffect != null) { + arraylist.add(mobeffect); + } + } + + return arraylist; + } else { + List list = (List) this.a.get(Integer.valueOf(itemstack.getData())); + + if (list == null) { + list = PotionBrewer.getEffects(itemstack.getData(), false); + this.a.put(Integer.valueOf(itemstack.getData()), list); + } + + return list; + } + } + + public List e(int i) { + List list = (List) this.a.get(Integer.valueOf(i)); + + if (list == null) { + list = PotionBrewer.getEffects(i, false); + this.a.put(Integer.valueOf(i), list); + } + + return list; + } + + public ItemStack b(ItemStack itemstack, World world, EntityHuman entityhuman) { + if (!entityhuman.abilities.canInstantlyBuild) { + --itemstack.count; + } + + if (!world.isClientSide) { + List list = this.h(itemstack); + + if (list != null) { + Iterator iterator = list.iterator(); + + while (iterator.hasNext()) { + MobEffect mobeffect = (MobEffect) iterator.next(); + + entityhuman.addEffect(new MobEffect(mobeffect)); + } + } + } + + entityhuman.b(StatisticList.USE_ITEM_COUNT[Item.getId(this)]); + if (!entityhuman.abilities.canInstantlyBuild) { + if (itemstack.count <= 0) { + return new ItemStack(Items.GLASS_BOTTLE); + } + + entityhuman.inventory.pickup(new ItemStack(Items.GLASS_BOTTLE)); + } + + return itemstack; + } + + public int d(ItemStack itemstack) { + return 32; + } + + public EnumAnimation e(ItemStack itemstack) { + return EnumAnimation.DRINK; + } + + public ItemStack a(ItemStack itemstack, World world, EntityHuman entityhuman) { + if (f(itemstack.getData())) { + if (!entityhuman.abilities.canInstantlyBuild) { + --itemstack.count; + } + + world.makeSound(entityhuman, "random.bow", 0.5F, 0.4F / (ItemPotion.g.nextFloat() * 0.4F + 0.8F)); + if (!world.isClientSide) { + world.addEntity(new EntityPotion(world, entityhuman, itemstack)); + } + + entityhuman.b(StatisticList.USE_ITEM_COUNT[Item.getId(this)]); + return itemstack; + } else { + entityhuman.a(itemstack, this.d(itemstack)); + return itemstack; + } + } + + public static boolean f(int i) { + return (i & 16384) != 0; + } + + public String a(ItemStack itemstack) { + if (itemstack.getData() == 0) { + return LocaleI18n.get("item.emptyPotion.name").trim(); + } else { + String s = ""; + + if (f(itemstack.getData())) { + s = LocaleI18n.get("potion.prefix.grenade").trim() + " "; + } + + List list = Items.POTION.h(itemstack); + String s1; + + if (list != null && !list.isEmpty()) { + s1 = ((MobEffect) list.get(0)).g(); + s1 = s1 + ".postfix"; + return s + LocaleI18n.get(s1).trim(); + } else { + s1 = PotionBrewer.c(itemstack.getData()); + return LocaleI18n.get(s1).trim() + " " + super.a(itemstack); + } + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ItemRecord.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemRecord.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ItemRecord.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ItemRecord.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemRedstone.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemRedstone.java new file mode 100644 index 0000000..210e629 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemRedstone.java @@ -0,0 +1,29 @@ +package net.minecraft.server; + +public class ItemRedstone extends Item { + + public ItemRedstone() { + this.a(CreativeModeTab.d); + } + + public boolean interactWith(ItemStack itemstack, EntityHuman entityhuman, World world, BlockPosition blockposition, EnumDirection enumdirection, float f, float f1, float f2) { + boolean flag = world.getType(blockposition).getBlock().a(world, blockposition); + BlockPosition blockposition1 = flag ? blockposition : blockposition.shift(enumdirection); + + if (!entityhuman.a(blockposition1, enumdirection, itemstack)) { + return false; + } else { + Block block = world.getType(blockposition1).getBlock(); + + if (!world.a(block, blockposition1, false, enumdirection, (Entity) null, itemstack)) { + return false; + } else if (Blocks.REDSTONE_WIRE.canPlace(world, blockposition1)) { + --itemstack.count; + world.setTypeUpdate(blockposition1, Blocks.REDSTONE_WIRE.getBlockData()); + return true; + } else { + return false; + } + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemReed.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemReed.java new file mode 100644 index 0000000..7da20be --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemReed.java @@ -0,0 +1,45 @@ +package net.minecraft.server; + +public class ItemReed extends Item { + + private Block a; + + public ItemReed(Block block) { + this.a = block; + } + + public boolean interactWith(ItemStack itemstack, EntityHuman entityhuman, World world, BlockPosition blockposition, EnumDirection enumdirection, float f, float f1, float f2) { + IBlockData iblockdata = world.getType(blockposition); + Block block = iblockdata.getBlock(); + + if (block == Blocks.SNOW_LAYER && ((Integer) iblockdata.get(BlockSnow.LAYERS)).intValue() < 1) { + enumdirection = EnumDirection.UP; + } else if (!block.a(world, blockposition)) { + blockposition = blockposition.shift(enumdirection); + } + + if (!entityhuman.a(blockposition, enumdirection, itemstack)) { + return false; + } else if (itemstack.count == 0) { + return false; + } else { + if (world.a(this.a, blockposition, false, enumdirection, (Entity) null, itemstack)) { + IBlockData iblockdata1 = this.a.getPlacedState(world, blockposition, enumdirection, f, f1, f2, 0, entityhuman); + + if (world.setTypeAndData(blockposition, iblockdata1, 3)) { + iblockdata1 = world.getType(blockposition); + if (iblockdata1.getBlock() == this.a) { + ItemBlock.a(world, entityhuman, blockposition, itemstack); + iblockdata1.getBlock().postPlace(world, blockposition, iblockdata1, entityhuman, itemstack); + } + + world.makeSound((double) ((float) blockposition.getX() + 0.5F), (double) ((float) blockposition.getY() + 0.5F), (double) ((float) blockposition.getZ() + 0.5F), this.a.stepSound.getPlaceSound(), (this.a.stepSound.getVolume1() + 1.0F) / 2.0F, this.a.stepSound.getVolume2() * 0.8F); + --itemstack.count; + return true; + } + } + + return false; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemSaddle.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemSaddle.java new file mode 100644 index 0000000..b13fd00 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemSaddle.java @@ -0,0 +1,30 @@ +package net.minecraft.server; + +public class ItemSaddle extends Item { + + public ItemSaddle() { + this.maxStackSize = 1; + this.a(CreativeModeTab.e); + } + + public boolean a(ItemStack itemstack, EntityHuman entityhuman, EntityLiving entityliving) { + if (entityliving instanceof EntityPig) { + EntityPig entitypig = (EntityPig) entityliving; + + if (!entitypig.hasSaddle() && !entitypig.isBaby()) { + entitypig.setSaddle(true); + entitypig.world.makeSound(entitypig, "mob.horse.leather", 0.5F, 1.0F); + --itemstack.count; + } + + return true; + } else { + return false; + } + } + + public boolean a(ItemStack itemstack, EntityLiving entityliving, EntityLiving entityliving1) { + this.a(itemstack, (EntityHuman) null, entityliving); + return true; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemSeedFood.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemSeedFood.java new file mode 100644 index 0000000..3229add --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemSeedFood.java @@ -0,0 +1,27 @@ +package net.minecraft.server; + +public class ItemSeedFood extends ItemFood { + + private Block b; + private Block c; + + public ItemSeedFood(int i, float f, Block block, Block block1) { + super(i, f, false); + this.b = block; + this.c = block1; + } + + public boolean interactWith(ItemStack itemstack, EntityHuman entityhuman, World world, BlockPosition blockposition, EnumDirection enumdirection, float f, float f1, float f2) { + if (enumdirection != EnumDirection.UP) { + return false; + } else if (!entityhuman.a(blockposition.shift(enumdirection), enumdirection, itemstack)) { + return false; + } else if (world.getType(blockposition).getBlock() == this.c && world.isEmpty(blockposition.up())) { + world.setTypeUpdate(blockposition.up(), this.b.getBlockData()); + --itemstack.count; + return true; + } else { + return false; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemSeeds.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemSeeds.java new file mode 100644 index 0000000..0d573d3 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemSeeds.java @@ -0,0 +1,27 @@ +package net.minecraft.server; + +public class ItemSeeds extends Item { + + private Block a; + private Block b; + + public ItemSeeds(Block block, Block block1) { + this.a = block; + this.b = block1; + this.a(CreativeModeTab.l); + } + + public boolean interactWith(ItemStack itemstack, EntityHuman entityhuman, World world, BlockPosition blockposition, EnumDirection enumdirection, float f, float f1, float f2) { + if (enumdirection != EnumDirection.UP) { + return false; + } else if (!entityhuman.a(blockposition.shift(enumdirection), enumdirection, itemstack)) { + return false; + } else if (world.getType(blockposition).getBlock() == this.b && world.isEmpty(blockposition.up())) { + world.setTypeUpdate(blockposition.up(), this.a.getBlockData()); + --itemstack.count; + return true; + } else { + return false; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemShears.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemShears.java new file mode 100644 index 0000000..d6effdf --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemShears.java @@ -0,0 +1,27 @@ +package net.minecraft.server; + +public class ItemShears extends Item { + + public ItemShears() { + this.c(1); + this.setMaxDurability(238); + this.a(CreativeModeTab.i); + } + + public boolean a(ItemStack itemstack, World world, Block block, BlockPosition blockposition, EntityLiving entityliving) { + if (block.getMaterial() != Material.LEAVES && block != Blocks.WEB && block != Blocks.TALLGRASS && block != Blocks.VINE && block != Blocks.TRIPWIRE && block != Blocks.WOOL) { + return super.a(itemstack, world, block, blockposition, entityliving); + } else { + itemstack.damage(1, entityliving); + return true; + } + } + + public boolean canDestroySpecialBlock(Block block) { + return block == Blocks.WEB || block == Blocks.REDSTONE_WIRE || block == Blocks.TRIPWIRE; + } + + public float getDestroySpeed(ItemStack itemstack, Block block) { + return block != Blocks.WEB && block.getMaterial() != Material.LEAVES ? (block == Blocks.WOOL ? 5.0F : super.getDestroySpeed(itemstack, block)) : 15.0F; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemSign.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemSign.java new file mode 100644 index 0000000..73b7d8e --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemSign.java @@ -0,0 +1,43 @@ +package net.minecraft.server; + +public class ItemSign extends Item { + + public ItemSign() { + this.maxStackSize = 16; + this.a(CreativeModeTab.c); + } + + public boolean interactWith(ItemStack itemstack, EntityHuman entityhuman, World world, BlockPosition blockposition, EnumDirection enumdirection, float f, float f1, float f2) { + if (enumdirection == EnumDirection.DOWN) { + return false; + } else if (!world.getType(blockposition).getBlock().getMaterial().isBuildable()) { + return false; + } else { + blockposition = blockposition.shift(enumdirection); + if (!entityhuman.a(blockposition, enumdirection, itemstack)) { + return false; + } else if (!Blocks.STANDING_SIGN.canPlace(world, blockposition)) { + return false; + } else if (world.isClientSide) { + return true; + } else { + if (enumdirection == EnumDirection.UP) { + int i = MathHelper.floor((double) ((entityhuman.yaw + 180.0F) * 16.0F / 360.0F) + 0.5D) & 15; + + world.setTypeAndData(blockposition, Blocks.STANDING_SIGN.getBlockData().set(BlockFloorSign.ROTATION, Integer.valueOf(i)), 3); + } else { + world.setTypeAndData(blockposition, Blocks.WALL_SIGN.getBlockData().set(BlockWallSign.FACING, enumdirection), 3); + } + + --itemstack.count; + TileEntity tileentity = world.getTileEntity(blockposition); + + if (tileentity instanceof TileEntitySign && !ItemBlock.a(world, entityhuman, blockposition, itemstack)) { + entityhuman.openSign((TileEntitySign) tileentity); + } + + return true; + } + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ItemSkull.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemSkull.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ItemSkull.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ItemSkull.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemSnow.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemSnow.java new file mode 100644 index 0000000..f79e1f8 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemSnow.java @@ -0,0 +1,49 @@ +package net.minecraft.server; + +public class ItemSnow extends ItemBlock { + + public ItemSnow(Block block) { + super(block); + this.setMaxDurability(0); + this.a(true); + } + + public boolean interactWith(ItemStack itemstack, EntityHuman entityhuman, World world, BlockPosition blockposition, EnumDirection enumdirection, float f, float f1, float f2) { + if (itemstack.count == 0) { + return false; + } else if (!entityhuman.a(blockposition, enumdirection, itemstack)) { + return false; + } else { + IBlockData iblockdata = world.getType(blockposition); + Block block = iblockdata.getBlock(); + BlockPosition blockposition1 = blockposition; + + if ((enumdirection != EnumDirection.UP || block != this.a) && !block.a(world, blockposition)) { + blockposition1 = blockposition.shift(enumdirection); + iblockdata = world.getType(blockposition1); + block = iblockdata.getBlock(); + } + + if (block == this.a) { + int i = ((Integer) iblockdata.get(BlockSnow.LAYERS)).intValue(); + + if (i <= 7) { + IBlockData iblockdata1 = iblockdata.set(BlockSnow.LAYERS, Integer.valueOf(i + 1)); + AxisAlignedBB axisalignedbb = this.a.a(world, blockposition1, iblockdata1); + + if (axisalignedbb != null && world.b(axisalignedbb) && world.setTypeAndData(blockposition1, iblockdata1, 2)) { + world.makeSound((double) ((float) blockposition1.getX() + 0.5F), (double) ((float) blockposition1.getY() + 0.5F), (double) ((float) blockposition1.getZ() + 0.5F), this.a.stepSound.getPlaceSound(), (this.a.stepSound.getVolume1() + 1.0F) / 2.0F, this.a.stepSound.getVolume2() * 0.8F); + --itemstack.count; + return true; + } + } + } + + return super.interactWith(itemstack, entityhuman, world, blockposition1, enumdirection, f, f1, f2); + } + } + + public int filterData(int i) { + return i; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemSnowball.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemSnowball.java new file mode 100644 index 0000000..57324b9 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemSnowball.java @@ -0,0 +1,23 @@ +package net.minecraft.server; + +public class ItemSnowball extends Item { + + public ItemSnowball() { + this.maxStackSize = 16; + this.a(CreativeModeTab.f); + } + + public ItemStack a(ItemStack itemstack, World world, EntityHuman entityhuman) { + if (!entityhuman.abilities.canInstantlyBuild) { + --itemstack.count; + } + + world.makeSound(entityhuman, "random.bow", 0.5F, 0.4F / (ItemSnowball.g.nextFloat() * 0.4F + 0.8F)); + if (!world.isClientSide) { + world.addEntity(new EntitySnowball(world, entityhuman)); + } + + entityhuman.b(StatisticList.USE_ITEM_COUNT[Item.getId(this)]); + return itemstack; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemSoup.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemSoup.java new file mode 100644 index 0000000..de3023c --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemSoup.java @@ -0,0 +1,14 @@ +package net.minecraft.server; + +public class ItemSoup extends ItemFood { + + public ItemSoup(int i) { + super(i, false); + this.c(1); + } + + public ItemStack b(ItemStack itemstack, World world, EntityHuman entityhuman) { + super.b(itemstack, world, entityhuman); + return new ItemStack(Items.BOWL); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemSpade.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemSpade.java new file mode 100644 index 0000000..7d8224b --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemSpade.java @@ -0,0 +1,17 @@ +package net.minecraft.server; + +import com.google.common.collect.Sets; +import java.util.Set; + +public class ItemSpade extends ItemTool { + + private static final Set c = Sets.newHashSet(new Block[] { Blocks.CLAY, Blocks.DIRT, Blocks.FARMLAND, Blocks.GRASS, Blocks.GRAVEL, Blocks.MYCELIUM, Blocks.SAND, Blocks.SNOW, Blocks.SNOW_LAYER, Blocks.SOUL_SAND}); + + public ItemSpade(Item.EnumToolMaterial item_enumtoolmaterial) { + super(1.0F, item_enumtoolmaterial, ItemSpade.c); + } + + public boolean canDestroySpecialBlock(Block block) { + return block == Blocks.SNOW_LAYER ? true : block == Blocks.SNOW; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ItemStack.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemStack.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ItemStack.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ItemStack.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemStep.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemStep.java new file mode 100644 index 0000000..4a84372 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemStep.java @@ -0,0 +1,75 @@ +package net.minecraft.server; + +public class ItemStep extends ItemBlock { + + private final BlockStepAbstract b; + private final BlockStepAbstract c; + + public ItemStep(Block block, BlockStepAbstract blockstepabstract, BlockStepAbstract blockstepabstract1) { + super(block); + this.b = blockstepabstract; + this.c = blockstepabstract1; + this.setMaxDurability(0); + this.a(true); + } + + public int filterData(int i) { + return i; + } + + public String e_(ItemStack itemstack) { + return this.b.b(itemstack.getData()); + } + + public boolean interactWith(ItemStack itemstack, EntityHuman entityhuman, World world, BlockPosition blockposition, EnumDirection enumdirection, float f, float f1, float f2) { + if (itemstack.count == 0) { + return false; + } else if (!entityhuman.a(blockposition.shift(enumdirection), enumdirection, itemstack)) { + return false; + } else { + Object object = this.b.a(itemstack); + IBlockData iblockdata = world.getType(blockposition); + + if (iblockdata.getBlock() == this.b) { + IBlockState iblockstate = this.b.n(); + Comparable comparable = iblockdata.get(iblockstate); + BlockStepAbstract.EnumSlabHalf blockstepabstract_enumslabhalf = (BlockStepAbstract.EnumSlabHalf) iblockdata.get(BlockStepAbstract.HALF); + + if ((enumdirection == EnumDirection.UP && blockstepabstract_enumslabhalf == BlockStepAbstract.EnumSlabHalf.BOTTOM || enumdirection == EnumDirection.DOWN && blockstepabstract_enumslabhalf == BlockStepAbstract.EnumSlabHalf.TOP) && comparable == object) { + IBlockData iblockdata1 = this.c.getBlockData().set(iblockstate, comparable); + + if (world.b(this.c.a(world, blockposition, iblockdata1)) && world.setTypeAndData(blockposition, iblockdata1, 3)) { + world.makeSound((double) ((float) blockposition.getX() + 0.5F), (double) ((float) blockposition.getY() + 0.5F), (double) ((float) blockposition.getZ() + 0.5F), this.c.stepSound.getPlaceSound(), (this.c.stepSound.getVolume1() + 1.0F) / 2.0F, this.c.stepSound.getVolume2() * 0.8F); + --itemstack.count; + } + + return true; + } + } + + return this.a(itemstack, world, blockposition.shift(enumdirection), object) ? true : super.interactWith(itemstack, entityhuman, world, blockposition, enumdirection, f, f1, f2); + } + } + + private boolean a(ItemStack itemstack, World world, BlockPosition blockposition, Object object) { + IBlockData iblockdata = world.getType(blockposition); + + if (iblockdata.getBlock() == this.b) { + Comparable comparable = iblockdata.get(this.b.n()); + + if (comparable == object) { + IBlockState state = this.b.n(); + IBlockData iblockdata1 = this.c.getBlockData().set(state, comparable); + + if (world.b(this.c.a(world, blockposition, iblockdata1)) && world.setTypeAndData(blockposition, iblockdata1, 3)) { + world.makeSound((double) ((float) blockposition.getX() + 0.5F), (double) ((float) blockposition.getY() + 0.5F), (double) ((float) blockposition.getZ() + 0.5F), this.c.stepSound.getPlaceSound(), (this.c.stepSound.getVolume1() + 1.0F) / 2.0F, this.c.stepSound.getVolume2() * 0.8F); + --itemstack.count; + } + + return true; + } + } + + return false; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemSword.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemSword.java new file mode 100644 index 0000000..f2efd9f --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemSword.java @@ -0,0 +1,80 @@ +package net.minecraft.server; + +import com.google.common.collect.Multimap; + +public class ItemSword extends Item { + + private float a; + private final Item.EnumToolMaterial b; + + public ItemSword(Item.EnumToolMaterial item_enumtoolmaterial) { + this.b = item_enumtoolmaterial; + this.maxStackSize = 1; + this.setMaxDurability(item_enumtoolmaterial.a()); + this.a(CreativeModeTab.j); + this.a = 4.0F + item_enumtoolmaterial.c(); + } + + public float g() { + return this.b.c(); + } + + public float getDestroySpeed(ItemStack itemstack, Block block) { + if (block == Blocks.WEB) { + return 15.0F; + } else { + Material material = block.getMaterial(); + + return material != Material.PLANT && material != Material.REPLACEABLE_PLANT && material != Material.CORAL && material != Material.LEAVES && material != Material.PUMPKIN ? 1.0F : 1.5F; + } + } + + public boolean a(ItemStack itemstack, EntityLiving entityliving, EntityLiving entityliving1) { + itemstack.damage(1, entityliving1); + return true; + } + + public boolean a(ItemStack itemstack, World world, Block block, BlockPosition blockposition, EntityLiving entityliving) { + if ((double) block.g(world, blockposition) != 0.0D) { + itemstack.damage(2, entityliving); + } + + return true; + } + + public EnumAnimation e(ItemStack itemstack) { + return EnumAnimation.BLOCK; + } + + public int d(ItemStack itemstack) { + return 72000; + } + + public ItemStack a(ItemStack itemstack, World world, EntityHuman entityhuman) { + entityhuman.a(itemstack, this.d(itemstack)); + return itemstack; + } + + public boolean canDestroySpecialBlock(Block block) { + return block == Blocks.WEB; + } + + public int b() { + return this.b.e(); + } + + public String h() { + return this.b.toString(); + } + + public boolean a(ItemStack itemstack, ItemStack itemstack1) { + return this.b.f() == itemstack1.getItem() ? true : super.a(itemstack, itemstack1); + } + + public Multimap i() { + Multimap multimap = super.i(); + + multimap.put(GenericAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(ItemSword.f, "Weapon modifier", (double) this.a, 0)); + return multimap; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemTallPlant.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemTallPlant.java new file mode 100644 index 0000000..8c9ca00 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemTallPlant.java @@ -0,0 +1,10 @@ +package net.minecraft.server; + +import com.google.common.base.Function; + +public class ItemTallPlant extends ItemMultiTexture { + + public ItemTallPlant(Block block, Block block1, Function function) { + super(block, block1, function); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemTool.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemTool.java new file mode 100644 index 0000000..4e94ea1 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemTool.java @@ -0,0 +1,62 @@ +package net.minecraft.server; + +import com.google.common.collect.Multimap; +import java.util.Set; + +public class ItemTool extends Item { + + private Set c; + protected float a = 4.0F; + private float d; + protected Item.EnumToolMaterial b; + + protected ItemTool(float f, Item.EnumToolMaterial item_enumtoolmaterial, Set set) { + this.b = item_enumtoolmaterial; + this.c = set; + this.maxStackSize = 1; + this.setMaxDurability(item_enumtoolmaterial.a()); + this.a = item_enumtoolmaterial.b(); + this.d = f + item_enumtoolmaterial.c(); + this.a(CreativeModeTab.i); + } + + public float getDestroySpeed(ItemStack itemstack, Block block) { + return this.c.contains(block) ? this.a : 1.0F; + } + + public boolean a(ItemStack itemstack, EntityLiving entityliving, EntityLiving entityliving1) { + itemstack.damage(2, entityliving1); + return true; + } + + public boolean a(ItemStack itemstack, World world, Block block, BlockPosition blockposition, EntityLiving entityliving) { + if ((double) block.g(world, blockposition) != 0.0D) { + itemstack.damage(1, entityliving); + } + + return true; + } + + public Item.EnumToolMaterial g() { + return this.b; + } + + public int b() { + return this.b.e(); + } + + public String h() { + return this.b.toString(); + } + + public boolean a(ItemStack itemstack, ItemStack itemstack1) { + return this.b.f() == itemstack1.getItem() ? true : super.a(itemstack, itemstack1); + } + + public Multimap i() { + Multimap multimap = super.i(); + + multimap.put(GenericAttributes.ATTACK_DAMAGE.getName(), new AttributeModifier(ItemTool.f, "Tool modifier", (double) this.d, 0)); + return multimap; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ItemWaterLily.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemWaterLily.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ItemWaterLily.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ItemWaterLily.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemWithAuxData.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemWithAuxData.java new file mode 100644 index 0000000..697e436 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemWithAuxData.java @@ -0,0 +1,36 @@ +package net.minecraft.server; + +public class ItemWithAuxData extends ItemBlock { + + private final Block b; + private String[] c; + + public ItemWithAuxData(Block block, boolean flag) { + super(block); + this.b = block; + if (flag) { + this.setMaxDurability(0); + this.a(true); + } + + } + + public int filterData(int i) { + return i; + } + + public ItemWithAuxData a(String[] astring) { + this.c = astring; + return this; + } + + public String e_(ItemStack itemstack) { + if (this.c == null) { + return super.e_(itemstack); + } else { + int i = itemstack.getData(); + + return i >= 0 && i < this.c.length ? super.e_(itemstack) + "." + this.c[i] : super.e_(itemstack); + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ItemWorldMap.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemWorldMap.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ItemWorldMap.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ItemWorldMap.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemWorldMapBase.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemWorldMapBase.java new file mode 100644 index 0000000..785e6f4 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemWorldMapBase.java @@ -0,0 +1,14 @@ +package net.minecraft.server; + +public class ItemWorldMapBase extends Item { + + protected ItemWorldMapBase() {} + + public boolean f() { + return true; + } + + public Packet c(ItemStack itemstack, World world, EntityHuman entityhuman) { + return null; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ItemWrittenBook.java b/eSpigot-Server/src/main/java/net/minecraft/server/ItemWrittenBook.java new file mode 100644 index 0000000..d179049 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ItemWrittenBook.java @@ -0,0 +1,84 @@ +package net.minecraft.server; + +public class ItemWrittenBook extends Item { + + public ItemWrittenBook() { + this.c(1); + } + + public static boolean b(NBTTagCompound nbttagcompound) { + if (!ItemBookAndQuill.b(nbttagcompound)) { + return false; + } else if (!nbttagcompound.hasKeyOfType("title", 8)) { + return false; + } else { + String s = nbttagcompound.getString("title"); + + return s != null && s.length() <= 32 ? nbttagcompound.hasKeyOfType("author", 8) : false; + } + } + + public static int h(ItemStack itemstack) { + return itemstack.getTag().getInt("generation"); + } + + public String a(ItemStack itemstack) { + if (itemstack.hasTag()) { + NBTTagCompound nbttagcompound = itemstack.getTag(); + String s = nbttagcompound.getString("title"); + + if (!UtilColor.b(s)) { + return s; + } + } + + return super.a(itemstack); + } + + public ItemStack a(ItemStack itemstack, World world, EntityHuman entityhuman) { + if (!world.isClientSide) { + this.a(itemstack, entityhuman); + } + + entityhuman.openBook(itemstack); + entityhuman.b(StatisticList.USE_ITEM_COUNT[Item.getId(this)]); + return itemstack; + } + + private void a(ItemStack itemstack, EntityHuman entityhuman) { + if (itemstack != null && itemstack.getTag() != null) { + NBTTagCompound nbttagcompound = itemstack.getTag(); + + if (!nbttagcompound.getBoolean("resolved")) { + nbttagcompound.setBoolean("resolved", true); + if (b(nbttagcompound)) { + NBTTagList nbttaglist = nbttagcompound.getList("pages", 8); + + for (int i = 0; i < nbttaglist.size(); ++i) { + String s = nbttaglist.getString(i); + + Object object; + + try { + IChatBaseComponent ichatbasecomponent = IChatBaseComponent.ChatSerializer.a(s); + + object = ChatComponentUtils.filterForDisplay(entityhuman, ichatbasecomponent, entityhuman); + } catch (Exception exception) { + object = new ChatComponentText(s); + } + + nbttaglist.a(i, new NBTTagString(IChatBaseComponent.ChatSerializer.a((IChatBaseComponent) object))); + } + + nbttagcompound.set("pages", nbttaglist); + if (entityhuman instanceof EntityPlayer && entityhuman.bZ() == itemstack) { + Slot slot = entityhuman.activeContainer.getSlot(entityhuman.inventory, entityhuman.inventory.itemInHandIndex); + + ((EntityPlayer) entityhuman).playerConnection.sendPacket(new PacketPlayOutSetSlot(0, slot.rawSlotIndex, itemstack)); + } + + } + } + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/Items.java b/eSpigot-Server/src/main/java/net/minecraft/server/Items.java new file mode 100644 index 0000000..33d39b1 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/Items.java @@ -0,0 +1,390 @@ +package net.minecraft.server; + +public class Items { + + public static final Item IRON_SHOVEL; + public static final Item IRON_PICKAXE; + public static final Item IRON_AXE; + public static final Item FLINT_AND_STEEL; + public static final Item APPLE; + public static final ItemBow BOW; + public static final Item ARROW; + public static final Item COAL; + public static final Item DIAMOND; + public static final Item IRON_INGOT; + public static final Item GOLD_INGOT; + public static final Item IRON_SWORD; + public static final Item WOODEN_SWORD; + public static final Item WOODEN_SHOVEL; + public static final Item WOODEN_PICKAXE; + public static final Item WOODEN_AXE; + public static final Item STONE_SWORD; + public static final Item STONE_SHOVEL; + public static final Item STONE_PICKAXE; + public static final Item STONE_AXE; + public static final Item DIAMOND_SWORD; + public static final Item DIAMOND_SHOVEL; + public static final Item DIAMOND_PICKAXE; + public static final Item DIAMOND_AXE; + public static final Item STICK; + public static final Item BOWL; + public static final Item MUSHROOM_STEW; + public static final Item GOLDEN_SWORD; + public static final Item GOLDEN_SHOVEL; + public static final Item GOLDEN_PICKAXE; + public static final Item GOLDEN_AXE; + public static final Item STRING; + public static final Item FEATHER; + public static final Item GUNPOWDER; + public static final Item WOODEN_HOE; + public static final Item STONE_HOE; + public static final Item IRON_HOE; + public static final Item DIAMOND_HOE; + public static final Item GOLDEN_HOE; + public static final Item WHEAT_SEEDS; + public static final Item WHEAT; + public static final Item BREAD; + public static final ItemArmor LEATHER_HELMET; + public static final ItemArmor LEATHER_CHESTPLATE; + public static final ItemArmor LEATHER_LEGGINGS; + public static final ItemArmor LEATHER_BOOTS; + public static final ItemArmor CHAINMAIL_HELMET; + public static final ItemArmor CHAINMAIL_CHESTPLATE; + public static final ItemArmor CHAINMAIL_LEGGINGS; + public static final ItemArmor CHAINMAIL_BOOTS; + public static final ItemArmor IRON_HELMET; + public static final ItemArmor IRON_CHESTPLATE; + public static final ItemArmor IRON_LEGGINGS; + public static final ItemArmor IRON_BOOTS; + public static final ItemArmor DIAMOND_HELMET; + public static final ItemArmor DIAMOND_CHESTPLATE; + public static final ItemArmor DIAMOND_LEGGINGS; + public static final ItemArmor DIAMOND_BOOTS; + public static final ItemArmor GOLDEN_HELMET; + public static final ItemArmor GOLDEN_CHESTPLATE; + public static final ItemArmor GOLDEN_LEGGINGS; + public static final ItemArmor GOLDEN_BOOTS; + public static final Item FLINT; + public static final Item PORKCHOP; + public static final Item COOKED_PORKCHOP; + public static final Item PAINTING; + public static final Item GOLDEN_APPLE; + public static final Item SIGN; + public static final Item WOODEN_DOOR; + public static final Item SPRUCE_DOOR; + public static final Item BIRCH_DOOR; + public static final Item JUNGLE_DOOR; + public static final Item ACACIA_DOOR; + public static final Item DARK_OAK_DOOR; + public static final Item BUCKET; + public static final Item WATER_BUCKET; + public static final Item LAVA_BUCKET; + public static final Item MINECART; + public static final Item SADDLE; + public static final Item IRON_DOOR; + public static final Item REDSTONE; + public static final Item SNOWBALL; + public static final Item BOAT; + public static final Item LEATHER; + public static final Item MILK_BUCKET; + public static final Item BRICK; + public static final Item CLAY_BALL; + public static final Item REEDS; + public static final Item PAPER; + public static final Item BOOK; + public static final Item SLIME; + public static final Item CHEST_MINECART; + public static final Item FURNACE_MINECART; + public static final Item EGG; + public static final Item COMPASS; + public static final ItemFishingRod FISHING_ROD; + public static final Item CLOCK; + public static final Item GLOWSTONE_DUST; + public static final Item FISH; + public static final Item COOKED_FISH; + public static final Item DYE; + public static final Item BONE; + public static final Item SUGAR; + public static final Item CAKE; + public static final Item BED; + public static final Item REPEATER; + public static final Item COOKIE; + public static final ItemWorldMap FILLED_MAP; + public static final ItemShears SHEARS; + public static final Item MELON; + public static final Item PUMPKIN_SEEDS; + public static final Item MELON_SEEDS; + public static final Item BEEF; + public static final Item COOKED_BEEF; + public static final Item CHICKEN; + public static final Item COOKED_CHICKEN; + public static final Item MUTTON; + public static final Item COOKED_MUTTON; + public static final Item RABBIT; + public static final Item COOKED_RABBIT; + public static final Item RABBIT_STEW; + public static final Item RABBIT_FOOT; + public static final Item RABBIT_HIDE; + public static final Item ROTTEN_FLESH; + public static final Item ENDER_PEARL; + public static final Item BLAZE_ROD; + public static final Item GHAST_TEAR; + public static final Item GOLD_NUGGET; + public static final Item NETHER_WART; + public static final ItemPotion POTION; + public static final Item GLASS_BOTTLE; + public static final Item SPIDER_EYE; + public static final Item FERMENTED_SPIDER_EYE; + public static final Item BLAZE_POWDER; + public static final Item MAGMA_CREAM; + public static final Item BREWING_STAND; + public static final Item CAULDRON; + public static final Item ENDER_EYE; + public static final Item SPECKLED_MELON; + public static final Item SPAWN_EGG; + public static final Item EXPERIENCE_BOTTLE; + public static final Item FIRE_CHARGE; + public static final Item WRITABLE_BOOK; + public static final Item WRITTEN_BOOK; + public static final Item EMERALD; + public static final Item ITEM_FRAME; + public static final Item FLOWER_POT; + public static final Item CARROT; + public static final Item POTATO; + public static final Item BAKED_POTATO; + public static final Item POISONOUS_POTATO; + public static final ItemMapEmpty MAP; + public static final Item GOLDEN_CARROT; + public static final Item SKULL; + public static final Item CARROT_ON_A_STICK; + public static final Item NETHER_STAR; + public static final Item PUMPKIN_PIE; + public static final Item FIREWORKS; + public static final Item FIREWORK_CHARGE; + public static final ItemEnchantedBook ENCHANTED_BOOK; + public static final Item COMPARATOR; + public static final Item NETHERBRICK; + public static final Item QUARTZ; + public static final Item TNT_MINECART; + public static final Item HOPPER_MINECART; + public static final ItemArmorStand ARMOR_STAND; + public static final Item IRON_HORSE_ARMOR; + public static final Item GOLDEN_HORSE_ARMOR; + public static final Item DIAMOND_HORSE_ARMOR; + public static final Item LEAD; + public static final Item NAME_TAG; + public static final Item COMMAND_BLOCK_MINECART; + public static final Item RECORD_13; + public static final Item RECORD_CAT; + public static final Item RECORD_BLOCKS; + public static final Item RECORD_CHIRP; + public static final Item RECORD_FAR; + public static final Item RECORD_MALL; + public static final Item RECORD_MELLOHI; + public static final Item RECORD_STAL; + public static final Item RECORD_STRAD; + public static final Item RECORD_WARD; + public static final Item RECORD_11; + public static final Item RECORD_WAIT; + public static final Item PRISMARINE_SHARD; + public static final Item PRISMARINE_CRYSTALS; + public static final Item BANNER; + + private static Item get(String s) { + return (Item) Item.REGISTRY.get(new MinecraftKey(s)); + } + + static { + if (!DispenserRegistry.a()) { + throw new RuntimeException("Accessed Items before Bootstrap!"); + } else { + IRON_SHOVEL = get("iron_shovel"); + IRON_PICKAXE = get("iron_pickaxe"); + IRON_AXE = get("iron_axe"); + FLINT_AND_STEEL = get("flint_and_steel"); + APPLE = get("apple"); + BOW = (ItemBow) get("bow"); + ARROW = get("arrow"); + COAL = get("coal"); + DIAMOND = get("diamond"); + IRON_INGOT = get("iron_ingot"); + GOLD_INGOT = get("gold_ingot"); + IRON_SWORD = get("iron_sword"); + WOODEN_SWORD = get("wooden_sword"); + WOODEN_SHOVEL = get("wooden_shovel"); + WOODEN_PICKAXE = get("wooden_pickaxe"); + WOODEN_AXE = get("wooden_axe"); + STONE_SWORD = get("stone_sword"); + STONE_SHOVEL = get("stone_shovel"); + STONE_PICKAXE = get("stone_pickaxe"); + STONE_AXE = get("stone_axe"); + DIAMOND_SWORD = get("diamond_sword"); + DIAMOND_SHOVEL = get("diamond_shovel"); + DIAMOND_PICKAXE = get("diamond_pickaxe"); + DIAMOND_AXE = get("diamond_axe"); + STICK = get("stick"); + BOWL = get("bowl"); + MUSHROOM_STEW = get("mushroom_stew"); + GOLDEN_SWORD = get("golden_sword"); + GOLDEN_SHOVEL = get("golden_shovel"); + GOLDEN_PICKAXE = get("golden_pickaxe"); + GOLDEN_AXE = get("golden_axe"); + STRING = get("string"); + FEATHER = get("feather"); + GUNPOWDER = get("gunpowder"); + WOODEN_HOE = get("wooden_hoe"); + STONE_HOE = get("stone_hoe"); + IRON_HOE = get("iron_hoe"); + DIAMOND_HOE = get("diamond_hoe"); + GOLDEN_HOE = get("golden_hoe"); + WHEAT_SEEDS = get("wheat_seeds"); + WHEAT = get("wheat"); + BREAD = get("bread"); + LEATHER_HELMET = (ItemArmor) get("leather_helmet"); + LEATHER_CHESTPLATE = (ItemArmor) get("leather_chestplate"); + LEATHER_LEGGINGS = (ItemArmor) get("leather_leggings"); + LEATHER_BOOTS = (ItemArmor) get("leather_boots"); + CHAINMAIL_HELMET = (ItemArmor) get("chainmail_helmet"); + CHAINMAIL_CHESTPLATE = (ItemArmor) get("chainmail_chestplate"); + CHAINMAIL_LEGGINGS = (ItemArmor) get("chainmail_leggings"); + CHAINMAIL_BOOTS = (ItemArmor) get("chainmail_boots"); + IRON_HELMET = (ItemArmor) get("iron_helmet"); + IRON_CHESTPLATE = (ItemArmor) get("iron_chestplate"); + IRON_LEGGINGS = (ItemArmor) get("iron_leggings"); + IRON_BOOTS = (ItemArmor) get("iron_boots"); + DIAMOND_HELMET = (ItemArmor) get("diamond_helmet"); + DIAMOND_CHESTPLATE = (ItemArmor) get("diamond_chestplate"); + DIAMOND_LEGGINGS = (ItemArmor) get("diamond_leggings"); + DIAMOND_BOOTS = (ItemArmor) get("diamond_boots"); + GOLDEN_HELMET = (ItemArmor) get("golden_helmet"); + GOLDEN_CHESTPLATE = (ItemArmor) get("golden_chestplate"); + GOLDEN_LEGGINGS = (ItemArmor) get("golden_leggings"); + GOLDEN_BOOTS = (ItemArmor) get("golden_boots"); + FLINT = get("flint"); + PORKCHOP = get("porkchop"); + COOKED_PORKCHOP = get("cooked_porkchop"); + PAINTING = get("painting"); + GOLDEN_APPLE = get("golden_apple"); + SIGN = get("sign"); + WOODEN_DOOR = get("wooden_door"); + SPRUCE_DOOR = get("spruce_door"); + BIRCH_DOOR = get("birch_door"); + JUNGLE_DOOR = get("jungle_door"); + ACACIA_DOOR = get("acacia_door"); + DARK_OAK_DOOR = get("dark_oak_door"); + BUCKET = get("bucket"); + WATER_BUCKET = get("water_bucket"); + LAVA_BUCKET = get("lava_bucket"); + MINECART = get("minecart"); + SADDLE = get("saddle"); + IRON_DOOR = get("iron_door"); + REDSTONE = get("redstone"); + SNOWBALL = get("snowball"); + BOAT = get("boat"); + LEATHER = get("leather"); + MILK_BUCKET = get("milk_bucket"); + BRICK = get("brick"); + CLAY_BALL = get("clay_ball"); + REEDS = get("reeds"); + PAPER = get("paper"); + BOOK = get("book"); + SLIME = get("slime_ball"); + CHEST_MINECART = get("chest_minecart"); + FURNACE_MINECART = get("furnace_minecart"); + EGG = get("egg"); + COMPASS = get("compass"); + FISHING_ROD = (ItemFishingRod) get("fishing_rod"); + CLOCK = get("clock"); + GLOWSTONE_DUST = get("glowstone_dust"); + FISH = get("fish"); + COOKED_FISH = get("cooked_fish"); + DYE = get("dye"); + BONE = get("bone"); + SUGAR = get("sugar"); + CAKE = get("cake"); + BED = get("bed"); + REPEATER = get("repeater"); + COOKIE = get("cookie"); + FILLED_MAP = (ItemWorldMap) get("filled_map"); + SHEARS = (ItemShears) get("shears"); + MELON = get("melon"); + PUMPKIN_SEEDS = get("pumpkin_seeds"); + MELON_SEEDS = get("melon_seeds"); + BEEF = get("beef"); + COOKED_BEEF = get("cooked_beef"); + CHICKEN = get("chicken"); + COOKED_CHICKEN = get("cooked_chicken"); + MUTTON = get("mutton"); + COOKED_MUTTON = get("cooked_mutton"); + RABBIT = get("rabbit"); + COOKED_RABBIT = get("cooked_rabbit"); + RABBIT_STEW = get("rabbit_stew"); + RABBIT_FOOT = get("rabbit_foot"); + RABBIT_HIDE = get("rabbit_hide"); + ROTTEN_FLESH = get("rotten_flesh"); + ENDER_PEARL = get("ender_pearl"); + BLAZE_ROD = get("blaze_rod"); + GHAST_TEAR = get("ghast_tear"); + GOLD_NUGGET = get("gold_nugget"); + NETHER_WART = get("nether_wart"); + POTION = (ItemPotion) get("potion"); + GLASS_BOTTLE = get("glass_bottle"); + SPIDER_EYE = get("spider_eye"); + FERMENTED_SPIDER_EYE = get("fermented_spider_eye"); + BLAZE_POWDER = get("blaze_powder"); + MAGMA_CREAM = get("magma_cream"); + BREWING_STAND = get("brewing_stand"); + CAULDRON = get("cauldron"); + ENDER_EYE = get("ender_eye"); + SPECKLED_MELON = get("speckled_melon"); + SPAWN_EGG = get("spawn_egg"); + EXPERIENCE_BOTTLE = get("experience_bottle"); + FIRE_CHARGE = get("fire_charge"); + WRITABLE_BOOK = get("writable_book"); + WRITTEN_BOOK = get("written_book"); + EMERALD = get("emerald"); + ITEM_FRAME = get("item_frame"); + FLOWER_POT = get("flower_pot"); + CARROT = get("carrot"); + POTATO = get("potato"); + BAKED_POTATO = get("baked_potato"); + POISONOUS_POTATO = get("poisonous_potato"); + MAP = (ItemMapEmpty) get("map"); + GOLDEN_CARROT = get("golden_carrot"); + SKULL = get("skull"); + CARROT_ON_A_STICK = get("carrot_on_a_stick"); + NETHER_STAR = get("nether_star"); + PUMPKIN_PIE = get("pumpkin_pie"); + FIREWORKS = get("fireworks"); + FIREWORK_CHARGE = get("firework_charge"); + ENCHANTED_BOOK = (ItemEnchantedBook) get("enchanted_book"); + COMPARATOR = get("comparator"); + NETHERBRICK = get("netherbrick"); + QUARTZ = get("quartz"); + TNT_MINECART = get("tnt_minecart"); + HOPPER_MINECART = get("hopper_minecart"); + ARMOR_STAND = (ItemArmorStand) get("armor_stand"); + IRON_HORSE_ARMOR = get("iron_horse_armor"); + GOLDEN_HORSE_ARMOR = get("golden_horse_armor"); + DIAMOND_HORSE_ARMOR = get("diamond_horse_armor"); + LEAD = get("lead"); + NAME_TAG = get("name_tag"); + COMMAND_BLOCK_MINECART = get("command_block_minecart"); + RECORD_13 = get("record_13"); + RECORD_CAT = get("record_cat"); + RECORD_BLOCKS = get("record_blocks"); + RECORD_CHIRP = get("record_chirp"); + RECORD_FAR = get("record_far"); + RECORD_MALL = get("record_mall"); + RECORD_MELLOHI = get("record_mellohi"); + RECORD_STAL = get("record_stal"); + RECORD_STRAD = get("record_strad"); + RECORD_WARD = get("record_ward"); + RECORD_11 = get("record_11"); + RECORD_WAIT = get("record_wait"); + PRISMARINE_SHARD = get("prismarine_shard"); + PRISMARINE_CRYSTALS = get("prismarine_crystals"); + BANNER = get("banner"); + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/IteratorUtils.java b/eSpigot-Server/src/main/java/net/minecraft/server/IteratorUtils.java new file mode 100644 index 0000000..04d5ec4 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/IteratorUtils.java @@ -0,0 +1,173 @@ +package net.minecraft.server; + +import com.google.common.base.Function; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.google.common.collect.UnmodifiableIterator; +import java.lang.reflect.Array; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.NoSuchElementException; + +public class IteratorUtils { + + public static Iterable a(Class oclass, Iterable> iterable) { + return new IteratorUtils.ClassIterable(oclass, (Iterable[]) b(Iterable.class, iterable), (IteratorUtils.SyntheticClass_1) null); + } + + public static Iterable> a(Iterable> iterable) { + return b(a(Object.class, iterable)); + } + + private static Iterable> b(Iterable iterable) { + return Iterables.transform(iterable, new IteratorUtils.ArrayToList((IteratorUtils.SyntheticClass_1) null)); + } + + private static T[] b(Class oclass, Iterable iterable) { + ArrayList arraylist = Lists.newArrayList(); + Iterator iterator = iterable.iterator(); + + while (iterator.hasNext()) { + Object object = iterator.next(); + + arraylist.add(object); + } + + return (T[]) arraylist.toArray(b(oclass, arraylist.size())); + } + + private static T[] b(Class oclass, int i) { + return (T[]) Array.newInstance(oclass, i); + } + + static class SyntheticClass_1 { } + + static class ClassIterable implements Iterable { + + private final Class a; + private final Iterable[] b; + + private ClassIterable(Class oclass, Iterable[] aiterable) { + this.a = oclass; + this.b = aiterable; + } + + public Iterator iterator() { + return (Iterator) (this.b.length <= 0 ? Collections.singletonList((Object[]) IteratorUtils.b(this.a, 0)).iterator() : new IteratorUtils.ClassIterable.ClassIterator(this.a, this.b, (IteratorUtils.SyntheticClass_1) null)); + } + + ClassIterable(Class oclass, Iterable[] aiterable, IteratorUtils.SyntheticClass_1 iteratorutils_syntheticclass_1) { + this(oclass, aiterable); + } + + static class ClassIterator extends UnmodifiableIterator { + + private int a; + private final Iterable[] b; + private final Iterator[] c; + private final T[] d; + + private ClassIterator(Class oclass, Iterable[] aiterable) { + this.a = -2; + this.b = aiterable; + this.c = (Iterator[]) IteratorUtils.b(Iterator.class, this.b.length); + + for (int i = 0; i < this.b.length; ++i) { + this.c[i] = aiterable[i].iterator(); + } + + this.d = IteratorUtils.b(oclass, this.c.length); + } + + private void b() { + this.a = -1; + Arrays.fill(this.c, (Object) null); + Arrays.fill(this.d, (Object) null); + } + + public boolean hasNext() { + if (this.a == -2) { + this.a = 0; + Iterator[] aiterator = this.c; + int i = aiterator.length; + + for (int j = 0; j < i; ++j) { + Iterator iterator = aiterator[j]; + + if (!iterator.hasNext()) { + this.b(); + break; + } + } + + return true; + } else { + if (this.a >= this.c.length) { + for (this.a = this.c.length - 1; this.a >= 0; --this.a) { + Iterator iterator1 = this.c[this.a]; + + if (iterator1.hasNext()) { + break; + } + + if (this.a == 0) { + this.b(); + break; + } + + iterator1 = this.b[this.a].iterator(); + this.c[this.a] = iterator1; + if (!iterator1.hasNext()) { + this.b(); + break; + } + } + } + + return this.a >= 0; + } + } + + public T[] a() { + if (!this.hasNext()) { + throw new NoSuchElementException(); + } else { + while (this.a < this.c.length) { + this.d[this.a] = this.c[this.a].next(); + ++this.a; + } + + return this.d.clone(); + } + } + + public T[] next() { + return this.a(); + } + + ClassIterator(Class oclass, Iterable[] aiterable, IteratorUtils.SyntheticClass_1 iteratorutils_syntheticclass_1) { + this(oclass, aiterable); + } + } + } + + static class ArrayToList implements Function> { + + private ArrayToList() {} + + public List a(Object[] aobject) { + return Arrays.asList((T[]) aobject); + } + + public List apply(Object[] object) { + return this.a(object); + } + + ArrayToList(IteratorUtils.SyntheticClass_1 iteratorutils_syntheticclass_1) { + this(); + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/JsonList.java b/eSpigot-Server/src/main/java/net/minecraft/server/JsonList.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/JsonList.java rename to eSpigot-Server/src/main/java/net/minecraft/server/JsonList.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/JsonListEntry.java b/eSpigot-Server/src/main/java/net/minecraft/server/JsonListEntry.java new file mode 100644 index 0000000..3d29f49 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/JsonListEntry.java @@ -0,0 +1,26 @@ +package net.minecraft.server; + +import com.google.gson.JsonObject; + +public class JsonListEntry { + + private final T a; + + public JsonListEntry(T t0) { + this.a = t0; + } + + protected JsonListEntry(T t0, JsonObject jsonobject) { + this.a = t0; + } + + public T getKey() { + return this.a; + } + + boolean hasExpired() { + return false; + } + + protected void a(JsonObject jsonobject) {} +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/LayerIsland.java b/eSpigot-Server/src/main/java/net/minecraft/server/LayerIsland.java new file mode 100644 index 0000000..8a21033 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/LayerIsland.java @@ -0,0 +1,25 @@ +package net.minecraft.server; + +public class LayerIsland extends GenLayer { + + public LayerIsland(long i) { + super(i); + } + + public int[] a(int i, int j, int k, int l) { + int[] aint = IntCache.a(k * l); + + for (int i1 = 0; i1 < l; ++i1) { + for (int j1 = 0; j1 < k; ++j1) { + this.a((long) (i + j1), (long) (j + i1)); + aint[j1 + i1 * k] = this.a(10) == 0 ? 1 : 0; + } + } + + if (i > -k && i <= 0 && j > -l && j <= 0) { + aint[-i + -j * k] = 1; + } + + return aint; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/LazyInitVar.java b/eSpigot-Server/src/main/java/net/minecraft/server/LazyInitVar.java new file mode 100644 index 0000000..344c75c --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/LazyInitVar.java @@ -0,0 +1,20 @@ +package net.minecraft.server; + +public abstract class LazyInitVar { + + private T a; + private boolean b = false; + + public LazyInitVar() {} + + public T c() { + if (!this.b) { + this.b = true; + this.a = this.init(); + } + + return this.a; + } + + protected abstract T init(); +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/LegacyPingHandler.java b/eSpigot-Server/src/main/java/net/minecraft/server/LegacyPingHandler.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/LegacyPingHandler.java rename to eSpigot-Server/src/main/java/net/minecraft/server/LegacyPingHandler.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/LocaleI18n.java b/eSpigot-Server/src/main/java/net/minecraft/server/LocaleI18n.java new file mode 100644 index 0000000..61c3690 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/LocaleI18n.java @@ -0,0 +1,27 @@ +package net.minecraft.server; + +public class LocaleI18n { + + private static LocaleLanguage a = LocaleLanguage.a(); + private static LocaleLanguage b = new LocaleLanguage(); + + public static String get(String s) { + return LocaleI18n.a.a(s); + } + + public static String a(String s, Object... aobject) { + return LocaleI18n.a.a(s, aobject); + } + + public static String b(String s) { + return LocaleI18n.b.a(s); + } + + public static boolean c(String s) { + return LocaleI18n.a.b(s); + } + + public static long a() { + return LocaleI18n.a.c(); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/LocaleLanguage.java b/eSpigot-Server/src/main/java/net/minecraft/server/LocaleLanguage.java new file mode 100644 index 0000000..1af4090 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/LocaleLanguage.java @@ -0,0 +1,81 @@ +package net.minecraft.server; + +import com.google.common.base.Splitter; +import com.google.common.collect.Iterables; +import com.google.common.collect.Maps; +import java.io.IOException; +import java.io.InputStream; +import java.util.IllegalFormatException; +import java.util.Iterator; +import java.util.Map; +import java.util.regex.Pattern; +import org.apache.commons.io.Charsets; +import org.apache.commons.io.IOUtils; + +public class LocaleLanguage { + + private static final Pattern a = Pattern.compile("%(\\d+\\$)?[\\d\\.]*[df]"); + private static final Splitter b = Splitter.on('=').limit(2); + private static LocaleLanguage c = new LocaleLanguage(); + private final Map d = Maps.newHashMap(); + private long e; + + public LocaleLanguage() { + try { + InputStream inputstream = LocaleLanguage.class.getResourceAsStream("/assets/minecraft/lang/en_US.lang"); + Iterator iterator = IOUtils.readLines(inputstream, Charsets.UTF_8).iterator(); + + while (iterator.hasNext()) { + String s = (String) iterator.next(); + + if (!s.isEmpty() && s.charAt(0) != 35) { + String[] astring = (String[]) Iterables.toArray(LocaleLanguage.b.split(s), String.class); + + if (astring != null && astring.length == 2) { + String s1 = astring[0]; + String s2 = LocaleLanguage.a.matcher(astring[1]).replaceAll("%$1s"); + + this.d.put(s1, s2); + } + } + } + + this.e = System.currentTimeMillis(); + } catch (IOException ioexception) { + ; + } + + } + + static LocaleLanguage a() { + return LocaleLanguage.c; + } + + public synchronized String a(String s) { + return this.c(s); + } + + public synchronized String a(String s, Object... aobject) { + String s1 = this.c(s); + + try { + return String.format(s1, aobject); + } catch (IllegalFormatException illegalformatexception) { + return "Format error: " + s1; + } + } + + private String c(String s) { + String s1 = (String) this.d.get(s); + + return s1 == null ? s : s1; + } + + public synchronized boolean b(String s) { + return this.d.containsKey(s); + } + + public long c() { + return this.e; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/LoginListener.java b/eSpigot-Server/src/main/java/net/minecraft/server/LoginListener.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/LoginListener.java rename to eSpigot-Server/src/main/java/net/minecraft/server/LoginListener.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/LongHashMap.java b/eSpigot-Server/src/main/java/net/minecraft/server/LongHashMap.java new file mode 100644 index 0000000..11f23a5 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/LongHashMap.java @@ -0,0 +1,212 @@ +package net.minecraft.server; + +public class LongHashMap { + + private transient LongHashMap.LongHashMapEntry[] entries = new LongHashMap.LongHashMapEntry[4096]; + private transient int count; + private int c; + private int d = 3072; + private final float e = 0.75F; + private transient volatile int f; + + public LongHashMap() { + this.c = this.entries.length - 1; + } + + private static int g(long i) { + return a((int) (i ^ i >>> 32)); + } + + private static int a(int i) { + i ^= i >>> 20 ^ i >>> 12; + return i ^ i >>> 7 ^ i >>> 4; + } + + private static int a(int i, int j) { + return i & j; + } + + public int count() { + return this.count; + } + + public V getEntry(long i) { + int j = g(i); + + for (LongHashMap.LongHashMapEntry longhashmap_longhashmapentry = this.entries[a(j, this.c)]; longhashmap_longhashmapentry != null; longhashmap_longhashmapentry = longhashmap_longhashmapentry.c) { + if (longhashmap_longhashmapentry.a == i) { + return longhashmap_longhashmapentry.b; + } + } + + return null; + } + + public boolean contains(long i) { + return this.c(i) != null; + } + + final LongHashMap.LongHashMapEntry c(long i) { + int j = g(i); + + for (LongHashMap.LongHashMapEntry longhashmap_longhashmapentry = this.entries[a(j, this.c)]; longhashmap_longhashmapentry != null; longhashmap_longhashmapentry = longhashmap_longhashmapentry.c) { + if (longhashmap_longhashmapentry.a == i) { + return longhashmap_longhashmapentry; + } + } + + return null; + } + + public void put(long i, V v0) { + int j = g(i); + int k = a(j, this.c); + + for (LongHashMap.LongHashMapEntry longhashmap_longhashmapentry = this.entries[k]; longhashmap_longhashmapentry != null; longhashmap_longhashmapentry = longhashmap_longhashmapentry.c) { + if (longhashmap_longhashmapentry.a == i) { + longhashmap_longhashmapentry.b = v0; + return; + } + } + + ++this.f; + this.a(j, i, v0, k); + } + + private void b(int i) { + LongHashMap.LongHashMapEntry[] alonghashmap_longhashmapentry = this.entries; + int j = alonghashmap_longhashmapentry.length; + + if (j == 1073741824) { + this.d = Integer.MAX_VALUE; + } else { + LongHashMap.LongHashMapEntry[] alonghashmap_longhashmapentry1 = new LongHashMap.LongHashMapEntry[i]; + + this.a(alonghashmap_longhashmapentry1); + this.entries = alonghashmap_longhashmapentry1; + this.c = this.entries.length - 1; + this.d = (int) ((float) i * this.e); + } + } + + private void a(LongHashMap.LongHashMapEntry[] alonghashmap_longhashmapentry) { + LongHashMap.LongHashMapEntry[] alonghashmap_longhashmapentry1 = this.entries; + int i = alonghashmap_longhashmapentry.length; + + for (int j = 0; j < alonghashmap_longhashmapentry1.length; ++j) { + LongHashMap.LongHashMapEntry longhashmap_longhashmapentry = alonghashmap_longhashmapentry1[j]; + + if (longhashmap_longhashmapentry != null) { + alonghashmap_longhashmapentry1[j] = null; + + LongHashMap.LongHashMapEntry longhashmap_longhashmapentry1; + + do { + longhashmap_longhashmapentry1 = longhashmap_longhashmapentry.c; + int k = a(longhashmap_longhashmapentry.d, i - 1); + + longhashmap_longhashmapentry.c = alonghashmap_longhashmapentry[k]; + alonghashmap_longhashmapentry[k] = longhashmap_longhashmapentry; + longhashmap_longhashmapentry = longhashmap_longhashmapentry1; + } while (longhashmap_longhashmapentry1 != null); + } + } + + } + + public V remove(long i) { + LongHashMap.LongHashMapEntry longhashmap_longhashmapentry = this.e(i); + + return longhashmap_longhashmapentry == null ? null : longhashmap_longhashmapentry.b; + } + + final LongHashMap.LongHashMapEntry e(long i) { + int j = g(i); + int k = a(j, this.c); + LongHashMap.LongHashMapEntry longhashmap_longhashmapentry = this.entries[k]; + + LongHashMap.LongHashMapEntry longhashmap_longhashmapentry1; + LongHashMap.LongHashMapEntry longhashmap_longhashmapentry2; + + for (longhashmap_longhashmapentry1 = longhashmap_longhashmapentry; longhashmap_longhashmapentry1 != null; longhashmap_longhashmapentry1 = longhashmap_longhashmapentry2) { + longhashmap_longhashmapentry2 = longhashmap_longhashmapentry1.c; + if (longhashmap_longhashmapentry1.a == i) { + ++this.f; + --this.count; + if (longhashmap_longhashmapentry == longhashmap_longhashmapentry1) { + this.entries[k] = longhashmap_longhashmapentry2; + } else { + longhashmap_longhashmapentry.c = longhashmap_longhashmapentry2; + } + + return longhashmap_longhashmapentry1; + } + + longhashmap_longhashmapentry = longhashmap_longhashmapentry1; + } + + return longhashmap_longhashmapentry1; + } + + private void a(int i, long j, V v0, int k) { + LongHashMap.LongHashMapEntry longhashmap_longhashmapentry = this.entries[k]; + + this.entries[k] = new LongHashMap.LongHashMapEntry(i, j, v0, longhashmap_longhashmapentry); + if (this.count++ >= this.d) { + this.b(2 * this.entries.length); + } + + } + + static class LongHashMapEntry { + + final long a; + V b; + LongHashMap.LongHashMapEntry c; + final int d; + + LongHashMapEntry(int i, long j, V v0, LongHashMap.LongHashMapEntry longhashmap_longhashmapentry) { + this.b = v0; + this.c = longhashmap_longhashmapentry; + this.a = j; + this.d = i; + } + + public final long a() { + return this.a; + } + + public final V b() { + return this.b; + } + + public final boolean equals(Object object) { + if (!(object instanceof LongHashMap.LongHashMapEntry)) { + return false; + } else { + LongHashMap.LongHashMapEntry longhashmap_longhashmapentry = (LongHashMap.LongHashMapEntry) object; + Long olong = Long.valueOf(this.a()); + Long olong1 = Long.valueOf(longhashmap_longhashmapentry.a()); + + if (olong == olong1 || olong != null && olong.equals(olong1)) { + Object object1 = this.b(); + Object object2 = longhashmap_longhashmapentry.b(); + + if (object1 == object2 || object1 != null && object1.equals(object2)) { + return true; + } + } + + return false; + } + } + + public final int hashCode() { + return LongHashMap.g(this.a); + } + + public final String toString() { + return this.a() + "=" + this.b(); + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/MCUtil.java b/eSpigot-Server/src/main/java/net/minecraft/server/MCUtil.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/MCUtil.java rename to eSpigot-Server/src/main/java/net/minecraft/server/MCUtil.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/MapGeneratorUtils.java b/eSpigot-Server/src/main/java/net/minecraft/server/MapGeneratorUtils.java new file mode 100644 index 0000000..5361446 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/MapGeneratorUtils.java @@ -0,0 +1,30 @@ +package net.minecraft.server; + +import com.google.common.collect.Maps; +import java.util.Iterator; +import java.util.Map; +import java.util.NoSuchElementException; + +public class MapGeneratorUtils { + + public static Map b(Iterable iterable, Iterable iterable1) { + return a(iterable, iterable1, Maps.newLinkedHashMap()); + } + + public static Map a(Iterable iterable, Iterable iterable1, Map map) { + Iterator iterator = iterable1.iterator(); + Iterator iterator1 = iterable.iterator(); + + while (iterator1.hasNext()) { + K object = iterator1.next(); + + map.put(object, iterator.next()); + } + + if (iterator.hasNext()) { + throw new NoSuchElementException(); + } else { + return map; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/MapIcon.java b/eSpigot-Server/src/main/java/net/minecraft/server/MapIcon.java new file mode 100644 index 0000000..d7bf93c --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/MapIcon.java @@ -0,0 +1,60 @@ +package net.minecraft.server; + +public class MapIcon { + + private byte type; + private byte x; + private byte y; + private byte rotation; + + public MapIcon(byte b0, byte b1, byte b2, byte b3) { + this.type = b0; + this.x = b1; + this.y = b2; + this.rotation = b3; + } + + public MapIcon(MapIcon mapicon) { + this.type = mapicon.type; + this.x = mapicon.x; + this.y = mapicon.y; + this.rotation = mapicon.rotation; + } + + public byte getType() { + return this.type; + } + + public byte getX() { + return this.x; + } + + public byte getY() { + return this.y; + } + + public byte getRotation() { + return this.rotation; + } + + public boolean equals(Object object) { + if (this == object) { + return true; + } else if (!(object instanceof MapIcon)) { + return false; + } else { + MapIcon mapicon = (MapIcon) object; + + return this.type != mapicon.type ? false : (this.rotation != mapicon.rotation ? false : (this.x != mapicon.x ? false : this.y == mapicon.y)); + } + } + + public int hashCode() { + byte b0 = this.type; + int i = 31 * b0 + this.x; + + i = 31 * i + this.y; + i = 31 * i + this.rotation; + return i; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/Material.java b/eSpigot-Server/src/main/java/net/minecraft/server/Material.java new file mode 100644 index 0000000..d9ded46 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/Material.java @@ -0,0 +1,130 @@ +package net.minecraft.server; + +public class Material { + + public static final Material AIR = new MaterialGas(MaterialMapColor.b); + public static final Material GRASS = new Material(MaterialMapColor.c); + public static final Material EARTH = new Material(MaterialMapColor.l); + public static final Material WOOD = (new Material(MaterialMapColor.o)).g(); + public static final Material STONE = (new Material(MaterialMapColor.m)).f(); + public static final Material ORE = (new Material(MaterialMapColor.h)).f(); + public static final Material HEAVY = (new Material(MaterialMapColor.h)).f().o(); + public static final Material WATER = (new MaterialLiquid(MaterialMapColor.n)).n(); + public static final Material LAVA = (new MaterialLiquid(MaterialMapColor.f)).n(); + public static final Material LEAVES = (new Material(MaterialMapColor.i)).g().s().n(); + public static final Material PLANT = (new MaterialDecoration(MaterialMapColor.i)).n(); + public static final Material REPLACEABLE_PLANT = (new MaterialDecoration(MaterialMapColor.i)).g().n().i(); + public static final Material SPONGE = new Material(MaterialMapColor.t); + public static final Material CLOTH = (new Material(MaterialMapColor.e)).g(); + public static final Material FIRE = (new MaterialGas(MaterialMapColor.b)).n(); + public static final Material SAND = new Material(MaterialMapColor.d); + public static final Material ORIENTABLE = (new MaterialDecoration(MaterialMapColor.b)).n(); + public static final Material WOOL = (new MaterialDecoration(MaterialMapColor.e)).g(); + public static final Material SHATTERABLE = (new Material(MaterialMapColor.b)).s().p(); + public static final Material BUILDABLE_GLASS = (new Material(MaterialMapColor.b)).p(); + public static final Material TNT = (new Material(MaterialMapColor.f)).g().s(); + public static final Material CORAL = (new Material(MaterialMapColor.i)).n(); + public static final Material ICE = (new Material(MaterialMapColor.g)).s().p(); + public static final Material SNOW_LAYER = (new Material(MaterialMapColor.g)).p(); + public static final Material PACKED_ICE = (new MaterialDecoration(MaterialMapColor.j)).i().s().f().n(); + public static final Material SNOW_BLOCK = (new Material(MaterialMapColor.j)).f(); + public static final Material CACTUS = (new Material(MaterialMapColor.i)).s().n(); + public static final Material CLAY = new Material(MaterialMapColor.k); + public static final Material PUMPKIN = (new Material(MaterialMapColor.i)).n(); + public static final Material DRAGON_EGG = (new Material(MaterialMapColor.i)).n(); + public static final Material PORTAL = (new MaterialPortal(MaterialMapColor.b)).o(); + public static final Material CAKE = (new Material(MaterialMapColor.b)).n(); + public static final Material WEB = (new Material(MaterialMapColor.e) { + public boolean isSolid() { + return false; + } + }).f().n(); + public static final Material PISTON = (new Material(MaterialMapColor.m)).o(); + public static final Material BANNER = (new Material(MaterialMapColor.b)).f().o(); + private boolean canBurn; + private boolean K; + private boolean L; + private final MaterialMapColor M; + private boolean N = true; + private int O; + private boolean P; + + public Material(MaterialMapColor materialmapcolor) { + this.M = materialmapcolor; + } + + public boolean isLiquid() { + return false; + } + + public boolean isBuildable() { + return true; + } + + public boolean blocksLight() { + return true; + } + + public boolean isSolid() { + return true; + } + + private Material s() { + this.L = true; + return this; + } + + protected Material f() { + this.N = false; + return this; + } + + protected Material g() { + this.canBurn = true; + return this; + } + + public boolean isBurnable() { + return this.canBurn; + } + + public Material i() { + this.K = true; + return this; + } + + public boolean isReplaceable() { + return this.K; + } + + public boolean k() { + return this.L ? false : this.isSolid(); + } + + public boolean isAlwaysDestroyable() { + return this.N; + } + + public int getPushReaction() { + return this.O; + } + + protected Material n() { + this.O = 1; + return this; + } + + protected Material o() { + this.O = 2; + return this; + } + + protected Material p() { + this.P = true; + return this; + } + + public MaterialMapColor r() { + return this.M; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/MaterialDecoration.java b/eSpigot-Server/src/main/java/net/minecraft/server/MaterialDecoration.java new file mode 100644 index 0000000..3eebf79 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/MaterialDecoration.java @@ -0,0 +1,21 @@ +package net.minecraft.server; + +public class MaterialDecoration extends Material { + + public MaterialDecoration(MaterialMapColor materialmapcolor) { + super(materialmapcolor); + this.p(); + } + + public boolean isBuildable() { + return false; + } + + public boolean blocksLight() { + return false; + } + + public boolean isSolid() { + return false; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/MaterialGas.java b/eSpigot-Server/src/main/java/net/minecraft/server/MaterialGas.java new file mode 100644 index 0000000..3328cd0 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/MaterialGas.java @@ -0,0 +1,21 @@ +package net.minecraft.server; + +public class MaterialGas extends Material { + + public MaterialGas(MaterialMapColor materialmapcolor) { + super(materialmapcolor); + this.i(); + } + + public boolean isBuildable() { + return false; + } + + public boolean blocksLight() { + return false; + } + + public boolean isSolid() { + return false; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/MaterialLiquid.java b/eSpigot-Server/src/main/java/net/minecraft/server/MaterialLiquid.java new file mode 100644 index 0000000..f77eee9 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/MaterialLiquid.java @@ -0,0 +1,22 @@ +package net.minecraft.server; + +public class MaterialLiquid extends Material { + + public MaterialLiquid(MaterialMapColor materialmapcolor) { + super(materialmapcolor); + this.i(); + this.n(); + } + + public boolean isLiquid() { + return true; + } + + public boolean isSolid() { + return false; + } + + public boolean isBuildable() { + return false; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/MaterialMapColor.java b/eSpigot-Server/src/main/java/net/minecraft/server/MaterialMapColor.java new file mode 100644 index 0000000..5254b17 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/MaterialMapColor.java @@ -0,0 +1,54 @@ +package net.minecraft.server; + +public class MaterialMapColor { + + public static final MaterialMapColor[] a = new MaterialMapColor[64]; + public static final MaterialMapColor b = new MaterialMapColor(0, 0); + public static final MaterialMapColor c = new MaterialMapColor(1, 8368696); + public static final MaterialMapColor d = new MaterialMapColor(2, 16247203); + public static final MaterialMapColor e = new MaterialMapColor(3, 13092807); + public static final MaterialMapColor f = new MaterialMapColor(4, 16711680); + public static final MaterialMapColor g = new MaterialMapColor(5, 10526975); + public static final MaterialMapColor h = new MaterialMapColor(6, 10987431); + public static final MaterialMapColor i = new MaterialMapColor(7, 31744); + public static final MaterialMapColor j = new MaterialMapColor(8, 16777215); + public static final MaterialMapColor k = new MaterialMapColor(9, 10791096); + public static final MaterialMapColor l = new MaterialMapColor(10, 9923917); + public static final MaterialMapColor m = new MaterialMapColor(11, 7368816); + public static final MaterialMapColor n = new MaterialMapColor(12, 4210943); + public static final MaterialMapColor o = new MaterialMapColor(13, 9402184); + public static final MaterialMapColor p = new MaterialMapColor(14, 16776437); + public static final MaterialMapColor q = new MaterialMapColor(15, 14188339); + public static final MaterialMapColor r = new MaterialMapColor(16, 11685080); + public static final MaterialMapColor s = new MaterialMapColor(17, 6724056); + public static final MaterialMapColor t = new MaterialMapColor(18, 15066419); + public static final MaterialMapColor u = new MaterialMapColor(19, 8375321); + public static final MaterialMapColor v = new MaterialMapColor(20, 15892389); + public static final MaterialMapColor w = new MaterialMapColor(21, 5000268); + public static final MaterialMapColor x = new MaterialMapColor(22, 10066329); + public static final MaterialMapColor y = new MaterialMapColor(23, 5013401); + public static final MaterialMapColor z = new MaterialMapColor(24, 8339378); + public static final MaterialMapColor A = new MaterialMapColor(25, 3361970); + public static final MaterialMapColor B = new MaterialMapColor(26, 6704179); + public static final MaterialMapColor C = new MaterialMapColor(27, 6717235); + public static final MaterialMapColor D = new MaterialMapColor(28, 10040115); + public static final MaterialMapColor E = new MaterialMapColor(29, 1644825); + public static final MaterialMapColor F = new MaterialMapColor(30, 16445005); + public static final MaterialMapColor G = new MaterialMapColor(31, 6085589); + public static final MaterialMapColor H = new MaterialMapColor(32, 4882687); + public static final MaterialMapColor I = new MaterialMapColor(33, '\ud93a'); + public static final MaterialMapColor J = new MaterialMapColor(34, 8476209); + public static final MaterialMapColor K = new MaterialMapColor(35, 7340544); + public final int L; + public final int M; + + private MaterialMapColor(int i, int j) { + if (i >= 0 && i <= 63) { + this.M = i; + this.L = j; + MaterialMapColor.a[i] = this; + } else { + throw new IndexOutOfBoundsException("Map colour ID must be between 0 and 63 (inclusive)"); + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/MaterialPortal.java b/eSpigot-Server/src/main/java/net/minecraft/server/MaterialPortal.java new file mode 100644 index 0000000..4f3ab40 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/MaterialPortal.java @@ -0,0 +1,20 @@ +package net.minecraft.server; + +public class MaterialPortal extends Material { + + public MaterialPortal(MaterialMapColor materialmapcolor) { + super(materialmapcolor); + } + + public boolean isBuildable() { + return false; + } + + public boolean blocksLight() { + return false; + } + + public boolean isSolid() { + return false; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/MathHelper.java b/eSpigot-Server/src/main/java/net/minecraft/server/MathHelper.java new file mode 100644 index 0000000..49e0646 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/MathHelper.java @@ -0,0 +1,310 @@ +package net.minecraft.server; + +import java.util.Random; +import java.util.UUID; + +public class MathHelper { + + public static final float a = c(2.0F); + private static final float[] b = new float[65536]; + private static final int[] c; + private static final double d; + private static final double[] e; + private static final double[] f; + + public static float sin(float f) { + return MathHelper.b[(int) (f * 10430.378F) & '\uffff']; + } + + public static float cos(float f) { + return MathHelper.b[(int) (f * 10430.378F + 16384.0F) & '\uffff']; + } + + public static float c(float f) { + return (float) Math.sqrt((double) f); + } + + public static float sqrt(double d0) { + return (float) Math.sqrt(d0); + } + + public static int d(float f) { + int i = (int) f; + + return f < (float) i ? i - 1 : i; + } + + public static int floor(double d0) { + int i = (int) d0; + + return d0 < (double) i ? i - 1 : i; + } + + public static long d(double d0) { + long i = (long) d0; + + return d0 < (double) i ? i - 1L : i; + } + + public static float e(float f) { + return f >= 0.0F ? f : -f; + } + + public static int a(int i) { + return i >= 0 ? i : -i; + } + + public static int f(float f) { + int i = (int) f; + + return f > (float) i ? i + 1 : i; + } + + public static int f(double d0) { + int i = (int) d0; + + return d0 > (double) i ? i + 1 : i; + } + + public static int clamp(int i, int j, int k) { + return i < j ? j : (i > k ? k : i); + } + + public static float a(float f, float f1, float f2) { + return f < f1 ? f1 : (f > f2 ? f2 : f); + } + + public static double a(double d0, double d1, double d2) { + return d0 < d1 ? d1 : (d0 > d2 ? d2 : d0); + } + + public static double b(double d0, double d1, double d2) { + return d2 < 0.0D ? d0 : (d2 > 1.0D ? d1 : d0 + (d1 - d0) * d2); + } + + public static double a(double d0, double d1) { + if (d0 < 0.0D) { + d0 = -d0; + } + + if (d1 < 0.0D) { + d1 = -d1; + } + + return d0 > d1 ? d0 : d1; + } + + public static int nextInt(Random random, int i, int j) { + return i >= j ? i : random.nextInt(j - i + 1) + i; + } + + public static float a(Random random, float f, float f1) { + return f >= f1 ? f : random.nextFloat() * (f1 - f) + f; + } + + public static double a(Random random, double d0, double d1) { + return d0 >= d1 ? d0 : random.nextDouble() * (d1 - d0) + d0; + } + + public static double a(long[] along) { + long i = 0L; + long[] along1 = along; + int j = along.length; + + for (int k = 0; k < j; ++k) { + long l = along1[k]; + + i += l; + } + + return (double) i / (double) along.length; + } + + public static float g(float f) { + f %= 360.0F; + if (f >= 180.0F) { + f -= 360.0F; + } + + if (f < -180.0F) { + f += 360.0F; + } + + return f; + } + + public static double g(double d0) { + d0 %= 360.0D; + if (d0 >= 180.0D) { + d0 -= 360.0D; + } + + if (d0 < -180.0D) { + d0 += 360.0D; + } + + return d0; + } + + public static int a(String s, int i) { + try { + return Integer.parseInt(s); + } catch (Throwable throwable) { + return i; + } + } + + public static int a(String s, int i, int j) { + return Math.max(j, a(s, i)); + } + + public static double a(String s, double d0) { + try { + return Double.parseDouble(s); + } catch (Throwable throwable) { + return d0; + } + } + + public static double a(String s, double d0, double d1) { + return Math.max(d1, a(s, d0)); + } + + public static int b(int i) { + int j = i - 1; + + j |= j >> 1; + j |= j >> 2; + j |= j >> 4; + j |= j >> 8; + j |= j >> 16; + return j + 1; + } + + private static boolean d(int i) { + return i != 0 && (i & i - 1) == 0; + } + + private static int e(int i) { + i = d(i) ? i : b(i); + return MathHelper.c[(int) ((long) i * 125613361L >> 27) & 31]; + } + + public static int c(int i) { + return e(i) - (d(i) ? 0 : 1); + } + + public static int c(int i, int j) { + if (j == 0) { + return 0; + } else if (i == 0) { + return j; + } else { + if (i < 0) { + j *= -1; + } + + int k = i % j; + + return k == 0 ? i : i + j - k; + } + } + + public static UUID a(Random random) { + long i = random.nextLong() & -61441L | 16384L; + long j = random.nextLong() & 4611686018427387903L | Long.MIN_VALUE; + + return new UUID(i, j); + } + + public static double c(double d0, double d1, double d2) { + return (d0 - d1) / (d2 - d1); + } + + public static double b(double d0, double d1) { + double d2 = d1 * d1 + d0 * d0; + + if (Double.isNaN(d2)) { + return Double.NaN; + } else { + boolean flag = d0 < 0.0D; + + if (flag) { + d0 = -d0; + } + + boolean flag1 = d1 < 0.0D; + + if (flag1) { + d1 = -d1; + } + + boolean flag2 = d0 > d1; + double d3; + + if (flag2) { + d3 = d1; + d1 = d0; + d0 = d3; + } + + d3 = i(d2); + d1 *= d3; + d0 *= d3; + double d4 = MathHelper.d + d0; + int i = (int) Double.doubleToRawLongBits(d4); + double d5 = MathHelper.e[i]; + double d6 = MathHelper.f[i]; + double d7 = d4 - MathHelper.d; + double d8 = d0 * d6 - d1 * d7; + double d9 = (6.0D + d8 * d8) * d8 * 0.16666666666666666D; + double d10 = d5 + d9; + + if (flag2) { + d10 = 1.5707963267948966D - d10; + } + + if (flag1) { + d10 = 3.141592653589793D - d10; + } + + if (flag) { + d10 = -d10; + } + + return d10; + } + } + + public static double i(double d0) { + double d1 = 0.5D * d0; + long i = Double.doubleToRawLongBits(d0); + + i = 6910469410427058090L - (i >> 1); + d0 = Double.longBitsToDouble(i); + d0 *= 1.5D - d1 * d0 * d0; + return d0; + } + + static { + int i; + + for (i = 0; i < 65536; ++i) { + MathHelper.b[i] = (float) Math.sin((double) i * 3.141592653589793D * 2.0D / 65536.0D); + } + + c = new int[] { 0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8, 31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9}; + d = Double.longBitsToDouble(4805340802404319232L); + e = new double[257]; + f = new double[257]; + + for (i = 0; i < 257; ++i) { + double d0 = (double) i / 256.0D; + double d1 = Math.asin(d0); + + MathHelper.f[i] = Math.cos(d1); + MathHelper.e[i] = d1; + } + + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/MerchantRecipe.java b/eSpigot-Server/src/main/java/net/minecraft/server/MerchantRecipe.java new file mode 100644 index 0000000..99958c6 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/MerchantRecipe.java @@ -0,0 +1,120 @@ +package net.minecraft.server; + +public class MerchantRecipe { + + private ItemStack buyingItem1; + private ItemStack buyingItem2; + private ItemStack sellingItem; + private int uses; + private int maxUses; + private boolean rewardExp; + + public MerchantRecipe(NBTTagCompound nbttagcompound) { + this.a(nbttagcompound); + } + + public MerchantRecipe(ItemStack itemstack, ItemStack itemstack1, ItemStack itemstack2) { + this(itemstack, itemstack1, itemstack2, 0, 7); + } + + public MerchantRecipe(ItemStack itemstack, ItemStack itemstack1, ItemStack itemstack2, int i, int j) { + this.buyingItem1 = itemstack; + this.buyingItem2 = itemstack1; + this.sellingItem = itemstack2; + this.uses = i; + this.maxUses = j; + this.rewardExp = true; + } + + public MerchantRecipe(ItemStack itemstack, ItemStack itemstack1) { + this(itemstack, (ItemStack) null, itemstack1); + } + + public MerchantRecipe(ItemStack itemstack, Item item) { + this(itemstack, new ItemStack(item)); + } + + public ItemStack getBuyItem1() { + return this.buyingItem1; + } + + public ItemStack getBuyItem2() { + return this.buyingItem2; + } + + public boolean hasSecondItem() { + return this.buyingItem2 != null; + } + + public ItemStack getBuyItem3() { + return this.sellingItem; + } + + public int e() { + return this.uses; + } + + public int f() { + return this.maxUses; + } + + public void g() { + ++this.uses; + } + + public void a(int i) { + this.maxUses += i; + } + + public boolean h() { + return this.uses >= this.maxUses; + } + + public boolean j() { + return this.rewardExp; + } + + public void a(NBTTagCompound nbttagcompound) { + NBTTagCompound nbttagcompound1 = nbttagcompound.getCompound("buy"); + + this.buyingItem1 = ItemStack.createStack(nbttagcompound1); + NBTTagCompound nbttagcompound2 = nbttagcompound.getCompound("sell"); + + this.sellingItem = ItemStack.createStack(nbttagcompound2); + if (nbttagcompound.hasKeyOfType("buyB", 10)) { + this.buyingItem2 = ItemStack.createStack(nbttagcompound.getCompound("buyB")); + } + + if (nbttagcompound.hasKeyOfType("uses", 99)) { + this.uses = nbttagcompound.getInt("uses"); + } + + if (nbttagcompound.hasKeyOfType("maxUses", 99)) { + this.maxUses = nbttagcompound.getInt("maxUses"); + } else { + this.maxUses = 7; + } + + if (nbttagcompound.hasKeyOfType("rewardExp", 1)) { + this.rewardExp = nbttagcompound.getBoolean("rewardExp"); + } else { + this.rewardExp = true; + } + + } + + public NBTTagCompound k() { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + + nbttagcompound.set("buy", this.buyingItem1.save(new NBTTagCompound())); + nbttagcompound.set("sell", this.sellingItem.save(new NBTTagCompound())); + if (this.buyingItem2 != null) { + nbttagcompound.set("buyB", this.buyingItem2.save(new NBTTagCompound())); + } + + nbttagcompound.setInt("uses", this.uses); + nbttagcompound.setInt("maxUses", this.maxUses); + nbttagcompound.setBoolean("rewardExp", this.rewardExp); + return nbttagcompound; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/MerchantRecipeList.java b/eSpigot-Server/src/main/java/net/minecraft/server/MerchantRecipeList.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/MerchantRecipeList.java rename to eSpigot-Server/src/main/java/net/minecraft/server/MerchantRecipeList.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/MethodProfiler.java b/eSpigot-Server/src/main/java/net/minecraft/server/MethodProfiler.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/MethodProfiler.java rename to eSpigot-Server/src/main/java/net/minecraft/server/MethodProfiler.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/MinecraftEncryption.java b/eSpigot-Server/src/main/java/net/minecraft/server/MinecraftEncryption.java new file mode 100644 index 0000000..74c50e7 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/MinecraftEncryption.java @@ -0,0 +1,136 @@ +package net.minecraft.server; + +import java.io.UnsupportedEncodingException; +import java.security.GeneralSecurityException; +import java.security.InvalidKeyException; +import java.security.Key; +import java.security.KeyFactory; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.security.PrivateKey; +import java.security.PublicKey; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.X509EncodedKeySpec; +import javax.crypto.BadPaddingException; +import javax.crypto.Cipher; +import javax.crypto.IllegalBlockSizeException; +import javax.crypto.NoSuchPaddingException; +import javax.crypto.SecretKey; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class MinecraftEncryption { + + private static final Logger a = LogManager.getLogger(); + + public static KeyPair b() { + try { + KeyPairGenerator keypairgenerator = KeyPairGenerator.getInstance("RSA"); + + keypairgenerator.initialize(1024); + return keypairgenerator.generateKeyPair(); + } catch (NoSuchAlgorithmException nosuchalgorithmexception) { + nosuchalgorithmexception.printStackTrace(); + MinecraftEncryption.a.error("Key pair generation failed!"); + return null; + } + } + + public static byte[] a(String s, PublicKey publickey, SecretKey secretkey) { + try { + return a("SHA-1", new byte[][] { s.getBytes("ISO_8859_1"), secretkey.getEncoded(), publickey.getEncoded()}); + } catch (UnsupportedEncodingException unsupportedencodingexception) { + unsupportedencodingexception.printStackTrace(); + return null; + } + } + + private static byte[] a(String s, byte[]... abyte) { + try { + MessageDigest messagedigest = MessageDigest.getInstance(s); + byte[][] abyte1 = abyte; + int i = abyte.length; + + for (int j = 0; j < i; ++j) { + byte[] abyte2 = abyte1[j]; + + messagedigest.update(abyte2); + } + + return messagedigest.digest(); + } catch (NoSuchAlgorithmException nosuchalgorithmexception) { + nosuchalgorithmexception.printStackTrace(); + return null; + } + } + + public static PublicKey a(byte[] abyte) { + try { + X509EncodedKeySpec x509encodedkeyspec = new X509EncodedKeySpec(abyte); + KeyFactory keyfactory = KeyFactory.getInstance("RSA"); + + return keyfactory.generatePublic(x509encodedkeyspec); + } catch (NoSuchAlgorithmException nosuchalgorithmexception) { + ; + } catch (InvalidKeySpecException invalidkeyspecexception) { + ; + } + + MinecraftEncryption.a.error("Public key reconstitute failed!"); + return null; + } + + public static SecretKey a(PrivateKey privatekey, byte[] abyte) { + return new SecretKeySpec(b(privatekey, abyte), "AES"); + } + + public static byte[] b(Key key, byte[] abyte) { + return a(2, key, abyte); + } + + private static byte[] a(int i, Key key, byte[] abyte) { + try { + return a(i, key.getAlgorithm(), key).doFinal(abyte); + } catch (IllegalBlockSizeException illegalblocksizeexception) { + illegalblocksizeexception.printStackTrace(); + } catch (BadPaddingException badpaddingexception) { + badpaddingexception.printStackTrace(); + } + + MinecraftEncryption.a.error("Cipher data failed!"); + return null; + } + + private static Cipher a(int i, String s, Key key) { + try { + Cipher cipher = Cipher.getInstance(s); + + cipher.init(i, key); + return cipher; + } catch (InvalidKeyException invalidkeyexception) { + invalidkeyexception.printStackTrace(); + } catch (NoSuchAlgorithmException nosuchalgorithmexception) { + nosuchalgorithmexception.printStackTrace(); + } catch (NoSuchPaddingException nosuchpaddingexception) { + nosuchpaddingexception.printStackTrace(); + } + + MinecraftEncryption.a.error("Cipher creation failed!"); + return null; + } + + public static Cipher a(int i, Key key) { + try { + Cipher cipher = Cipher.getInstance("AES/CFB8/NoPadding"); + + cipher.init(i, key, new IvParameterSpec(key.getEncoded())); + return cipher; + } catch (GeneralSecurityException generalsecurityexception) { + throw new RuntimeException(generalsecurityexception); + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/MinecraftKey.java b/eSpigot-Server/src/main/java/net/minecraft/server/MinecraftKey.java new file mode 100644 index 0000000..dadc01e --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/MinecraftKey.java @@ -0,0 +1,58 @@ +package net.minecraft.server; + +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.Validate; + +public class MinecraftKey { + + protected final String a; + protected final String b; + + protected MinecraftKey(int i, String... astring) { + this.a = StringUtils.isEmpty(astring[0]) ? "minecraft" : astring[0].toLowerCase(); + this.b = astring[1]; + Validate.notNull(this.b); + } + + public MinecraftKey(String s) { + this(0, a(s)); + } + + protected static String[] a(String s) { + String[] astring = new String[] { null, s}; + int i = s.indexOf(58); + + if (i >= 0) { + astring[1] = s.substring(i + 1, s.length()); + if (i > 1) { + astring[0] = s.substring(0, i); + } + } + + return astring; + } + + public String a() { + return this.b; + } + + public String toString() { + return this.a + ':' + this.b; + } + + public boolean equals(Object object) { + if (this == object) { + return true; + } else if (!(object instanceof MinecraftKey)) { + return false; + } else { + MinecraftKey minecraftkey = (MinecraftKey) object; + + return this.a.equals(minecraftkey.a) && this.b.equals(minecraftkey.b); + } + } + + public int hashCode() { + return 31 * this.a.hashCode() + this.b.hashCode(); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/MinecraftServer.java b/eSpigot-Server/src/main/java/net/minecraft/server/MinecraftServer.java similarity index 98% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/MinecraftServer.java rename to eSpigot-Server/src/main/java/net/minecraft/server/MinecraftServer.java index 2bc1b52..27bf1e1 100644 --- a/TacoSpigot-Server/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/eSpigot-Server/src/main/java/net/minecraft/server/MinecraftServer.java @@ -16,9 +16,9 @@ import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufOutputStream; import io.netty.buffer.Unpooled; import io.netty.handler.codec.base64.Base64; -import jline.console.ConsoleReader; import joptsimple.OptionSet; import com.elevatemc.spigot.eSpigot; +import net.minecrell.terminalconsole.TerminalConsoleAppender; import net.openhft.affinity.AffinityLock; import org.apache.commons.lang3.Validate; import org.apache.logging.log4j.LogManager; @@ -89,7 +89,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs public OptionSet options; public org.bukkit.command.ConsoleCommandSender console; public org.bukkit.command.RemoteConsoleCommandSender remoteConsole; - public ConsoleReader reader; + //public ConsoleReader reader; //public java.util.Queue processQueue = new java.util.concurrent.ConcurrentLinkedQueue(); SportBukkit - use Mojang's task queue public int autosavePeriod; public double[] recentTps = new double[3]; // PaperSpigot - Fine have your darn compat with bad plugins @@ -190,6 +190,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs this.Y = this.V.createProfileRepository(); // CraftBukkit start this.options = options; + /* // PandaSpigot - Handled by TerminalConsoleAppender // Try to see if we're actually running in a terminal, disable jline if not if (System.console() == null && System.getProperty("jline.terminal") == null) { System.setProperty("jline.terminal", "jline.UnsupportedTerminal"); @@ -211,6 +212,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs LOGGER.warn((String) null, ex); } } + */ // PandaSpigot Runtime.getRuntime().addShutdownHook(new org.bukkit.craftbukkit.util.ServerShutdownThread(this)); this.serverThread = primaryThread = new Thread(this, "Server thread"); // Moved from main @@ -445,7 +447,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs } worlddata.checkName(s1); // CraftBukkit - Migration did not rewrite the level.dat; This forces 1.8 to take the last loaded world as respawn (in this case the end) if (this.X()) { - world = (WorldServer) (new DemoWorldServer(this, idatamanager, worlddata, dimension, this.methodProfiler)).b(); + world = (WorldServer) (new DemoWorldServer(this, idatamanager, worlddata, dimension, this.methodProfiler, org.bukkit.World.Environment.getEnvironment(dimension), gen)).b(); } else { world = (WorldServer) (new WorldServer(this, idatamanager, worlddata, dimension, this.methodProfiler, org.bukkit.World.Environment.getEnvironment(dimension), gen)).b(); } @@ -789,7 +791,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs } finally { // CraftBukkit start - Restore terminal to original settings try { - reader.getTerminal().restore(); + TerminalConsoleAppender.close(); // PandaSpigot - Use TerminalConsoleAppender } catch (Exception ignored) { } // CraftBukkit end @@ -940,6 +942,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs // if (i == 0 || this.getAllowNether()) { WorldServer worldserver = this.worlds.get(i); + worldserver.hasPhysicsEvent = org.bukkit.event.block.BlockPhysicsEvent.getHandlerList().getRegisteredListeners().length > 0; // PandaSpigot if(!worldserver.getWorld().checkTicking()) continue; // SportBukkit this.methodProfiler.a(worldserver.getWorldData().getName()); @@ -1211,7 +1214,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs } public void sendMessage(IChatBaseComponent ichatbasecomponent) { - MinecraftServer.LOGGER.info(ichatbasecomponent.c()); + MinecraftServer.LOGGER.info(org.bukkit.craftbukkit.util.CraftChatMessage.fromComponent(ichatbasecomponent)); // PandaSpigot - Log messages with color } public boolean a(int i, String s) { @@ -1593,7 +1596,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs try { return Futures.immediateFuture(callable.call()); } catch (Exception exception) { - return Futures.immediateFailedCheckedFuture(exception); + return Futures.immediateFailedFuture(exception); // KigPaper } } } diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/MobEffect.java b/eSpigot-Server/src/main/java/net/minecraft/server/MobEffect.java new file mode 100644 index 0000000..c9f433f --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/MobEffect.java @@ -0,0 +1,169 @@ +package net.minecraft.server; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class MobEffect { + + private static final Logger a = LogManager.getLogger(); + private int effectId; + private int duration; + private int amplification; + private boolean splash; + private boolean ambient; + private boolean particles; + + public MobEffect(int i, int j) { + this(i, j, 0); + } + + public MobEffect(int i, int j, int k) { + this(i, j, k, false, true); + } + + public MobEffect(int i, int j, int k, boolean flag, boolean flag1) { + this.effectId = i; + this.duration = j; + this.amplification = k; + this.ambient = flag; + this.particles = flag1; + } + + public MobEffect(MobEffect mobeffect) { + this.effectId = mobeffect.effectId; + this.duration = mobeffect.duration; + this.amplification = mobeffect.amplification; + this.ambient = mobeffect.ambient; + this.particles = mobeffect.particles; + } + + public void a(MobEffect mobeffect) { + if (this.effectId != mobeffect.effectId) { + MobEffect.a.warn("This method should only be called for matching effects!"); + } + + if (mobeffect.amplification > this.amplification) { + this.amplification = mobeffect.amplification; + this.duration = mobeffect.duration; + } else if (mobeffect.amplification == this.amplification && this.duration < mobeffect.duration) { + this.duration = mobeffect.duration; + } else if (!mobeffect.ambient && this.ambient) { + this.ambient = mobeffect.ambient; + } + + this.particles = mobeffect.particles; + } + + public int getEffectId() { + return this.effectId; + } + + public int getDuration() { + return this.duration; + } + + public int getAmplifier() { + return this.amplification; + } + + public void setSplash(boolean flag) { + this.splash = flag; + } + + public boolean isAmbient() { + return this.ambient; + } + + public boolean isShowParticles() { + return this.particles; + } + + public boolean tick(EntityLiving entityliving) { + if (this.duration > 0) { + if (MobEffectList.byId[this.effectId].a(this.duration, this.amplification)) { + this.b(entityliving); + } + + this.i(); + } + + return this.duration > 0; + } + + private int i() { + return --this.duration; + } + + public void b(EntityLiving entityliving) { + if (this.duration > 0) { + MobEffectList.byId[this.effectId].tick(entityliving, this.amplification); + } + + } + + public String g() { + return MobEffectList.byId[this.effectId].a(); + } + + public int hashCode() { + return this.effectId; + } + + public String toString() { + String s = ""; + + if (this.getAmplifier() > 0) { + s = this.g() + " x " + (this.getAmplifier() + 1) + ", Duration: " + this.getDuration(); + } else { + s = this.g() + ", Duration: " + this.getDuration(); + } + + if (this.splash) { + s = s + ", Splash: true"; + } + + if (!this.particles) { + s = s + ", Particles: false"; + } + + return MobEffectList.byId[this.effectId].j() ? "(" + s + ")" : s; + } + + public boolean equals(Object object) { + if (!(object instanceof MobEffect)) { + return false; + } else { + MobEffect mobeffect = (MobEffect) object; + + return this.effectId == mobeffect.effectId && this.amplification == mobeffect.amplification && this.duration == mobeffect.duration && this.splash == mobeffect.splash && this.ambient == mobeffect.ambient; + } + } + + public NBTTagCompound a(NBTTagCompound nbttagcompound) { + nbttagcompound.setByte("Id", (byte) this.getEffectId()); + nbttagcompound.setByte("Amplifier", (byte) this.getAmplifier()); + nbttagcompound.setInt("Duration", this.getDuration()); + nbttagcompound.setBoolean("Ambient", this.isAmbient()); + nbttagcompound.setBoolean("ShowParticles", this.isShowParticles()); + return nbttagcompound; + } + + public static MobEffect b(NBTTagCompound nbttagcompound) { + byte b0 = nbttagcompound.getByte("Id"); + + if (b0 >= 0 && b0 < MobEffectList.byId.length && MobEffectList.byId[b0] != null) { + byte b1 = nbttagcompound.getByte("Amplifier"); + int i = nbttagcompound.getInt("Duration"); + boolean flag = nbttagcompound.getBoolean("Ambient"); + boolean flag1 = true; + + if (nbttagcompound.hasKeyOfType("ShowParticles", 1)) { + flag1 = nbttagcompound.getBoolean("ShowParticles"); + } + + return new MobEffect(b0, i, b1, flag, flag1); + } else { + return null; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/MobEffectAbsorption.java b/eSpigot-Server/src/main/java/net/minecraft/server/MobEffectAbsorption.java new file mode 100644 index 0000000..b85bc4d --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/MobEffectAbsorption.java @@ -0,0 +1,18 @@ +package net.minecraft.server; + +public class MobEffectAbsorption extends MobEffectList { + + protected MobEffectAbsorption(int i, MinecraftKey minecraftkey, boolean flag, int j) { + super(i, minecraftkey, flag, j); + } + + public void a(EntityLiving entityliving, AttributeMapBase attributemapbase, int i) { + entityliving.setAbsorptionHearts(entityliving.getAbsorptionHearts() - (float) (4 * (i + 1))); + super.a(entityliving, attributemapbase, i); + } + + public void b(EntityLiving entityliving, AttributeMapBase attributemapbase, int i) { + entityliving.setAbsorptionHearts(entityliving.getAbsorptionHearts() + (float) (4 * (i + 1))); + super.b(entityliving, attributemapbase, i); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/MobEffectAttackDamage.java b/eSpigot-Server/src/main/java/net/minecraft/server/MobEffectAttackDamage.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/MobEffectAttackDamage.java rename to eSpigot-Server/src/main/java/net/minecraft/server/MobEffectAttackDamage.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/MobEffectHealthBoost.java b/eSpigot-Server/src/main/java/net/minecraft/server/MobEffectHealthBoost.java new file mode 100644 index 0000000..8e74380 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/MobEffectHealthBoost.java @@ -0,0 +1,16 @@ +package net.minecraft.server; + +public class MobEffectHealthBoost extends MobEffectList { + + public MobEffectHealthBoost(int i, MinecraftKey minecraftkey, boolean flag, int j) { + super(i, minecraftkey, flag, j); + } + + public void a(EntityLiving entityliving, AttributeMapBase attributemapbase, int i) { + super.a(entityliving, attributemapbase, i); + if (entityliving.getHealth() > entityliving.getMaxHealth()) { + entityliving.setHealth(entityliving.getMaxHealth()); + } + + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/MobEffectList.java b/eSpigot-Server/src/main/java/net/minecraft/server/MobEffectList.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/MobEffectList.java rename to eSpigot-Server/src/main/java/net/minecraft/server/MobEffectList.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/MobSpawnerAbstract.java b/eSpigot-Server/src/main/java/net/minecraft/server/MobSpawnerAbstract.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/MobSpawnerAbstract.java rename to eSpigot-Server/src/main/java/net/minecraft/server/MobSpawnerAbstract.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/MojangStatisticsGenerator.java b/eSpigot-Server/src/main/java/net/minecraft/server/MojangStatisticsGenerator.java new file mode 100644 index 0000000..076306d --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/MojangStatisticsGenerator.java @@ -0,0 +1,134 @@ +package net.minecraft.server; + +import com.google.common.collect.Maps; +import java.lang.management.ManagementFactory; +import java.lang.management.RuntimeMXBean; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Timer; +import java.util.TimerTask; +import java.util.UUID; + +public class MojangStatisticsGenerator { + + private final Map a = Maps.newHashMap(); + private final Map b = Maps.newHashMap(); + private final String c = UUID.randomUUID().toString(); + private final URL d; + private final IMojangStatistics e; + private final Timer f = new Timer("Snooper Timer", true); + private final Object g = new Object(); + private final long h; + private boolean i; + private int j; + + public MojangStatisticsGenerator(String s, IMojangStatistics imojangstatistics, long i) { + try { + this.d = new URL("http://snoop.minecraft.net/" + s + "?version=" + 2); + } catch (MalformedURLException malformedurlexception) { + throw new IllegalArgumentException(); + } + + this.e = imojangstatistics; + this.h = i; + } + + public void a() { + if (!this.i) { + this.i = true; + this.h(); + this.f.schedule(new TimerTask() { + public void run() { + if (MojangStatisticsGenerator.this.e.getSnooperEnabled()) { + HashMap hashmap; + + synchronized (MojangStatisticsGenerator.this.g) { + hashmap = Maps.newHashMap(MojangStatisticsGenerator.this.b); + if (MojangStatisticsGenerator.this.j == 0) { + hashmap.putAll(MojangStatisticsGenerator.this.a); + } + + hashmap.put("snooper_count", Integer.valueOf(MojangStatisticsGenerator.f(MojangStatisticsGenerator.this))); + hashmap.put("snooper_token", MojangStatisticsGenerator.this.c); + } + + HttpUtilities.a(MojangStatisticsGenerator.this.d, (Map) hashmap, true); + } + } + }, 0L, 900000L); + } + } + + private void h() { + this.i(); + this.a("snooper_token", this.c); + this.b("snooper_token", this.c); + this.b("os_name", System.getProperty("os.name")); + this.b("os_version", System.getProperty("os.version")); + this.b("os_architecture", System.getProperty("os.arch")); + this.b("java_version", System.getProperty("java.version")); + this.a("version", "1.8.8"); + this.e.b(this); + } + + private void i() { + RuntimeMXBean runtimemxbean = ManagementFactory.getRuntimeMXBean(); + List list = runtimemxbean.getInputArguments(); + int i = 0; + Iterator iterator = list.iterator(); + + while (iterator.hasNext()) { + String s = (String) iterator.next(); + + if (s.startsWith("-X")) { + this.a("jvm_arg[" + i++ + "]", s); + } + } + + this.a("jvm_args", Integer.valueOf(i)); + } + + public void b() { + this.b("memory_total", Long.valueOf(Runtime.getRuntime().totalMemory())); + this.b("memory_max", Long.valueOf(Runtime.getRuntime().maxMemory())); + this.b("memory_free", Long.valueOf(Runtime.getRuntime().freeMemory())); + this.b("cpu_cores", Integer.valueOf(Runtime.getRuntime().availableProcessors())); + this.e.a(this); + } + + public void a(String s, Object object) { + Object object1 = this.g; + + synchronized (this.g) { + this.b.put(s, object); + } + } + + public void b(String s, Object object) { + Object object1 = this.g; + + synchronized (this.g) { + this.a.put(s, object); + } + } + + public boolean d() { + return this.i; + } + + public void e() { + this.f.cancel(); + } + + public long g() { + return this.h; + } + + static int f(MojangStatisticsGenerator mojangstatisticsgenerator) { + return mojangstatisticsgenerator.j++; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/MojangsonParseException.java b/eSpigot-Server/src/main/java/net/minecraft/server/MojangsonParseException.java new file mode 100644 index 0000000..15cd833 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/MojangsonParseException.java @@ -0,0 +1,8 @@ +package net.minecraft.server; + +public class MojangsonParseException extends Exception { + + public MojangsonParseException(String s) { + super(s); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/MojangsonParser.java b/eSpigot-Server/src/main/java/net/minecraft/server/MojangsonParser.java new file mode 100644 index 0000000..3378d7f --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/MojangsonParser.java @@ -0,0 +1,433 @@ +package net.minecraft.server; + +import com.google.common.base.Splitter; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import java.util.Iterator; +import java.util.List; +import java.util.Stack; +import java.util.regex.Pattern; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class MojangsonParser { + + private static final Logger a = LogManager.getLogger(); + private static final Pattern b = Pattern.compile("\\[[-+\\d|,\\s]+\\]"); + + public static NBTTagCompound parse(String s) throws MojangsonParseException { + s = s.trim(); + if (!s.startsWith("{")) { + throw new MojangsonParseException("Invalid tag encountered, expected \'{\' as first char."); + } else if (b(s) != 1) { + throw new MojangsonParseException("Encountered multiple top tags, only one expected"); + } else { + return (NBTTagCompound) a("tag", s).a(); + } + } + + static int b(String s) throws MojangsonParseException { + int i = 0; + boolean flag = false; + Stack stack = new Stack(); + + for (int j = 0; j < s.length(); ++j) { + char c0 = s.charAt(j); + + if (c0 == 34) { + if (b(s, j)) { + if (!flag) { + throw new MojangsonParseException("Illegal use of \\\": " + s); + } + } else { + flag = !flag; + } + } else if (!flag) { + if (c0 != 123 && c0 != 91) { + if (c0 == 125 && (stack.isEmpty() || ((Character) stack.pop()).charValue() != 123)) { + throw new MojangsonParseException("Unbalanced curly brackets {}: " + s); + } + + if (c0 == 93 && (stack.isEmpty() || ((Character) stack.pop()).charValue() != 91)) { + throw new MojangsonParseException("Unbalanced square brackets []: " + s); + } + } else { + if (stack.isEmpty()) { + ++i; + } + + stack.push(Character.valueOf(c0)); + } + } + } + + if (flag) { + throw new MojangsonParseException("Unbalanced quotation: " + s); + } else if (!stack.isEmpty()) { + throw new MojangsonParseException("Unbalanced brackets: " + s); + } else { + if (i == 0 && !s.isEmpty()) { + i = 1; + } + + return i; + } + } + + static MojangsonParser.MojangsonTypeParser a(String... astring) throws MojangsonParseException { + return a(astring[0], astring[1]); + } + + static MojangsonParser.MojangsonTypeParser a(String s, String s1) throws MojangsonParseException { + s1 = s1.trim(); + String s2; + boolean flag; + char c0; + + if (s1.startsWith("{")) { + s1 = s1.substring(1, s1.length() - 1); + + MojangsonParser.MojangsonCompoundParser mojangsonparser_mojangsoncompoundparser; + + for (mojangsonparser_mojangsoncompoundparser = new MojangsonParser.MojangsonCompoundParser(s); s1.length() > 0; s1 = s1.substring(s2.length() + 1)) { + s2 = b(s1, true); + if (s2.length() > 0) { + flag = false; + mojangsonparser_mojangsoncompoundparser.b.add(a(s2, flag)); + } + + if (s1.length() < s2.length() + 1) { + break; + } + + c0 = s1.charAt(s2.length()); + if (c0 != 44 && c0 != 123 && c0 != 125 && c0 != 91 && c0 != 93) { + throw new MojangsonParseException("Unexpected token \'" + c0 + "\' at: " + s1.substring(s2.length())); + } + } + + return mojangsonparser_mojangsoncompoundparser; + } else if (s1.startsWith("[") && !MojangsonParser.b.matcher(s1).matches()) { + s1 = s1.substring(1, s1.length() - 1); + + MojangsonParser.MojangsonListParser mojangsonparser_mojangsonlistparser; + + for (mojangsonparser_mojangsonlistparser = new MojangsonParser.MojangsonListParser(s); s1.length() > 0; s1 = s1.substring(s2.length() + 1)) { + s2 = b(s1, false); + if (s2.length() > 0) { + flag = true; + mojangsonparser_mojangsonlistparser.b.add(a(s2, flag)); + } + + if (s1.length() < s2.length() + 1) { + break; + } + + c0 = s1.charAt(s2.length()); + if (c0 != 44 && c0 != 123 && c0 != 125 && c0 != 91 && c0 != 93) { + throw new MojangsonParseException("Unexpected token \'" + c0 + "\' at: " + s1.substring(s2.length())); + } + } + + return mojangsonparser_mojangsonlistparser; + } else { + return new MojangsonParser.MojangsonPrimitiveParser(s, s1); + } + } + + private static MojangsonParser.MojangsonTypeParser a(String s, boolean flag) throws MojangsonParseException { + String s1 = c(s, flag); + String s2 = d(s, flag); + + return a(new String[] { s1, s2}); + } + + private static String b(String s, boolean flag) throws MojangsonParseException { + int i = a(s, ':'); + int j = a(s, ','); + + if (flag) { + if (i == -1) { + throw new MojangsonParseException("Unable to locate name/value separator for string: " + s); + } + + if (j != -1 && j < i) { + throw new MojangsonParseException("Name error at: " + s); + } + } else if (i == -1 || i > j) { + i = -1; + } + + return a(s, i); + } + + private static String a(String s, int i) throws MojangsonParseException { + Stack stack = new Stack(); + int j = i + 1; + boolean flag = false; + boolean flag1 = false; + boolean flag2 = false; + + for (int k = 0; j < s.length(); ++j) { + char c0 = s.charAt(j); + + if (c0 == 34) { + if (b(s, j)) { + if (!flag) { + throw new MojangsonParseException("Illegal use of \\\": " + s); + } + } else { + flag = !flag; + if (flag && !flag2) { + flag1 = true; + } + + if (!flag) { + k = j; + } + } + } else if (!flag) { + if (c0 != 123 && c0 != 91) { + if (c0 == 125 && (stack.isEmpty() || ((Character) stack.pop()).charValue() != 123)) { + throw new MojangsonParseException("Unbalanced curly brackets {}: " + s); + } + + if (c0 == 93 && (stack.isEmpty() || ((Character) stack.pop()).charValue() != 91)) { + throw new MojangsonParseException("Unbalanced square brackets []: " + s); + } + + if (c0 == 44 && stack.isEmpty()) { + return s.substring(0, j); + } + } else { + stack.push(Character.valueOf(c0)); + } + } + + if (!Character.isWhitespace(c0)) { + if (!flag && flag1 && k != j) { + return s.substring(0, k + 1); + } + + flag2 = true; + } + } + + return s.substring(0, j); + } + + private static String c(String s, boolean flag) throws MojangsonParseException { + if (flag) { + s = s.trim(); + if (s.startsWith("{") || s.startsWith("[")) { + return ""; + } + } + + int i = a(s, ':'); + + if (i == -1) { + if (flag) { + return ""; + } else { + throw new MojangsonParseException("Unable to locate name/value separator for string: " + s); + } + } else { + return s.substring(0, i).trim(); + } + } + + private static String d(String s, boolean flag) throws MojangsonParseException { + if (flag) { + s = s.trim(); + if (s.startsWith("{") || s.startsWith("[")) { + return s; + } + } + + int i = a(s, ':'); + + if (i == -1) { + if (flag) { + return s; + } else { + throw new MojangsonParseException("Unable to locate name/value separator for string: " + s); + } + } else { + return s.substring(i + 1).trim(); + } + } + + private static int a(String s, char c0) { + int i = 0; + + for (boolean flag = true; i < s.length(); ++i) { + char c1 = s.charAt(i); + + if (c1 == 34) { + if (!b(s, i)) { + flag = !flag; + } + } else if (flag) { + if (c1 == c0) { + return i; + } + + if (c1 == 123 || c1 == 91) { + return -1; + } + } + } + + return -1; + } + + private static boolean b(String s, int i) { + return i > 0 && s.charAt(i - 1) == 92 && !b(s, i - 1); + } + + static class MojangsonPrimitiveParser extends MojangsonParser.MojangsonTypeParser { + + private static final Pattern c = Pattern.compile("[-+]?[0-9]*\\.?[0-9]+[d|D]"); + private static final Pattern d = Pattern.compile("[-+]?[0-9]*\\.?[0-9]+[f|F]"); + private static final Pattern e = Pattern.compile("[-+]?[0-9]+[b|B]"); + private static final Pattern f = Pattern.compile("[-+]?[0-9]+[l|L]"); + private static final Pattern g = Pattern.compile("[-+]?[0-9]+[s|S]"); + private static final Pattern h = Pattern.compile("[-+]?[0-9]+"); + private static final Pattern i = Pattern.compile("[-+]?[0-9]*\\.?[0-9]+"); + private static final Splitter j = Splitter.on(',').omitEmptyStrings(); + protected String b; + + public MojangsonPrimitiveParser(String s, String s1) { + this.a = s; + this.b = s1; + } + + public NBTBase a() throws MojangsonParseException { + try { + if (MojangsonParser.MojangsonPrimitiveParser.c.matcher(this.b).matches()) { + return new NBTTagDouble(Double.parseDouble(this.b.substring(0, this.b.length() - 1))); + } + + if (MojangsonParser.MojangsonPrimitiveParser.d.matcher(this.b).matches()) { + return new NBTTagFloat(Float.parseFloat(this.b.substring(0, this.b.length() - 1))); + } + + if (MojangsonParser.MojangsonPrimitiveParser.e.matcher(this.b).matches()) { + return new NBTTagByte(Byte.parseByte(this.b.substring(0, this.b.length() - 1))); + } + + if (MojangsonParser.MojangsonPrimitiveParser.f.matcher(this.b).matches()) { + return new NBTTagLong(Long.parseLong(this.b.substring(0, this.b.length() - 1))); + } + + if (MojangsonParser.MojangsonPrimitiveParser.g.matcher(this.b).matches()) { + return new NBTTagShort(Short.parseShort(this.b.substring(0, this.b.length() - 1))); + } + + if (MojangsonParser.MojangsonPrimitiveParser.h.matcher(this.b).matches()) { + return new NBTTagInt(Integer.parseInt(this.b)); + } + + if (MojangsonParser.MojangsonPrimitiveParser.i.matcher(this.b).matches()) { + return new NBTTagDouble(Double.parseDouble(this.b)); + } + + if (this.b.equalsIgnoreCase("true") || this.b.equalsIgnoreCase("false")) { + return new NBTTagByte((byte) (Boolean.parseBoolean(this.b) ? 1 : 0)); + } + } catch (NumberFormatException numberformatexception) { + this.b = this.b.replaceAll("\\\\\"", "\""); + return new NBTTagString(this.b); + } + + if (this.b.startsWith("[") && this.b.endsWith("]")) { + String s = this.b.substring(1, this.b.length() - 1); + String[] astring = (String[]) Iterables.toArray(MojangsonParser.MojangsonPrimitiveParser.j.split(s), String.class); + + try { + int[] aint = new int[astring.length]; + + for (int i = 0; i < astring.length; ++i) { + aint[i] = Integer.parseInt(astring[i].trim()); + } + + return new NBTTagIntArray(aint); + } catch (NumberFormatException numberformatexception1) { + return new NBTTagString(this.b); + } + } else { + if (this.b.startsWith("\"") && this.b.endsWith("\"")) { + this.b = this.b.substring(1, this.b.length() - 1); + } + + this.b = this.b.replaceAll("\\\\\"", "\""); + StringBuilder stringbuilder = new StringBuilder(); + + for (int j = 0; j < this.b.length(); ++j) { + if (j < this.b.length() - 1 && this.b.charAt(j) == 92 && this.b.charAt(j + 1) == 92) { + stringbuilder.append('\\'); + ++j; + } else { + stringbuilder.append(this.b.charAt(j)); + } + } + + return new NBTTagString(stringbuilder.toString()); + } + } + } + + static class MojangsonListParser extends MojangsonParser.MojangsonTypeParser { + + protected List b = Lists.newArrayList(); + + public MojangsonListParser(String s) { + this.a = s; + } + + public NBTBase a() throws MojangsonParseException { + NBTTagList nbttaglist = new NBTTagList(); + Iterator iterator = this.b.iterator(); + + while (iterator.hasNext()) { + MojangsonParser.MojangsonTypeParser mojangsonparser_mojangsontypeparser = (MojangsonParser.MojangsonTypeParser) iterator.next(); + + nbttaglist.add(mojangsonparser_mojangsontypeparser.a()); + } + + return nbttaglist; + } + } + + static class MojangsonCompoundParser extends MojangsonParser.MojangsonTypeParser { + + protected List b = Lists.newArrayList(); + + public MojangsonCompoundParser(String s) { + this.a = s; + } + + public NBTBase a() throws MojangsonParseException { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + Iterator iterator = this.b.iterator(); + + while (iterator.hasNext()) { + MojangsonParser.MojangsonTypeParser mojangsonparser_mojangsontypeparser = (MojangsonParser.MojangsonTypeParser) iterator.next(); + + nbttagcompound.set(mojangsonparser_mojangsontypeparser.a, mojangsonparser_mojangsontypeparser.a()); + } + + return nbttagcompound; + } + } + + abstract static class MojangsonTypeParser { + + protected String a; + + MojangsonTypeParser() {} + + public abstract NBTBase a() throws MojangsonParseException; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/MovingObjectPosition.java b/eSpigot-Server/src/main/java/net/minecraft/server/MovingObjectPosition.java new file mode 100644 index 0000000..a0438c5 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/MovingObjectPosition.java @@ -0,0 +1,50 @@ +package net.minecraft.server; + +public class MovingObjectPosition { + + private BlockPosition e; + public MovingObjectPosition.EnumMovingObjectType type; + public EnumDirection direction; + public Vec3D pos; + public Entity entity; + + public MovingObjectPosition(Vec3D vec3d, EnumDirection enumdirection, BlockPosition blockposition) { + this(MovingObjectPosition.EnumMovingObjectType.BLOCK, vec3d, enumdirection, blockposition); + } + + public MovingObjectPosition(Vec3D vec3d, EnumDirection enumdirection) { + this(MovingObjectPosition.EnumMovingObjectType.BLOCK, vec3d, enumdirection, BlockPosition.ZERO); + } + + public MovingObjectPosition(Entity entity) { + this(entity, new Vec3D(entity.locX, entity.locY, entity.locZ)); + } + + public MovingObjectPosition(MovingObjectPosition.EnumMovingObjectType movingobjectposition_enummovingobjecttype, Vec3D vec3d, EnumDirection enumdirection, BlockPosition blockposition) { + this.type = movingobjectposition_enummovingobjecttype; + this.e = blockposition; + this.direction = enumdirection; + this.pos = new Vec3D(vec3d.a, vec3d.b, vec3d.c); + } + + public MovingObjectPosition(Entity entity, Vec3D vec3d) { + this.type = MovingObjectPosition.EnumMovingObjectType.ENTITY; + this.entity = entity; + this.pos = vec3d; + } + + public BlockPosition a() { + return this.e; + } + + public String toString() { + return "HitResult{type=" + this.type + ", blockpos=" + this.e + ", f=" + this.direction + ", pos=" + this.pos + ", entity=" + this.entity + '}'; + } + + public static enum EnumMovingObjectType { + + MISS, BLOCK, ENTITY; + + private EnumMovingObjectType() {} + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/NBTBase.java b/eSpigot-Server/src/main/java/net/minecraft/server/NBTBase.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/NBTBase.java rename to eSpigot-Server/src/main/java/net/minecraft/server/NBTBase.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/NBTCompressedStreamTools.java b/eSpigot-Server/src/main/java/net/minecraft/server/NBTCompressedStreamTools.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/NBTCompressedStreamTools.java rename to eSpigot-Server/src/main/java/net/minecraft/server/NBTCompressedStreamTools.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/NBTReadLimiter.java b/eSpigot-Server/src/main/java/net/minecraft/server/NBTReadLimiter.java new file mode 100644 index 0000000..58253cc --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/NBTReadLimiter.java @@ -0,0 +1,21 @@ +package net.minecraft.server; + +public class NBTReadLimiter { + + public static final NBTReadLimiter a = new NBTReadLimiter(0L) { + public void a(long i) {} + }; + private final long b; + private long c; + + public NBTReadLimiter(long i) { + this.b = i; + } + + public void a(long i) { + this.c += i / 8L; + if (this.c > this.b) { + throw new RuntimeException("Tried to read NBT tag that was too big; tried to allocate: " + this.c + "bytes where max allowed: " + this.b); + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/NBTTagByte.java b/eSpigot-Server/src/main/java/net/minecraft/server/NBTTagByte.java new file mode 100644 index 0000000..01c5afa --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/NBTTagByte.java @@ -0,0 +1,75 @@ +package net.minecraft.server; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagByte extends NBTBase.NBTNumber { + + private byte data; + + NBTTagByte() {} + + public NBTTagByte(byte b0) { + this.data = b0; + } + + void write(DataOutput dataoutput) throws IOException { + dataoutput.writeByte(this.data); + } + + void load(DataInput datainput, int i, NBTReadLimiter nbtreadlimiter) throws IOException { + nbtreadlimiter.a(72L); + this.data = datainput.readByte(); + } + + public byte getTypeId() { + return (byte) 1; + } + + public String toString() { + return "" + this.data + "b"; + } + + public NBTBase clone() { + return new NBTTagByte(this.data); + } + + public boolean equals(Object object) { + if (super.equals(object)) { + NBTTagByte nbttagbyte = (NBTTagByte) object; + + return this.data == nbttagbyte.data; + } else { + return false; + } + } + + public int hashCode() { + return super.hashCode() ^ this.data; + } + + public long c() { + return (long) this.data; + } + + public int d() { + return this.data; + } + + public short e() { + return (short) this.data; + } + + public byte f() { + return this.data; + } + + public double g() { + return (double) this.data; + } + + public float h() { + return (float) this.data; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/NBTTagByteArray.java b/eSpigot-Server/src/main/java/net/minecraft/server/NBTTagByteArray.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/NBTTagByteArray.java rename to eSpigot-Server/src/main/java/net/minecraft/server/NBTTagByteArray.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/NBTTagCompound.java b/eSpigot-Server/src/main/java/net/minecraft/server/NBTTagCompound.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/NBTTagCompound.java rename to eSpigot-Server/src/main/java/net/minecraft/server/NBTTagCompound.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/NBTTagDouble.java b/eSpigot-Server/src/main/java/net/minecraft/server/NBTTagDouble.java new file mode 100644 index 0000000..cdd2019 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/NBTTagDouble.java @@ -0,0 +1,77 @@ +package net.minecraft.server; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagDouble extends NBTBase.NBTNumber { + + private double data; + + NBTTagDouble() {} + + public NBTTagDouble(double d0) { + this.data = d0; + } + + void write(DataOutput dataoutput) throws IOException { + dataoutput.writeDouble(this.data); + } + + void load(DataInput datainput, int i, NBTReadLimiter nbtreadlimiter) throws IOException { + nbtreadlimiter.a(128L); + this.data = datainput.readDouble(); + } + + public byte getTypeId() { + return (byte) 6; + } + + public String toString() { + return "" + this.data + "d"; + } + + public NBTBase clone() { + return new NBTTagDouble(this.data); + } + + public boolean equals(Object object) { + if (super.equals(object)) { + NBTTagDouble nbttagdouble = (NBTTagDouble) object; + + return this.data == nbttagdouble.data; + } else { + return false; + } + } + + public int hashCode() { + long i = Double.doubleToLongBits(this.data); + + return super.hashCode() ^ (int) (i ^ i >>> 32); + } + + public long c() { + return (long) Math.floor(this.data); + } + + public int d() { + return MathHelper.floor(this.data); + } + + public short e() { + return (short) (MathHelper.floor(this.data) & '\uffff'); + } + + public byte f() { + return (byte) (MathHelper.floor(this.data) & 255); + } + + public double g() { + return this.data; + } + + public float h() { + return (float) this.data; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/NBTTagEnd.java b/eSpigot-Server/src/main/java/net/minecraft/server/NBTTagEnd.java new file mode 100644 index 0000000..376a5a4 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/NBTTagEnd.java @@ -0,0 +1,28 @@ +package net.minecraft.server; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagEnd extends NBTBase { + + NBTTagEnd() {} + + void load(DataInput datainput, int i, NBTReadLimiter nbtreadlimiter) throws IOException { + nbtreadlimiter.a(64L); + } + + void write(DataOutput dataoutput) throws IOException {} + + public byte getTypeId() { + return (byte) 0; + } + + public String toString() { + return "END"; + } + + public NBTBase clone() { + return new NBTTagEnd(); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/NBTTagFloat.java b/eSpigot-Server/src/main/java/net/minecraft/server/NBTTagFloat.java new file mode 100644 index 0000000..af72960 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/NBTTagFloat.java @@ -0,0 +1,75 @@ +package net.minecraft.server; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagFloat extends NBTBase.NBTNumber { + + private float data; + + NBTTagFloat() {} + + public NBTTagFloat(float f) { + this.data = f; + } + + void write(DataOutput dataoutput) throws IOException { + dataoutput.writeFloat(this.data); + } + + void load(DataInput datainput, int i, NBTReadLimiter nbtreadlimiter) throws IOException { + nbtreadlimiter.a(96L); + this.data = datainput.readFloat(); + } + + public byte getTypeId() { + return (byte) 5; + } + + public String toString() { + return "" + this.data + "f"; + } + + public NBTBase clone() { + return new NBTTagFloat(this.data); + } + + public boolean equals(Object object) { + if (super.equals(object)) { + NBTTagFloat nbttagfloat = (NBTTagFloat) object; + + return this.data == nbttagfloat.data; + } else { + return false; + } + } + + public int hashCode() { + return super.hashCode() ^ Float.floatToIntBits(this.data); + } + + public long c() { + return (long) this.data; + } + + public int d() { + return MathHelper.d(this.data); + } + + public short e() { + return (short) (MathHelper.d(this.data) & '\uffff'); + } + + public byte f() { + return (byte) (MathHelper.d(this.data) & 255); + } + + public double g() { + return (double) this.data; + } + + public float h() { + return this.data; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/NBTTagInt.java b/eSpigot-Server/src/main/java/net/minecraft/server/NBTTagInt.java new file mode 100644 index 0000000..9ff8991 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/NBTTagInt.java @@ -0,0 +1,75 @@ +package net.minecraft.server; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagInt extends NBTBase.NBTNumber { + + private int data; + + NBTTagInt() {} + + public NBTTagInt(int i) { + this.data = i; + } + + void write(DataOutput dataoutput) throws IOException { + dataoutput.writeInt(this.data); + } + + void load(DataInput datainput, int i, NBTReadLimiter nbtreadlimiter) throws IOException { + nbtreadlimiter.a(96L); + this.data = datainput.readInt(); + } + + public byte getTypeId() { + return (byte) 3; + } + + public String toString() { + return "" + this.data; + } + + public NBTBase clone() { + return new NBTTagInt(this.data); + } + + public boolean equals(Object object) { + if (super.equals(object)) { + NBTTagInt nbttagint = (NBTTagInt) object; + + return this.data == nbttagint.data; + } else { + return false; + } + } + + public int hashCode() { + return super.hashCode() ^ this.data; + } + + public long c() { + return (long) this.data; + } + + public int d() { + return this.data; + } + + public short e() { + return (short) (this.data & '\uffff'); + } + + public byte f() { + return (byte) (this.data & 255); + } + + public double g() { + return (double) this.data; + } + + public float h() { + return (float) this.data; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/NBTTagIntArray.java b/eSpigot-Server/src/main/java/net/minecraft/server/NBTTagIntArray.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/NBTTagIntArray.java rename to eSpigot-Server/src/main/java/net/minecraft/server/NBTTagIntArray.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/NBTTagList.java b/eSpigot-Server/src/main/java/net/minecraft/server/NBTTagList.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/NBTTagList.java rename to eSpigot-Server/src/main/java/net/minecraft/server/NBTTagList.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/NBTTagLong.java b/eSpigot-Server/src/main/java/net/minecraft/server/NBTTagLong.java new file mode 100644 index 0000000..84b871d --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/NBTTagLong.java @@ -0,0 +1,75 @@ +package net.minecraft.server; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagLong extends NBTBase.NBTNumber { + + private long data; + + NBTTagLong() {} + + public NBTTagLong(long i) { + this.data = i; + } + + void write(DataOutput dataoutput) throws IOException { + dataoutput.writeLong(this.data); + } + + void load(DataInput datainput, int i, NBTReadLimiter nbtreadlimiter) throws IOException { + nbtreadlimiter.a(128L); + this.data = datainput.readLong(); + } + + public byte getTypeId() { + return (byte) 4; + } + + public String toString() { + return "" + this.data + "L"; + } + + public NBTBase clone() { + return new NBTTagLong(this.data); + } + + public boolean equals(Object object) { + if (super.equals(object)) { + NBTTagLong nbttaglong = (NBTTagLong) object; + + return this.data == nbttaglong.data; + } else { + return false; + } + } + + public int hashCode() { + return super.hashCode() ^ (int) (this.data ^ this.data >>> 32); + } + + public long c() { + return this.data; + } + + public int d() { + return (int) (this.data & -1L); + } + + public short e() { + return (short) ((int) (this.data & 65535L)); + } + + public byte f() { + return (byte) ((int) (this.data & 255L)); + } + + public double g() { + return (double) this.data; + } + + public float h() { + return (float) this.data; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/NBTTagShort.java b/eSpigot-Server/src/main/java/net/minecraft/server/NBTTagShort.java new file mode 100644 index 0000000..690371d --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/NBTTagShort.java @@ -0,0 +1,75 @@ +package net.minecraft.server; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagShort extends NBTBase.NBTNumber { + + private short data; + + public NBTTagShort() {} + + public NBTTagShort(short short0) { + this.data = short0; + } + + void write(DataOutput dataoutput) throws IOException { + dataoutput.writeShort(this.data); + } + + void load(DataInput datainput, int i, NBTReadLimiter nbtreadlimiter) throws IOException { + nbtreadlimiter.a(80L); + this.data = datainput.readShort(); + } + + public byte getTypeId() { + return (byte) 2; + } + + public String toString() { + return "" + this.data + "s"; + } + + public NBTBase clone() { + return new NBTTagShort(this.data); + } + + public boolean equals(Object object) { + if (super.equals(object)) { + NBTTagShort nbttagshort = (NBTTagShort) object; + + return this.data == nbttagshort.data; + } else { + return false; + } + } + + public int hashCode() { + return super.hashCode() ^ this.data; + } + + public long c() { + return (long) this.data; + } + + public int d() { + return this.data; + } + + public short e() { + return this.data; + } + + public byte f() { + return (byte) (this.data & 255); + } + + public double g() { + return (double) this.data; + } + + public float h() { + return (float) this.data; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/NBTTagString.java b/eSpigot-Server/src/main/java/net/minecraft/server/NBTTagString.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/NBTTagString.java rename to eSpigot-Server/src/main/java/net/minecraft/server/NBTTagString.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/NPC.java b/eSpigot-Server/src/main/java/net/minecraft/server/NPC.java new file mode 100644 index 0000000..d5cac48 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/NPC.java @@ -0,0 +1,3 @@ +package net.minecraft.server; + +public interface NPC extends IAnimal {} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/NameReferencingFileConverter.java b/eSpigot-Server/src/main/java/net/minecraft/server/NameReferencingFileConverter.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/NameReferencingFileConverter.java rename to eSpigot-Server/src/main/java/net/minecraft/server/NameReferencingFileConverter.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/Navigation.java b/eSpigot-Server/src/main/java/net/minecraft/server/Navigation.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/Navigation.java rename to eSpigot-Server/src/main/java/net/minecraft/server/Navigation.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/NavigationAbstract.java b/eSpigot-Server/src/main/java/net/minecraft/server/NavigationAbstract.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/NavigationAbstract.java rename to eSpigot-Server/src/main/java/net/minecraft/server/NavigationAbstract.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/NavigationGuardian.java b/eSpigot-Server/src/main/java/net/minecraft/server/NavigationGuardian.java new file mode 100644 index 0000000..b7e8867 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/NavigationGuardian.java @@ -0,0 +1,51 @@ +package net.minecraft.server; + +public class NavigationGuardian extends NavigationAbstract { + + public NavigationGuardian(EntityInsentient entityinsentient, World world) { + super(entityinsentient, world); + } + + protected Pathfinder a() { + return new Pathfinder(new PathfinderWater()); + } + + protected boolean b() { + return this.o(); + } + + protected Vec3D c() { + return new Vec3D(this.b.locX, this.b.locY + (double) this.b.length * 0.5D, this.b.locZ); + } + + protected void l() { + Vec3D vec3d = this.c(); + float f = this.b.width * this.b.width; + byte b0 = 6; + + if (vec3d.distanceSquared(this.d.a(this.b, this.d.e())) < (double) f) { + this.d.a(); + } + + for (int i = Math.min(this.d.e() + b0, this.d.d() - 1); i > this.d.e(); --i) { + Vec3D vec3d1 = this.d.a(this.b, i); + + if (vec3d1.distanceSquared(vec3d) <= 36.0D && this.a(vec3d, vec3d1, 0, 0, 0)) { + this.d.c(i); + break; + } + } + + this.a(vec3d); + } + + protected void d() { + super.d(); + } + + protected boolean a(Vec3D vec3d, Vec3D vec3d1, int i, int j, int k) { + MovingObjectPosition movingobjectposition = this.c.rayTrace(vec3d, new Vec3D(vec3d1.a, vec3d1.b + (double) this.b.length * 0.5D, vec3d1.c), false, true, false); + + return movingobjectposition == null || movingobjectposition.type == MovingObjectPosition.EnumMovingObjectType.MISS; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/NavigationSpider.java b/eSpigot-Server/src/main/java/net/minecraft/server/NavigationSpider.java new file mode 100644 index 0000000..c061f58 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/NavigationSpider.java @@ -0,0 +1,49 @@ +package net.minecraft.server; + +public class NavigationSpider extends Navigation { + + private BlockPosition f; + + public NavigationSpider(EntityInsentient entityinsentient, World world) { + super(entityinsentient, world); + } + + public PathEntity a(BlockPosition blockposition) { + this.f = blockposition; + return super.a(blockposition); + } + + public PathEntity a(Entity entity) { + this.f = new BlockPosition(entity); + return super.a(entity); + } + + public boolean a(Entity entity, double d0) { + PathEntity pathentity = this.a(entity); + + if (pathentity != null) { + return this.a(pathentity, d0); + } else { + this.f = new BlockPosition(entity); + this.e = d0; + return true; + } + } + + public void k() { + if (!this.m()) { + super.k(); + } else { + if (this.f != null) { + double d0 = (double) (this.b.width * this.b.width); + + if (this.b.c(this.f) >= d0 && (this.b.locY <= (double) this.f.getY() || this.b.c(new BlockPosition(this.f.getX(), MathHelper.floor(this.b.locY), this.f.getZ())) >= d0)) { + this.b.getControllerMove().a((double) this.f.getX(), (double) this.f.getY(), (double) this.f.getZ(), this.e); + } else { + this.f = null; + } + } + + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/NetworkManager.java b/eSpigot-Server/src/main/java/net/minecraft/server/NetworkManager.java similarity index 92% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/NetworkManager.java rename to eSpigot-Server/src/main/java/net/minecraft/server/NetworkManager.java index e113ef0..468734c 100644 --- a/TacoSpigot-Server/src/main/java/net/minecraft/server/NetworkManager.java +++ b/eSpigot-Server/src/main/java/net/minecraft/server/NetworkManager.java @@ -275,35 +275,33 @@ public class NetworkManager extends SimpleChannelInboundHandler { channelfuture.addListener(ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE); } else { - this.channel.eventLoop().execute(flush ? () -> { - if (enumprotocol != enumprotocol1) { - this.a(enumprotocol); - } - try { - ChannelFuture channelfuture1 = this.channel.writeAndFlush(packet); // Tuinity - add flush parameter - if (agenericfuturelistener != null) - channelfuture1.addListeners(agenericfuturelistener); + Runnable command = new Runnable() { // PandaSpigot - optimize packets that are not flushed + public void run() { + if (enumprotocol != enumprotocol1) { + NetworkManager.this.a(enumprotocol); + } + try { + ChannelFuture channelfuture1 = (flush) ? NetworkManager.this.channel.writeAndFlush(packet) : NetworkManager.this.channel.write(packet); // PandaSpigot - add flush parameter + if (agenericfuturelistener != null) + channelfuture1.addListeners(agenericfuturelistener); - channelfuture1.addListener(ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE); - } catch (Exception e) { - g.error("NetworkException: ", e); - close(new ChatMessage("disconnect.genericReason", "Internal Exception: " + e.getMessage())); + channelfuture1.addListener(ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE); + } catch (Exception e) { + g.error("NetworkException: ", e); + close(new ChatMessage("disconnect.genericReason", "Internal Exception: " + e.getMessage())); + } } - } : () -> { - if (enumprotocol != enumprotocol1) { - this.a(enumprotocol); - } - try { - ChannelFuture channelfuture1 = this.channel.write(packet); // Tuinity - add flush parameter - if (agenericfuturelistener != null) - channelfuture1.addListeners(agenericfuturelistener); - - channelfuture1.addListener(ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE); - } catch (Exception e) { - g.error("NetworkException: ", e); - close(new ChatMessage("disconnect.genericReason", "Internal Exception: " + e.getMessage())); - } - }); + // PandaSpigot start - optimize packets that are not flushed + }; + if (!flush) { + // create a LazyRunnable that when executed, calls command.run() + io.netty.util.concurrent.AbstractEventExecutor.LazyRunnable run = command::run; + this.channel.eventLoop().execute(run); + } else { + // if flushing, just schedule like normal + this.channel.eventLoop().execute(command); + } + // PandaSpigot end } } diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/NextTickListEntry.java b/eSpigot-Server/src/main/java/net/minecraft/server/NextTickListEntry.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/NextTickListEntry.java rename to eSpigot-Server/src/main/java/net/minecraft/server/NextTickListEntry.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/NibbleArray.java b/eSpigot-Server/src/main/java/net/minecraft/server/NibbleArray.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/NibbleArray.java rename to eSpigot-Server/src/main/java/net/minecraft/server/NibbleArray.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/NoiseGenerator.java b/eSpigot-Server/src/main/java/net/minecraft/server/NoiseGenerator.java new file mode 100644 index 0000000..07827ed --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/NoiseGenerator.java @@ -0,0 +1,6 @@ +package net.minecraft.server; + +public abstract class NoiseGenerator { + + public NoiseGenerator() {} +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/NoiseGenerator3.java b/eSpigot-Server/src/main/java/net/minecraft/server/NoiseGenerator3.java new file mode 100644 index 0000000..706b003 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/NoiseGenerator3.java @@ -0,0 +1,56 @@ +package net.minecraft.server; + +import java.util.Random; + +public class NoiseGenerator3 extends NoiseGenerator { + + private NoiseGenerator3Handler[] a; + private int b; + + public NoiseGenerator3(Random random, int i) { + this.b = i; + this.a = new NoiseGenerator3Handler[i]; + + for (int j = 0; j < i; ++j) { + this.a[j] = new NoiseGenerator3Handler(random); + } + + } + + public double a(double d0, double d1) { + double d2 = 0.0D; + double d3 = 1.0D; + + for (int i = 0; i < this.b; ++i) { + d2 += this.a[i].a(d0 * d3, d1 * d3) / d3; + d3 /= 2.0D; + } + + return d2; + } + + public double[] a(double[] adouble, double d0, double d1, int i, int j, double d2, double d3, double d4) { + return this.a(adouble, d0, d1, i, j, d2, d3, d4, 0.5D); + } + + public double[] a(double[] adouble, double d0, double d1, int i, int j, double d2, double d3, double d4, double d5) { + if (adouble != null && adouble.length >= i * j) { + for (int k = 0; k < adouble.length; ++k) { + adouble[k] = 0.0D; + } + } else { + adouble = new double[i * j]; + } + + double d6 = 1.0D; + double d7 = 1.0D; + + for (int l = 0; l < this.b; ++l) { + this.a[l].a(adouble, d0, d1, i, j, d2 * d7 * d6, d3 * d7 * d6, 0.55D / d6); + d7 *= d4; + d6 *= d5; + } + + return adouble; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/NoiseGenerator3Handler.java b/eSpigot-Server/src/main/java/net/minecraft/server/NoiseGenerator3Handler.java new file mode 100644 index 0000000..d86673f --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/NoiseGenerator3Handler.java @@ -0,0 +1,188 @@ +package net.minecraft.server; + +import java.util.Random; + +public class NoiseGenerator3Handler { + + private static int[][] e = new int[][] { { 1, 1, 0}, { -1, 1, 0}, { 1, -1, 0}, { -1, -1, 0}, { 1, 0, 1}, { -1, 0, 1}, { 1, 0, -1}, { -1, 0, -1}, { 0, 1, 1}, { 0, -1, 1}, { 0, 1, -1}, { 0, -1, -1}}; + public static final double a = Math.sqrt(3.0D); + private int[] f; + public double b; + public double c; + public double d; + private static final double g = 0.5D * (NoiseGenerator3Handler.a - 1.0D); + private static final double h = (3.0D - NoiseGenerator3Handler.a) / 6.0D; + + public NoiseGenerator3Handler() { + this(new Random()); + } + + public NoiseGenerator3Handler(Random random) { + this.f = new int[512]; + this.b = random.nextDouble() * 256.0D; + this.c = random.nextDouble() * 256.0D; + this.d = random.nextDouble() * 256.0D; + + int i; + + for (i = 0; i < 256; this.f[i] = i++) { + ; + } + + for (i = 0; i < 256; ++i) { + int j = random.nextInt(256 - i) + i; + int k = this.f[i]; + + this.f[i] = this.f[j]; + this.f[j] = k; + this.f[i + 256] = this.f[i]; + } + + } + + private static int a(double d0) { + return d0 > 0.0D ? (int) d0 : (int) d0 - 1; + } + + private static double a(int[] aint, double d0, double d1) { + return (double) aint[0] * d0 + (double) aint[1] * d1; + } + + public double a(double d0, double d1) { + double d2 = 0.5D * (NoiseGenerator3Handler.a - 1.0D); + double d3 = (d0 + d1) * d2; + int i = a(d0 + d3); + int j = a(d1 + d3); + double d4 = (3.0D - NoiseGenerator3Handler.a) / 6.0D; + double d5 = (double) (i + j) * d4; + double d6 = (double) i - d5; + double d7 = (double) j - d5; + double d8 = d0 - d6; + double d9 = d1 - d7; + byte b0; + byte b1; + + if (d8 > d9) { + b0 = 1; + b1 = 0; + } else { + b0 = 0; + b1 = 1; + } + + double d10 = d8 - (double) b0 + d4; + double d11 = d9 - (double) b1 + d4; + double d12 = d8 - 1.0D + 2.0D * d4; + double d13 = d9 - 1.0D + 2.0D * d4; + int k = i & 255; + int l = j & 255; + int i1 = this.f[k + this.f[l]] % 12; + int j1 = this.f[k + b0 + this.f[l + b1]] % 12; + int k1 = this.f[k + 1 + this.f[l + 1]] % 12; + double d14 = 0.5D - d8 * d8 - d9 * d9; + double d15; + + if (d14 < 0.0D) { + d15 = 0.0D; + } else { + d14 *= d14; + d15 = d14 * d14 * a(NoiseGenerator3Handler.e[i1], d8, d9); + } + + double d16 = 0.5D - d10 * d10 - d11 * d11; + double d17; + + if (d16 < 0.0D) { + d17 = 0.0D; + } else { + d16 *= d16; + d17 = d16 * d16 * a(NoiseGenerator3Handler.e[j1], d10, d11); + } + + double d18 = 0.5D - d12 * d12 - d13 * d13; + double d19; + + if (d18 < 0.0D) { + d19 = 0.0D; + } else { + d18 *= d18; + d19 = d18 * d18 * a(NoiseGenerator3Handler.e[k1], d12, d13); + } + + return 70.0D * (d15 + d17 + d19); + } + + public void a(double[] adouble, double d0, double d1, int i, int j, double d2, double d3, double d4) { + int k = 0; + + for (int l = 0; l < j; ++l) { + double d5 = (d1 + (double) l) * d3 + this.c; + + for (int i1 = 0; i1 < i; ++i1) { + double d6 = (d0 + (double) i1) * d2 + this.b; + double d7 = (d6 + d5) * NoiseGenerator3Handler.g; + int j1 = a(d6 + d7); + int k1 = a(d5 + d7); + double d8 = (double) (j1 + k1) * NoiseGenerator3Handler.h; + double d9 = (double) j1 - d8; + double d10 = (double) k1 - d8; + double d11 = d6 - d9; + double d12 = d5 - d10; + byte b0; + byte b1; + + if (d11 > d12) { + b0 = 1; + b1 = 0; + } else { + b0 = 0; + b1 = 1; + } + + double d13 = d11 - (double) b0 + NoiseGenerator3Handler.h; + double d14 = d12 - (double) b1 + NoiseGenerator3Handler.h; + double d15 = d11 - 1.0D + 2.0D * NoiseGenerator3Handler.h; + double d16 = d12 - 1.0D + 2.0D * NoiseGenerator3Handler.h; + int l1 = j1 & 255; + int i2 = k1 & 255; + int j2 = this.f[l1 + this.f[i2]] % 12; + int k2 = this.f[l1 + b0 + this.f[i2 + b1]] % 12; + int l2 = this.f[l1 + 1 + this.f[i2 + 1]] % 12; + double d17 = 0.5D - d11 * d11 - d12 * d12; + double d18; + + if (d17 < 0.0D) { + d18 = 0.0D; + } else { + d17 *= d17; + d18 = d17 * d17 * a(NoiseGenerator3Handler.e[j2], d11, d12); + } + + double d19 = 0.5D - d13 * d13 - d14 * d14; + double d20; + + if (d19 < 0.0D) { + d20 = 0.0D; + } else { + d19 *= d19; + d20 = d19 * d19 * a(NoiseGenerator3Handler.e[k2], d13, d14); + } + + double d21 = 0.5D - d15 * d15 - d16 * d16; + double d22; + + if (d21 < 0.0D) { + d22 = 0.0D; + } else { + d21 *= d21; + d22 = d21 * d21 * a(NoiseGenerator3Handler.e[l2], d15, d16); + } + + int i3 = k++; + + adouble[i3] += 70.0D * (d18 + d20 + d22) * d4; + } + } + + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/NoiseGeneratorOctaves.java b/eSpigot-Server/src/main/java/net/minecraft/server/NoiseGeneratorOctaves.java new file mode 100644 index 0000000..3392bf8 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/NoiseGeneratorOctaves.java @@ -0,0 +1,54 @@ +package net.minecraft.server; + +import java.util.Random; + +public class NoiseGeneratorOctaves extends NoiseGenerator { + + private NoiseGeneratorPerlin[] a; + private int b; + + public NoiseGeneratorOctaves(Random random, int i) { + this.b = i; + this.a = new NoiseGeneratorPerlin[i]; + + for (int j = 0; j < i; ++j) { + this.a[j] = new NoiseGeneratorPerlin(random); + } + + } + + public double[] a(double[] adouble, int i, int j, int k, int l, int i1, int j1, double d0, double d1, double d2) { + if (adouble == null) { + adouble = new double[l * i1 * j1]; + } else { + for (int k1 = 0; k1 < adouble.length; ++k1) { + adouble[k1] = 0.0D; + } + } + + double d3 = 1.0D; + + for (int l1 = 0; l1 < this.b; ++l1) { + double d4 = (double) i * d3 * d0; + double d5 = (double) j * d3 * d1; + double d6 = (double) k * d3 * d2; + long i2 = MathHelper.d(d4); + long j2 = MathHelper.d(d6); + + d4 -= (double) i2; + d6 -= (double) j2; + i2 %= 16777216L; + j2 %= 16777216L; + d4 += (double) i2; + d6 += (double) j2; + this.a[l1].a(adouble, d4, d5, d6, l, i1, j1, d0 * d3, d1 * d3, d2 * d3, d3); + d3 /= 2.0D; + } + + return adouble; + } + + public double[] a(double[] adouble, int i, int j, int k, int l, double d0, double d1, double d2) { + return this.a(adouble, i, 10, j, k, 1, l, d0, 1.0D, d1); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/NoiseGeneratorPerlin.java b/eSpigot-Server/src/main/java/net/minecraft/server/NoiseGeneratorPerlin.java new file mode 100644 index 0000000..fcc8111 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/NoiseGeneratorPerlin.java @@ -0,0 +1,204 @@ +package net.minecraft.server; + +import java.util.Random; + +public class NoiseGeneratorPerlin extends NoiseGenerator { + + private int[] d; + public double a; + public double b; + public double c; + private static final double[] e = new double[] { 1.0D, -1.0D, 1.0D, -1.0D, 1.0D, -1.0D, 1.0D, -1.0D, 0.0D, 0.0D, 0.0D, 0.0D, 1.0D, 0.0D, -1.0D, 0.0D}; + private static final double[] f = new double[] { 1.0D, 1.0D, -1.0D, -1.0D, 0.0D, 0.0D, 0.0D, 0.0D, 1.0D, -1.0D, 1.0D, -1.0D, 1.0D, -1.0D, 1.0D, -1.0D}; + private static final double[] g = new double[] { 0.0D, 0.0D, 0.0D, 0.0D, 1.0D, 1.0D, -1.0D, -1.0D, 1.0D, 1.0D, -1.0D, -1.0D, 0.0D, 1.0D, 0.0D, -1.0D}; + private static final double[] h = new double[] { 1.0D, -1.0D, 1.0D, -1.0D, 1.0D, -1.0D, 1.0D, -1.0D, 0.0D, 0.0D, 0.0D, 0.0D, 1.0D, 0.0D, -1.0D, 0.0D}; + private static final double[] i = new double[] { 0.0D, 0.0D, 0.0D, 0.0D, 1.0D, 1.0D, -1.0D, -1.0D, 1.0D, 1.0D, -1.0D, -1.0D, 0.0D, 1.0D, 0.0D, -1.0D}; + + public NoiseGeneratorPerlin() { + this(new Random()); + } + + public NoiseGeneratorPerlin(Random random) { + this.d = new int[512]; + this.a = random.nextDouble() * 256.0D; + this.b = random.nextDouble() * 256.0D; + this.c = random.nextDouble() * 256.0D; + + int i; + + for (i = 0; i < 256; this.d[i] = i++) { + ; + } + + for (i = 0; i < 256; ++i) { + int j = random.nextInt(256 - i) + i; + int k = this.d[i]; + + this.d[i] = this.d[j]; + this.d[j] = k; + this.d[i + 256] = this.d[i]; + } + + } + + public final double b(double d0, double d1, double d2) { + return d1 + d0 * (d2 - d1); + } + + public final double a(int i, double d0, double d1) { + int j = i & 15; + + return NoiseGeneratorPerlin.h[j] * d0 + NoiseGeneratorPerlin.i[j] * d1; + } + + public final double a(int i, double d0, double d1, double d2) { + int j = i & 15; + + return NoiseGeneratorPerlin.e[j] * d0 + NoiseGeneratorPerlin.f[j] * d1 + NoiseGeneratorPerlin.g[j] * d2; + } + + public void a(double[] adouble, double d0, double d1, double d2, int i, int j, int k, double d3, double d4, double d5, double d6) { + int l; + int i1; + double d7; + double d8; + int j1; + double d9; + int k1; + int l1; + double d10; + int i2; + int j2; + + if (j == 1) { + boolean flag = false; + boolean flag1 = false; + boolean flag2 = false; + boolean flag3 = false; + double d11 = 0.0D; + double d12 = 0.0D; + + i2 = 0; + double d13 = 1.0D / d6; + + for (int k2 = 0; k2 < i; ++k2) { + d7 = d0 + (double) k2 * d3 + this.a; + int l2 = (int) d7; + + if (d7 < (double) l2) { + --l2; + } + + int i3 = l2 & 255; + + d7 -= (double) l2; + d8 = d7 * d7 * d7 * (d7 * (d7 * 6.0D - 15.0D) + 10.0D); + + for (j1 = 0; j1 < k; ++j1) { + d9 = d2 + (double) j1 * d5 + this.c; + k1 = (int) d9; + if (d9 < (double) k1) { + --k1; + } + + l1 = k1 & 255; + d9 -= (double) k1; + d10 = d9 * d9 * d9 * (d9 * (d9 * 6.0D - 15.0D) + 10.0D); + l = this.d[i3] + 0; + int j3 = this.d[l] + l1; + int k3 = this.d[i3 + 1] + 0; + + i1 = this.d[k3] + l1; + d11 = this.b(d8, this.a(this.d[j3], d7, d9), this.a(this.d[i1], d7 - 1.0D, 0.0D, d9)); + d12 = this.b(d8, this.a(this.d[j3 + 1], d7, 0.0D, d9 - 1.0D), this.a(this.d[i1 + 1], d7 - 1.0D, 0.0D, d9 - 1.0D)); + double d14 = this.b(d10, d11, d12); + + j2 = i2++; + adouble[j2] += d14 * d13; + } + } + + } else { + l = 0; + double d15 = 1.0D / d6; + + i1 = -1; + boolean flag4 = false; + boolean flag5 = false; + boolean flag6 = false; + boolean flag7 = false; + boolean flag8 = false; + boolean flag9 = false; + double d16 = 0.0D; + + d7 = 0.0D; + double d17 = 0.0D; + + d8 = 0.0D; + + for (j1 = 0; j1 < i; ++j1) { + d9 = d0 + (double) j1 * d3 + this.a; + k1 = (int) d9; + if (d9 < (double) k1) { + --k1; + } + + l1 = k1 & 255; + d9 -= (double) k1; + d10 = d9 * d9 * d9 * (d9 * (d9 * 6.0D - 15.0D) + 10.0D); + + for (int l3 = 0; l3 < k; ++l3) { + double d18 = d2 + (double) l3 * d5 + this.c; + int i4 = (int) d18; + + if (d18 < (double) i4) { + --i4; + } + + int j4 = i4 & 255; + + d18 -= (double) i4; + double d19 = d18 * d18 * d18 * (d18 * (d18 * 6.0D - 15.0D) + 10.0D); + + for (int k4 = 0; k4 < j; ++k4) { + double d20 = d1 + (double) k4 * d4 + this.b; + int l4 = (int) d20; + + if (d20 < (double) l4) { + --l4; + } + + int i5 = l4 & 255; + + d20 -= (double) l4; + double d21 = d20 * d20 * d20 * (d20 * (d20 * 6.0D - 15.0D) + 10.0D); + + if (k4 == 0 || i5 != i1) { + i1 = i5; + int j5 = this.d[l1] + i5; + int k5 = this.d[j5] + j4; + int l5 = this.d[j5 + 1] + j4; + int i6 = this.d[l1 + 1] + i5; + + i2 = this.d[i6] + j4; + int j6 = this.d[i6 + 1] + j4; + + d16 = this.b(d10, this.a(this.d[k5], d9, d20, d18), this.a(this.d[i2], d9 - 1.0D, d20, d18)); + d7 = this.b(d10, this.a(this.d[l5], d9, d20 - 1.0D, d18), this.a(this.d[j6], d9 - 1.0D, d20 - 1.0D, d18)); + d17 = this.b(d10, this.a(this.d[k5 + 1], d9, d20, d18 - 1.0D), this.a(this.d[i2 + 1], d9 - 1.0D, d20, d18 - 1.0D)); + d8 = this.b(d10, this.a(this.d[l5 + 1], d9, d20 - 1.0D, d18 - 1.0D), this.a(this.d[j6 + 1], d9 - 1.0D, d20 - 1.0D, d18 - 1.0D)); + } + + double d22 = this.b(d21, d16, d7); + double d23 = this.b(d21, d17, d8); + double d24 = this.b(d19, d22, d23); + + j2 = l++; + adouble[j2] += d24 * d15; + } + } + } + + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/OldChunkLoader.java b/eSpigot-Server/src/main/java/net/minecraft/server/OldChunkLoader.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/OldChunkLoader.java rename to eSpigot-Server/src/main/java/net/minecraft/server/OldChunkLoader.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/OldNibbleArray.java b/eSpigot-Server/src/main/java/net/minecraft/server/OldNibbleArray.java new file mode 100644 index 0000000..ed090ae --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/OldNibbleArray.java @@ -0,0 +1,22 @@ +package net.minecraft.server; + +public class OldNibbleArray { + + public final byte[] a; + private final int b; + private final int c; + + public OldNibbleArray(byte[] abyte, int i) { + this.a = abyte; + this.b = i; + this.c = i + 4; + } + + public int a(int i, int j, int k) { + int l = i << this.c | k << this.b | j; + int i1 = l >> 1; + int j1 = l & 1; + + return j1 == 0 ? this.a[i1] & 15 : this.a[i1] >> 4 & 15; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/OpList.java b/eSpigot-Server/src/main/java/net/minecraft/server/OpList.java new file mode 100644 index 0000000..c33b3f6 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/OpList.java @@ -0,0 +1,60 @@ +package net.minecraft.server; + +import com.google.gson.JsonObject; +import com.mojang.authlib.GameProfile; +import java.io.File; +import java.util.Iterator; + +public class OpList extends JsonList { + + public OpList(File file) { + super(file); + } + + protected JsonListEntry a(JsonObject jsonobject) { + return new OpListEntry(jsonobject); + } + + public String[] getEntries() { + String[] astring = new String[this.e().size()]; + int i = 0; + + OpListEntry oplistentry; + + for (Iterator iterator = this.e().values().iterator(); iterator.hasNext(); astring[i++] = ((GameProfile) oplistentry.getKey()).getName()) { + oplistentry = (OpListEntry) iterator.next(); + } + + return astring; + } + + public boolean b(GameProfile gameprofile) { + OpListEntry oplistentry = (OpListEntry) this.get(gameprofile); + + return oplistentry != null ? oplistentry.b() : false; + } + + protected String c(GameProfile gameprofile) { + return gameprofile.getId().toString(); + } + + public GameProfile a(String s) { + Iterator iterator = this.e().values().iterator(); + + OpListEntry oplistentry; + + do { + if (!iterator.hasNext()) { + return null; + } + + oplistentry = (OpListEntry) iterator.next(); + } while (!s.equalsIgnoreCase(((GameProfile) oplistentry.getKey()).getName())); + + return (GameProfile) oplistentry.getKey(); + } + + protected String a(GameProfile object) { + return this.c(object); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/OpListEntry.java b/eSpigot-Server/src/main/java/net/minecraft/server/OpListEntry.java new file mode 100644 index 0000000..6fb9fef --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/OpListEntry.java @@ -0,0 +1,59 @@ +package net.minecraft.server; + +import com.google.gson.JsonObject; +import com.mojang.authlib.GameProfile; +import java.util.UUID; + +public class OpListEntry extends JsonListEntry { + + private final int a; + private final boolean b; + + public OpListEntry(GameProfile gameprofile, int i, boolean flag) { + super(gameprofile); + this.a = i; + this.b = flag; + } + + public OpListEntry(JsonObject jsonobject) { + super(b(jsonobject), jsonobject); + this.a = jsonobject.has("level") ? jsonobject.get("level").getAsInt() : 0; + this.b = jsonobject.has("bypassesPlayerLimit") && jsonobject.get("bypassesPlayerLimit").getAsBoolean(); + } + + public int a() { + return this.a; + } + + public boolean b() { + return this.b; + } + + protected void a(JsonObject jsonobject) { + if (this.getKey() != null) { + jsonobject.addProperty("uuid", ((GameProfile) this.getKey()).getId() == null ? "" : ((GameProfile) this.getKey()).getId().toString()); + jsonobject.addProperty("name", ((GameProfile) this.getKey()).getName()); + super.a(jsonobject); + jsonobject.addProperty("level", Integer.valueOf(this.a)); + jsonobject.addProperty("bypassesPlayerLimit", Boolean.valueOf(this.b)); + } + } + + private static GameProfile b(JsonObject jsonobject) { + if (jsonobject.has("uuid") && jsonobject.has("name")) { + String s = jsonobject.get("uuid").getAsString(); + + UUID uuid; + + try { + uuid = UUID.fromString(s); + } catch (Throwable throwable) { + return null; + } + + return new GameProfile(uuid, jsonobject.get("name").getAsString()); + } else { + return null; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/Packet.java b/eSpigot-Server/src/main/java/net/minecraft/server/Packet.java new file mode 100644 index 0000000..d60ec06 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/Packet.java @@ -0,0 +1,45 @@ +package net.minecraft.server; + +import java.io.IOException; + +public interface Packet { + + void a(PacketDataSerializer packetdataserializer) throws IOException; + + void b(PacketDataSerializer packetdataserializer) throws IOException; + + void a(T t0); + + // PandaSpigot start + /** + * @param player {@code null} if not at {@link EnumProtocol#PLAY} yet. + */ + default void onPacketDispatch(EntityPlayer player) {} + + /** + * @param player {@code null} if not at {@link EnumProtocol#PLAY} yet. + * @param future Can be {@code null} if packet was cancelled. + */ + default void onPacketDispatchFinish(EntityPlayer player, io.netty.channel.ChannelFuture future) {} + + /** + * @return Whether {@link #onPacketDispatchFinish(EntityPlayer, io.netty.channel.ChannelFuture)} should + * be called after this packet has been dispatched. + */ + default boolean hasFinishListener() { return false; } + + /** + * Checks whether this packet is ready to be sent. + *

      + * If this returns {@code false}, the packet will be added to the queue, and checked every tick until it is ready. + * + * @return Whether this packet is ready. + */ + default boolean isReady() { return true; } + + /** + * @return A list of extra packets to be sent after this packet. + */ + default java.util.List> getExtraPackets() { return null; } + // PandaSpigot end +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PacketCompressor.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketCompressor.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PacketCompressor.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PacketCompressor.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PacketDataSerializer.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketDataSerializer.java similarity index 95% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PacketDataSerializer.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PacketDataSerializer.java index 137d3e3..ba8a2b1 100644 --- a/TacoSpigot-Server/src/main/java/net/minecraft/server/PacketDataSerializer.java +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketDataSerializer.java @@ -1,5 +1,6 @@ package net.minecraft.server; +import com.elevatemc.spigot.network.VarIntUtil; import com.google.common.base.Charsets; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; @@ -106,16 +107,7 @@ public class PacketDataSerializer extends ByteBuf { } public int e() { - byte b0; - int i = 0; - int j = 0; - do { - b0 = readByte(); - i |= (b0 & Byte.MAX_VALUE) << j++ * 7; - if (j > 5) - throw new RuntimeException("VarInt too big"); - } while ((b0 & 0x80) == 128); - return i; + return VarIntUtil.readVarInt(this.a); // PandaSpigot - Optimize VarInt reading } public long f() { @@ -141,12 +133,7 @@ public class PacketDataSerializer extends ByteBuf { } public void b(int i) { - while ((i & -128) != 0) { - this.writeByte(i & 127 | 128); - i >>>= 7; - } - - this.writeByte(i); + VarIntUtil.writeVarInt(this.a, i); // PandaSpigot - Optimize VarInt writing } public void b(long i) { @@ -238,30 +225,17 @@ public class PacketDataSerializer extends ByteBuf { return s; } - public String readCappedString(int maxLength) { - int toRead = this.e(); - if (toRead > maxLength * 4) - throw new DecoderException("The received encoded string buffer length is longer than maximum allowed (" + toRead + " > " + (maxLength * 4) + ")"); - if (toRead < 0) - throw new DecoderException("The received encoded string buffer length is less than zero! Weird string!"); - int len = Math.min(toRead, maxLength); - String s = toString(readerIndex(), len, StandardCharsets.UTF_8); - readerIndex(readerIndex() + len); - if (s.length() > 0) - throw new DecoderException("The received string length is longer than maximum allowed (" + toRead + " > " + maxLength + ")"); - return s; - } - public PacketDataSerializer a(String s) { - byte[] abyte = s.getBytes(Charsets.UTF_8); - - if (abyte.length > 32767) { + // PandaSpigot start - Optimize string writing + int utf8Bytes = io.netty.buffer.ByteBufUtil.utf8Bytes(s); + if (utf8Bytes > 32767) { throw new EncoderException("String too big (was " + s.length() + " bytes encoded, max " + 32767 + ")"); } else { - this.b(abyte.length); - this.writeBytes(abyte); + this.b(utf8Bytes); + this.writeCharSequence(s, Charsets.UTF_8); return this; } + // PandaSpigot end } @Override diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketDecoder.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketDecoder.java new file mode 100644 index 0000000..bbebe3a --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketDecoder.java @@ -0,0 +1,45 @@ +package net.minecraft.server; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.ByteToMessageDecoder; +import java.io.IOException; +import java.util.List; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.MarkerManager; + +public class PacketDecoder extends ByteToMessageDecoder { + + private static final Logger a = LogManager.getLogger(); + private static final Marker b = MarkerManager.getMarker("PACKET_RECEIVED", NetworkManager.b); + private final EnumProtocolDirection c; + + public PacketDecoder(EnumProtocolDirection enumprotocoldirection) { + this.c = enumprotocoldirection; + } + + protected void decode(ChannelHandlerContext channelhandlercontext, ByteBuf bytebuf, List list) throws Exception { + if (bytebuf.readableBytes() != 0) { + PacketDataSerializer packetdataserializer = new PacketDataSerializer(bytebuf); + int i = packetdataserializer.e(); + Packet packet = ((EnumProtocol) channelhandlercontext.channel().attr(NetworkManager.c).get()).a(this.c, i); + + if (packet == null) { + throw new IOException("Bad packet id " + i); + } else { + packet.a(packetdataserializer); + if (packetdataserializer.readableBytes() > 0) { + throw new IOException("Packet " + ((EnumProtocol) channelhandlercontext.channel().attr(NetworkManager.c).get()).a() + "/" + i + " (" + packet.getClass().getSimpleName() + ") was larger than I expected, found " + packetdataserializer.readableBytes() + " bytes extra whilst reading packet " + i); + } else { + list.add(packet); + if (PacketDecoder.a.isDebugEnabled()) { + PacketDecoder.a.debug(PacketDecoder.b, " IN: [{}:{}] {}", new Object[] { channelhandlercontext.channel().attr(NetworkManager.c).get(), Integer.valueOf(i), packet.getClass().getName()}); + } + + } + } + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PacketDecompressor.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketDecompressor.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PacketDecompressor.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PacketDecompressor.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PacketDecrypter.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketDecrypter.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PacketDecrypter.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PacketDecrypter.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketEncoder.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketEncoder.java new file mode 100644 index 0000000..58214e1 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketEncoder.java @@ -0,0 +1,52 @@ +package net.minecraft.server; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.MessageToByteEncoder; +import java.io.IOException; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.MarkerManager; + +public class PacketEncoder extends MessageToByteEncoder { + + private static final Logger a = LogManager.getLogger(); + private static final Marker b = MarkerManager.getMarker("PACKET_SENT", NetworkManager.b); + private final EnumProtocolDirection c; + + public PacketEncoder(EnumProtocolDirection enumprotocoldirection) { + this.c = enumprotocoldirection; + } + + protected void a(ChannelHandlerContext channelhandlercontext, Packet packet, ByteBuf bytebuf) throws Exception { + Integer integer = ((EnumProtocol) channelhandlercontext.channel().attr(NetworkManager.c).get()).a(this.c, packet); + + if (PacketEncoder.a.isDebugEnabled()) { + PacketEncoder.a.debug(PacketEncoder.b, "OUT: [{}:{}] {}", new Object[] { channelhandlercontext.channel().attr(NetworkManager.c).get(), integer, packet.getClass().getName()}); + } + + if (integer == null) { + throw new IOException("Can\'t serialize unregistered packet"); + } else { + PacketDataSerializer packetdataserializer = new PacketDataSerializer(bytebuf); + + packetdataserializer.b(integer.intValue()); + + try { + if (packet instanceof PacketPlayOutNamedEntitySpawn) { + packet = packet; + } + + packet.b(packetdataserializer); + } catch (Throwable throwable) { + PacketEncoder.a.error(throwable); + } + + } + } + + protected void encode(ChannelHandlerContext channelhandlercontext, Packet object, ByteBuf bytebuf) throws Exception { + this.a(channelhandlercontext, object, bytebuf); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PacketEncrypter.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketEncrypter.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PacketEncrypter.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PacketEncrypter.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketEncryptionHandler.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketEncryptionHandler.java new file mode 100644 index 0000000..a919da0 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketEncryptionHandler.java @@ -0,0 +1,49 @@ +package net.minecraft.server; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import javax.crypto.Cipher; +import javax.crypto.ShortBufferException; + +public class PacketEncryptionHandler { + + private final Cipher a; + private byte[] b = new byte[0]; + private byte[] c = new byte[0]; + + protected PacketEncryptionHandler(Cipher cipher) { + this.a = cipher; + } + + private byte[] a(ByteBuf bytebuf) { + int i = bytebuf.readableBytes(); + + if (this.b.length < i) { + this.b = new byte[i]; + } + + bytebuf.readBytes(this.b, 0, i); + return this.b; + } + + protected ByteBuf a(ChannelHandlerContext channelhandlercontext, ByteBuf bytebuf) throws ShortBufferException { + int i = bytebuf.readableBytes(); + byte[] abyte = this.a(bytebuf); + ByteBuf bytebuf1 = channelhandlercontext.alloc().heapBuffer(this.a.getOutputSize(i)); + + bytebuf1.writerIndex(this.a.update(abyte, 0, i, bytebuf1.array(), bytebuf1.arrayOffset())); + return bytebuf1; + } + + protected void a(ByteBuf bytebuf, ByteBuf bytebuf1) throws ShortBufferException { + int i = bytebuf.readableBytes(); + byte[] abyte = this.a(bytebuf); + int j = this.a.getOutputSize(i); + + if (this.c.length < j) { + this.c = new byte[j]; + } + + bytebuf1.writeBytes(this.c, 0, this.a.update(abyte, 0, i, this.c)); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketHandshakingInListener.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketHandshakingInListener.java new file mode 100644 index 0000000..e91532b --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketHandshakingInListener.java @@ -0,0 +1,6 @@ +package net.minecraft.server; + +public interface PacketHandshakingInListener extends PacketListener { + + void a(PacketHandshakingInSetProtocol packethandshakinginsetprotocol); +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PacketHandshakingInSetProtocol.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketHandshakingInSetProtocol.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PacketHandshakingInSetProtocol.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PacketHandshakingInSetProtocol.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketListener.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketListener.java new file mode 100644 index 0000000..b0014c6 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketListener.java @@ -0,0 +1,6 @@ +package net.minecraft.server; + +public interface PacketListener { + + void a(IChatBaseComponent ichatbasecomponent); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketListenerPlayIn.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketListenerPlayIn.java new file mode 100644 index 0000000..5346a35 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketListenerPlayIn.java @@ -0,0 +1,50 @@ +package net.minecraft.server; + +public interface PacketListenerPlayIn extends PacketListener { + + void a(PacketPlayInArmAnimation packetplayinarmanimation); + + void a(PacketPlayInChat packetplayinchat); + + void a(PacketPlayInTabComplete packetplayintabcomplete); + + void a(PacketPlayInClientCommand packetplayinclientcommand); + + void a(PacketPlayInSettings packetplayinsettings); + + void a(PacketPlayInTransaction packetplayintransaction); + + void a(PacketPlayInEnchantItem packetplayinenchantitem); + + void a(PacketPlayInWindowClick packetplayinwindowclick); + + void a(PacketPlayInCloseWindow packetplayinclosewindow); + + void a(PacketPlayInCustomPayload packetplayincustompayload); + + void a(PacketPlayInUseEntity packetplayinuseentity); + + void a(PacketPlayInKeepAlive packetplayinkeepalive); + + void a(PacketPlayInFlying packetplayinflying); + + void a(PacketPlayInAbilities packetplayinabilities); + + void a(PacketPlayInBlockDig packetplayinblockdig); + + void a(PacketPlayInEntityAction packetplayinentityaction); + + void a(PacketPlayInSteerVehicle packetplayinsteervehicle); + + void a(PacketPlayInHeldItemSlot packetplayinhelditemslot); + + void a(PacketPlayInSetCreativeSlot packetplayinsetcreativeslot); + + void a(PacketPlayInUpdateSign packetplayinupdatesign); + + void a(PacketPlayInBlockPlace packetplayinblockplace); + + void a(PacketPlayInSpectate packetplayinspectate); + + void a(PacketPlayInResourcePackStatus packetplayinresourcepackstatus); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketListenerPlayOut.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketListenerPlayOut.java new file mode 100644 index 0000000..3d15eed --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketListenerPlayOut.java @@ -0,0 +1,146 @@ +package net.minecraft.server; + +public interface PacketListenerPlayOut extends PacketListener { + + void a(PacketPlayOutSpawnEntity packetplayoutspawnentity); + + void a(PacketPlayOutSpawnEntityExperienceOrb packetplayoutspawnentityexperienceorb); + + void a(PacketPlayOutSpawnEntityWeather packetplayoutspawnentityweather); + + void a(PacketPlayOutSpawnEntityLiving packetplayoutspawnentityliving); + + void a(PacketPlayOutScoreboardObjective packetplayoutscoreboardobjective); + + void a(PacketPlayOutSpawnEntityPainting packetplayoutspawnentitypainting); + + void a(PacketPlayOutNamedEntitySpawn packetplayoutnamedentityspawn); + + void a(PacketPlayOutAnimation packetplayoutanimation); + + void a(PacketPlayOutStatistic packetplayoutstatistic); + + void a(PacketPlayOutBlockBreakAnimation packetplayoutblockbreakanimation); + + void a(PacketPlayOutOpenSignEditor packetplayoutopensigneditor); + + void a(PacketPlayOutTileEntityData packetplayouttileentitydata); + + void a(PacketPlayOutBlockAction packetplayoutblockaction); + + void a(PacketPlayOutBlockChange packetplayoutblockchange); + + void a(PacketPlayOutChat packetplayoutchat); + + void a(PacketPlayOutTabComplete packetplayouttabcomplete); + + void a(PacketPlayOutMultiBlockChange packetplayoutmultiblockchange); + + void a(PacketPlayOutMap packetplayoutmap); + + void a(PacketPlayOutTransaction packetplayouttransaction); + + void a(PacketPlayOutCloseWindow packetplayoutclosewindow); + + void a(PacketPlayOutWindowItems packetplayoutwindowitems); + + void a(PacketPlayOutOpenWindow packetplayoutopenwindow); + + void a(PacketPlayOutWindowData packetplayoutwindowdata); + + void a(PacketPlayOutSetSlot packetplayoutsetslot); + + void a(PacketPlayOutCustomPayload packetplayoutcustompayload); + + void a(PacketPlayOutKickDisconnect packetplayoutkickdisconnect); + + void a(PacketPlayOutBed packetplayoutbed); + + void a(PacketPlayOutEntityStatus packetplayoutentitystatus); + + void a(PacketPlayOutAttachEntity packetplayoutattachentity); + + void a(PacketPlayOutExplosion packetplayoutexplosion); + + void a(PacketPlayOutGameStateChange packetplayoutgamestatechange); + + void a(PacketPlayOutKeepAlive packetplayoutkeepalive); + + void a(PacketPlayOutMapChunk packetplayoutmapchunk); + + void a(PacketPlayOutMapChunkBulk packetplayoutmapchunkbulk); + + void a(PacketPlayOutWorldEvent packetplayoutworldevent); + + void a(PacketPlayOutLogin packetplayoutlogin); + + void a(PacketPlayOutEntity packetplayoutentity); + + void a(PacketPlayOutPosition packetplayoutposition); + + void a(PacketPlayOutWorldParticles packetplayoutworldparticles); + + void a(PacketPlayOutAbilities packetplayoutabilities); + + void a(PacketPlayOutPlayerInfo packetplayoutplayerinfo); + + void a(PacketPlayOutEntityDestroy packetplayoutentitydestroy); + + void a(PacketPlayOutRemoveEntityEffect packetplayoutremoveentityeffect); + + void a(PacketPlayOutRespawn packetplayoutrespawn); + + void a(PacketPlayOutEntityHeadRotation packetplayoutentityheadrotation); + + void a(PacketPlayOutHeldItemSlot packetplayouthelditemslot); + + void a(PacketPlayOutScoreboardDisplayObjective packetplayoutscoreboarddisplayobjective); + + void a(PacketPlayOutEntityMetadata packetplayoutentitymetadata); + + void a(PacketPlayOutEntityVelocity packetplayoutentityvelocity); + + void a(PacketPlayOutEntityEquipment packetplayoutentityequipment); + + void a(PacketPlayOutExperience packetplayoutexperience); + + void a(PacketPlayOutUpdateHealth packetplayoutupdatehealth); + + void a(PacketPlayOutScoreboardTeam packetplayoutscoreboardteam); + + void a(PacketPlayOutScoreboardScore packetplayoutscoreboardscore); + + void a(PacketPlayOutSpawnPosition packetplayoutspawnposition); + + void a(PacketPlayOutUpdateTime packetplayoutupdatetime); + + void a(PacketPlayOutUpdateSign packetplayoutupdatesign); + + void a(PacketPlayOutNamedSoundEffect packetplayoutnamedsoundeffect); + + void a(PacketPlayOutCollect packetplayoutcollect); + + void a(PacketPlayOutEntityTeleport packetplayoutentityteleport); + + void a(PacketPlayOutUpdateAttributes packetplayoutupdateattributes); + + void a(PacketPlayOutEntityEffect packetplayoutentityeffect); + + void a(PacketPlayOutCombatEvent packetplayoutcombatevent); + + void a(PacketPlayOutServerDifficulty packetplayoutserverdifficulty); + + void a(PacketPlayOutCamera packetplayoutcamera); + + void a(PacketPlayOutWorldBorder packetplayoutworldborder); + + void a(PacketPlayOutTitle packetplayouttitle); + + void a(PacketPlayOutSetCompression packetplayoutsetcompression); + + void a(PacketPlayOutPlayerListHeaderFooter packetplayoutplayerlistheaderfooter); + + void a(PacketPlayOutResourcePackSend packetplayoutresourcepacksend); + + void a(PacketPlayOutUpdateEntityNBT packetplayoutupdateentitynbt); +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PacketLoginInEncryptionBegin.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketLoginInEncryptionBegin.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PacketLoginInEncryptionBegin.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PacketLoginInEncryptionBegin.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketLoginInListener.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketLoginInListener.java new file mode 100644 index 0000000..96689a0 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketLoginInListener.java @@ -0,0 +1,8 @@ +package net.minecraft.server; + +public interface PacketLoginInListener extends PacketListener { + + void a(PacketLoginInStart packetlogininstart); + + void a(PacketLoginInEncryptionBegin packetlogininencryptionbegin); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketLoginInStart.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketLoginInStart.java new file mode 100644 index 0000000..9236760 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketLoginInStart.java @@ -0,0 +1,32 @@ +package net.minecraft.server; + +import com.mojang.authlib.GameProfile; +import java.io.IOException; +import java.util.UUID; + +public class PacketLoginInStart implements Packet { + + private GameProfile a; + + public PacketLoginInStart() {} + + public PacketLoginInStart(GameProfile gameprofile) { + this.a = gameprofile; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = new GameProfile((UUID) null, packetdataserializer.c(16)); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.a(this.a.getName()); + } + + public void a(PacketLoginInListener packetlogininlistener) { + packetlogininlistener.a(this); + } + + public GameProfile a() { + return this.a; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketLoginOutDisconnect.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketLoginOutDisconnect.java new file mode 100644 index 0000000..0589412 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketLoginOutDisconnect.java @@ -0,0 +1,26 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketLoginOutDisconnect implements Packet { + + private IChatBaseComponent a; + + public PacketLoginOutDisconnect() {} + + public PacketLoginOutDisconnect(IChatBaseComponent ichatbasecomponent) { + this.a = ichatbasecomponent; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.d(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.a(this.a); + } + + public void a(PacketLoginOutListener packetloginoutlistener) { + packetloginoutlistener.a(this); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketLoginOutEncryptionBegin.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketLoginOutEncryptionBegin.java new file mode 100644 index 0000000..6867c1f --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketLoginOutEncryptionBegin.java @@ -0,0 +1,35 @@ +package net.minecraft.server; + +import java.io.IOException; +import java.security.PublicKey; + +public class PacketLoginOutEncryptionBegin implements Packet { + + private String a; + private PublicKey b; + private byte[] c; + + public PacketLoginOutEncryptionBegin() {} + + public PacketLoginOutEncryptionBegin(String s, PublicKey publickey, byte[] abyte) { + this.a = s; + this.b = publickey; + this.c = abyte; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.c(20); + this.b = MinecraftEncryption.a(packetdataserializer.a()); + this.c = packetdataserializer.a(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.a(this.a); + packetdataserializer.a(this.b.getEncoded()); + packetdataserializer.a(this.c); + } + + public void a(PacketLoginOutListener packetloginoutlistener) { + packetloginoutlistener.a(this); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketLoginOutListener.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketLoginOutListener.java new file mode 100644 index 0000000..2067b05 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketLoginOutListener.java @@ -0,0 +1,12 @@ +package net.minecraft.server; + +public interface PacketLoginOutListener extends PacketListener { + + void a(PacketLoginOutEncryptionBegin packetloginoutencryptionbegin); + + void a(PacketLoginOutSuccess packetloginoutsuccess); + + void a(PacketLoginOutDisconnect packetloginoutdisconnect); + + void a(PacketLoginOutSetCompression packetloginoutsetcompression); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketLoginOutSetCompression.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketLoginOutSetCompression.java new file mode 100644 index 0000000..cde95f4 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketLoginOutSetCompression.java @@ -0,0 +1,26 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketLoginOutSetCompression implements Packet { + + private int a; + + public PacketLoginOutSetCompression() {} + + public PacketLoginOutSetCompression(int i) { + this.a = i; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.e(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.b(this.a); + } + + public void a(PacketLoginOutListener packetloginoutlistener) { + packetloginoutlistener.a(this); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketLoginOutSuccess.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketLoginOutSuccess.java new file mode 100644 index 0000000..c811dd6 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketLoginOutSuccess.java @@ -0,0 +1,35 @@ +package net.minecraft.server; + +import com.mojang.authlib.GameProfile; +import java.io.IOException; +import java.util.UUID; + +public class PacketLoginOutSuccess implements Packet { + + private GameProfile a; + + public PacketLoginOutSuccess() {} + + public PacketLoginOutSuccess(GameProfile gameprofile) { + this.a = gameprofile; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + String s = packetdataserializer.c(36); + String s1 = packetdataserializer.c(16); + UUID uuid = UUID.fromString(s); + + this.a = new GameProfile(uuid, s1); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + UUID uuid = this.a.getId(); + + packetdataserializer.a(uuid == null ? "" : uuid.toString()); + packetdataserializer.a(this.a.getName()); + } + + public void a(PacketLoginOutListener packetloginoutlistener) { + packetloginoutlistener.a(this); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInAbilities.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInAbilities.java new file mode 100644 index 0000000..aac5a0c --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInAbilities.java @@ -0,0 +1,103 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayInAbilities implements Packet { + + private boolean a; + private boolean b; + private boolean c; + private boolean d; + private float e; + private float f; + + public PacketPlayInAbilities() {} + + public PacketPlayInAbilities(PlayerAbilities playerabilities) { + this.a(playerabilities.isInvulnerable); + this.b(playerabilities.isFlying); + this.c(playerabilities.canFly); + this.d(playerabilities.canInstantlyBuild); + this.a(playerabilities.a()); + this.b(playerabilities.b()); + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + byte b0 = packetdataserializer.readByte(); + + this.a((b0 & 1) > 0); + this.b((b0 & 2) > 0); + this.c((b0 & 4) > 0); + this.d((b0 & 8) > 0); + this.a(packetdataserializer.readFloat()); + this.b(packetdataserializer.readFloat()); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + byte b0 = 0; + + if (this.a()) { + b0 = (byte) (b0 | 1); + } + + if (this.isFlying()) { + b0 = (byte) (b0 | 2); + } + + if (this.c()) { + b0 = (byte) (b0 | 4); + } + + if (this.d()) { + b0 = (byte) (b0 | 8); + } + + packetdataserializer.writeByte(b0); + packetdataserializer.writeFloat(this.e); + packetdataserializer.writeFloat(this.f); + } + + public void a(PacketListenerPlayIn packetlistenerplayin) { + packetlistenerplayin.a(this); + } + + public boolean a() { + return this.a; + } + + public void a(boolean flag) { + this.a = flag; + } + + public boolean isFlying() { + return this.b; + } + + public void b(boolean flag) { + this.b = flag; + } + + public boolean c() { + return this.c; + } + + public void c(boolean flag) { + this.c = flag; + } + + public boolean d() { + return this.d; + } + + public void d(boolean flag) { + this.d = flag; + } + + public void a(float f) { + this.e = f; + } + + public void b(float f) { + this.f = f; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInArmAnimation.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInArmAnimation.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInArmAnimation.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInArmAnimation.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInBlockDig.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInBlockDig.java new file mode 100644 index 0000000..5b5e7a7 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInBlockDig.java @@ -0,0 +1,47 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayInBlockDig implements Packet { + + private BlockPosition a; + private EnumDirection b; + private PacketPlayInBlockDig.EnumPlayerDigType c; + + public PacketPlayInBlockDig() {} + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.c = (PacketPlayInBlockDig.EnumPlayerDigType) packetdataserializer.a(PacketPlayInBlockDig.EnumPlayerDigType.class); + this.a = packetdataserializer.c(); + this.b = EnumDirection.fromType1(packetdataserializer.readUnsignedByte()); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.a((Enum) this.c); + packetdataserializer.a(this.a); + packetdataserializer.writeByte(this.b.a()); + } + + public void a(PacketListenerPlayIn packetlistenerplayin) { + packetlistenerplayin.a(this); + } + + public BlockPosition a() { + return this.a; + } + + public EnumDirection b() { + return this.b; + } + + public PacketPlayInBlockDig.EnumPlayerDigType c() { + return this.c; + } + + public static enum EnumPlayerDigType { + + START_DESTROY_BLOCK, ABORT_DESTROY_BLOCK, STOP_DESTROY_BLOCK, DROP_ALL_ITEMS, DROP_ITEM, RELEASE_USE_ITEM; + + private EnumPlayerDigType() {} + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInBlockPlace.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInBlockPlace.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInBlockPlace.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInBlockPlace.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInChat.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInChat.java similarity index 89% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInChat.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInChat.java index b8ca315..884ac15 100644 --- a/TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInChat.java +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInChat.java @@ -19,7 +19,7 @@ public class PacketPlayInChat implements Packet { } public void a(PacketDataSerializer packetdataserializer) throws IOException { - this.a = PaperSpigotConfig.kickChatMessageLength ? packetdataserializer.c(100) : packetdataserializer.readCappedString(100); // KigPaper + this.a = packetdataserializer.c(100); // KigPaper } public void b(PacketDataSerializer packetdataserializer) throws IOException { diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInClientCommand.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInClientCommand.java new file mode 100644 index 0000000..eea677c --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInClientCommand.java @@ -0,0 +1,37 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayInClientCommand implements Packet { + + private PacketPlayInClientCommand.EnumClientCommand a; + + public PacketPlayInClientCommand() {} + + public PacketPlayInClientCommand(PacketPlayInClientCommand.EnumClientCommand packetplayinclientcommand_enumclientcommand) { + this.a = packetplayinclientcommand_enumclientcommand; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = (PacketPlayInClientCommand.EnumClientCommand) packetdataserializer.a(PacketPlayInClientCommand.EnumClientCommand.class); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.a((Enum) this.a); + } + + public void a(PacketListenerPlayIn packetlistenerplayin) { + packetlistenerplayin.a(this); + } + + public PacketPlayInClientCommand.EnumClientCommand a() { + return this.a; + } + + public static enum EnumClientCommand { + + PERFORM_RESPAWN, REQUEST_STATS, OPEN_INVENTORY_ACHIEVEMENT; + + private EnumClientCommand() {} + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInCloseWindow.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInCloseWindow.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInCloseWindow.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInCloseWindow.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInCustomPayload.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInCustomPayload.java new file mode 100644 index 0000000..d5d932c --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInCustomPayload.java @@ -0,0 +1,40 @@ +package net.minecraft.server; + +import io.netty.buffer.ByteBuf; +import java.io.IOException; + +public class PacketPlayInCustomPayload implements Packet { + + private String a; + private PacketDataSerializer b; + + public PacketPlayInCustomPayload() {} + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.c(20); + int i = packetdataserializer.readableBytes(); + + if (i >= 0 && i <= 32767) { + this.b = new PacketDataSerializer(packetdataserializer.readBytes(i)); + } else { + throw new IOException("Payload may not be larger than 32767 bytes"); + } + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.a(this.a); + packetdataserializer.writeBytes((ByteBuf) this.b); + } + + public void a(PacketListenerPlayIn packetlistenerplayin) { + packetlistenerplayin.a(this); + } + + public String a() { + return this.a; + } + + public PacketDataSerializer b() { + return this.b; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInEnchantItem.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInEnchantItem.java new file mode 100644 index 0000000..4aa39e5 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInEnchantItem.java @@ -0,0 +1,33 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayInEnchantItem implements Packet { + + private int a; + private int b; + + public PacketPlayInEnchantItem() {} + + public void a(PacketListenerPlayIn packetlistenerplayin) { + packetlistenerplayin.a(this); + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.readByte(); + this.b = packetdataserializer.readByte(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.writeByte(this.a); + packetdataserializer.writeByte(this.b); + } + + public int a() { + return this.a; + } + + public int b() { + return this.b; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInEntityAction.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInEntityAction.java new file mode 100644 index 0000000..d98ef82 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInEntityAction.java @@ -0,0 +1,43 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayInEntityAction implements Packet { + + private int a; + private PacketPlayInEntityAction.EnumPlayerAction animation; + private int c; + + public PacketPlayInEntityAction() {} + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.e(); + this.animation = (PacketPlayInEntityAction.EnumPlayerAction) packetdataserializer.a(PacketPlayInEntityAction.EnumPlayerAction.class); + this.c = packetdataserializer.e(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.b(this.a); + packetdataserializer.a((Enum) this.animation); + packetdataserializer.b(this.c); + } + + public void a(PacketListenerPlayIn packetlistenerplayin) { + packetlistenerplayin.a(this); + } + + public PacketPlayInEntityAction.EnumPlayerAction b() { + return this.animation; + } + + public int c() { + return this.c; + } + + public static enum EnumPlayerAction { + + START_SNEAKING, STOP_SNEAKING, STOP_SLEEPING, START_SPRINTING, STOP_SPRINTING, RIDING_JUMP, OPEN_INVENTORY; + + private EnumPlayerAction() {} + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInFlying.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInFlying.java new file mode 100644 index 0000000..91b7ded --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInFlying.java @@ -0,0 +1,131 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayInFlying implements Packet { + + protected double x; + protected double y; + protected double z; + protected float yaw; + protected float pitch; + protected boolean f; + protected boolean hasPos; + protected boolean hasLook; + + public PacketPlayInFlying() {} + + public void a(PacketListenerPlayIn packetlistenerplayin) { + packetlistenerplayin.a(this); + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.f = packetdataserializer.readUnsignedByte() != 0; + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.writeByte(this.f ? 1 : 0); + } + + public double a() { + return this.x; + } + + public double b() { + return this.y; + } + + public double c() { + return this.z; + } + + public float d() { + return this.yaw; + } + + public float e() { + return this.pitch; + } + + public boolean f() { + return this.f; + } + + public boolean g() { + return this.hasPos; + } + + public boolean h() { + return this.hasLook; + } + + public void a(boolean flag) { + this.hasPos = flag; + } + + public static class PacketPlayInLook extends PacketPlayInFlying { + + public PacketPlayInLook() { + this.hasLook = true; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.yaw = packetdataserializer.readFloat(); + this.pitch = packetdataserializer.readFloat(); + super.a(packetdataserializer); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.writeFloat(this.yaw); + packetdataserializer.writeFloat(this.pitch); + super.b(packetdataserializer); + } + } + + public static class PacketPlayInPosition extends PacketPlayInFlying { + + public PacketPlayInPosition() { + this.hasPos = true; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.x = packetdataserializer.readDouble(); + this.y = packetdataserializer.readDouble(); + this.z = packetdataserializer.readDouble(); + super.a(packetdataserializer); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.writeDouble(this.x); + packetdataserializer.writeDouble(this.y); + packetdataserializer.writeDouble(this.z); + super.b(packetdataserializer); + } + } + + public static class PacketPlayInPositionLook extends PacketPlayInFlying { + + public PacketPlayInPositionLook() { + this.hasPos = true; + this.hasLook = true; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.x = packetdataserializer.readDouble(); + this.y = packetdataserializer.readDouble(); + this.z = packetdataserializer.readDouble(); + this.yaw = packetdataserializer.readFloat(); + this.pitch = packetdataserializer.readFloat(); + super.a(packetdataserializer); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.writeDouble(this.x); + packetdataserializer.writeDouble(this.y); + packetdataserializer.writeDouble(this.z); + packetdataserializer.writeFloat(this.yaw); + packetdataserializer.writeFloat(this.pitch); + super.b(packetdataserializer); + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInHeldItemSlot.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInHeldItemSlot.java new file mode 100644 index 0000000..7f93d77 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInHeldItemSlot.java @@ -0,0 +1,26 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayInHeldItemSlot implements Packet { + + private int itemInHandIndex; + + public PacketPlayInHeldItemSlot() {} + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.itemInHandIndex = packetdataserializer.readShort(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.writeShort(this.itemInHandIndex); + } + + public void a(PacketListenerPlayIn packetlistenerplayin) { + packetlistenerplayin.a(this); + } + + public int a() { + return this.itemInHandIndex; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInKeepAlive.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInKeepAlive.java new file mode 100644 index 0000000..fe5a6cf --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInKeepAlive.java @@ -0,0 +1,26 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayInKeepAlive implements Packet { + + private int a; + + public PacketPlayInKeepAlive() {} + + public void a(PacketListenerPlayIn packetlistenerplayin) { + packetlistenerplayin.a(this); + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.e(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.b(this.a); + } + + public int a() { + return this.a; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInResourcePackStatus.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInResourcePackStatus.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInResourcePackStatus.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInResourcePackStatus.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInSetCreativeSlot.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInSetCreativeSlot.java new file mode 100644 index 0000000..e176c9c --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInSetCreativeSlot.java @@ -0,0 +1,33 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayInSetCreativeSlot implements Packet { + + private int slot; + private ItemStack b; + + public PacketPlayInSetCreativeSlot() {} + + public void a(PacketListenerPlayIn packetlistenerplayin) { + packetlistenerplayin.a(this); + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.slot = packetdataserializer.readShort(); + this.b = packetdataserializer.i(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.writeShort(this.slot); + packetdataserializer.a(this.b); + } + + public int a() { + return this.slot; + } + + public ItemStack getItemStack() { + return this.b; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInSettings.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInSettings.java new file mode 100644 index 0000000..6bf4c3d --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInSettings.java @@ -0,0 +1,50 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayInSettings implements Packet { + + private String a; + private int b; + private EntityHuman.EnumChatVisibility c; + private boolean d; + private int e; + + public PacketPlayInSettings() {} + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.c(7); + this.b = packetdataserializer.readByte(); + this.c = EntityHuman.EnumChatVisibility.a(packetdataserializer.readByte()); + this.d = packetdataserializer.readBoolean(); + this.e = packetdataserializer.readUnsignedByte(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.a(this.a); + packetdataserializer.writeByte(this.b); + packetdataserializer.writeByte(this.c.a()); + packetdataserializer.writeBoolean(this.d); + packetdataserializer.writeByte(this.e); + } + + public void a(PacketListenerPlayIn packetlistenerplayin) { + packetlistenerplayin.a(this); + } + + public String a() { + return this.a; + } + + public EntityHuman.EnumChatVisibility c() { + return this.c; + } + + public boolean d() { + return this.d; + } + + public int e() { + return this.e; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInSpectate.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInSpectate.java new file mode 100644 index 0000000..56a4208 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInSpectate.java @@ -0,0 +1,31 @@ +package net.minecraft.server; + +import java.io.IOException; +import java.util.UUID; + +public class PacketPlayInSpectate implements Packet { + + private UUID a; + + public PacketPlayInSpectate() {} + + public PacketPlayInSpectate(UUID uuid) { + this.a = uuid; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.g(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.a(this.a); + } + + public void a(PacketListenerPlayIn packetlistenerplayin) { + packetlistenerplayin.a(this); + } + + public Entity a(WorldServer worldserver) { + return worldserver.getEntity(this.a); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInSteerVehicle.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInSteerVehicle.java new file mode 100644 index 0000000..638e43c --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInSteerVehicle.java @@ -0,0 +1,58 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayInSteerVehicle implements Packet { + + private float a; + private float b; + private boolean c; + private boolean d; + + public PacketPlayInSteerVehicle() {} + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.readFloat(); + this.b = packetdataserializer.readFloat(); + byte b0 = packetdataserializer.readByte(); + + this.c = (b0 & 1) > 0; + this.d = (b0 & 2) > 0; + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.writeFloat(this.a); + packetdataserializer.writeFloat(this.b); + byte b0 = 0; + + if (this.c) { + b0 = (byte) (b0 | 1); + } + + if (this.d) { + b0 = (byte) (b0 | 2); + } + + packetdataserializer.writeByte(b0); + } + + public void a(PacketListenerPlayIn packetlistenerplayin) { + packetlistenerplayin.a(this); + } + + public float a() { + return this.a; + } + + public float b() { + return this.b; + } + + public boolean c() { + return this.c; + } + + public boolean d() { + return this.d; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInTabComplete.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInTabComplete.java new file mode 100644 index 0000000..0d811e7 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInTabComplete.java @@ -0,0 +1,54 @@ +package net.minecraft.server; + +import java.io.IOException; +import org.apache.commons.lang3.StringUtils; + +public class PacketPlayInTabComplete implements Packet { + + private String a; + private BlockPosition b; + + public PacketPlayInTabComplete() {} + + public PacketPlayInTabComplete(String s) { + this(s, (BlockPosition) null); + } + + public PacketPlayInTabComplete(String s, BlockPosition blockposition) { + this.a = s; + this.b = blockposition; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.c(32767); + boolean flag = packetdataserializer.readBoolean(); + + if (flag) { + this.b = packetdataserializer.c(); + } + + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.a(StringUtils.substring(this.a, 0, 32767)); + boolean flag = this.b != null; + + packetdataserializer.writeBoolean(flag); + if (flag) { + packetdataserializer.a(this.b); + } + + } + + public void a(PacketListenerPlayIn packetlistenerplayin) { + packetlistenerplayin.a(this); + } + + public String a() { + return this.a; + } + + public BlockPosition b() { + return this.b; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInTransaction.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInTransaction.java new file mode 100644 index 0000000..2d3c885 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInTransaction.java @@ -0,0 +1,36 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayInTransaction implements Packet { + + private int a; + private short b; + private boolean c; + + public PacketPlayInTransaction() {} + + public void a(PacketListenerPlayIn packetlistenerplayin) { + packetlistenerplayin.a(this); + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.readByte(); + this.b = packetdataserializer.readShort(); + this.c = packetdataserializer.readByte() != 0; + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.writeByte(this.a); + packetdataserializer.writeShort(this.b); + packetdataserializer.writeByte(this.c ? 1 : 0); + } + + public int a() { + return this.a; + } + + public short b() { + return this.b; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInUpdateSign.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInUpdateSign.java new file mode 100644 index 0000000..703e47c --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInUpdateSign.java @@ -0,0 +1,48 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayInUpdateSign implements Packet { + + private BlockPosition a; + private IChatBaseComponent[] b; + + public PacketPlayInUpdateSign() {} + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.c(); + this.b = new IChatBaseComponent[4]; + + for (int i = 0; i < 4; ++i) { + String s = packetdataserializer.c(384); + IChatBaseComponent ichatbasecomponent = IChatBaseComponent.ChatSerializer.a(s); + + this.b[i] = ichatbasecomponent; + } + + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.a(this.a); + + for (int i = 0; i < 4; ++i) { + IChatBaseComponent ichatbasecomponent = this.b[i]; + String s = IChatBaseComponent.ChatSerializer.a(ichatbasecomponent); + + packetdataserializer.a(s); + } + + } + + public void a(PacketListenerPlayIn packetlistenerplayin) { + packetlistenerplayin.a(this); + } + + public BlockPosition a() { + return this.a; + } + + public IChatBaseComponent[] b() { + return this.b; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInUseEntity.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInUseEntity.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInUseEntity.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInUseEntity.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInWindowClick.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInWindowClick.java new file mode 100644 index 0000000..a9a2a79 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayInWindowClick.java @@ -0,0 +1,61 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayInWindowClick implements Packet { + + private int a; + private int slot; + private int button; + private short d; + private ItemStack item; + private int shift; + + public PacketPlayInWindowClick() {} + + public void a(PacketListenerPlayIn packetlistenerplayin) { + packetlistenerplayin.a(this); + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.readByte(); + this.slot = packetdataserializer.readShort(); + this.button = packetdataserializer.readByte(); + this.d = packetdataserializer.readShort(); + this.shift = packetdataserializer.readByte(); + this.item = packetdataserializer.i(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.writeByte(this.a); + packetdataserializer.writeShort(this.slot); + packetdataserializer.writeByte(this.button); + packetdataserializer.writeShort(this.d); + packetdataserializer.writeByte(this.shift); + packetdataserializer.a(this.item); + } + + public int a() { + return this.a; + } + + public int b() { + return this.slot; + } + + public int c() { + return this.button; + } + + public short d() { + return this.d; + } + + public ItemStack e() { + return this.item; + } + + public int f() { + return this.shift; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutAbilities.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutAbilities.java new file mode 100644 index 0000000..5fb9e7e --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutAbilities.java @@ -0,0 +1,103 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutAbilities implements Packet { + + private boolean a; + private boolean b; + private boolean c; + private boolean d; + private float e; + private float f; + + public PacketPlayOutAbilities() {} + + public PacketPlayOutAbilities(PlayerAbilities playerabilities) { + this.a(playerabilities.isInvulnerable); + this.b(playerabilities.isFlying); + this.c(playerabilities.canFly); + this.d(playerabilities.canInstantlyBuild); + this.a(playerabilities.a()); + this.b(playerabilities.b()); + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + byte b0 = packetdataserializer.readByte(); + + this.a((b0 & 1) > 0); + this.b((b0 & 2) > 0); + this.c((b0 & 4) > 0); + this.d((b0 & 8) > 0); + this.a(packetdataserializer.readFloat()); + this.b(packetdataserializer.readFloat()); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + byte b0 = 0; + + if (this.a()) { + b0 = (byte) (b0 | 1); + } + + if (this.b()) { + b0 = (byte) (b0 | 2); + } + + if (this.c()) { + b0 = (byte) (b0 | 4); + } + + if (this.d()) { + b0 = (byte) (b0 | 8); + } + + packetdataserializer.writeByte(b0); + packetdataserializer.writeFloat(this.e); + packetdataserializer.writeFloat(this.f); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } + + public boolean a() { + return this.a; + } + + public void a(boolean flag) { + this.a = flag; + } + + public boolean b() { + return this.b; + } + + public void b(boolean flag) { + this.b = flag; + } + + public boolean c() { + return this.c; + } + + public void c(boolean flag) { + this.c = flag; + } + + public boolean d() { + return this.d; + } + + public void d(boolean flag) { + this.d = flag; + } + + public void a(float f) { + this.e = f; + } + + public void b(float f) { + this.f = f; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutAnimation.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutAnimation.java new file mode 100644 index 0000000..df44492 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutAnimation.java @@ -0,0 +1,30 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutAnimation implements Packet { + + private int a; + private int b; + + public PacketPlayOutAnimation() {} + + public PacketPlayOutAnimation(Entity entity, int i) { + this.a = entity.getId(); + this.b = i; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.e(); + this.b = packetdataserializer.readUnsignedByte(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.b(this.a); + packetdataserializer.writeByte(this.b); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutAttachEntity.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutAttachEntity.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutAttachEntity.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutAttachEntity.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutBed.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutBed.java new file mode 100644 index 0000000..cc21d80 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutBed.java @@ -0,0 +1,30 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutBed implements Packet { + + private int a; + private BlockPosition b; + + public PacketPlayOutBed() {} + + public PacketPlayOutBed(EntityHuman entityhuman, BlockPosition blockposition) { + this.a = entityhuman.getId(); + this.b = blockposition; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.e(); + this.b = packetdataserializer.c(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.b(this.a); + packetdataserializer.a(this.b); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutBlockAction.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutBlockAction.java new file mode 100644 index 0000000..c469208 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutBlockAction.java @@ -0,0 +1,38 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutBlockAction implements Packet { + + private BlockPosition a; + private int b; + private int c; + private Block d; + + public PacketPlayOutBlockAction() {} + + public PacketPlayOutBlockAction(BlockPosition blockposition, Block block, int i, int j) { + this.a = blockposition; + this.b = i; + this.c = j; + this.d = block; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.c(); + this.b = packetdataserializer.readUnsignedByte(); + this.c = packetdataserializer.readUnsignedByte(); + this.d = Block.getById(packetdataserializer.e() & 4095); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.a(this.a); + packetdataserializer.writeByte(this.b); + packetdataserializer.writeByte(this.c); + packetdataserializer.b(Block.getId(this.d) & 4095); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutBlockBreakAnimation.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutBlockBreakAnimation.java new file mode 100644 index 0000000..678e590 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutBlockBreakAnimation.java @@ -0,0 +1,34 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutBlockBreakAnimation implements Packet { + + private int a; + private BlockPosition b; + private int c; + + public PacketPlayOutBlockBreakAnimation() {} + + public PacketPlayOutBlockBreakAnimation(int i, BlockPosition blockposition, int j) { + this.a = i; + this.b = blockposition; + this.c = j; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.e(); + this.b = packetdataserializer.c(); + this.c = packetdataserializer.readUnsignedByte(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.b(this.a); + packetdataserializer.a(this.b); + packetdataserializer.writeByte(this.c); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutBlockChange.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutBlockChange.java new file mode 100644 index 0000000..00d7d30 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutBlockChange.java @@ -0,0 +1,30 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutBlockChange implements Packet { + + private BlockPosition a; + public IBlockData block; + + public PacketPlayOutBlockChange() {} + + public PacketPlayOutBlockChange(World world, BlockPosition blockposition) { + this.a = blockposition; + this.block = world.getType(blockposition); + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.c(); + this.block = (IBlockData) Block.d.a(packetdataserializer.e()); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.a(this.a); + packetdataserializer.b(Block.d.b(this.block)); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutCamera.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutCamera.java new file mode 100644 index 0000000..80d4d6d --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutCamera.java @@ -0,0 +1,26 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutCamera implements Packet { + + public int a; + + public PacketPlayOutCamera() {} + + public PacketPlayOutCamera(Entity entity) { + this.a = entity.getId(); + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.e(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.b(this.a); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutChat.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutChat.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutChat.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutChat.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutCloseWindow.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutCloseWindow.java new file mode 100644 index 0000000..cde2639 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutCloseWindow.java @@ -0,0 +1,26 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutCloseWindow implements Packet { + + private int a; + + public PacketPlayOutCloseWindow() {} + + public PacketPlayOutCloseWindow(int i) { + this.a = i; + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.readUnsignedByte(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.writeByte(this.a); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutCollect.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutCollect.java new file mode 100644 index 0000000..8063f48 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutCollect.java @@ -0,0 +1,30 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutCollect implements Packet { + + private int a; + private int b; + + public PacketPlayOutCollect() {} + + public PacketPlayOutCollect(int i, int j) { + this.a = i; + this.b = j; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.e(); + this.b = packetdataserializer.e(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.b(this.a); + packetdataserializer.b(this.b); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutCombatEvent.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutCombatEvent.java new file mode 100644 index 0000000..a540ac3 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutCombatEvent.java @@ -0,0 +1,89 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutCombatEvent implements Packet { + + public PacketPlayOutCombatEvent.EnumCombatEventType a; + public int b; + public int c; + public int d; + public String e; + + public PacketPlayOutCombatEvent() {} + + public PacketPlayOutCombatEvent(CombatTracker combattracker, PacketPlayOutCombatEvent.EnumCombatEventType packetplayoutcombatevent_enumcombateventtype) { + this.a = packetplayoutcombatevent_enumcombateventtype; + EntityLiving entityliving = combattracker.c(); + + switch (PacketPlayOutCombatEvent.SyntheticClass_1.a[packetplayoutcombatevent_enumcombateventtype.ordinal()]) { + case 1: + this.d = combattracker.f(); + this.c = entityliving == null ? -1 : entityliving.getId(); + break; + + case 2: + this.b = combattracker.h().getId(); + this.c = entityliving == null ? -1 : entityliving.getId(); + this.e = combattracker.b().c(); + } + + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = (PacketPlayOutCombatEvent.EnumCombatEventType) packetdataserializer.a(PacketPlayOutCombatEvent.EnumCombatEventType.class); + if (this.a == PacketPlayOutCombatEvent.EnumCombatEventType.END_COMBAT) { + this.d = packetdataserializer.e(); + this.c = packetdataserializer.readInt(); + } else if (this.a == PacketPlayOutCombatEvent.EnumCombatEventType.ENTITY_DIED) { + this.b = packetdataserializer.e(); + this.c = packetdataserializer.readInt(); + this.e = packetdataserializer.c(32767); + } + + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.a((Enum) this.a); + if (this.a == PacketPlayOutCombatEvent.EnumCombatEventType.END_COMBAT) { + packetdataserializer.b(this.d); + packetdataserializer.writeInt(this.c); + } else if (this.a == PacketPlayOutCombatEvent.EnumCombatEventType.ENTITY_DIED) { + packetdataserializer.b(this.b); + packetdataserializer.writeInt(this.c); + packetdataserializer.a(this.e); + } + + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } + + static class SyntheticClass_1 { + + static final int[] a = new int[PacketPlayOutCombatEvent.EnumCombatEventType.values().length]; + + static { + try { + PacketPlayOutCombatEvent.SyntheticClass_1.a[PacketPlayOutCombatEvent.EnumCombatEventType.END_COMBAT.ordinal()] = 1; + } catch (NoSuchFieldError nosuchfielderror) { + ; + } + + try { + PacketPlayOutCombatEvent.SyntheticClass_1.a[PacketPlayOutCombatEvent.EnumCombatEventType.ENTITY_DIED.ordinal()] = 2; + } catch (NoSuchFieldError nosuchfielderror1) { + ; + } + + } + } + + public static enum EnumCombatEventType { + + ENTER_COMBAT, END_COMBAT, ENTITY_DIED; + + private EnumCombatEventType() {} + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutCustomPayload.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutCustomPayload.java new file mode 100644 index 0000000..35b2a86 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutCustomPayload.java @@ -0,0 +1,40 @@ +package net.minecraft.server; + +import io.netty.buffer.ByteBuf; +import java.io.IOException; + +public class PacketPlayOutCustomPayload implements Packet { + + private String a; + private PacketDataSerializer b; + + public PacketPlayOutCustomPayload() {} + + public PacketPlayOutCustomPayload(String s, PacketDataSerializer packetdataserializer) { + this.a = s; + this.b = packetdataserializer; + if (packetdataserializer.writerIndex() > 1048576) { + throw new IllegalArgumentException("Payload may not be larger than 1048576 bytes"); + } + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.c(20); + int i = packetdataserializer.readableBytes(); + + if (i >= 0 && i <= 1048576) { + this.b = new PacketDataSerializer(packetdataserializer.readBytes(i)); + } else { + throw new IOException("Payload may not be larger than 1048576 bytes"); + } + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.a(this.a); + packetdataserializer.writeBytes((ByteBuf) this.b); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutEntity.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutEntity.java new file mode 100644 index 0000000..6d0a90d --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutEntity.java @@ -0,0 +1,133 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutEntity implements Packet { + + protected int a; + protected byte b; + protected byte c; + protected byte d; + protected byte e; + protected byte f; + protected boolean g; + protected boolean h; + + public PacketPlayOutEntity() {} + + public PacketPlayOutEntity(int i) { + this.a = i; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.e(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.b(this.a); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } + + public String toString() { + return "Entity_" + super.toString(); + } + + public static class PacketPlayOutEntityLook extends PacketPlayOutEntity { + + public PacketPlayOutEntityLook() { + this.h = true; + } + + public PacketPlayOutEntityLook(int i, byte b0, byte b1, boolean flag) { + super(i); + this.e = b0; + this.f = b1; + this.h = true; + this.g = flag; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + super.a(packetdataserializer); + this.e = packetdataserializer.readByte(); + this.f = packetdataserializer.readByte(); + this.g = packetdataserializer.readBoolean(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + super.b(packetdataserializer); + packetdataserializer.writeByte(this.e); + packetdataserializer.writeByte(this.f); + packetdataserializer.writeBoolean(this.g); + } + } + + public static class PacketPlayOutRelEntityMove extends PacketPlayOutEntity { + + public PacketPlayOutRelEntityMove() {} + + public PacketPlayOutRelEntityMove(int i, byte b0, byte b1, byte b2, boolean flag) { + super(i); + this.b = b0; + this.c = b1; + this.d = b2; + this.g = flag; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + super.a(packetdataserializer); + this.b = packetdataserializer.readByte(); + this.c = packetdataserializer.readByte(); + this.d = packetdataserializer.readByte(); + this.g = packetdataserializer.readBoolean(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + super.b(packetdataserializer); + packetdataserializer.writeByte(this.b); + packetdataserializer.writeByte(this.c); + packetdataserializer.writeByte(this.d); + packetdataserializer.writeBoolean(this.g); + } + } + + public static class PacketPlayOutRelEntityMoveLook extends PacketPlayOutEntity { + + public PacketPlayOutRelEntityMoveLook() { + this.h = true; + } + + public PacketPlayOutRelEntityMoveLook(int i, byte b0, byte b1, byte b2, byte b3, byte b4, boolean flag) { + super(i); + this.b = b0; + this.c = b1; + this.d = b2; + this.e = b3; + this.f = b4; + this.g = flag; + this.h = true; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + super.a(packetdataserializer); + this.b = packetdataserializer.readByte(); + this.c = packetdataserializer.readByte(); + this.d = packetdataserializer.readByte(); + this.e = packetdataserializer.readByte(); + this.f = packetdataserializer.readByte(); + this.g = packetdataserializer.readBoolean(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + super.b(packetdataserializer); + packetdataserializer.writeByte(this.b); + packetdataserializer.writeByte(this.c); + packetdataserializer.writeByte(this.d); + packetdataserializer.writeByte(this.e); + packetdataserializer.writeByte(this.f); + packetdataserializer.writeBoolean(this.g); + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutEntityDestroy.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutEntityDestroy.java new file mode 100644 index 0000000..f37a855 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutEntityDestroy.java @@ -0,0 +1,36 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutEntityDestroy implements Packet { + + private int[] a; + + public PacketPlayOutEntityDestroy() {} + + public PacketPlayOutEntityDestroy(int... aint) { + this.a = aint; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = new int[packetdataserializer.e()]; + + for (int i = 0; i < this.a.length; ++i) { + this.a[i] = packetdataserializer.e(); + } + + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.b(this.a.length); + + for (int i = 0; i < this.a.length; ++i) { + packetdataserializer.b(this.a[i]); + } + + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutEntityEffect.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutEntityEffect.java new file mode 100644 index 0000000..74d1bda --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutEntityEffect.java @@ -0,0 +1,47 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutEntityEffect implements Packet { + + private int a; + private byte b; + private byte c; + private int d; + private byte e; + + public PacketPlayOutEntityEffect() {} + + public PacketPlayOutEntityEffect(int i, MobEffect mobeffect) { + this.a = i; + this.b = (byte) (mobeffect.getEffectId() & 255); + this.c = (byte) (mobeffect.getAmplifier() & 255); + if (mobeffect.getDuration() > 32767) { + this.d = 32767; + } else { + this.d = mobeffect.getDuration(); + } + + this.e = (byte) (mobeffect.isShowParticles() ? 1 : 0); + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.e(); + this.b = packetdataserializer.readByte(); + this.c = packetdataserializer.readByte(); + this.d = packetdataserializer.e(); + this.e = packetdataserializer.readByte(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.b(this.a); + packetdataserializer.writeByte(this.b); + packetdataserializer.writeByte(this.c); + packetdataserializer.b(this.d); + packetdataserializer.writeByte(this.e); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutEntityEquipment.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutEntityEquipment.java new file mode 100644 index 0000000..b6124aa --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutEntityEquipment.java @@ -0,0 +1,34 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutEntityEquipment implements Packet { + + private int a; + private int b; + private ItemStack c; + + public PacketPlayOutEntityEquipment() {} + + public PacketPlayOutEntityEquipment(int i, int j, ItemStack itemstack) { + this.a = i; + this.b = j; + this.c = itemstack == null ? null : itemstack.cloneItemStack(); + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.e(); + this.b = packetdataserializer.readShort(); + this.c = packetdataserializer.i(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.b(this.a); + packetdataserializer.writeShort(this.b); + packetdataserializer.a(this.c); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutEntityHeadRotation.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutEntityHeadRotation.java new file mode 100644 index 0000000..b8daa72 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutEntityHeadRotation.java @@ -0,0 +1,30 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutEntityHeadRotation implements Packet { + + private int a; + private byte b; + + public PacketPlayOutEntityHeadRotation() {} + + public PacketPlayOutEntityHeadRotation(Entity entity, byte b0) { + this.a = entity.getId(); + this.b = b0; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.e(); + this.b = packetdataserializer.readByte(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.b(this.a); + packetdataserializer.writeByte(this.b); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutEntityMetadata.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutEntityMetadata.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutEntityMetadata.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutEntityMetadata.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutEntityStatus.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutEntityStatus.java new file mode 100644 index 0000000..77ac1c7 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutEntityStatus.java @@ -0,0 +1,30 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutEntityStatus implements Packet { + + private int a; + private byte b; + + public PacketPlayOutEntityStatus() {} + + public PacketPlayOutEntityStatus(Entity entity, byte b0) { + this.a = entity.getId(); + this.b = b0; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.readInt(); + this.b = packetdataserializer.readByte(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.writeInt(this.a); + packetdataserializer.writeByte(this.b); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutEntityTeleport.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutEntityTeleport.java new file mode 100644 index 0000000..ec9a077 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutEntityTeleport.java @@ -0,0 +1,60 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutEntityTeleport implements Packet { + + private int a; + private int b; + private int c; + private int d; + private byte e; + private byte f; + private boolean g; + + public PacketPlayOutEntityTeleport() {} + + public PacketPlayOutEntityTeleport(Entity entity) { + this.a = entity.getId(); + this.b = MathHelper.floor(entity.locX * 32.0D); + this.c = MathHelper.floor(entity.locY * 32.0D); + this.d = MathHelper.floor(entity.locZ * 32.0D); + this.e = (byte) ((int) (entity.yaw * 256.0F / 360.0F)); + this.f = (byte) ((int) (entity.pitch * 256.0F / 360.0F)); + this.g = entity.onGround; + } + + public PacketPlayOutEntityTeleport(int i, int j, int k, int l, byte b0, byte b1, boolean flag) { + this.a = i; + this.b = j; + this.c = k; + this.d = l; + this.e = b0; + this.f = b1; + this.g = flag; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.e(); + this.b = packetdataserializer.readInt(); + this.c = packetdataserializer.readInt(); + this.d = packetdataserializer.readInt(); + this.e = packetdataserializer.readByte(); + this.f = packetdataserializer.readByte(); + this.g = packetdataserializer.readBoolean(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.b(this.a); + packetdataserializer.writeInt(this.b); + packetdataserializer.writeInt(this.c); + packetdataserializer.writeInt(this.d); + packetdataserializer.writeByte(this.e); + packetdataserializer.writeByte(this.f); + packetdataserializer.writeBoolean(this.g); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutEntityVelocity.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutEntityVelocity.java new file mode 100644 index 0000000..d8c0733 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutEntityVelocity.java @@ -0,0 +1,68 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutEntityVelocity implements Packet { + + private int a; + private int b; + private int c; + private int d; + + public PacketPlayOutEntityVelocity() {} + + public PacketPlayOutEntityVelocity(Entity entity) { + this(entity.getId(), entity.motX, entity.motY, entity.motZ); + } + + public PacketPlayOutEntityVelocity(int i, double d0, double d1, double d2) { + this.a = i; + double d3 = 3.9D; + + if (d0 < -d3) { + d0 = -d3; + } + + if (d1 < -d3) { + d1 = -d3; + } + + if (d2 < -d3) { + d2 = -d3; + } + + if (d0 > d3) { + d0 = d3; + } + + if (d1 > d3) { + d1 = d3; + } + + if (d2 > d3) { + d2 = d3; + } + + this.b = (int) (d0 * 8000.0D); + this.c = (int) (d1 * 8000.0D); + this.d = (int) (d2 * 8000.0D); + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.e(); + this.b = packetdataserializer.readShort(); + this.c = packetdataserializer.readShort(); + this.d = packetdataserializer.readShort(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.b(this.a); + packetdataserializer.writeShort(this.b); + packetdataserializer.writeShort(this.c); + packetdataserializer.writeShort(this.d); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutExperience.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutExperience.java new file mode 100644 index 0000000..2e78c10 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutExperience.java @@ -0,0 +1,34 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutExperience implements Packet { + + private float a; + private int b; + private int c; + + public PacketPlayOutExperience() {} + + public PacketPlayOutExperience(float f, int i, int j) { + this.a = f; + this.b = i; + this.c = j; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.readFloat(); + this.c = packetdataserializer.e(); + this.b = packetdataserializer.e(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.writeFloat(this.a); + packetdataserializer.b(this.c); + packetdataserializer.b(this.b); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutExplosion.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutExplosion.java new file mode 100644 index 0000000..98ee289 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutExplosion.java @@ -0,0 +1,90 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import java.io.IOException; +import java.util.Iterator; +import java.util.List; + +public class PacketPlayOutExplosion implements Packet { + + private double a; + private double b; + private double c; + private float d; + private List e; + private float f; + private float g; + private float h; + + public PacketPlayOutExplosion() {} + + public PacketPlayOutExplosion(double d0, double d1, double d2, float f, List list, Vec3D vec3d) { + this.a = d0; + this.b = d1; + this.c = d2; + this.d = f; + this.e = Lists.newArrayList(list); + if (vec3d != null) { + this.f = (float) vec3d.a; + this.g = (float) vec3d.b; + this.h = (float) vec3d.c; + } + + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = (double) packetdataserializer.readFloat(); + this.b = (double) packetdataserializer.readFloat(); + this.c = (double) packetdataserializer.readFloat(); + this.d = packetdataserializer.readFloat(); + int i = packetdataserializer.readInt(); + + this.e = Lists.newArrayListWithCapacity(i); + int j = (int) this.a; + int k = (int) this.b; + int l = (int) this.c; + + for (int i1 = 0; i1 < i; ++i1) { + int j1 = packetdataserializer.readByte() + j; + int k1 = packetdataserializer.readByte() + k; + int l1 = packetdataserializer.readByte() + l; + + this.e.add(new BlockPosition(j1, k1, l1)); + } + + this.f = packetdataserializer.readFloat(); + this.g = packetdataserializer.readFloat(); + this.h = packetdataserializer.readFloat(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.writeFloat((float) this.a); + packetdataserializer.writeFloat((float) this.b); + packetdataserializer.writeFloat((float) this.c); + packetdataserializer.writeFloat(this.d); + packetdataserializer.writeInt(this.e.size()); + int i = (int) this.a; + int j = (int) this.b; + int k = (int) this.c; + Iterator iterator = this.e.iterator(); + + while (iterator.hasNext()) { + BlockPosition blockposition = (BlockPosition) iterator.next(); + int l = blockposition.getX() - i; + int i1 = blockposition.getY() - j; + int j1 = blockposition.getZ() - k; + + packetdataserializer.writeByte(l); + packetdataserializer.writeByte(i1); + packetdataserializer.writeByte(j1); + } + + packetdataserializer.writeFloat(this.f); + packetdataserializer.writeFloat(this.g); + packetdataserializer.writeFloat(this.h); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutGameStateChange.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutGameStateChange.java new file mode 100644 index 0000000..9313581 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutGameStateChange.java @@ -0,0 +1,31 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutGameStateChange implements Packet { + + public static final String[] a = new String[] { "tile.bed.notValid"}; + private int b; + private float c; + + public PacketPlayOutGameStateChange() {} + + public PacketPlayOutGameStateChange(int i, float f) { + this.b = i; + this.c = f; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.b = packetdataserializer.readUnsignedByte(); + this.c = packetdataserializer.readFloat(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.writeByte(this.b); + packetdataserializer.writeFloat(this.c); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutHeldItemSlot.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutHeldItemSlot.java new file mode 100644 index 0000000..1f72b27 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutHeldItemSlot.java @@ -0,0 +1,26 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutHeldItemSlot implements Packet { + + private int a; + + public PacketPlayOutHeldItemSlot() {} + + public PacketPlayOutHeldItemSlot(int i) { + this.a = i; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.readByte(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.writeByte(this.a); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutKeepAlive.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutKeepAlive.java new file mode 100644 index 0000000..06af093 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutKeepAlive.java @@ -0,0 +1,26 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutKeepAlive implements Packet { + + private int a; + + public PacketPlayOutKeepAlive() {} + + public PacketPlayOutKeepAlive(int i) { + this.a = i; + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.e(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.b(this.a); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutKickDisconnect.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutKickDisconnect.java new file mode 100644 index 0000000..44d6f2d --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutKickDisconnect.java @@ -0,0 +1,26 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutKickDisconnect implements Packet { + + private IChatBaseComponent a; + + public PacketPlayOutKickDisconnect() {} + + public PacketPlayOutKickDisconnect(IChatBaseComponent ichatbasecomponent) { + this.a = ichatbasecomponent; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.d(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.a(this.a); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutLogin.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutLogin.java new file mode 100644 index 0000000..1edea65 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutLogin.java @@ -0,0 +1,67 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutLogin implements Packet { + + private int a; + private boolean b; + private WorldSettings.EnumGamemode c; + private int d; + private EnumDifficulty e; + private int f; + private WorldType g; + private boolean h; + + public PacketPlayOutLogin() {} + + public PacketPlayOutLogin(int i, WorldSettings.EnumGamemode worldsettings_enumgamemode, boolean flag, int j, EnumDifficulty enumdifficulty, int k, WorldType worldtype, boolean flag1) { + this.a = i; + this.d = j; + this.e = enumdifficulty; + this.c = worldsettings_enumgamemode; + this.f = k; + this.b = flag; + this.g = worldtype; + this.h = flag1; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.readInt(); + short short0 = packetdataserializer.readUnsignedByte(); + + this.b = (short0 & 8) == 8; + int i = short0 & -9; + + this.c = WorldSettings.EnumGamemode.getById(i); + this.d = packetdataserializer.readByte(); + this.e = EnumDifficulty.getById(packetdataserializer.readUnsignedByte()); + this.f = packetdataserializer.readUnsignedByte(); + this.g = WorldType.getType(packetdataserializer.c(16)); + if (this.g == null) { + this.g = WorldType.NORMAL; + } + + this.h = packetdataserializer.readBoolean(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.writeInt(this.a); + int i = this.c.getId(); + + if (this.b) { + i |= 8; + } + + packetdataserializer.writeByte(i); + packetdataserializer.writeByte(this.d); + packetdataserializer.writeByte(this.e.a()); + packetdataserializer.writeByte(this.f); + packetdataserializer.a(this.g.name()); + packetdataserializer.writeBoolean(this.h); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutMap.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutMap.java new file mode 100644 index 0000000..57a6ed9 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutMap.java @@ -0,0 +1,86 @@ +package net.minecraft.server; + +import java.io.IOException; +import java.util.Collection; + +public class PacketPlayOutMap implements Packet { + + private int a; + private byte b; + private MapIcon[] c; + private int d; + private int e; + private int f; + private int g; + private byte[] h; + + public PacketPlayOutMap() {} + + public PacketPlayOutMap(int i, byte b0, Collection collection, byte[] abyte, int j, int k, int l, int i1) { + this.a = i; + this.b = b0; + this.c = (MapIcon[]) collection.toArray(new MapIcon[collection.size()]); + this.d = j; + this.e = k; + this.f = l; + this.g = i1; + this.h = new byte[l * i1]; + + for (int j1 = 0; j1 < l; ++j1) { + for (int k1 = 0; k1 < i1; ++k1) { + this.h[j1 + k1 * l] = abyte[j + j1 + (k + k1) * 128]; + } + } + + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.e(); + this.b = packetdataserializer.readByte(); + this.c = new MapIcon[packetdataserializer.e()]; + + for (int i = 0; i < this.c.length; ++i) { + short short0 = (short) packetdataserializer.readByte(); + + this.c[i] = new MapIcon((byte) (short0 >> 4 & 15), packetdataserializer.readByte(), packetdataserializer.readByte(), (byte) (short0 & 15)); + } + + this.f = packetdataserializer.readUnsignedByte(); + if (this.f > 0) { + this.g = packetdataserializer.readUnsignedByte(); + this.d = packetdataserializer.readUnsignedByte(); + this.e = packetdataserializer.readUnsignedByte(); + this.h = packetdataserializer.a(); + } + + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.b(this.a); + packetdataserializer.writeByte(this.b); + packetdataserializer.b(this.c.length); + MapIcon[] amapicon = this.c; + int i = amapicon.length; + + for (int j = 0; j < i; ++j) { + MapIcon mapicon = amapicon[j]; + + packetdataserializer.writeByte((mapicon.getType() & 15) << 4 | mapicon.getRotation() & 15); + packetdataserializer.writeByte(mapicon.getX()); + packetdataserializer.writeByte(mapicon.getY()); + } + + packetdataserializer.writeByte(this.f); + if (this.f > 0) { + packetdataserializer.writeByte(this.g); + packetdataserializer.writeByte(this.d); + packetdataserializer.writeByte(this.e); + packetdataserializer.a(this.h); + } + + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutMapChunkBulk.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutMapChunkBulk.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutMapChunkBulk.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutMapChunkBulk.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutMultiBlockChange.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutMultiBlockChange.java new file mode 100644 index 0000000..40a60fe --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutMultiBlockChange.java @@ -0,0 +1,79 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutMultiBlockChange implements Packet { + + private ChunkCoordIntPair a; + private PacketPlayOutMultiBlockChange.MultiBlockChangeInfo[] b; + + public PacketPlayOutMultiBlockChange() {} + + public PacketPlayOutMultiBlockChange(int i, short[] ashort, Chunk chunk) { + this.a = new ChunkCoordIntPair(chunk.locX, chunk.locZ); + this.b = new PacketPlayOutMultiBlockChange.MultiBlockChangeInfo[i]; + + for (int j = 0; j < this.b.length; ++j) { + this.b[j] = new PacketPlayOutMultiBlockChange.MultiBlockChangeInfo(ashort[j], chunk); + } + + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = new ChunkCoordIntPair(packetdataserializer.readInt(), packetdataserializer.readInt()); + this.b = new PacketPlayOutMultiBlockChange.MultiBlockChangeInfo[packetdataserializer.e()]; + + for (int i = 0; i < this.b.length; ++i) { + this.b[i] = new PacketPlayOutMultiBlockChange.MultiBlockChangeInfo(packetdataserializer.readShort(), (IBlockData) Block.d.a(packetdataserializer.e())); + } + + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.writeInt(this.a.x); + packetdataserializer.writeInt(this.a.z); + packetdataserializer.b(this.b.length); + PacketPlayOutMultiBlockChange.MultiBlockChangeInfo[] apacketplayoutmultiblockchange_multiblockchangeinfo = this.b; + int i = apacketplayoutmultiblockchange_multiblockchangeinfo.length; + + for (int j = 0; j < i; ++j) { + PacketPlayOutMultiBlockChange.MultiBlockChangeInfo packetplayoutmultiblockchange_multiblockchangeinfo = apacketplayoutmultiblockchange_multiblockchangeinfo[j]; + + packetdataserializer.writeShort(packetplayoutmultiblockchange_multiblockchangeinfo.b()); + packetdataserializer.b(Block.d.b(packetplayoutmultiblockchange_multiblockchangeinfo.c())); + } + + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } + + public class MultiBlockChangeInfo { + + private final short b; + private final IBlockData c; + + public MultiBlockChangeInfo(short short0, IBlockData iblockdata) { + this.b = short0; + this.c = iblockdata; + } + + public MultiBlockChangeInfo(short short0, Chunk chunk) { + this.b = short0; + this.c = chunk.getBlockData(this.a()); + } + + public BlockPosition a() { + return new BlockPosition(PacketPlayOutMultiBlockChange.this.a.a(this.b >> 12 & 15, this.b & 255, this.b >> 8 & 15)); + } + + public short b() { + return this.b; + } + + public IBlockData c() { + return this.c; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutNamedEntitySpawn.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutNamedEntitySpawn.java new file mode 100644 index 0000000..17c304e --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutNamedEntitySpawn.java @@ -0,0 +1,63 @@ +package net.minecraft.server; + +import java.io.IOException; +import java.util.List; +import java.util.UUID; + +public class PacketPlayOutNamedEntitySpawn implements Packet { + + private int a; + private UUID b; + private int c; + private int d; + private int e; + private byte f; + private byte g; + private int h; + private DataWatcher i; + private List j; + + public PacketPlayOutNamedEntitySpawn() {} + + public PacketPlayOutNamedEntitySpawn(EntityHuman entityhuman) { + this.a = entityhuman.getId(); + this.b = entityhuman.getProfile().getId(); + this.c = MathHelper.floor(entityhuman.locX * 32.0D); + this.d = MathHelper.floor(entityhuman.locY * 32.0D); + this.e = MathHelper.floor(entityhuman.locZ * 32.0D); + this.f = (byte) ((int) (entityhuman.yaw * 256.0F / 360.0F)); + this.g = (byte) ((int) (entityhuman.pitch * 256.0F / 360.0F)); + ItemStack itemstack = entityhuman.inventory.getItemInHand(); + + this.h = itemstack == null ? 0 : Item.getId(itemstack.getItem()); + this.i = entityhuman.getDataWatcher(); + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.e(); + this.b = packetdataserializer.g(); + this.c = packetdataserializer.readInt(); + this.d = packetdataserializer.readInt(); + this.e = packetdataserializer.readInt(); + this.f = packetdataserializer.readByte(); + this.g = packetdataserializer.readByte(); + this.h = packetdataserializer.readShort(); + this.j = DataWatcher.b(packetdataserializer); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.b(this.a); + packetdataserializer.a(this.b); + packetdataserializer.writeInt(this.c); + packetdataserializer.writeInt(this.d); + packetdataserializer.writeInt(this.e); + packetdataserializer.writeByte(this.f); + packetdataserializer.writeByte(this.g); + packetdataserializer.writeShort(this.h); + this.i.a(packetdataserializer); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutNamedSoundEffect.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutNamedSoundEffect.java new file mode 100644 index 0000000..369b6a1 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutNamedSoundEffect.java @@ -0,0 +1,49 @@ +package net.minecraft.server; + +import java.io.IOException; +import org.apache.commons.lang3.Validate; + +public class PacketPlayOutNamedSoundEffect implements Packet { + + private String a; + private int b; + private int c = Integer.MAX_VALUE; + private int d; + private float e; + private int f; + + public PacketPlayOutNamedSoundEffect() {} + + public PacketPlayOutNamedSoundEffect(String s, double d0, double d1, double d2, float f, float f1) { + Validate.notNull(s, "name", new Object[0]); + this.a = s; + this.b = (int) (d0 * 8.0D); + this.c = (int) (d1 * 8.0D); + this.d = (int) (d2 * 8.0D); + this.e = f; + this.f = (int) (f1 * 63.0F); + f1 = MathHelper.a(f1, 0.0F, 255.0F); + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.c(256); + this.b = packetdataserializer.readInt(); + this.c = packetdataserializer.readInt(); + this.d = packetdataserializer.readInt(); + this.e = packetdataserializer.readFloat(); + this.f = packetdataserializer.readUnsignedByte(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.a(this.a); + packetdataserializer.writeInt(this.b); + packetdataserializer.writeInt(this.c); + packetdataserializer.writeInt(this.d); + packetdataserializer.writeFloat(this.e); + packetdataserializer.writeByte(this.f); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutOpenSignEditor.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutOpenSignEditor.java new file mode 100644 index 0000000..aa1a9c0 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutOpenSignEditor.java @@ -0,0 +1,26 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutOpenSignEditor implements Packet { + + private BlockPosition a; + + public PacketPlayOutOpenSignEditor() {} + + public PacketPlayOutOpenSignEditor(BlockPosition blockposition) { + this.a = blockposition; + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.c(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.a(this.a); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutOpenWindow.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutOpenWindow.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutOpenWindow.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutOpenWindow.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutPlayerInfo.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutPlayerInfo.java similarity index 98% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutPlayerInfo.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutPlayerInfo.java index 2a56728..ad4d641 100644 --- a/TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutPlayerInfo.java +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutPlayerInfo.java @@ -1,6 +1,6 @@ package net.minecraft.server; -import com.google.common.base.Objects; +import com.google.common.base.MoreObjects; import com.google.common.collect.Lists; import com.mojang.authlib.GameProfile; import com.mojang.authlib.properties.Property; @@ -208,7 +208,7 @@ public class PacketPlayOutPlayerInfo implements Packet { } public String toString() { - return Objects.toStringHelper(this).add("action", this.a).add("entries", this.b).toString(); + return MoreObjects.toStringHelper(this).add("action", this.a).add("entries", this.b).toString(); } @@ -276,7 +276,7 @@ public class PacketPlayOutPlayerInfo implements Packet { } public String toString() { - return Objects.toStringHelper(this) + return MoreObjects.toStringHelper(this) .add("latency", this.b) .add("gameMode", this.c) .add("profile", this.d) diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutPlayerListHeaderFooter.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutPlayerListHeaderFooter.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutPlayerListHeaderFooter.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutPlayerListHeaderFooter.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutPosition.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutPosition.java new file mode 100644 index 0000000..ce0d872 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutPosition.java @@ -0,0 +1,96 @@ +package net.minecraft.server; + +import java.io.IOException; +import java.util.EnumSet; +import java.util.Iterator; +import java.util.Set; + +public class PacketPlayOutPosition implements Packet { + + private double a; + private double b; + private double c; + private float d; + private float e; + private Set f; + + public PacketPlayOutPosition() {} + + public PacketPlayOutPosition(double d0, double d1, double d2, float f, float f1, Set set) { + this.a = d0; + this.b = d1; + this.c = d2; + this.d = f; + this.e = f1; + this.f = set; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.readDouble(); + this.b = packetdataserializer.readDouble(); + this.c = packetdataserializer.readDouble(); + this.d = packetdataserializer.readFloat(); + this.e = packetdataserializer.readFloat(); + this.f = PacketPlayOutPosition.EnumPlayerTeleportFlags.a(packetdataserializer.readUnsignedByte()); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.writeDouble(this.a); + packetdataserializer.writeDouble(this.b); + packetdataserializer.writeDouble(this.c); + packetdataserializer.writeFloat(this.d); + packetdataserializer.writeFloat(this.e); + packetdataserializer.writeByte(PacketPlayOutPosition.EnumPlayerTeleportFlags.a(this.f)); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } + + public static enum EnumPlayerTeleportFlags { + + X(0), Y(1), Z(2), Y_ROT(3), X_ROT(4); + + private int f; + + private EnumPlayerTeleportFlags(int i) { + this.f = i; + } + + private int a() { + return 1 << this.f; + } + + private boolean b(int i) { + return (i & this.a()) == this.a(); + } + + public static Set a(int i) { + EnumSet enumset = EnumSet.noneOf(PacketPlayOutPosition.EnumPlayerTeleportFlags.class); + PacketPlayOutPosition.EnumPlayerTeleportFlags[] apacketplayoutposition_enumplayerteleportflags = values(); + int j = apacketplayoutposition_enumplayerteleportflags.length; + + for (int k = 0; k < j; ++k) { + PacketPlayOutPosition.EnumPlayerTeleportFlags packetplayoutposition_enumplayerteleportflags = apacketplayoutposition_enumplayerteleportflags[k]; + + if (packetplayoutposition_enumplayerteleportflags.b(i)) { + enumset.add(packetplayoutposition_enumplayerteleportflags); + } + } + + return enumset; + } + + public static int a(Set set) { + int i = 0; + + PacketPlayOutPosition.EnumPlayerTeleportFlags packetplayoutposition_enumplayerteleportflags; + + for (Iterator iterator = set.iterator(); iterator.hasNext(); i |= packetplayoutposition_enumplayerteleportflags.a()) { + packetplayoutposition_enumplayerteleportflags = (PacketPlayOutPosition.EnumPlayerTeleportFlags) iterator.next(); + } + + return i; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutRemoveEntityEffect.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutRemoveEntityEffect.java new file mode 100644 index 0000000..a435b75 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutRemoveEntityEffect.java @@ -0,0 +1,30 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutRemoveEntityEffect implements Packet { + + private int a; + private int b; + + public PacketPlayOutRemoveEntityEffect() {} + + public PacketPlayOutRemoveEntityEffect(int i, MobEffect mobeffect) { + this.a = i; + this.b = mobeffect.getEffectId(); + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.e(); + this.b = packetdataserializer.readUnsignedByte(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.b(this.a); + packetdataserializer.writeByte(this.b); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutResourcePackSend.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutResourcePackSend.java new file mode 100644 index 0000000..5b464f1 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutResourcePackSend.java @@ -0,0 +1,33 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutResourcePackSend implements Packet { + + private String a; + private String b; + + public PacketPlayOutResourcePackSend() {} + + public PacketPlayOutResourcePackSend(String s, String s1) { + this.a = s; + this.b = s1; + if (s1.length() > 40) { + throw new IllegalArgumentException("Hash is too long (max 40, was " + s1.length() + ")"); + } + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.c(32767); + this.b = packetdataserializer.c(40); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.a(this.a); + packetdataserializer.a(this.b); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutRespawn.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutRespawn.java new file mode 100644 index 0000000..8891198 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutRespawn.java @@ -0,0 +1,42 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutRespawn implements Packet { + + private int a; + private EnumDifficulty b; + private WorldSettings.EnumGamemode c; + private WorldType d; + + public PacketPlayOutRespawn() {} + + public PacketPlayOutRespawn(int i, EnumDifficulty enumdifficulty, WorldType worldtype, WorldSettings.EnumGamemode worldsettings_enumgamemode) { + this.a = i; + this.b = enumdifficulty; + this.c = worldsettings_enumgamemode; + this.d = worldtype; + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.readInt(); + this.b = EnumDifficulty.getById(packetdataserializer.readUnsignedByte()); + this.c = WorldSettings.EnumGamemode.getById(packetdataserializer.readUnsignedByte()); + this.d = WorldType.getType(packetdataserializer.c(16)); + if (this.d == null) { + this.d = WorldType.NORMAL; + } + + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.writeInt(this.a); + packetdataserializer.writeByte(this.b.a()); + packetdataserializer.writeByte(this.c.getId()); + packetdataserializer.a(this.d.name()); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutScoreboardDisplayObjective.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutScoreboardDisplayObjective.java new file mode 100644 index 0000000..7842015 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutScoreboardDisplayObjective.java @@ -0,0 +1,35 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutScoreboardDisplayObjective implements Packet { + + private int a; + private String b; + + public PacketPlayOutScoreboardDisplayObjective() {} + + public PacketPlayOutScoreboardDisplayObjective(int i, ScoreboardObjective scoreboardobjective) { + this.a = i; + if (scoreboardobjective == null) { + this.b = ""; + } else { + this.b = scoreboardobjective.getName(); + } + + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.readByte(); + this.b = packetdataserializer.c(16); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.writeByte(this.a); + packetdataserializer.a(this.b); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutScoreboardObjective.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutScoreboardObjective.java new file mode 100644 index 0000000..fc1dcaf --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutScoreboardObjective.java @@ -0,0 +1,44 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutScoreboardObjective implements Packet { + + private String a; + private String b; + private IScoreboardCriteria.EnumScoreboardHealthDisplay c; + private int d; + + public PacketPlayOutScoreboardObjective() {} + + public PacketPlayOutScoreboardObjective(ScoreboardObjective scoreboardobjective, int i) { + this.a = scoreboardobjective.getName(); + this.b = scoreboardobjective.getDisplayName(); + this.c = scoreboardobjective.getCriteria().c(); + this.d = i; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.c(16); + this.d = packetdataserializer.readByte(); + if (this.d == 0 || this.d == 2) { + this.b = packetdataserializer.c(32); + this.c = IScoreboardCriteria.EnumScoreboardHealthDisplay.a(packetdataserializer.c(16)); + } + + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.a(this.a); + packetdataserializer.writeByte(this.d); + if (this.d == 0 || this.d == 2) { + packetdataserializer.a(this.b); + packetdataserializer.a(this.c.a()); + } + + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutScoreboardScore.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutScoreboardScore.java new file mode 100644 index 0000000..73227da --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutScoreboardScore.java @@ -0,0 +1,65 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutScoreboardScore implements Packet { + + private String a = ""; + private String b = ""; + private int c; + private PacketPlayOutScoreboardScore.EnumScoreboardAction d; + + public PacketPlayOutScoreboardScore() {} + + public PacketPlayOutScoreboardScore(ScoreboardScore scoreboardscore) { + this.a = scoreboardscore.getPlayerName(); + this.b = scoreboardscore.getObjective().getName(); + this.c = scoreboardscore.getScore(); + this.d = PacketPlayOutScoreboardScore.EnumScoreboardAction.CHANGE; + } + + public PacketPlayOutScoreboardScore(String s) { + this.a = s; + this.b = ""; + this.c = 0; + this.d = PacketPlayOutScoreboardScore.EnumScoreboardAction.REMOVE; + } + + public PacketPlayOutScoreboardScore(String s, ScoreboardObjective scoreboardobjective) { + this.a = s; + this.b = scoreboardobjective.getName(); + this.c = 0; + this.d = PacketPlayOutScoreboardScore.EnumScoreboardAction.REMOVE; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.c(40); + this.d = (PacketPlayOutScoreboardScore.EnumScoreboardAction) packetdataserializer.a(PacketPlayOutScoreboardScore.EnumScoreboardAction.class); + this.b = packetdataserializer.c(16); + if (this.d != PacketPlayOutScoreboardScore.EnumScoreboardAction.REMOVE) { + this.c = packetdataserializer.e(); + } + + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.a(this.a); + packetdataserializer.a((Enum) this.d); + packetdataserializer.a(this.b); + if (this.d != PacketPlayOutScoreboardScore.EnumScoreboardAction.REMOVE) { + packetdataserializer.b(this.c); + } + + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } + + public static enum EnumScoreboardAction { + + CHANGE, REMOVE; + + private EnumScoreboardAction() {} + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutScoreboardTeam.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutScoreboardTeam.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutScoreboardTeam.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutScoreboardTeam.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutServerDifficulty.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutServerDifficulty.java new file mode 100644 index 0000000..1462465 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutServerDifficulty.java @@ -0,0 +1,28 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutServerDifficulty implements Packet { + + private EnumDifficulty a; + private boolean b; + + public PacketPlayOutServerDifficulty() {} + + public PacketPlayOutServerDifficulty(EnumDifficulty enumdifficulty, boolean flag) { + this.a = enumdifficulty; + this.b = flag; + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = EnumDifficulty.getById(packetdataserializer.readUnsignedByte()); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.writeByte(this.a.a()); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutSetCompression.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutSetCompression.java new file mode 100644 index 0000000..d8e8e2d --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutSetCompression.java @@ -0,0 +1,22 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutSetCompression implements Packet { + + private int a; + + public PacketPlayOutSetCompression() {} + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.e(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.b(this.a); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutSetSlot.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutSetSlot.java new file mode 100644 index 0000000..e86e1f5 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutSetSlot.java @@ -0,0 +1,34 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutSetSlot implements Packet { + + private int a; + private int b; + private ItemStack c; + + public PacketPlayOutSetSlot() {} + + public PacketPlayOutSetSlot(int i, int j, ItemStack itemstack) { + this.a = i; + this.b = j; + this.c = itemstack == null ? null : itemstack.cloneItemStack(); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.readByte(); + this.b = packetdataserializer.readShort(); + this.c = packetdataserializer.i(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.writeByte(this.a); + packetdataserializer.writeShort(this.b); + packetdataserializer.a(this.c); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntity.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntity.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntity.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntity.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntityExperienceOrb.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntityExperienceOrb.java new file mode 100644 index 0000000..3be5f77 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntityExperienceOrb.java @@ -0,0 +1,42 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutSpawnEntityExperienceOrb implements Packet { + + private int a; + private int b; + private int c; + private int d; + private int e; + + public PacketPlayOutSpawnEntityExperienceOrb() {} + + public PacketPlayOutSpawnEntityExperienceOrb(EntityExperienceOrb entityexperienceorb) { + this.a = entityexperienceorb.getId(); + this.b = MathHelper.floor(entityexperienceorb.locX * 32.0D); + this.c = MathHelper.floor(entityexperienceorb.locY * 32.0D); + this.d = MathHelper.floor(entityexperienceorb.locZ * 32.0D); + this.e = entityexperienceorb.j(); + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.e(); + this.b = packetdataserializer.readInt(); + this.c = packetdataserializer.readInt(); + this.d = packetdataserializer.readInt(); + this.e = packetdataserializer.readShort(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.b(this.a); + packetdataserializer.writeInt(this.b); + packetdataserializer.writeInt(this.c); + packetdataserializer.writeInt(this.d); + packetdataserializer.writeShort(this.e); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntityLiving.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntityLiving.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntityLiving.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntityLiving.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntityPainting.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntityPainting.java new file mode 100644 index 0000000..2ebd80b --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntityPainting.java @@ -0,0 +1,38 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutSpawnEntityPainting implements Packet { + + private int a; + private BlockPosition b; + private EnumDirection c; + private String d; + + public PacketPlayOutSpawnEntityPainting() {} + + public PacketPlayOutSpawnEntityPainting(EntityPainting entitypainting) { + this.a = entitypainting.getId(); + this.b = entitypainting.getBlockPosition(); + this.c = entitypainting.direction; + this.d = entitypainting.art.B; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.e(); + this.d = packetdataserializer.c(EntityPainting.EnumArt.A); + this.b = packetdataserializer.c(); + this.c = EnumDirection.fromType2(packetdataserializer.readUnsignedByte()); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.b(this.a); + packetdataserializer.a(this.d); + packetdataserializer.a(this.b); + packetdataserializer.writeByte(this.c.b()); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntityWeather.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntityWeather.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntityWeather.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntityWeather.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutSpawnPosition.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutSpawnPosition.java new file mode 100644 index 0000000..29a8b49 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutSpawnPosition.java @@ -0,0 +1,26 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutSpawnPosition implements Packet { + + public BlockPosition position; + + public PacketPlayOutSpawnPosition() {} + + public PacketPlayOutSpawnPosition(BlockPosition blockposition) { + this.position = blockposition; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.position = packetdataserializer.c(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.a(this.position); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutStatistic.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutStatistic.java new file mode 100644 index 0000000..d10e94b --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutStatistic.java @@ -0,0 +1,51 @@ +package net.minecraft.server; + +import com.google.common.collect.Maps; +import java.io.IOException; +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; + +public class PacketPlayOutStatistic implements Packet { + + private Map a; + + public PacketPlayOutStatistic() {} + + public PacketPlayOutStatistic(Map map) { + this.a = map; + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + int i = packetdataserializer.e(); + + this.a = Maps.newHashMap(); + + for (int j = 0; j < i; ++j) { + Statistic statistic = StatisticList.getStatistic(packetdataserializer.c(32767)); + int k = packetdataserializer.e(); + + if (statistic != null) { + this.a.put(statistic, Integer.valueOf(k)); + } + } + + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.b(this.a.size()); + Iterator iterator = this.a.entrySet().iterator(); + + while (iterator.hasNext()) { + Entry entry = (Entry) iterator.next(); + + packetdataserializer.a(((Statistic) entry.getKey()).name); + packetdataserializer.b(((Integer) entry.getValue()).intValue()); + } + + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutTabComplete.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutTabComplete.java new file mode 100644 index 0000000..cad5566 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutTabComplete.java @@ -0,0 +1,40 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutTabComplete implements Packet { + + private String[] a; + + public PacketPlayOutTabComplete() {} + + public PacketPlayOutTabComplete(String[] astring) { + this.a = astring; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = new String[packetdataserializer.e()]; + + for (int i = 0; i < this.a.length; ++i) { + this.a[i] = packetdataserializer.c(32767); + } + + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.b(this.a.length); + String[] astring = this.a; + int i = astring.length; + + for (int j = 0; j < i; ++j) { + String s = astring[j]; + + packetdataserializer.a(s); + } + + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutTileEntityData.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutTileEntityData.java new file mode 100644 index 0000000..da8d9fd --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutTileEntityData.java @@ -0,0 +1,34 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutTileEntityData implements Packet { + + private BlockPosition a; + private int b; + private NBTTagCompound c; + + public PacketPlayOutTileEntityData() {} + + public PacketPlayOutTileEntityData(BlockPosition blockposition, int i, NBTTagCompound nbttagcompound) { + this.a = blockposition; + this.b = i; + this.c = nbttagcompound; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.c(); + this.b = packetdataserializer.readUnsignedByte(); + this.c = packetdataserializer.h(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.a(this.a); + packetdataserializer.writeByte((byte) this.b); + packetdataserializer.a(this.c); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutTitle.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutTitle.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutTitle.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutTitle.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutTransaction.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutTransaction.java new file mode 100644 index 0000000..ad10a9f --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutTransaction.java @@ -0,0 +1,34 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutTransaction implements Packet { + + private int a; + private short b; + private boolean c; + + public PacketPlayOutTransaction() {} + + public PacketPlayOutTransaction(int i, short short0, boolean flag) { + this.a = i; + this.b = short0; + this.c = flag; + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.readUnsignedByte(); + this.b = packetdataserializer.readShort(); + this.c = packetdataserializer.readBoolean(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.writeByte(this.a); + packetdataserializer.writeShort(this.b); + packetdataserializer.writeBoolean(this.c); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutUpdateAttributes.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutUpdateAttributes.java new file mode 100644 index 0000000..acd1ea0 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutUpdateAttributes.java @@ -0,0 +1,103 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.UUID; + +public class PacketPlayOutUpdateAttributes implements Packet { + + private int a; + private final List b = Lists.newArrayList(); + + public PacketPlayOutUpdateAttributes() {} + + public PacketPlayOutUpdateAttributes(int i, Collection collection) { + this.a = i; + Iterator iterator = collection.iterator(); + + while (iterator.hasNext()) { + AttributeInstance attributeinstance = (AttributeInstance) iterator.next(); + + this.b.add(new PacketPlayOutUpdateAttributes.AttributeSnapshot(attributeinstance.getAttribute().getName(), attributeinstance.b(), attributeinstance.c())); + } + + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.e(); + int i = packetdataserializer.readInt(); + + for (int j = 0; j < i; ++j) { + String s = packetdataserializer.c(64); + double d0 = packetdataserializer.readDouble(); + ArrayList arraylist = Lists.newArrayList(); + int k = packetdataserializer.e(); + + for (int l = 0; l < k; ++l) { + UUID uuid = packetdataserializer.g(); + + arraylist.add(new AttributeModifier(uuid, "Unknown synced attribute modifier", packetdataserializer.readDouble(), packetdataserializer.readByte())); + } + + this.b.add(new PacketPlayOutUpdateAttributes.AttributeSnapshot(s, d0, arraylist)); + } + + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.b(this.a); + packetdataserializer.writeInt(this.b.size()); + Iterator iterator = this.b.iterator(); + + while (iterator.hasNext()) { + PacketPlayOutUpdateAttributes.AttributeSnapshot packetplayoutupdateattributes_attributesnapshot = (PacketPlayOutUpdateAttributes.AttributeSnapshot) iterator.next(); + + packetdataserializer.a(packetplayoutupdateattributes_attributesnapshot.a()); + packetdataserializer.writeDouble(packetplayoutupdateattributes_attributesnapshot.b()); + packetdataserializer.b(packetplayoutupdateattributes_attributesnapshot.c().size()); + Iterator iterator1 = packetplayoutupdateattributes_attributesnapshot.c().iterator(); + + while (iterator1.hasNext()) { + AttributeModifier attributemodifier = (AttributeModifier) iterator1.next(); + + packetdataserializer.a(attributemodifier.a()); + packetdataserializer.writeDouble(attributemodifier.d()); + packetdataserializer.writeByte(attributemodifier.c()); + } + } + + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } + + public class AttributeSnapshot { + + private final String b; + private final double c; + private final Collection d; + + public AttributeSnapshot(String s, double d0, Collection collection) { + this.b = s; + this.c = d0; + this.d = collection; + } + + public String a() { + return this.b; + } + + public double b() { + return this.c; + } + + public Collection c() { + return this.d; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutUpdateEntityNBT.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutUpdateEntityNBT.java new file mode 100644 index 0000000..2880a04 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutUpdateEntityNBT.java @@ -0,0 +1,30 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutUpdateEntityNBT implements Packet { + + private int a; + private NBTTagCompound b; + + public PacketPlayOutUpdateEntityNBT() {} + + public PacketPlayOutUpdateEntityNBT(int i, NBTTagCompound nbttagcompound) { + this.a = i; + this.b = nbttagcompound; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.e(); + this.b = packetdataserializer.h(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.b(this.a); + packetdataserializer.a(this.b); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutUpdateHealth.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutUpdateHealth.java new file mode 100644 index 0000000..0375da8 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutUpdateHealth.java @@ -0,0 +1,34 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutUpdateHealth implements Packet { + + private float a; + private int b; + private float c; + + public PacketPlayOutUpdateHealth() {} + + public PacketPlayOutUpdateHealth(float f, int i, float f1) { + this.a = f; + this.b = i; + this.c = f1; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.readFloat(); + this.b = packetdataserializer.e(); + this.c = packetdataserializer.readFloat(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.writeFloat(this.a); + packetdataserializer.b(this.b); + packetdataserializer.writeFloat(this.c); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutUpdateSign.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutUpdateSign.java new file mode 100644 index 0000000..56291c1 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutUpdateSign.java @@ -0,0 +1,41 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutUpdateSign implements Packet { + + private World a; + private BlockPosition b; + private IChatBaseComponent[] c; + + public PacketPlayOutUpdateSign() {} + + public PacketPlayOutUpdateSign(World world, BlockPosition blockposition, IChatBaseComponent[] aichatbasecomponent) { + this.a = world; + this.b = blockposition; + this.c = new IChatBaseComponent[] { aichatbasecomponent[0], aichatbasecomponent[1], aichatbasecomponent[2], aichatbasecomponent[3]}; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.b = packetdataserializer.c(); + this.c = new IChatBaseComponent[4]; + + for (int i = 0; i < 4; ++i) { + this.c[i] = packetdataserializer.d(); + } + + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.a(this.b); + + for (int i = 0; i < 4; ++i) { + packetdataserializer.a(this.c[i]); + } + + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutUpdateTime.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutUpdateTime.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutUpdateTime.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutUpdateTime.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutWindowData.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutWindowData.java new file mode 100644 index 0000000..ee5add6 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutWindowData.java @@ -0,0 +1,34 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutWindowData implements Packet { + + private int a; + private int b; + private int c; + + public PacketPlayOutWindowData() {} + + public PacketPlayOutWindowData(int i, int j, int k) { + this.a = i; + this.b = j; + this.c = k; + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.readUnsignedByte(); + this.b = packetdataserializer.readShort(); + this.c = packetdataserializer.readShort(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.writeByte(this.a); + packetdataserializer.writeShort(this.b); + packetdataserializer.writeShort(this.c); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutWindowItems.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutWindowItems.java new file mode 100644 index 0000000..dcf7245 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutWindowItems.java @@ -0,0 +1,54 @@ +package net.minecraft.server; + +import java.io.IOException; +import java.util.List; + +public class PacketPlayOutWindowItems implements Packet { + + private int a; + private ItemStack[] b; + + public PacketPlayOutWindowItems() {} + + public PacketPlayOutWindowItems(int i, List list) { + this.a = i; + this.b = new ItemStack[list.size()]; + + for (int j = 0; j < this.b.length; ++j) { + ItemStack itemstack = (ItemStack) list.get(j); + + this.b[j] = itemstack == null ? null : itemstack.cloneItemStack(); + } + + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.readUnsignedByte(); + short short0 = packetdataserializer.readShort(); + + this.b = new ItemStack[short0]; + + for (int i = 0; i < short0; ++i) { + this.b[i] = packetdataserializer.i(); + } + + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.writeByte(this.a); + packetdataserializer.writeShort(this.b.length); + ItemStack[] aitemstack = this.b; + int i = aitemstack.length; + + for (int j = 0; j < i; ++j) { + ItemStack itemstack = aitemstack[j]; + + packetdataserializer.a(itemstack); + } + + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutWorldBorder.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutWorldBorder.java new file mode 100644 index 0000000..b4d40af --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutWorldBorder.java @@ -0,0 +1,163 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutWorldBorder implements Packet { + + private PacketPlayOutWorldBorder.EnumWorldBorderAction a; + private int b; + private double c; + private double d; + private double e; + private double f; + private long g; + private int h; + private int i; + + public PacketPlayOutWorldBorder() {} + + public PacketPlayOutWorldBorder(WorldBorder worldborder, PacketPlayOutWorldBorder.EnumWorldBorderAction packetplayoutworldborder_enumworldborderaction) { + this.a = packetplayoutworldborder_enumworldborderaction; + this.c = worldborder.getCenterX(); + this.d = worldborder.getCenterZ(); + this.f = worldborder.getSize(); + this.e = worldborder.j(); + this.g = worldborder.i(); + this.b = worldborder.l(); + this.i = worldborder.getWarningDistance(); + this.h = worldborder.getWarningTime(); + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = (PacketPlayOutWorldBorder.EnumWorldBorderAction) packetdataserializer.a(PacketPlayOutWorldBorder.EnumWorldBorderAction.class); + switch (PacketPlayOutWorldBorder.SyntheticClass_1.a[this.a.ordinal()]) { + case 1: + this.e = packetdataserializer.readDouble(); + break; + + case 2: + this.f = packetdataserializer.readDouble(); + this.e = packetdataserializer.readDouble(); + this.g = packetdataserializer.f(); + break; + + case 3: + this.c = packetdataserializer.readDouble(); + this.d = packetdataserializer.readDouble(); + break; + + case 4: + this.i = packetdataserializer.e(); + break; + + case 5: + this.h = packetdataserializer.e(); + break; + + case 6: + this.c = packetdataserializer.readDouble(); + this.d = packetdataserializer.readDouble(); + this.f = packetdataserializer.readDouble(); + this.e = packetdataserializer.readDouble(); + this.g = packetdataserializer.f(); + this.b = packetdataserializer.e(); + this.i = packetdataserializer.e(); + this.h = packetdataserializer.e(); + } + + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.a((Enum) this.a); + switch (PacketPlayOutWorldBorder.SyntheticClass_1.a[this.a.ordinal()]) { + case 1: + packetdataserializer.writeDouble(this.e); + break; + + case 2: + packetdataserializer.writeDouble(this.f); + packetdataserializer.writeDouble(this.e); + packetdataserializer.b(this.g); + break; + + case 3: + packetdataserializer.writeDouble(this.c); + packetdataserializer.writeDouble(this.d); + break; + + case 4: + packetdataserializer.b(this.i); + break; + + case 5: + packetdataserializer.b(this.h); + break; + + case 6: + packetdataserializer.writeDouble(this.c); + packetdataserializer.writeDouble(this.d); + packetdataserializer.writeDouble(this.f); + packetdataserializer.writeDouble(this.e); + packetdataserializer.b(this.g); + packetdataserializer.b(this.b); + packetdataserializer.b(this.i); + packetdataserializer.b(this.h); + } + + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } + + static class SyntheticClass_1 { + + static final int[] a = new int[PacketPlayOutWorldBorder.EnumWorldBorderAction.values().length]; + + static { + try { + PacketPlayOutWorldBorder.SyntheticClass_1.a[PacketPlayOutWorldBorder.EnumWorldBorderAction.SET_SIZE.ordinal()] = 1; + } catch (NoSuchFieldError nosuchfielderror) { + ; + } + + try { + PacketPlayOutWorldBorder.SyntheticClass_1.a[PacketPlayOutWorldBorder.EnumWorldBorderAction.LERP_SIZE.ordinal()] = 2; + } catch (NoSuchFieldError nosuchfielderror1) { + ; + } + + try { + PacketPlayOutWorldBorder.SyntheticClass_1.a[PacketPlayOutWorldBorder.EnumWorldBorderAction.SET_CENTER.ordinal()] = 3; + } catch (NoSuchFieldError nosuchfielderror2) { + ; + } + + try { + PacketPlayOutWorldBorder.SyntheticClass_1.a[PacketPlayOutWorldBorder.EnumWorldBorderAction.SET_WARNING_BLOCKS.ordinal()] = 4; + } catch (NoSuchFieldError nosuchfielderror3) { + ; + } + + try { + PacketPlayOutWorldBorder.SyntheticClass_1.a[PacketPlayOutWorldBorder.EnumWorldBorderAction.SET_WARNING_TIME.ordinal()] = 5; + } catch (NoSuchFieldError nosuchfielderror4) { + ; + } + + try { + PacketPlayOutWorldBorder.SyntheticClass_1.a[PacketPlayOutWorldBorder.EnumWorldBorderAction.INITIALIZE.ordinal()] = 6; + } catch (NoSuchFieldError nosuchfielderror5) { + ; + } + + } + } + + public static enum EnumWorldBorderAction { + + SET_SIZE, LERP_SIZE, SET_CENTER, INITIALIZE, SET_WARNING_TIME, SET_WARNING_BLOCKS; + + private EnumWorldBorderAction() {} + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutWorldEvent.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutWorldEvent.java new file mode 100644 index 0000000..0592729 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutWorldEvent.java @@ -0,0 +1,38 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketPlayOutWorldEvent implements Packet { + + private int a; + private BlockPosition b; + private int c; + private boolean d; + + public PacketPlayOutWorldEvent() {} + + public PacketPlayOutWorldEvent(int i, BlockPosition blockposition, int j, boolean flag) { + this.a = i; + this.b = blockposition; + this.c = j; + this.d = flag; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.readInt(); + this.b = packetdataserializer.c(); + this.c = packetdataserializer.readInt(); + this.d = packetdataserializer.readBoolean(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.writeInt(this.a); + packetdataserializer.a(this.b); + packetdataserializer.writeInt(this.c); + packetdataserializer.writeBoolean(this.d); + } + + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutWorldParticles.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutWorldParticles.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutWorldParticles.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PacketPlayOutWorldParticles.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketPrepender.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPrepender.java new file mode 100644 index 0000000..90240cc --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketPrepender.java @@ -0,0 +1,33 @@ +package net.minecraft.server; + +import com.elevatemc.spigot.network.VarIntUtil; +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.MessageToByteEncoder; + +@io.netty.channel.ChannelHandler.Sharable // PandaSpigot +public class PacketPrepender extends MessageToByteEncoder { + + public static final PacketPrepender INSTANCE = new PacketPrepender(); // PandaSpigot + private PacketPrepender() {} // PandaSpigot - private + + protected void a(ChannelHandlerContext channelhandlercontext, ByteBuf bytebuf, ByteBuf bytebuf1) throws Exception { + // PandaSpigot start + VarIntUtil.writeVarInt(bytebuf1, bytebuf.readableBytes()); + bytebuf1.writeBytes(bytebuf); + // PandaSpigot end + } + + protected void encode(ChannelHandlerContext channelhandlercontext, ByteBuf object, ByteBuf bytebuf) throws Exception { + this.a(channelhandlercontext, (ByteBuf) object, bytebuf); + } + // PandaSpigot start + @Override + protected ByteBuf allocateBuffer(ChannelHandlerContext ctx, ByteBuf msg, boolean preferDirect) throws Exception { + int anticipatedRequiredCapacity = VarIntUtil.varIntBytes(msg.readableBytes()) + + msg.readableBytes(); + + return ctx.alloc().directBuffer(anticipatedRequiredCapacity); + } + // PandaSpigot end +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketSplitter.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketSplitter.java new file mode 100644 index 0000000..8a69a1c --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketSplitter.java @@ -0,0 +1,59 @@ +package net.minecraft.server; + +import com.elevatemc.spigot.network.VarIntByteDecoder; +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.ByteToMessageDecoder; +import io.netty.handler.codec.CorruptedFrameException; +import java.util.List; + +public class PacketSplitter extends ByteToMessageDecoder { + + public PacketSplitter() {} + + protected void decode(ChannelHandlerContext channelhandlercontext, ByteBuf bytebuf, List list) throws Exception { + // PandaSpigot start + if (!channelhandlercontext.channel().isActive()) { + bytebuf.clear(); + return; + } + + final VarIntByteDecoder reader = new VarIntByteDecoder(); + int varIntEnd = bytebuf.forEachByte(reader); + + if (varIntEnd == -1) { + // We tried to go beyond the end of the buffer. This is probably a good sign that the + // buffer was too short to hold a proper varint. + if (reader.getResult() == VarIntByteDecoder.DecodeResult.RUN_OF_ZEROES) { + // Special case where the entire packet is just a run of zeroes. We ignore them all. + bytebuf.clear(); + } + return; + } + + if (reader.getResult() == VarIntByteDecoder.DecodeResult.RUN_OF_ZEROES) { + // this will return to the point where the next varint starts + bytebuf.readerIndex(varIntEnd); + } else if (reader.getResult() == VarIntByteDecoder.DecodeResult.SUCCESS) { + int readVarint = reader.getReadVarint(); + int bytesRead = reader.getBytesRead(); + if (readVarint < 0) { + bytebuf.clear(); + throw new CorruptedFrameException("Bad packet length"); + } else if (readVarint == 0) { + // skip over the empty packet(s) and ignore it + bytebuf.readerIndex(varIntEnd + 1); + } else { + int minimumRead = bytesRead + readVarint; + if (bytebuf.isReadable(minimumRead)) { + list.add(bytebuf.retainedSlice(varIntEnd + 1, readVarint)); + bytebuf.skipBytes(minimumRead); + } + } + } else if (reader.getResult() == VarIntByteDecoder.DecodeResult.TOO_BIG) { + bytebuf.clear(); + throw new CorruptedFrameException("VarInt too big"); + } + // PandaSpigot end + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketStatusInListener.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketStatusInListener.java new file mode 100644 index 0000000..fb53dbe --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketStatusInListener.java @@ -0,0 +1,8 @@ +package net.minecraft.server; + +public interface PacketStatusInListener extends PacketListener { + + void a(PacketStatusInPing packetstatusinping); + + void a(PacketStatusInStart packetstatusinstart); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketStatusInPing.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketStatusInPing.java new file mode 100644 index 0000000..1a5e7a6 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketStatusInPing.java @@ -0,0 +1,26 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketStatusInPing implements Packet { + + private long a; + + public PacketStatusInPing() {} + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.readLong(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.writeLong(this.a); + } + + public void a(PacketStatusInListener packetstatusinlistener) { + packetstatusinlistener.a(this); + } + + public long a() { + return this.a; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketStatusInStart.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketStatusInStart.java new file mode 100644 index 0000000..7859b13 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketStatusInStart.java @@ -0,0 +1,16 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketStatusInStart implements Packet { + + public PacketStatusInStart() {} + + public void a(PacketDataSerializer packetdataserializer) throws IOException {} + + public void b(PacketDataSerializer packetdataserializer) throws IOException {} + + public void a(PacketStatusInListener packetstatusinlistener) { + packetstatusinlistener.a(this); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PacketStatusListener.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketStatusListener.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PacketStatusListener.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PacketStatusListener.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketStatusOutListener.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketStatusOutListener.java new file mode 100644 index 0000000..12d7a72 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketStatusOutListener.java @@ -0,0 +1,8 @@ +package net.minecraft.server; + +public interface PacketStatusOutListener extends PacketListener { + + void a(PacketStatusOutServerInfo packetstatusoutserverinfo); + + void a(PacketStatusOutPong packetstatusoutpong); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketStatusOutPong.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketStatusOutPong.java new file mode 100644 index 0000000..e873de6 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketStatusOutPong.java @@ -0,0 +1,26 @@ +package net.minecraft.server; + +import java.io.IOException; + +public class PacketStatusOutPong implements Packet { + + private long a; + + public PacketStatusOutPong() {} + + public PacketStatusOutPong(long i) { + this.a = i; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.readLong(); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.writeLong(this.a); + } + + public void a(PacketStatusOutListener packetstatusoutlistener) { + packetstatusoutlistener.a(this); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PacketStatusOutServerInfo.java b/eSpigot-Server/src/main/java/net/minecraft/server/PacketStatusOutServerInfo.java new file mode 100644 index 0000000..7a106e4 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PacketStatusOutServerInfo.java @@ -0,0 +1,29 @@ +package net.minecraft.server; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import java.io.IOException; + +public class PacketStatusOutServerInfo implements Packet { + + private static final Gson a = (new GsonBuilder()).registerTypeAdapter(ServerPing.ServerData.class, new ServerPing.ServerData.Serializer()).registerTypeAdapter(ServerPing.ServerPingPlayerSample.class, new ServerPing.ServerPingPlayerSample.Serializer()).registerTypeAdapter(ServerPing.class, new ServerPing.Serializer()).registerTypeHierarchyAdapter(IChatBaseComponent.class, new IChatBaseComponent.ChatSerializer()).registerTypeHierarchyAdapter(ChatModifier.class, new ChatModifier.ChatModifierSerializer()).registerTypeAdapterFactory(new ChatTypeAdapterFactory()).create(); + private ServerPing b; + + public PacketStatusOutServerInfo() {} + + public PacketStatusOutServerInfo(ServerPing serverping) { + this.b = serverping; + } + + public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.b = (ServerPing) PacketStatusOutServerInfo.a.fromJson(packetdataserializer.c(32767), ServerPing.class); + } + + public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.a(PacketStatusOutServerInfo.a.toJson(this.b)); + } + + public void a(PacketStatusOutListener packetstatusoutlistener) { + packetstatusoutlistener.a(this); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/Path.java b/eSpigot-Server/src/main/java/net/minecraft/server/Path.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/Path.java rename to eSpigot-Server/src/main/java/net/minecraft/server/Path.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PathEntity.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathEntity.java new file mode 100644 index 0000000..65f5c51 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PathEntity.java @@ -0,0 +1,79 @@ +package net.minecraft.server; + +public class PathEntity { + + private final PathPoint[] a; + private int b; + private int c; + + public PathEntity(PathPoint[] apathpoint) { + this.a = apathpoint; + this.c = apathpoint.length; + } + + public void a() { + ++this.b; + } + + public boolean b() { + return this.b >= this.c; + } + + public PathPoint c() { + return this.c > 0 ? this.a[this.c - 1] : null; + } + + public PathPoint a(int i) { + return this.a[i]; + } + + public int d() { + return this.c; + } + + public void b(int i) { + this.c = i; + } + + public int e() { + return this.b; + } + + public void c(int i) { + this.b = i; + } + + public Vec3D a(Entity entity, int i) { + double d0 = (double) this.a[i].a + (double) ((int) (entity.width + 1.0F)) * 0.5D; + double d1 = (double) this.a[i].b; + double d2 = (double) this.a[i].c + (double) ((int) (entity.width + 1.0F)) * 0.5D; + + return new Vec3D(d0, d1, d2); + } + + public Vec3D a(Entity entity) { + return this.a(entity, this.b); + } + + public boolean a(PathEntity pathentity) { + if (pathentity == null) { + return false; + } else if (pathentity.a.length != this.a.length) { + return false; + } else { + for (int i = 0; i < this.a.length; ++i) { + if (this.a[i].a != pathentity.a[i].a || this.a[i].b != pathentity.a[i].b || this.a[i].c != pathentity.a[i].c) { + return false; + } + } + + return true; + } + } + + public boolean b(Vec3D vec3d) { + PathPoint pathpoint = this.c(); + + return pathpoint == null ? false : pathpoint.a == (int) vec3d.a && pathpoint.c == (int) vec3d.c; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PathPoint.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathPoint.java new file mode 100644 index 0000000..4d48e88 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PathPoint.java @@ -0,0 +1,64 @@ +package net.minecraft.server; + +public class PathPoint { + + public final int a; + public final int b; + public final int c; + private final int j; + int d = -1; + float e; + float f; + float g; + PathPoint h; + public boolean i; + + public PathPoint(int i, int j, int k) { + this.a = i; + this.b = j; + this.c = k; + this.j = a(i, j, k); + } + + public static int a(int i, int j, int k) { + return j & 255 | (i & 32767) << 8 | (k & 32767) << 24 | (i < 0 ? Integer.MIN_VALUE : 0) | (k < 0 ? '\u8000' : 0); + } + + public float a(PathPoint pathpoint) { + float f = (float) (pathpoint.a - this.a); + float f1 = (float) (pathpoint.b - this.b); + float f2 = (float) (pathpoint.c - this.c); + + return MathHelper.c(f * f + f1 * f1 + f2 * f2); + } + + public float b(PathPoint pathpoint) { + float f = (float) (pathpoint.a - this.a); + float f1 = (float) (pathpoint.b - this.b); + float f2 = (float) (pathpoint.c - this.c); + + return f * f + f1 * f1 + f2 * f2; + } + + public boolean equals(Object object) { + if (!(object instanceof PathPoint)) { + return false; + } else { + PathPoint pathpoint = (PathPoint) object; + + return this.j == pathpoint.j && this.a == pathpoint.a && this.b == pathpoint.b && this.c == pathpoint.c; + } + } + + public int hashCode() { + return this.j; + } + + public boolean a() { + return this.d >= 0; + } + + public String toString() { + return this.a + ", " + this.b + ", " + this.c; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/Pathfinder.java b/eSpigot-Server/src/main/java/net/minecraft/server/Pathfinder.java new file mode 100644 index 0000000..450df83 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/Pathfinder.java @@ -0,0 +1,100 @@ +package net.minecraft.server; + +public class Pathfinder { + + private Path a = new Path(); + private PathPoint[] b = new PathPoint[32]; + private PathfinderAbstract c; + + public Pathfinder(PathfinderAbstract pathfinderabstract) { + this.c = pathfinderabstract; + } + + public PathEntity a(IBlockAccess iblockaccess, Entity entity, Entity entity1, float f) { + return this.a(iblockaccess, entity, entity1.locX, entity1.getBoundingBox().b, entity1.locZ, f); + } + + public PathEntity a(IBlockAccess iblockaccess, Entity entity, BlockPosition blockposition, float f) { + return this.a(iblockaccess, entity, (double) ((float) blockposition.getX() + 0.5F), (double) ((float) blockposition.getY() + 0.5F), (double) ((float) blockposition.getZ() + 0.5F), f); + } + + private PathEntity a(IBlockAccess iblockaccess, Entity entity, double d0, double d1, double d2, float f) { + this.a.a(); + this.c.a(iblockaccess, entity); + PathPoint pathpoint = this.c.a(entity); + PathPoint pathpoint1 = this.c.a(entity, d0, d1, d2); + PathEntity pathentity = this.a(entity, pathpoint, pathpoint1, f); + + this.c.a(); + return pathentity; + } + + private PathEntity a(Entity entity, PathPoint pathpoint, PathPoint pathpoint1, float f) { + pathpoint.e = 0.0F; + pathpoint.f = pathpoint.b(pathpoint1); + pathpoint.g = pathpoint.f; + this.a.a(); + this.a.a(pathpoint); + PathPoint pathpoint2 = pathpoint; + + while (!this.a.e()) { + PathPoint pathpoint3 = this.a.c(); + + if (pathpoint3.equals(pathpoint1)) { + return this.a(pathpoint, pathpoint1); + } + + if (pathpoint3.b(pathpoint1) < pathpoint2.b(pathpoint1)) { + pathpoint2 = pathpoint3; + } + + pathpoint3.i = true; + int i = this.c.a(this.b, entity, pathpoint3, pathpoint1, f); + + for (int j = 0; j < i; ++j) { + PathPoint pathpoint4 = this.b[j]; + float f1 = pathpoint3.e + pathpoint3.b(pathpoint4); + + if (f1 < f * 2.0F && (!pathpoint4.a() || f1 < pathpoint4.e)) { + pathpoint4.h = pathpoint3; + pathpoint4.e = f1; + pathpoint4.f = pathpoint4.b(pathpoint1); + if (pathpoint4.a()) { + this.a.a(pathpoint4, pathpoint4.e + pathpoint4.f); + } else { + pathpoint4.g = pathpoint4.e + pathpoint4.f; + this.a.a(pathpoint4); + } + } + } + } + + if (pathpoint2 == pathpoint) { + return null; + } else { + return this.a(pathpoint, pathpoint2); + } + } + + private PathEntity a(PathPoint pathpoint, PathPoint pathpoint1) { + int i = 1; + + PathPoint pathpoint2; + + for (pathpoint2 = pathpoint1; pathpoint2.h != null; pathpoint2 = pathpoint2.h) { + ++i; + } + + PathPoint[] apathpoint = new PathPoint[i]; + + pathpoint2 = pathpoint1; + --i; + + for (apathpoint[i] = pathpoint1; pathpoint2.h != null; apathpoint[i] = pathpoint2) { + pathpoint2 = pathpoint2.h; + --i; + } + + return new PathEntity(apathpoint); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderAbstract.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderAbstract.java new file mode 100644 index 0000000..04a80d6 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderAbstract.java @@ -0,0 +1,40 @@ +package net.minecraft.server; + +public abstract class PathfinderAbstract { + + protected IBlockAccess a; + protected IntHashMap b = new IntHashMap(); + protected int c; + protected int d; + protected int e; + + public PathfinderAbstract() {} + + public void a(IBlockAccess iblockaccess, Entity entity) { + this.a = iblockaccess; + this.b.c(); + this.c = MathHelper.d(entity.width + 1.0F); + this.d = MathHelper.d(entity.length + 1.0F); + this.e = MathHelper.d(entity.width + 1.0F); + } + + public void a() {} + + protected PathPoint a(int i, int j, int k) { + int l = PathPoint.a(i, j, k); + PathPoint pathpoint = (PathPoint) this.b.get(l); + + if (pathpoint == null) { + pathpoint = new PathPoint(i, j, k); + this.b.a(l, pathpoint); + } + + return pathpoint; + } + + public abstract PathPoint a(Entity entity); + + public abstract PathPoint a(Entity entity, double d0, double d1, double d2); + + public abstract int a(PathPoint[] apathpoint, Entity entity, PathPoint pathpoint, PathPoint pathpoint1, float f); +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoal.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoal.java new file mode 100644 index 0000000..19a1fb2 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoal.java @@ -0,0 +1,32 @@ +package net.minecraft.server; + +public abstract class PathfinderGoal { + + private int a; + + public PathfinderGoal() {} + + public abstract boolean a(); + + public boolean b() { + return this.a(); + } + + public boolean i() { + return true; + } + + public void c() {} + + public void d() {} + + public void e() {} + + public void a(int i) { + this.a = i; + } + + public int j() { + return this.a; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalArrowAttack.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalArrowAttack.java new file mode 100644 index 0000000..42ee4e7 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalArrowAttack.java @@ -0,0 +1,92 @@ +package net.minecraft.server; + +public class PathfinderGoalArrowAttack extends PathfinderGoal { + + private final EntityInsentient a; + private final IRangedEntity b; + private EntityLiving c; + private int d; + private double e; + private int f; + private int g; + private int h; + private float i; + private float j; + + public PathfinderGoalArrowAttack(IRangedEntity irangedentity, double d0, int i, float f) { + this(irangedentity, d0, i, i, f); + } + + public PathfinderGoalArrowAttack(IRangedEntity irangedentity, double d0, int i, int j, float f) { + this.d = -1; + if (!(irangedentity instanceof EntityLiving)) { + throw new IllegalArgumentException("ArrowAttackGoal requires Mob implements RangedAttackMob"); + } else { + this.b = irangedentity; + this.a = (EntityInsentient) irangedentity; + this.e = d0; + this.g = i; + this.h = j; + this.i = f; + this.j = f * f; + this.a(3); + } + } + + public boolean a() { + EntityLiving entityliving = this.a.getGoalTarget(); + + if (entityliving == null) { + return false; + } else { + this.c = entityliving; + return true; + } + } + + public boolean b() { + return this.a() || !this.a.getNavigation().m(); + } + + public void d() { + this.c = null; + this.f = 0; + this.d = -1; + } + + public void e() { + double d0 = this.a.e(this.c.locX, this.c.getBoundingBox().b, this.c.locZ); + boolean flag = this.a.getEntitySenses().a(this.c); + + if (flag) { + ++this.f; + } else { + this.f = 0; + } + + if (d0 <= (double) this.j && this.f >= 20) { + this.a.getNavigation().n(); + } else { + this.a.getNavigation().a((Entity) this.c, this.e); + } + + this.a.getControllerLook().a(this.c, 30.0F, 30.0F); + float f; + + if (--this.d == 0) { + if (d0 > (double) this.j || !flag) { + return; + } + + f = MathHelper.sqrt(d0) / this.i; + float f1 = MathHelper.a(f, 0.1F, 1.0F); + + this.b.a(this.c, f1); + this.d = MathHelper.d(f * (float) (this.h - this.g) + (float) this.g); + } else if (this.d < 0) { + f = MathHelper.sqrt(d0) / this.i; + this.d = MathHelper.d(f * (float) (this.h - this.g) + (float) this.g); + } + + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalAvoidTarget.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalAvoidTarget.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalAvoidTarget.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalAvoidTarget.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalBeg.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalBeg.java new file mode 100644 index 0000000..950486a --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalBeg.java @@ -0,0 +1,47 @@ +package net.minecraft.server; + +public class PathfinderGoalBeg extends PathfinderGoal { + + private EntityWolf a; + private EntityHuman b; + private World c; + private float d; + private int e; + + public PathfinderGoalBeg(EntityWolf entitywolf, float f) { + this.a = entitywolf; + this.c = entitywolf.world; + this.d = f; + this.a(2); + } + + public boolean a() { + this.b = this.c.findNearbyPlayer(this.a, (double) this.d); + return this.b == null ? false : this.a(this.b); + } + + public boolean b() { + return !this.b.isAlive() ? false : (this.a.h(this.b) > (double) (this.d * this.d) ? false : this.e > 0 && this.a(this.b)); + } + + public void c() { + this.a.p(true); + this.e = 40 + this.a.bc().nextInt(40); + } + + public void d() { + this.a.p(false); + this.b = null; + } + + public void e() { + this.a.getControllerLook().a(this.b.locX, this.b.locY + (double) this.b.getHeadHeight(), this.b.locZ, 10.0F, (float) this.a.bQ()); + --this.e; + } + + private boolean a(EntityHuman entityhuman) { + ItemStack itemstack = entityhuman.inventory.getItemInHand(); + + return itemstack == null ? false : (!this.a.isTamed() && itemstack.getItem() == Items.BONE ? true : this.a.d(itemstack)); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalBreakDoor.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalBreakDoor.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalBreakDoor.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalBreakDoor.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalBreed.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalBreed.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalBreed.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalBreed.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalDefendVillage.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalDefendVillage.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalDefendVillage.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalDefendVillage.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalDoorInteract.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalDoorInteract.java new file mode 100644 index 0000000..67f9846 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalDoorInteract.java @@ -0,0 +1,75 @@ +package net.minecraft.server; + +public abstract class PathfinderGoalDoorInteract extends PathfinderGoal { + + protected EntityInsentient a; + protected BlockPosition b; + protected BlockDoor c; + boolean d; + float e; + float f; + + public PathfinderGoalDoorInteract(EntityInsentient entityinsentient) { + this.b = BlockPosition.ZERO; + this.a = entityinsentient; + if (!(entityinsentient.getNavigation() instanceof Navigation)) { + throw new IllegalArgumentException("Unsupported mob type for DoorInteractGoal"); + } + } + + public boolean a() { + if (!this.a.positionChanged) { + return false; + } else { + Navigation navigation = (Navigation) this.a.getNavigation(); + PathEntity pathentity = navigation.j(); + + if (pathentity != null && !pathentity.b() && navigation.g()) { + for (int i = 0; i < Math.min(pathentity.e() + 2, pathentity.d()); ++i) { + PathPoint pathpoint = pathentity.a(i); + + this.b = new BlockPosition(pathpoint.a, pathpoint.b + 1, pathpoint.c); + if (this.a.e((double) this.b.getX(), this.a.locY, (double) this.b.getZ()) <= 2.25D) { + this.c = this.a(this.b); + if (this.c != null) { + return true; + } + } + } + + this.b = (new BlockPosition(this.a)).up(); + this.c = this.a(this.b); + return this.c != null; + } else { + return false; + } + } + } + + public boolean b() { + return !this.d; + } + + public void c() { + this.d = false; + this.e = (float) ((double) ((float) this.b.getX() + 0.5F) - this.a.locX); + this.f = (float) ((double) ((float) this.b.getZ() + 0.5F) - this.a.locZ); + } + + public void e() { + float f = (float) ((double) ((float) this.b.getX() + 0.5F) - this.a.locX); + float f1 = (float) ((double) ((float) this.b.getZ() + 0.5F) - this.a.locZ); + float f2 = this.e * f + this.f * f1; + + if (f2 < 0.0F) { + this.d = true; + } + + } + + private BlockDoor a(BlockPosition blockposition) { + Block block = this.a.world.getType(blockposition).getBlock(); + + return block instanceof BlockDoor && block.getMaterial() == Material.WOOD ? (BlockDoor) block : null; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalEatTile.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalEatTile.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalEatTile.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalEatTile.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalFleeSun.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalFleeSun.java new file mode 100644 index 0000000..3d83cc3 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalFleeSun.java @@ -0,0 +1,64 @@ +package net.minecraft.server; + +import java.util.Random; + +public class PathfinderGoalFleeSun extends PathfinderGoal { + + private EntityCreature a; + private double b; + private double c; + private double d; + private double e; + private World f; + + public PathfinderGoalFleeSun(EntityCreature entitycreature, double d0) { + this.a = entitycreature; + this.e = d0; + this.f = entitycreature.world; + this.a(1); + } + + public boolean a() { + if (!this.f.w()) { + return false; + } else if (!this.a.isBurning()) { + return false; + } else if (!this.f.i(new BlockPosition(this.a.locX, this.a.getBoundingBox().b, this.a.locZ))) { + return false; + } else { + Vec3D vec3d = this.f(); + + if (vec3d == null) { + return false; + } else { + this.b = vec3d.a; + this.c = vec3d.b; + this.d = vec3d.c; + return true; + } + } + } + + public boolean b() { + return !this.a.getNavigation().m(); + } + + public void c() { + this.a.getNavigation().a(this.b, this.c, this.d, this.e); + } + + private Vec3D f() { + Random random = this.a.bc(); + BlockPosition blockposition = new BlockPosition(this.a.locX, this.a.getBoundingBox().b, this.a.locZ); + + for (int i = 0; i < 10; ++i) { + BlockPosition blockposition1 = blockposition.a(random.nextInt(20) - 10, random.nextInt(6) - 3, random.nextInt(20) - 10); + + if (!this.f.i(blockposition1) && this.a.a(blockposition1) < 0.0F) { + return new Vec3D((double) blockposition1.getX(), (double) blockposition1.getY(), (double) blockposition1.getZ()); + } + } + + return null; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalFloat.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalFloat.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalFloat.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalFloat.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalFollowOwner.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalFollowOwner.java new file mode 100644 index 0000000..c6a0cd7 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalFollowOwner.java @@ -0,0 +1,96 @@ +package net.minecraft.server; + +public class PathfinderGoalFollowOwner extends PathfinderGoal { + + private EntityTameableAnimal d; + private EntityLiving e; + World a; + private double f; + private NavigationAbstract g; + private int h; + float b; + float c; + private boolean i; + + public PathfinderGoalFollowOwner(EntityTameableAnimal entitytameableanimal, double d0, float f, float f1) { + this.d = entitytameableanimal; + this.a = entitytameableanimal.world; + this.f = d0; + this.g = entitytameableanimal.getNavigation(); + this.c = f; + this.b = f1; + this.a(3); + if (!(entitytameableanimal.getNavigation() instanceof Navigation)) { + throw new IllegalArgumentException("Unsupported mob type for FollowOwnerGoal"); + } + } + + public boolean a() { + EntityLiving entityliving = this.d.getOwner(); + + if (entityliving == null) { + return false; + } else if (entityliving instanceof EntityHuman && ((EntityHuman) entityliving).isSpectator()) { + return false; + } else if (this.d.isSitting()) { + return false; + } else if (this.d.h(entityliving) < (double) (this.c * this.c)) { + return false; + } else { + this.e = entityliving; + return true; + } + } + + public boolean b() { + return !this.g.m() && this.d.h(this.e) > (double) (this.b * this.b) && !this.d.isSitting(); + } + + public void c() { + this.h = 0; + this.i = ((Navigation) this.d.getNavigation()).e(); + ((Navigation) this.d.getNavigation()).a(false); + } + + public void d() { + this.e = null; + this.g.n(); + ((Navigation) this.d.getNavigation()).a(true); + } + + private boolean a(BlockPosition blockposition) { + IBlockData iblockdata = this.a.getType(blockposition); + Block block = iblockdata.getBlock(); + + return block == Blocks.AIR ? true : !block.d(); + } + + public void e() { + this.d.getControllerLook().a(this.e, 10.0F, (float) this.d.bQ()); + if (!this.d.isSitting()) { + if (--this.h <= 0) { + this.h = 10; + if (!this.g.a((Entity) this.e, this.f)) { + if (!this.d.cc()) { + if (this.d.h(this.e) >= 144.0D) { + int i = MathHelper.floor(this.e.locX) - 2; + int j = MathHelper.floor(this.e.locZ) - 2; + int k = MathHelper.floor(this.e.getBoundingBox().b); + + for (int l = 0; l <= 4; ++l) { + for (int i1 = 0; i1 <= 4; ++i1) { + if ((l < 1 || i1 < 1 || l > 3 || i1 > 3) && World.a((IBlockAccess) this.a, new BlockPosition(i + l, k - 1, j + i1)) && this.a(new BlockPosition(i + l, k, j + i1)) && this.a(new BlockPosition(i + l, k + 1, j + i1))) { + this.d.setPositionRotation((double) ((float) (i + l) + 0.5F), (double) k, (double) ((float) (j + i1) + 0.5F), this.d.yaw, this.d.pitch); + this.g.n(); + return; + } + } + } + + } + } + } + } + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalFollowParent.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalFollowParent.java new file mode 100644 index 0000000..d043e3f --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalFollowParent.java @@ -0,0 +1,77 @@ +package net.minecraft.server; + +import java.util.Iterator; +import java.util.List; + +public class PathfinderGoalFollowParent extends PathfinderGoal { + + EntityAnimal a; + EntityAnimal b; + double c; + private int d; + + public PathfinderGoalFollowParent(EntityAnimal entityanimal, double d0) { + this.a = entityanimal; + this.c = d0; + } + + public boolean a() { + if (this.a.getAge() >= 0) { + return false; + } else { + List list = this.a.world.a(this.a.getClass(), this.a.getBoundingBox().grow(8.0D, 4.0D, 8.0D)); + EntityAnimal entityanimal = null; + double d0 = Double.MAX_VALUE; + Iterator iterator = list.iterator(); + + while (iterator.hasNext()) { + EntityAnimal entityanimal1 = (EntityAnimal) iterator.next(); + + if (entityanimal1.getAge() >= 0) { + double d1 = this.a.h(entityanimal1); + + if (d1 <= d0) { + d0 = d1; + entityanimal = entityanimal1; + } + } + } + + if (entityanimal == null) { + return false; + } else if (d0 < 9.0D) { + return false; + } else { + this.b = entityanimal; + return true; + } + } + } + + public boolean b() { + if (this.a.getAge() >= 0) { + return false; + } else if (!this.b.isAlive()) { + return false; + } else { + double d0 = this.a.h(this.b); + + return d0 >= 9.0D && d0 <= 256.0D; + } + } + + public void c() { + this.d = 0; + } + + public void d() { + this.b = null; + } + + public void e() { + if (--this.d <= 0) { + this.d = 10; + this.a.getNavigation().a((Entity) this.b, this.c); + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalGotoTarget.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalGotoTarget.java new file mode 100644 index 0000000..3d19e52 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalGotoTarget.java @@ -0,0 +1,86 @@ +package net.minecraft.server; + +public abstract class PathfinderGoalGotoTarget extends PathfinderGoal { + + private final EntityCreature c; + private final double d; + protected int a; + private int e; + private int f; + protected BlockPosition b; + private boolean g; + private int h; + + public PathfinderGoalGotoTarget(EntityCreature entitycreature, double d0, int i) { + this.b = BlockPosition.ZERO; + this.c = entitycreature; + this.d = d0; + this.h = i; + this.a(5); + } + + public boolean a() { + if (this.a > 0) { + --this.a; + return false; + } else { + this.a = 200 + this.c.bc().nextInt(200); + return this.g(); + } + } + + public boolean b() { + return this.e >= -this.f && this.e <= 1200 && this.a(this.c.world, this.b); + } + + public void c() { + this.c.getNavigation().a((double) ((float) this.b.getX()) + 0.5D, (double) (this.b.getY() + 1), (double) ((float) this.b.getZ()) + 0.5D, this.d); + this.e = 0; + this.f = this.c.bc().nextInt(this.c.bc().nextInt(1200) + 1200) + 1200; + } + + public void d() {} + + public void e() { + if (this.c.c(this.b.up()) > 1.0D) { + this.g = false; + ++this.e; + if (this.e % 40 == 0) { + this.c.getNavigation().a((double) ((float) this.b.getX()) + 0.5D, (double) (this.b.getY() + 1), (double) ((float) this.b.getZ()) + 0.5D, this.d); + } + } else { + this.g = true; + --this.e; + } + + } + + protected boolean f() { + return this.g; + } + + private boolean g() { + int i = this.h; + boolean flag = true; + BlockPosition blockposition = new BlockPosition(this.c); + + for (int j = 0; j <= 1; j = j > 0 ? -j : 1 - j) { + for (int k = 0; k < i; ++k) { + for (int l = 0; l <= k; l = l > 0 ? -l : 1 - l) { + for (int i1 = l < k && l > -k ? k : 0; i1 <= k; i1 = i1 > 0 ? -i1 : 1 - i1) { + BlockPosition blockposition1 = blockposition.a(l, j - 1, i1); + + if (this.c.e(blockposition1) && this.a(this.c.world, blockposition1)) { + this.b = blockposition1; + return true; + } + } + } + } + } + + return false; + } + + protected abstract boolean a(World world, BlockPosition blockposition); +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalHurtByTarget.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalHurtByTarget.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalHurtByTarget.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalHurtByTarget.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalInteract.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalInteract.java new file mode 100644 index 0000000..154bcef --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalInteract.java @@ -0,0 +1,9 @@ +package net.minecraft.server; + +public class PathfinderGoalInteract extends PathfinderGoalLookAtPlayer { + + public PathfinderGoalInteract(EntityInsentient entityinsentient, Class oclass, float f, float f1) { + super(entityinsentient, oclass, f, f1); + this.a(3); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalInteractVillagers.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalInteractVillagers.java new file mode 100644 index 0000000..34e5453 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalInteractVillagers.java @@ -0,0 +1,74 @@ +package net.minecraft.server; + +public class PathfinderGoalInteractVillagers extends PathfinderGoalInteract { + + private int e; + private EntityVillager f; + + public PathfinderGoalInteractVillagers(EntityVillager entityvillager) { + super(entityvillager, EntityVillager.class, 3.0F, 0.02F); + this.f = entityvillager; + } + + public void c() { + super.c(); + if (this.f.cs() && this.b instanceof EntityVillager && ((EntityVillager) this.b).ct()) { + this.e = 10; + } else { + this.e = 0; + } + + } + + public void e() { + super.e(); + if (this.e > 0) { + --this.e; + if (this.e == 0) { + InventorySubcontainer inventorysubcontainer = this.f.cq(); + + for (int i = 0; i < inventorysubcontainer.getSize(); ++i) { + ItemStack itemstack = inventorysubcontainer.getItem(i); + ItemStack itemstack1 = null; + + if (itemstack != null) { + Item item = itemstack.getItem(); + int j; + + if ((item == Items.BREAD || item == Items.POTATO || item == Items.CARROT) && itemstack.count > 3) { + j = itemstack.count / 2; + itemstack.count -= j; + itemstack1 = new ItemStack(item, j, itemstack.getData()); + } else if (item == Items.WHEAT && itemstack.count > 5) { + j = itemstack.count / 2 / 3 * 3; + int k = j / 3; + + itemstack.count -= j; + itemstack1 = new ItemStack(Items.BREAD, k, 0); + } + + if (itemstack.count <= 0) { + inventorysubcontainer.setItem(i, (ItemStack) null); + } + } + + if (itemstack1 != null) { + double d0 = this.f.locY - 0.30000001192092896D + (double) this.f.getHeadHeight(); + EntityItem entityitem = new EntityItem(this.f.world, this.f.locX, d0, this.f.locZ, itemstack1); + float f = 0.3F; + float f1 = this.f.aK; + float f2 = this.f.pitch; + + entityitem.motX = (double) (-MathHelper.sin(f1 / 180.0F * 3.1415927F) * MathHelper.cos(f2 / 180.0F * 3.1415927F) * f); + entityitem.motZ = (double) (MathHelper.cos(f1 / 180.0F * 3.1415927F) * MathHelper.cos(f2 / 180.0F * 3.1415927F) * f); + entityitem.motY = (double) (-MathHelper.sin(f2 / 180.0F * 3.1415927F) * f + 0.1F); + entityitem.p(); + this.f.world.addEntity(entityitem); + break; + } + } + } + } + + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalJumpOnBlock.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalJumpOnBlock.java new file mode 100644 index 0000000..f635c86 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalJumpOnBlock.java @@ -0,0 +1,67 @@ +package net.minecraft.server; + +public class PathfinderGoalJumpOnBlock extends PathfinderGoalGotoTarget { + + private final EntityOcelot c; + + public PathfinderGoalJumpOnBlock(EntityOcelot entityocelot, double d0) { + super(entityocelot, d0, 8); + this.c = entityocelot; + } + + public boolean a() { + return this.c.isTamed() && !this.c.isSitting() && super.a(); + } + + public boolean b() { + return super.b(); + } + + public void c() { + super.c(); + this.c.getGoalSit().setSitting(false); + } + + public void d() { + super.d(); + this.c.setSitting(false); + } + + public void e() { + super.e(); + this.c.getGoalSit().setSitting(false); + if (!this.f()) { + this.c.setSitting(false); + } else if (!this.c.isSitting()) { + this.c.setSitting(true); + } + + } + + protected boolean a(World world, BlockPosition blockposition) { + if (!world.isEmpty(blockposition.up())) { + return false; + } else { + IBlockData iblockdata = world.getType(blockposition); + Block block = iblockdata.getBlock(); + + if (block == Blocks.CHEST) { + TileEntity tileentity = world.getTileEntity(blockposition); + + if (tileentity instanceof TileEntityChest && ((TileEntityChest) tileentity).l < 1) { + return true; + } + } else { + if (block == Blocks.LIT_FURNACE) { + return true; + } + + if (block == Blocks.BED && iblockdata.get(BlockBed.PART) != BlockBed.EnumBedPart.HEAD) { + return true; + } + } + + return false; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalLeapAtTarget.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalLeapAtTarget.java new file mode 100644 index 0000000..7a14c7c --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalLeapAtTarget.java @@ -0,0 +1,39 @@ +package net.minecraft.server; + +public class PathfinderGoalLeapAtTarget extends PathfinderGoal { + + EntityInsentient a; + EntityLiving b; + float c; + + public PathfinderGoalLeapAtTarget(EntityInsentient entityinsentient, float f) { + this.a = entityinsentient; + this.c = f; + this.a(5); + } + + public boolean a() { + this.b = this.a.getGoalTarget(); + if (this.b == null) { + return false; + } else { + double d0 = this.a.h(this.b); + + return d0 >= 4.0D && d0 <= 16.0D ? (!this.a.onGround ? false : this.a.bc().nextInt(5) == 0) : false; + } + } + + public boolean b() { + return !this.a.onGround; + } + + public void c() { + double d0 = this.b.locX - this.a.locX; + double d1 = this.b.locZ - this.a.locZ; + float f = MathHelper.sqrt(d0 * d0 + d1 * d1); + + this.a.motX += d0 / (double) f * 0.5D * 0.800000011920929D + this.a.motX * 0.20000000298023224D; + this.a.motZ += d1 / (double) f * 0.5D * 0.800000011920929D + this.a.motZ * 0.20000000298023224D; + this.a.motY = (double) this.c; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalLookAtPlayer.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalLookAtPlayer.java new file mode 100644 index 0000000..890734a --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalLookAtPlayer.java @@ -0,0 +1,62 @@ +package net.minecraft.server; + +public class PathfinderGoalLookAtPlayer extends PathfinderGoal { + + protected EntityInsentient a; + protected Entity b; + protected float c; + private int e; + private float f; + protected Class d; + + public PathfinderGoalLookAtPlayer(EntityInsentient entityinsentient, Class oclass, float f) { + this.a = entityinsentient; + this.d = oclass; + this.c = f; + this.f = 0.02F; + this.a(2); + } + + public PathfinderGoalLookAtPlayer(EntityInsentient entityinsentient, Class oclass, float f, float f1) { + this.a = entityinsentient; + this.d = oclass; + this.c = f; + this.f = f1; + this.a(2); + } + + public boolean a() { + if (this.a.bc().nextFloat() >= this.f) { + return false; + } else { + if (this.a.getGoalTarget() != null) { + this.b = this.a.getGoalTarget(); + } + + if (this.d == EntityHuman.class) { + this.b = this.a.world.findNearbyPlayer(this.a, (double) this.c); + } else { + this.b = this.a.world.a(this.d, this.a.getBoundingBox().grow((double) this.c, 3.0D, (double) this.c), (Entity) this.a); + } + + return this.b != null; + } + } + + public boolean b() { + return !this.b.isAlive() ? false : (this.a.h(this.b) > (double) (this.c * this.c) ? false : this.e > 0); + } + + public void c() { + this.e = 40 + this.a.bc().nextInt(40); + } + + public void d() { + this.b = null; + } + + public void e() { + this.a.getControllerLook().a(this.b.locX, this.b.locY + (double) this.b.getHeadHeight(), this.b.locZ, 10.0F, (float) this.a.bQ()); + --this.e; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalLookAtTradingPlayer.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalLookAtTradingPlayer.java new file mode 100644 index 0000000..2ff106c --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalLookAtTradingPlayer.java @@ -0,0 +1,20 @@ +package net.minecraft.server; + +public class PathfinderGoalLookAtTradingPlayer extends PathfinderGoalLookAtPlayer { + + private final EntityVillager e; + + public PathfinderGoalLookAtTradingPlayer(EntityVillager entityvillager) { + super(entityvillager, EntityHuman.class, 8.0F); + this.e = entityvillager; + } + + public boolean a() { + if (this.e.co()) { + this.b = this.e.v_(); + return true; + } else { + return false; + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalMakeLove.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalMakeLove.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalMakeLove.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalMakeLove.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalMeleeAttack.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalMeleeAttack.java new file mode 100644 index 0000000..8e27d58 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalMeleeAttack.java @@ -0,0 +1,99 @@ +package net.minecraft.server; + +public class PathfinderGoalMeleeAttack extends PathfinderGoal { + + World a; + protected EntityCreature b; + int c; + double d; + boolean e; + PathEntity f; + Class g; + private int h; + private double i; + private double j; + private double k; + + public PathfinderGoalMeleeAttack(EntityCreature entitycreature, Class oclass, double d0, boolean flag) { + this(entitycreature, d0, flag); + this.g = oclass; + } + + public PathfinderGoalMeleeAttack(EntityCreature entitycreature, double d0, boolean flag) { + this.b = entitycreature; + this.a = entitycreature.world; + this.d = d0; + this.e = flag; + this.a(3); + } + + public boolean a() { + EntityLiving entityliving = this.b.getGoalTarget(); + + if (entityliving == null) { + return false; + } else if (!entityliving.isAlive()) { + return false; + } else if (this.g != null && !this.g.isAssignableFrom(entityliving.getClass())) { + return false; + } else { + this.f = this.b.getNavigation().a((Entity) entityliving); + return this.f != null; + } + } + + public boolean b() { + EntityLiving entityliving = this.b.getGoalTarget(); + + return entityliving == null ? false : (!entityliving.isAlive() ? false : (!this.e ? !this.b.getNavigation().m() : this.b.e(new BlockPosition(entityliving)))); + } + + public void c() { + this.b.getNavigation().a(this.f, this.d); + this.h = 0; + } + + public void d() { + this.b.getNavigation().n(); + } + + public void e() { + EntityLiving entityliving = this.b.getGoalTarget(); + + this.b.getControllerLook().a(entityliving, 30.0F, 30.0F); + double d0 = this.b.e(entityliving.locX, entityliving.getBoundingBox().b, entityliving.locZ); + double d1 = this.a(entityliving); + + --this.h; + if ((this.e || this.b.getEntitySenses().a(entityliving)) && this.h <= 0 && (this.i == 0.0D && this.j == 0.0D && this.k == 0.0D || entityliving.e(this.i, this.j, this.k) >= 1.0D || this.b.bc().nextFloat() < 0.05F)) { + this.i = entityliving.locX; + this.j = entityliving.getBoundingBox().b; + this.k = entityliving.locZ; + this.h = 4 + this.b.bc().nextInt(7); + if (d0 > 1024.0D) { + this.h += 10; + } else if (d0 > 256.0D) { + this.h += 5; + } + + if (!this.b.getNavigation().a((Entity) entityliving, this.d)) { + this.h += 15; + } + } + + this.c = Math.max(this.c - 1, 0); + if (d0 <= d1 && this.c <= 0) { + this.c = 20; + if (this.b.bA() != null) { + this.b.bw(); + } + + this.b.r(entityliving); + } + + } + + protected double a(EntityLiving entityliving) { + return (double) (this.b.width * 2.0F * this.b.width * 2.0F + entityliving.width); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalMoveIndoors.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalMoveIndoors.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalMoveIndoors.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalMoveIndoors.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalMoveThroughVillage.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalMoveThroughVillage.java new file mode 100644 index 0000000..3755944 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalMoveThroughVillage.java @@ -0,0 +1,127 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import java.util.Iterator; +import java.util.List; + +public class PathfinderGoalMoveThroughVillage extends PathfinderGoal { + + private EntityCreature a; + private double b; + private PathEntity c; + private VillageDoor d; + private boolean e; + private List f = Lists.newArrayList(); + + public PathfinderGoalMoveThroughVillage(EntityCreature entitycreature, double d0, boolean flag) { + this.a = entitycreature; + this.b = d0; + this.e = flag; + this.a(1); + if (!(entitycreature.getNavigation() instanceof Navigation)) { + throw new IllegalArgumentException("Unsupported mob for MoveThroughVillageGoal"); + } + } + + public boolean a() { + this.f(); + if (this.e && this.a.world.w()) { + return false; + } else { + Village village = this.a.world.ae().getClosestVillage(new BlockPosition(this.a), 0); + + if (village == null) { + return false; + } else { + this.d = this.a(village); + if (this.d == null) { + return false; + } else { + Navigation navigation = (Navigation) this.a.getNavigation(); + boolean flag = navigation.g(); + + navigation.b(false); + this.c = navigation.a(this.d.d()); + navigation.b(flag); + if (this.c != null) { + return true; + } else { + Vec3D vec3d = RandomPositionGenerator.a(this.a, 10, 7, new Vec3D((double) this.d.d().getX(), (double) this.d.d().getY(), (double) this.d.d().getZ())); + + if (vec3d == null) { + return false; + } else { + navigation.b(false); + this.c = this.a.getNavigation().a(vec3d.a, vec3d.b, vec3d.c); + navigation.b(flag); + return this.c != null; + } + } + } + } + } + } + + public boolean b() { + if (this.a.getNavigation().m()) { + return false; + } else { + float f = this.a.width + 4.0F; + + return this.a.b(this.d.d()) > (double) (f * f); + } + } + + public void c() { + this.a.getNavigation().a(this.c, this.b); + } + + public void d() { + if (this.a.getNavigation().m() || this.a.b(this.d.d()) < 16.0D) { + this.f.add(this.d); + } + + } + + private VillageDoor a(Village village) { + VillageDoor villagedoor = null; + int i = Integer.MAX_VALUE; + List list = village.f(); + Iterator iterator = list.iterator(); + + while (iterator.hasNext()) { + VillageDoor villagedoor1 = (VillageDoor) iterator.next(); + int j = villagedoor1.b(MathHelper.floor(this.a.locX), MathHelper.floor(this.a.locY), MathHelper.floor(this.a.locZ)); + + if (j < i && !this.a(villagedoor1)) { + villagedoor = villagedoor1; + i = j; + } + } + + return villagedoor; + } + + private boolean a(VillageDoor villagedoor) { + Iterator iterator = this.f.iterator(); + + VillageDoor villagedoor1; + + do { + if (!iterator.hasNext()) { + return false; + } + + villagedoor1 = (VillageDoor) iterator.next(); + } while (!villagedoor.d().equals(villagedoor1.d())); + + return true; + } + + private void f() { + if (this.f.size() > 15) { + this.f.remove(0); + } + + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalMoveTowardsRestriction.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalMoveTowardsRestriction.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalMoveTowardsRestriction.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalMoveTowardsRestriction.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalMoveTowardsTarget.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalMoveTowardsTarget.java new file mode 100644 index 0000000..97bf754 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalMoveTowardsTarget.java @@ -0,0 +1,51 @@ +package net.minecraft.server; + +public class PathfinderGoalMoveTowardsTarget extends PathfinderGoal { + + private EntityCreature a; + private EntityLiving b; + private double c; + private double d; + private double e; + private double f; + private float g; + + public PathfinderGoalMoveTowardsTarget(EntityCreature entitycreature, double d0, float f) { + this.a = entitycreature; + this.f = d0; + this.g = f; + this.a(1); + } + + public boolean a() { + this.b = this.a.getGoalTarget(); + if (this.b == null) { + return false; + } else if (this.b.h(this.a) > (double) (this.g * this.g)) { + return false; + } else { + Vec3D vec3d = RandomPositionGenerator.a(this.a, 16, 7, new Vec3D(this.b.locX, this.b.locY, this.b.locZ)); + + if (vec3d == null) { + return false; + } else { + this.c = vec3d.a; + this.d = vec3d.b; + this.e = vec3d.c; + return true; + } + } + } + + public boolean b() { + return !this.a.getNavigation().m() && this.b.isAlive() && this.b.h(this.a) < (double) (this.g * this.g); + } + + public void d() { + this.b = null; + } + + public void c() { + this.a.getNavigation().a(this.c, this.d, this.e, this.f); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalNearestAttackableTarget.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalNearestAttackableTarget.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalNearestAttackableTarget.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalNearestAttackableTarget.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalNearestAttackableTargetInsentient.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalNearestAttackableTargetInsentient.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalNearestAttackableTargetInsentient.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalNearestAttackableTargetInsentient.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalOcelotAttack.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalOcelotAttack.java new file mode 100644 index 0000000..a37dae4 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalOcelotAttack.java @@ -0,0 +1,57 @@ +package net.minecraft.server; + +public class PathfinderGoalOcelotAttack extends PathfinderGoal { + + World a; + EntityInsentient b; + EntityLiving c; + int d; + + public PathfinderGoalOcelotAttack(EntityInsentient entityinsentient) { + this.b = entityinsentient; + this.a = entityinsentient.world; + this.a(3); + } + + public boolean a() { + EntityLiving entityliving = this.b.getGoalTarget(); + + if (entityliving == null) { + return false; + } else { + this.c = entityliving; + return true; + } + } + + public boolean b() { + return !this.c.isAlive() ? false : (this.b.h(this.c) > 225.0D ? false : !this.b.getNavigation().m() || this.a()); + } + + public void d() { + this.c = null; + this.b.getNavigation().n(); + } + + public void e() { + this.b.getControllerLook().a(this.c, 30.0F, 30.0F); + double d0 = (double) (this.b.width * 2.0F * this.b.width * 2.0F); + double d1 = this.b.e(this.c.locX, this.c.getBoundingBox().b, this.c.locZ); + double d2 = 0.8D; + + if (d1 > d0 && d1 < 16.0D) { + d2 = 1.33D; + } else if (d1 < 225.0D) { + d2 = 0.6D; + } + + this.b.getNavigation().a((Entity) this.c, d2); + this.d = Math.max(this.d - 1, 0); + if (d1 <= d0) { + if (this.d <= 0) { + this.d = 20; + this.b.r(this.c); + } + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalOfferFlower.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalOfferFlower.java new file mode 100644 index 0000000..c5469e4 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalOfferFlower.java @@ -0,0 +1,43 @@ +package net.minecraft.server; + +public class PathfinderGoalOfferFlower extends PathfinderGoal { + + private EntityIronGolem a; + private EntityVillager b; + private int c; + + public PathfinderGoalOfferFlower(EntityIronGolem entityirongolem) { + this.a = entityirongolem; + this.a(3); + } + + public boolean a() { + if (!this.a.world.w()) { + return false; + } else if (this.a.bc().nextInt(8000) != 0) { + return false; + } else { + this.b = (EntityVillager) this.a.world.a(EntityVillager.class, this.a.getBoundingBox().grow(6.0D, 2.0D, 6.0D), (Entity) this.a); + return this.b != null; + } + } + + public boolean b() { + return this.c > 0; + } + + public void c() { + this.c = 400; + this.a.a(true); + } + + public void d() { + this.a.a(false); + this.b = null; + } + + public void e() { + this.a.getControllerLook().a(this.b, 30.0F, 30.0F); + --this.c; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalOpenDoor.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalOpenDoor.java new file mode 100644 index 0000000..b0759b1 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalOpenDoor.java @@ -0,0 +1,34 @@ +package net.minecraft.server; + +public class PathfinderGoalOpenDoor extends PathfinderGoalDoorInteract { + + boolean g; + int h; + + public PathfinderGoalOpenDoor(EntityInsentient entityinsentient, boolean flag) { + super(entityinsentient); + this.a = entityinsentient; + this.g = flag; + } + + public boolean b() { + return this.g && this.h > 0 && super.b(); + } + + public void c() { + this.h = 20; + this.c.setDoor(this.a.world, this.b, true); + } + + public void d() { + if (this.g) { + this.c.setDoor(this.a.world, this.b, false); + } + + } + + public void e() { + --this.h; + super.e(); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalOwnerHurtByTarget.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalOwnerHurtByTarget.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalOwnerHurtByTarget.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalOwnerHurtByTarget.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalOwnerHurtTarget.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalOwnerHurtTarget.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalOwnerHurtTarget.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalOwnerHurtTarget.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalPanic.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalPanic.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalPanic.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalPanic.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalPassengerCarrotStick.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalPassengerCarrotStick.java new file mode 100644 index 0000000..482a8f8 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalPassengerCarrotStick.java @@ -0,0 +1,153 @@ +package net.minecraft.server; + +public class PathfinderGoalPassengerCarrotStick extends PathfinderGoal { + + private final EntityInsentient a; + private final float b; + private float c; + private boolean d; + private int e; + private int f; + + public PathfinderGoalPassengerCarrotStick(EntityInsentient entityinsentient, float f) { + this.a = entityinsentient; + this.b = f; + this.a(7); + } + + public void c() { + this.c = 0.0F; + } + + public void d() { + this.d = false; + this.c = 0.0F; + } + + public boolean a() { + return this.a.isAlive() && this.a.passenger != null && this.a.passenger instanceof EntityHuman && (this.d || this.a.bW()); + } + + public void e() { + EntityHuman entityhuman = (EntityHuman) this.a.passenger; + EntityCreature entitycreature = (EntityCreature) this.a; + float f = MathHelper.g(entityhuman.yaw - this.a.yaw) * 0.5F; + + if (f > 5.0F) { + f = 5.0F; + } + + if (f < -5.0F) { + f = -5.0F; + } + + this.a.yaw = MathHelper.g(this.a.yaw + f); + if (this.c < this.b) { + this.c += (this.b - this.c) * 0.01F; + } + + if (this.c > this.b) { + this.c = this.b; + } + + int i = MathHelper.floor(this.a.locX); + int j = MathHelper.floor(this.a.locY); + int k = MathHelper.floor(this.a.locZ); + float f1 = this.c; + + if (this.d) { + if (this.e++ > this.f) { + this.d = false; + } + + f1 += f1 * 1.15F * MathHelper.sin((float) this.e / (float) this.f * 3.1415927F); + } + + float f2 = 0.91F; + + if (this.a.onGround) { + f2 = this.a.world.getType(new BlockPosition(MathHelper.d((float) i), MathHelper.d((float) j) - 1, MathHelper.d((float) k))).getBlock().frictionFactor * 0.91F; + } + + float f3 = 0.16277136F / (f2 * f2 * f2); + float f4 = MathHelper.sin(entitycreature.yaw * 3.1415927F / 180.0F); + float f5 = MathHelper.cos(entitycreature.yaw * 3.1415927F / 180.0F); + float f6 = entitycreature.bI() * f3; + float f7 = Math.max(f1, 1.0F); + + f7 = f6 / f7; + float f8 = f1 * f7; + float f9 = -(f8 * f4); + float f10 = f8 * f5; + + if (MathHelper.e(f9) > MathHelper.e(f10)) { + if (f9 < 0.0F) { + f9 -= this.a.width / 2.0F; + } + + if (f9 > 0.0F) { + f9 += this.a.width / 2.0F; + } + + f10 = 0.0F; + } else { + f9 = 0.0F; + if (f10 < 0.0F) { + f10 -= this.a.width / 2.0F; + } + + if (f10 > 0.0F) { + f10 += this.a.width / 2.0F; + } + } + + int l = MathHelper.floor(this.a.locX + (double) f9); + int i1 = MathHelper.floor(this.a.locZ + (double) f10); + int j1 = MathHelper.d(this.a.width + 1.0F); + int k1 = MathHelper.d(this.a.length + entityhuman.length + 1.0F); + int l1 = MathHelper.d(this.a.width + 1.0F); + + if (i != l || k != i1) { + Block block = this.a.world.getType(new BlockPosition(i, j, k)).getBlock(); + boolean flag = !this.a(block) && (block.getMaterial() != Material.AIR || !this.a(this.a.world.getType(new BlockPosition(i, j - 1, k)).getBlock())); + + if (flag && 0 == PathfinderNormal.a(this.a.world, this.a, l, j, i1, j1, k1, l1, false, false, true) && 1 == PathfinderNormal.a(this.a.world, this.a, i, j + 1, k, j1, k1, l1, false, false, true) && 1 == PathfinderNormal.a(this.a.world, this.a, l, j + 1, i1, j1, k1, l1, false, false, true)) { + entitycreature.getControllerJump().a(); + } + } + + if (!entityhuman.abilities.canInstantlyBuild && this.c >= this.b * 0.5F && this.a.bc().nextFloat() < 0.006F && !this.d) { + ItemStack itemstack = entityhuman.bA(); + + if (itemstack != null && itemstack.getItem() == Items.CARROT_ON_A_STICK) { + itemstack.damage(1, entityhuman); + if (itemstack.count == 0) { + ItemStack itemstack1 = new ItemStack(Items.FISHING_ROD); + + itemstack1.setTag(itemstack.getTag()); + entityhuman.inventory.items[entityhuman.inventory.itemInHandIndex] = itemstack1; + } + } + } + + this.a.g(0.0F, f1); + } + + private boolean a(Block block) { + return block instanceof BlockStairs || block instanceof BlockStepAbstract; + } + + public boolean f() { + return this.d; + } + + public void g() { + this.d = true; + this.e = 0; + this.f = this.a.bc().nextInt(841) + 140; + } + + public boolean h() { + return !this.f() && this.c > this.b * 0.3F; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalPlay.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalPlay.java new file mode 100644 index 0000000..fc2f47b --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalPlay.java @@ -0,0 +1,88 @@ +package net.minecraft.server; + +import java.util.Iterator; +import java.util.List; + +public class PathfinderGoalPlay extends PathfinderGoal { + + private EntityVillager a; + private EntityLiving b; + private double c; + private int d; + + public PathfinderGoalPlay(EntityVillager entityvillager, double d0) { + this.a = entityvillager; + this.c = d0; + this.a(1); + } + + public boolean a() { + if (this.a.getAge() >= 0) { + return false; + } else if (this.a.bc().nextInt(400) != 0) { + return false; + } else { + List list = this.a.world.a(EntityVillager.class, this.a.getBoundingBox().grow(6.0D, 3.0D, 6.0D)); + double d0 = Double.MAX_VALUE; + Iterator iterator = list.iterator(); + + while (iterator.hasNext()) { + EntityVillager entityvillager = (EntityVillager) iterator.next(); + + if (entityvillager != this.a && !entityvillager.cn() && entityvillager.getAge() < 0) { + double d1 = entityvillager.h(this.a); + + if (d1 <= d0) { + d0 = d1; + this.b = entityvillager; + } + } + } + + if (this.b == null) { + Vec3D vec3d = RandomPositionGenerator.a(this.a, 16, 3); + + if (vec3d == null) { + return false; + } + } + + return true; + } + } + + public boolean b() { + return this.d > 0; + } + + public void c() { + if (this.b != null) { + this.a.m(true); + } + + this.d = 1000; + } + + public void d() { + this.a.m(false); + this.b = null; + } + + public void e() { + --this.d; + if (this.b != null) { + if (this.a.h(this.b) > 4.0D) { + this.a.getNavigation().a((Entity) this.b, this.c); + } + } else if (this.a.getNavigation().m()) { + Vec3D vec3d = RandomPositionGenerator.a(this.a, 16, 3); + + if (vec3d == null) { + return; + } + + this.a.getNavigation().a(vec3d.a, vec3d.b, vec3d.c, this.c); + } + + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalRandomLookaround.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalRandomLookaround.java new file mode 100644 index 0000000..938490b --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalRandomLookaround.java @@ -0,0 +1,35 @@ +package net.minecraft.server; + +public class PathfinderGoalRandomLookaround extends PathfinderGoal { + + private EntityInsentient a; + private double b; + private double c; + private int d; + + public PathfinderGoalRandomLookaround(EntityInsentient entityinsentient) { + this.a = entityinsentient; + this.a(3); + } + + public boolean a() { + return this.a.bc().nextFloat() < 0.02F; + } + + public boolean b() { + return this.d >= 0; + } + + public void c() { + double d0 = 6.283185307179586D * this.a.bc().nextDouble(); + + this.b = Math.cos(d0); + this.c = Math.sin(d0); + this.d = 20 + this.a.bc().nextInt(20); + } + + public void e() { + --this.d; + this.a.getControllerLook().a(this.a.locX + this.b, this.a.locY + (double) this.a.getHeadHeight(), this.a.locZ + this.c, 10.0F, (float) this.a.bQ()); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalRandomStroll.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalRandomStroll.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalRandomStroll.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalRandomStroll.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalRandomTargetNonTamed.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalRandomTargetNonTamed.java new file mode 100644 index 0000000..3abf6d5 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalRandomTargetNonTamed.java @@ -0,0 +1,17 @@ +package net.minecraft.server; + +import com.google.common.base.Predicate; + +public class PathfinderGoalRandomTargetNonTamed extends PathfinderGoalNearestAttackableTarget { + + private EntityTameableAnimal g; + + public PathfinderGoalRandomTargetNonTamed(EntityTameableAnimal entitytameableanimal, Class oclass, boolean flag, Predicate predicate) { + super(entitytameableanimal, oclass, 10, flag, false, predicate); + this.g = entitytameableanimal; + } + + public boolean a() { + return !this.g.isTamed() && super.a(); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalRestrictOpenDoor.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalRestrictOpenDoor.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalRestrictOpenDoor.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalRestrictOpenDoor.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalRestrictSun.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalRestrictSun.java new file mode 100644 index 0000000..d9f2165 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalRestrictSun.java @@ -0,0 +1,22 @@ +package net.minecraft.server; + +public class PathfinderGoalRestrictSun extends PathfinderGoal { + + private EntityCreature a; + + public PathfinderGoalRestrictSun(EntityCreature entitycreature) { + this.a = entitycreature; + } + + public boolean a() { + return this.a.world.w(); + } + + public void c() { + ((Navigation) this.a.getNavigation()).e(true); + } + + public void d() { + ((Navigation) this.a.getNavigation()).e(false); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalSelector.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalSelector.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalSelector.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalSelector.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalSit.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalSit.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalSit.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalSit.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalSwell.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalSwell.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalSwell.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalSwell.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalTakeFlower.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalTakeFlower.java new file mode 100644 index 0000000..1d94671 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalTakeFlower.java @@ -0,0 +1,73 @@ +package net.minecraft.server; + +import java.util.Iterator; +import java.util.List; + +public class PathfinderGoalTakeFlower extends PathfinderGoal { + + private EntityVillager a; + private EntityIronGolem b; + private int c; + private boolean d; + + public PathfinderGoalTakeFlower(EntityVillager entityvillager) { + this.a = entityvillager; + this.a(3); + } + + public boolean a() { + if (this.a.getAge() >= 0) { + return false; + } else if (!this.a.world.w()) { + return false; + } else { + List list = this.a.world.a(EntityIronGolem.class, this.a.getBoundingBox().grow(6.0D, 2.0D, 6.0D)); + + if (list.isEmpty()) { + return false; + } else { + Iterator iterator = list.iterator(); + + while (iterator.hasNext()) { + EntityIronGolem entityirongolem = (EntityIronGolem) iterator.next(); + + if (entityirongolem.cm() > 0) { + this.b = entityirongolem; + break; + } + } + + return this.b != null; + } + } + } + + public boolean b() { + return this.b.cm() > 0; + } + + public void c() { + this.c = this.a.bc().nextInt(320); + this.d = false; + this.b.getNavigation().n(); + } + + public void d() { + this.b = null; + this.a.getNavigation().n(); + } + + public void e() { + this.a.getControllerLook().a(this.b, 30.0F, 30.0F); + if (this.b.cm() == this.c) { + this.a.getNavigation().a((Entity) this.b, 0.5D); + this.d = true; + } + + if (this.d && this.a.h(this.b) < 4.0D) { + this.b.a(false); + this.a.getNavigation().n(); + } + + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalTame.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalTame.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalTame.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalTame.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalTarget.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalTarget.java new file mode 100644 index 0000000..7e21ef6 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalTarget.java @@ -0,0 +1,149 @@ +package net.minecraft.server; + +import org.apache.commons.lang3.StringUtils; + +public abstract class PathfinderGoalTarget extends PathfinderGoal { + + protected final EntityCreature e; + protected boolean f; + private boolean a; + private int b; + private int c; + private int d; + + public PathfinderGoalTarget(EntityCreature entitycreature, boolean flag) { + this(entitycreature, flag, false); + } + + public PathfinderGoalTarget(EntityCreature entitycreature, boolean flag, boolean flag1) { + this.e = entitycreature; + this.f = flag; + this.a = flag1; + } + + public boolean b() { + EntityLiving entityliving = this.e.getGoalTarget(); + + if (entityliving == null) { + return false; + } else if (!entityliving.isAlive()) { + return false; + } else { + ScoreboardTeamBase scoreboardteambase = this.e.getScoreboardTeam(); + ScoreboardTeamBase scoreboardteambase1 = entityliving.getScoreboardTeam(); + + if (scoreboardteambase != null && scoreboardteambase1 == scoreboardteambase) { + return false; + } else { + double d0 = this.f(); + + if (this.e.h(entityliving) > d0 * d0) { + return false; + } else { + if (this.f) { + if (this.e.getEntitySenses().a(entityliving)) { + this.d = 0; + } else if (++this.d > 60) { + return false; + } + } + + return !(entityliving instanceof EntityHuman) || !((EntityHuman) entityliving).abilities.isInvulnerable; + } + } + } + } + + protected double f() { + AttributeInstance attributeinstance = this.e.getAttributeInstance(GenericAttributes.FOLLOW_RANGE); + + return attributeinstance == null ? 16.0D : attributeinstance.getValue(); + } + + public void c() { + this.b = 0; + this.c = 0; + this.d = 0; + } + + public void d() { + this.e.setGoalTarget((EntityLiving) null); + } + + public static boolean a(EntityInsentient entityinsentient, EntityLiving entityliving, boolean flag, boolean flag1) { + if (entityliving == null) { + return false; + } else if (entityliving == entityinsentient) { + return false; + } else if (!entityliving.isAlive()) { + return false; + } else if (!entityinsentient.a(entityliving.getClass())) { + return false; + } else { + ScoreboardTeamBase scoreboardteambase = entityinsentient.getScoreboardTeam(); + ScoreboardTeamBase scoreboardteambase1 = entityliving.getScoreboardTeam(); + + if (scoreboardteambase != null && scoreboardteambase1 == scoreboardteambase) { + return false; + } else { + if (entityinsentient instanceof EntityOwnable && StringUtils.isNotEmpty(((EntityOwnable) entityinsentient).getOwnerUUID())) { + if (entityliving instanceof EntityOwnable && ((EntityOwnable) entityinsentient).getOwnerUUID().equals(((EntityOwnable) entityliving).getOwnerUUID())) { + return false; + } + + if (entityliving == ((EntityOwnable) entityinsentient).getOwner()) { + return false; + } + } else if (entityliving instanceof EntityHuman && !flag && ((EntityHuman) entityliving).abilities.isInvulnerable) { + return false; + } + + return !flag1 || entityinsentient.getEntitySenses().a(entityliving); + } + } + } + + protected boolean a(EntityLiving entityliving, boolean flag) { + if (!a(this.e, entityliving, flag, this.f)) { + return false; + } else if (!this.e.e(new BlockPosition(entityliving))) { + return false; + } else { + if (this.a) { + if (--this.c <= 0) { + this.b = 0; + } + + if (this.b == 0) { + this.b = this.a(entityliving) ? 1 : 2; + } + + if (this.b == 2) { + return false; + } + } + + return true; + } + } + + private boolean a(EntityLiving entityliving) { + this.c = 10 + this.e.bc().nextInt(5); + PathEntity pathentity = this.e.getNavigation().a((Entity) entityliving); + + if (pathentity == null) { + return false; + } else { + PathPoint pathpoint = pathentity.c(); + + if (pathpoint == null) { + return false; + } else { + int i = pathpoint.a - MathHelper.floor(entityliving.locX); + int j = pathpoint.c - MathHelper.floor(entityliving.locZ); + + return (double) (i * i + j * j) <= 2.25D; + } + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalTargetNearestPlayer.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalTargetNearestPlayer.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalTargetNearestPlayer.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalTargetNearestPlayer.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalTempt.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalTempt.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalTempt.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalTempt.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalTradeWithPlayer.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalTradeWithPlayer.java new file mode 100644 index 0000000..6868640 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalTradeWithPlayer.java @@ -0,0 +1,35 @@ +package net.minecraft.server; + +public class PathfinderGoalTradeWithPlayer extends PathfinderGoal { + + private EntityVillager a; + + public PathfinderGoalTradeWithPlayer(EntityVillager entityvillager) { + this.a = entityvillager; + this.a(5); + } + + public boolean a() { + if (!this.a.isAlive()) { + return false; + } else if (this.a.V()) { + return false; + } else if (!this.a.onGround) { + return false; + } else if (this.a.velocityChanged) { + return false; + } else { + EntityHuman entityhuman = this.a.v_(); + + return entityhuman == null ? false : (this.a.h(entityhuman) > 16.0D ? false : entityhuman.activeContainer instanceof Container); + } + } + + public void c() { + this.a.getNavigation().n(); + } + + public void d() { + this.a.a_((EntityHuman) null); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalVillagerFarm.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalVillagerFarm.java new file mode 100644 index 0000000..e895b2a --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderGoalVillagerFarm.java @@ -0,0 +1,109 @@ +package net.minecraft.server; + +public class PathfinderGoalVillagerFarm extends PathfinderGoalGotoTarget { + + private final EntityVillager c; + private boolean d; + private boolean e; + private int f; + + public PathfinderGoalVillagerFarm(EntityVillager entityvillager, double d0) { + super(entityvillager, d0, 16); + this.c = entityvillager; + } + + public boolean a() { + if (this.a <= 0) { + if (!this.c.world.getGameRules().getBoolean("mobGriefing")) { + return false; + } + + this.f = -1; + this.d = this.c.cu(); + this.e = this.c.ct(); + } + + return super.a(); + } + + public boolean b() { + return this.f >= 0 && super.b(); + } + + public void c() { + super.c(); + } + + public void d() { + super.d(); + } + + public void e() { + super.e(); + this.c.getControllerLook().a((double) this.b.getX() + 0.5D, (double) (this.b.getY() + 1), (double) this.b.getZ() + 0.5D, 10.0F, (float) this.c.bQ()); + if (this.f()) { + World world = this.c.world; + BlockPosition blockposition = this.b.up(); + IBlockData iblockdata = world.getType(blockposition); + Block block = iblockdata.getBlock(); + + if (this.f == 0 && block instanceof BlockCrops && ((Integer) iblockdata.get(BlockCrops.AGE)).intValue() == 7) { + world.setAir(blockposition, true); + } else if (this.f == 1 && block == Blocks.AIR) { + InventorySubcontainer inventorysubcontainer = this.c.cq(); + + for (int i = 0; i < inventorysubcontainer.getSize(); ++i) { + ItemStack itemstack = inventorysubcontainer.getItem(i); + boolean flag = false; + + if (itemstack != null) { + if (itemstack.getItem() == Items.WHEAT_SEEDS) { + world.setTypeAndData(blockposition, Blocks.WHEAT.getBlockData(), 3); + flag = true; + } else if (itemstack.getItem() == Items.POTATO) { + world.setTypeAndData(blockposition, Blocks.POTATOES.getBlockData(), 3); + flag = true; + } else if (itemstack.getItem() == Items.CARROT) { + world.setTypeAndData(blockposition, Blocks.CARROTS.getBlockData(), 3); + flag = true; + } + } + + if (flag) { + --itemstack.count; + if (itemstack.count <= 0) { + inventorysubcontainer.setItem(i, (ItemStack) null); + } + break; + } + } + } + + this.f = -1; + this.a = 10; + } + + } + + protected boolean a(World world, BlockPosition blockposition) { + Block block = world.getType(blockposition).getBlock(); + + if (block == Blocks.FARMLAND) { + blockposition = blockposition.up(); + IBlockData iblockdata = world.getType(blockposition); + + block = iblockdata.getBlock(); + if (block instanceof BlockCrops && ((Integer) iblockdata.get(BlockCrops.AGE)).intValue() == 7 && this.e && (this.f == 0 || this.f < 0)) { + this.f = 0; + return true; + } + + if (block == Blocks.AIR && this.d && (this.f == 1 || this.f < 0)) { + this.f = 1; + return true; + } + } + + return false; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderNormal.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderNormal.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PathfinderNormal.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PathfinderNormal.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderWater.java b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderWater.java new file mode 100644 index 0000000..2f9a0e4 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PathfinderWater.java @@ -0,0 +1,63 @@ +package net.minecraft.server; + +public class PathfinderWater extends PathfinderAbstract { + + public PathfinderWater() {} + + public void a(IBlockAccess iblockaccess, Entity entity) { + super.a(iblockaccess, entity); + } + + public void a() { + super.a(); + } + + public PathPoint a(Entity entity) { + return this.a(MathHelper.floor(entity.getBoundingBox().a), MathHelper.floor(entity.getBoundingBox().b + 0.5D), MathHelper.floor(entity.getBoundingBox().c)); + } + + public PathPoint a(Entity entity, double d0, double d1, double d2) { + return this.a(MathHelper.floor(d0 - (double) (entity.width / 2.0F)), MathHelper.floor(d1 + 0.5D), MathHelper.floor(d2 - (double) (entity.width / 2.0F))); + } + + public int a(PathPoint[] apathpoint, Entity entity, PathPoint pathpoint, PathPoint pathpoint1, float f) { + int i = 0; + EnumDirection[] aenumdirection = EnumDirection.values(); + int j = aenumdirection.length; + + for (int k = 0; k < j; ++k) { + EnumDirection enumdirection = aenumdirection[k]; + PathPoint pathpoint2 = this.a(entity, pathpoint.a + enumdirection.getAdjacentX(), pathpoint.b + enumdirection.getAdjacentY(), pathpoint.c + enumdirection.getAdjacentZ()); + + if (pathpoint2 != null && !pathpoint2.i && pathpoint2.a(pathpoint1) < f) { + apathpoint[i++] = pathpoint2; + } + } + + return i; + } + + private PathPoint a(Entity entity, int i, int j, int k) { + int l = this.b(entity, i, j, k); + + return l == -1 ? this.a(i, j, k) : null; + } + + private int b(Entity entity, int i, int j, int k) { + BlockPosition.MutableBlockPosition blockposition_mutableblockposition = new BlockPosition.MutableBlockPosition(); + + for (int l = i; l < i + this.c; ++l) { + for (int i1 = j; i1 < j + this.d; ++i1) { + for (int j1 = k; j1 < k + this.e; ++j1) { + Block block = this.a.getType(blockposition_mutableblockposition.c(l, i1, j1)).getBlock(); + + if (block.getMaterial() != Material.WATER) { + return 0; + } + } + } + } + + return -1; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PersistentBase.java b/eSpigot-Server/src/main/java/net/minecraft/server/PersistentBase.java new file mode 100644 index 0000000..d88fa51 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PersistentBase.java @@ -0,0 +1,27 @@ +package net.minecraft.server; + +public abstract class PersistentBase { + + public final String id; + private boolean b; + + public PersistentBase(String s) { + this.id = s; + } + + public abstract void a(NBTTagCompound nbttagcompound); + + public abstract void b(NBTTagCompound nbttagcompound); + + public void c() { + this.a(true); + } + + public void a(boolean flag) { + this.b = flag; + } + + public boolean d() { + return this.b; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PersistentCollection.java b/eSpigot-Server/src/main/java/net/minecraft/server/PersistentCollection.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PersistentCollection.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PersistentCollection.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PersistentScoreboard.java b/eSpigot-Server/src/main/java/net/minecraft/server/PersistentScoreboard.java new file mode 100644 index 0000000..370c1b3 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PersistentScoreboard.java @@ -0,0 +1,269 @@ +package net.minecraft.server; + +import java.util.Collection; +import java.util.Iterator; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class PersistentScoreboard extends PersistentBase { + + private static final Logger b = LogManager.getLogger(); + private Scoreboard c; + private NBTTagCompound d; + + public PersistentScoreboard() { + this("scoreboard"); + } + + public PersistentScoreboard(String s) { + super(s); + } + + public void a(Scoreboard scoreboard) { + this.c = scoreboard; + if (this.d != null) { + this.a(this.d); + } + + } + + public void a(NBTTagCompound nbttagcompound) { + if (this.c == null) { + this.d = nbttagcompound; + } else { + this.b(nbttagcompound.getList("Objectives", 10)); + this.c(nbttagcompound.getList("PlayerScores", 10)); + if (nbttagcompound.hasKeyOfType("DisplaySlots", 10)) { + this.c(nbttagcompound.getCompound("DisplaySlots")); + } + + if (nbttagcompound.hasKeyOfType("Teams", 9)) { + this.a(nbttagcompound.getList("Teams", 10)); + } + + } + } + + protected void a(NBTTagList nbttaglist) { + for (int i = 0; i < nbttaglist.size(); ++i) { + NBTTagCompound nbttagcompound = nbttaglist.get(i); + String s = nbttagcompound.getString("Name"); + + if (s.length() > 16) { + s = s.substring(0, 16); + } + + ScoreboardTeam scoreboardteam = this.c.createTeam(s); + String s1 = nbttagcompound.getString("DisplayName"); + + if (s1.length() > 32) { + s1 = s1.substring(0, 32); + } + + scoreboardteam.setDisplayName(s1); + if (nbttagcompound.hasKeyOfType("TeamColor", 8)) { + scoreboardteam.a(EnumChatFormat.b(nbttagcompound.getString("TeamColor"))); + } + + scoreboardteam.setPrefix(nbttagcompound.getString("Prefix")); + scoreboardteam.setSuffix(nbttagcompound.getString("Suffix")); + if (nbttagcompound.hasKeyOfType("AllowFriendlyFire", 99)) { + scoreboardteam.setAllowFriendlyFire(nbttagcompound.getBoolean("AllowFriendlyFire")); + } + + if (nbttagcompound.hasKeyOfType("SeeFriendlyInvisibles", 99)) { + scoreboardteam.setCanSeeFriendlyInvisibles(nbttagcompound.getBoolean("SeeFriendlyInvisibles")); + } + + ScoreboardTeamBase.EnumNameTagVisibility scoreboardteambase_enumnametagvisibility; + + if (nbttagcompound.hasKeyOfType("NameTagVisibility", 8)) { + scoreboardteambase_enumnametagvisibility = ScoreboardTeamBase.EnumNameTagVisibility.a(nbttagcompound.getString("NameTagVisibility")); + if (scoreboardteambase_enumnametagvisibility != null) { + scoreboardteam.setNameTagVisibility(scoreboardteambase_enumnametagvisibility); + } + } + + if (nbttagcompound.hasKeyOfType("DeathMessageVisibility", 8)) { + scoreboardteambase_enumnametagvisibility = ScoreboardTeamBase.EnumNameTagVisibility.a(nbttagcompound.getString("DeathMessageVisibility")); + if (scoreboardteambase_enumnametagvisibility != null) { + scoreboardteam.b(scoreboardteambase_enumnametagvisibility); + } + } + + this.a(scoreboardteam, nbttagcompound.getList("Players", 8)); + } + + } + + protected void a(ScoreboardTeam scoreboardteam, NBTTagList nbttaglist) { + for (int i = 0; i < nbttaglist.size(); ++i) { + this.c.addPlayerToTeam(nbttaglist.getString(i), scoreboardteam.getName()); + } + + } + + protected void c(NBTTagCompound nbttagcompound) { + for (int i = 0; i < 19; ++i) { + if (nbttagcompound.hasKeyOfType("slot_" + i, 8)) { + String s = nbttagcompound.getString("slot_" + i); + ScoreboardObjective scoreboardobjective = this.c.getObjective(s); + + this.c.setDisplaySlot(i, scoreboardobjective); + } + } + + } + + protected void b(NBTTagList nbttaglist) { + for (int i = 0; i < nbttaglist.size(); ++i) { + NBTTagCompound nbttagcompound = nbttaglist.get(i); + IScoreboardCriteria iscoreboardcriteria = (IScoreboardCriteria) IScoreboardCriteria.criteria.get(nbttagcompound.getString("CriteriaName")); + + if (iscoreboardcriteria != null) { + String s = nbttagcompound.getString("Name"); + + if (s.length() > 16) { + s = s.substring(0, 16); + } + + ScoreboardObjective scoreboardobjective = this.c.registerObjective(s, iscoreboardcriteria); + + scoreboardobjective.setDisplayName(nbttagcompound.getString("DisplayName")); + scoreboardobjective.a(IScoreboardCriteria.EnumScoreboardHealthDisplay.a(nbttagcompound.getString("RenderType"))); + } + } + + } + + protected void c(NBTTagList nbttaglist) { + for (int i = 0; i < nbttaglist.size(); ++i) { + NBTTagCompound nbttagcompound = nbttaglist.get(i); + ScoreboardObjective scoreboardobjective = this.c.getObjective(nbttagcompound.getString("Objective")); + String s = nbttagcompound.getString("Name"); + + if (s.length() > 40) { + s = s.substring(0, 40); + } + + ScoreboardScore scoreboardscore = this.c.getPlayerScoreForObjective(s, scoreboardobjective); + + scoreboardscore.setScore(nbttagcompound.getInt("Score")); + if (nbttagcompound.hasKey("Locked")) { + scoreboardscore.a(nbttagcompound.getBoolean("Locked")); + } + } + + } + + public void b(NBTTagCompound nbttagcompound) { + if (this.c == null) { + PersistentScoreboard.b.warn("Tried to save scoreboard without having a scoreboard..."); + } else { + nbttagcompound.set("Objectives", this.b()); + nbttagcompound.set("PlayerScores", this.e()); + nbttagcompound.set("Teams", this.a()); + this.d(nbttagcompound); + } + } + + protected NBTTagList a() { + NBTTagList nbttaglist = new NBTTagList(); + Collection collection = this.c.getTeams(); + Iterator iterator = collection.iterator(); + + while (iterator.hasNext()) { + ScoreboardTeam scoreboardteam = (ScoreboardTeam) iterator.next(); + NBTTagCompound nbttagcompound = new NBTTagCompound(); + + nbttagcompound.setString("Name", scoreboardteam.getName()); + nbttagcompound.setString("DisplayName", scoreboardteam.getDisplayName()); + if (scoreboardteam.l().b() >= 0) { + nbttagcompound.setString("TeamColor", scoreboardteam.l().e()); + } + + nbttagcompound.setString("Prefix", scoreboardteam.getPrefix()); + nbttagcompound.setString("Suffix", scoreboardteam.getSuffix()); + nbttagcompound.setBoolean("AllowFriendlyFire", scoreboardteam.allowFriendlyFire()); + nbttagcompound.setBoolean("SeeFriendlyInvisibles", scoreboardteam.canSeeFriendlyInvisibles()); + nbttagcompound.setString("NameTagVisibility", scoreboardteam.getNameTagVisibility().e); + nbttagcompound.setString("DeathMessageVisibility", scoreboardteam.j().e); + NBTTagList nbttaglist1 = new NBTTagList(); + Iterator iterator1 = scoreboardteam.getPlayerNameSet().iterator(); + + while (iterator1.hasNext()) { + String s = (String) iterator1.next(); + + nbttaglist1.add(new NBTTagString(s)); + } + + nbttagcompound.set("Players", nbttaglist1); + nbttaglist.add(nbttagcompound); + } + + return nbttaglist; + } + + protected void d(NBTTagCompound nbttagcompound) { + NBTTagCompound nbttagcompound1 = new NBTTagCompound(); + boolean flag = false; + + for (int i = 0; i < 19; ++i) { + ScoreboardObjective scoreboardobjective = this.c.getObjectiveForSlot(i); + + if (scoreboardobjective != null) { + nbttagcompound1.setString("slot_" + i, scoreboardobjective.getName()); + flag = true; + } + } + + if (flag) { + nbttagcompound.set("DisplaySlots", nbttagcompound1); + } + + } + + protected NBTTagList b() { + NBTTagList nbttaglist = new NBTTagList(); + Collection collection = this.c.getObjectives(); + Iterator iterator = collection.iterator(); + + while (iterator.hasNext()) { + ScoreboardObjective scoreboardobjective = (ScoreboardObjective) iterator.next(); + + if (scoreboardobjective.getCriteria() != null) { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + + nbttagcompound.setString("Name", scoreboardobjective.getName()); + nbttagcompound.setString("CriteriaName", scoreboardobjective.getCriteria().getName()); + nbttagcompound.setString("DisplayName", scoreboardobjective.getDisplayName()); + nbttagcompound.setString("RenderType", scoreboardobjective.e().a()); + nbttaglist.add(nbttagcompound); + } + } + + return nbttaglist; + } + + protected NBTTagList e() { + NBTTagList nbttaglist = new NBTTagList(); + Collection collection = this.c.getScores(); + Iterator iterator = collection.iterator(); + + while (iterator.hasNext()) { + ScoreboardScore scoreboardscore = (ScoreboardScore) iterator.next(); + + if (scoreboardscore.getObjective() != null) { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + + nbttagcompound.setString("Name", scoreboardscore.getPlayerName()); + nbttagcompound.setString("Objective", scoreboardscore.getObjective().getName()); + nbttagcompound.setInt("Score", scoreboardscore.getScore()); + nbttagcompound.setBoolean("Locked", scoreboardscore.g()); + nbttaglist.add(nbttagcompound); + } + } + + return nbttaglist; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PersistentStructure.java b/eSpigot-Server/src/main/java/net/minecraft/server/PersistentStructure.java new file mode 100644 index 0000000..6351bb0 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PersistentStructure.java @@ -0,0 +1,30 @@ +package net.minecraft.server; + +public class PersistentStructure extends PersistentBase { + + private NBTTagCompound b = new NBTTagCompound(); + + public PersistentStructure(String s) { + super(s); + } + + public void a(NBTTagCompound nbttagcompound) { + this.b = nbttagcompound.getCompound("Features"); + } + + public void b(NBTTagCompound nbttagcompound) { + nbttagcompound.set("Features", this.b); + } + + public void a(NBTTagCompound nbttagcompound, int i, int j) { + this.b.set(b(i, j), nbttagcompound); + } + + public static String b(int i, int j) { + return "[" + i + "," + j + "]"; + } + + public NBTTagCompound a() { + return this.b; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PersistentVillage.java b/eSpigot-Server/src/main/java/net/minecraft/server/PersistentVillage.java new file mode 100644 index 0000000..ed5f8b6 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PersistentVillage.java @@ -0,0 +1,265 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import java.util.Iterator; +import java.util.List; + +public class PersistentVillage extends PersistentBase { + + private World world; + private final List c = Lists.newArrayList(); + private final List d = Lists.newArrayList(); + private final List villages = Lists.newArrayList(); + private int time; + + public PersistentVillage(String s) { + super(s); + } + + public PersistentVillage(World world) { + super(a(world.worldProvider)); + this.world = world; + this.c(); + } + + public void a(World world) { + this.world = world; + Iterator iterator = this.villages.iterator(); + + while (iterator.hasNext()) { + Village village = (Village) iterator.next(); + + village.a(world); + } + + } + + public void a(BlockPosition blockposition) { + if (this.c.size() <= 64) { + if (!this.e(blockposition)) { + this.c.add(blockposition); + } + + } + } + + public void tick() { + ++this.time; + Iterator iterator = this.villages.iterator(); + + while (iterator.hasNext()) { + Village village = (Village) iterator.next(); + + village.a(this.time); + } + + this.e(); + this.f(); + this.g(); + if (this.time % 400 == 0) { + this.c(); + } + + } + + private void e() { + Iterator iterator = this.villages.iterator(); + + while (iterator.hasNext()) { + Village village = (Village) iterator.next(); + + if (village.g()) { + iterator.remove(); + this.c(); + } + } + + } + + public List getVillages() { + return this.villages; + } + + public Village getClosestVillage(BlockPosition blockposition, int i) { + Village village = null; + double d0 = 3.4028234663852886E38D; + Iterator iterator = this.villages.iterator(); + + while (iterator.hasNext()) { + Village village1 = (Village) iterator.next(); + double d1 = village1.a().i(blockposition); + + if (d1 < d0) { + float f = (float) (i + village1.b()); + + if (d1 <= (double) (f * f)) { + village = village1; + d0 = d1; + } + } + } + + return village; + } + + private void f() { + if (!this.c.isEmpty()) { + this.b((BlockPosition) this.c.remove(0)); + } + } + + private void g() { + for (int i = 0; i < this.d.size(); ++i) { + VillageDoor villagedoor = (VillageDoor) this.d.get(i); + Village village = this.getClosestVillage(villagedoor.d(), 32); + + if (village == null) { + village = new Village(this.world); + this.villages.add(village); + this.c(); + } + + village.a(villagedoor); + } + + this.d.clear(); + } + + private void b(BlockPosition blockposition) { + byte b0 = 16; + byte b1 = 4; + byte b2 = 16; + + for (int i = -b0; i < b0; ++i) { + for (int j = -b1; j < b1; ++j) { + for (int k = -b2; k < b2; ++k) { + BlockPosition blockposition1 = blockposition.a(i, j, k); + + if (this.f(blockposition1)) { + VillageDoor villagedoor = this.c(blockposition1); + + if (villagedoor == null) { + this.d(blockposition1); + } else { + villagedoor.a(this.time); + } + } + } + } + } + + } + + private VillageDoor c(BlockPosition blockposition) { + Iterator iterator = this.d.iterator(); + + VillageDoor villagedoor; + + do { + if (!iterator.hasNext()) { + iterator = this.villages.iterator(); + + VillageDoor villagedoor1; + + do { + if (!iterator.hasNext()) { + return null; + } + + Village village = (Village) iterator.next(); + + villagedoor1 = village.e(blockposition); + } while (villagedoor1 == null); + + return villagedoor1; + } + + villagedoor = (VillageDoor) iterator.next(); + } while (villagedoor.d().getX() != blockposition.getX() || villagedoor.d().getZ() != blockposition.getZ() || Math.abs(villagedoor.d().getY() - blockposition.getY()) > 1); + + return villagedoor; + } + + private void d(BlockPosition blockposition) { + EnumDirection enumdirection = BlockDoor.h(this.world, blockposition); + EnumDirection enumdirection1 = enumdirection.opposite(); + int i = this.a(blockposition, enumdirection, 5); + int j = this.a(blockposition, enumdirection1, i + 1); + + if (i != j) { + this.d.add(new VillageDoor(blockposition, i < j ? enumdirection : enumdirection1, this.time)); + } + + } + + private int a(BlockPosition blockposition, EnumDirection enumdirection, int i) { + int j = 0; + + for (int k = 1; k <= 5; ++k) { + if (this.world.i(blockposition.shift(enumdirection, k))) { + ++j; + if (j >= i) { + return j; + } + } + } + + return j; + } + + private boolean e(BlockPosition blockposition) { + Iterator iterator = this.c.iterator(); + + BlockPosition blockposition1; + + do { + if (!iterator.hasNext()) { + return false; + } + + blockposition1 = (BlockPosition) iterator.next(); + } while (!blockposition1.equals(blockposition)); + + return true; + } + + private boolean f(BlockPosition blockposition) { + Block block = this.world.getType(blockposition).getBlock(); + + return block instanceof BlockDoor ? block.getMaterial() == Material.WOOD : false; + } + + public void a(NBTTagCompound nbttagcompound) { + this.time = nbttagcompound.getInt("Tick"); + NBTTagList nbttaglist = nbttagcompound.getList("Villages", 10); + + for (int i = 0; i < nbttaglist.size(); ++i) { + NBTTagCompound nbttagcompound1 = nbttaglist.get(i); + Village village = new Village(); + + village.a(nbttagcompound1); + this.villages.add(village); + } + + } + + public void b(NBTTagCompound nbttagcompound) { + nbttagcompound.setInt("Tick", this.time); + NBTTagList nbttaglist = new NBTTagList(); + Iterator iterator = this.villages.iterator(); + + while (iterator.hasNext()) { + Village village = (Village) iterator.next(); + NBTTagCompound nbttagcompound1 = new NBTTagCompound(); + + village.b(nbttagcompound1); + nbttaglist.add(nbttagcompound1); + } + + nbttagcompound.set("Villages", nbttaglist); + } + + public static String a(WorldProvider worldprovider) { + return "villages" + worldprovider.getSuffix(); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PistonExtendsChecker.java b/eSpigot-Server/src/main/java/net/minecraft/server/PistonExtendsChecker.java new file mode 100644 index 0000000..a18fb5e --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PistonExtendsChecker.java @@ -0,0 +1,178 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import java.util.ArrayList; +import java.util.List; + +public class PistonExtendsChecker { + + private final World a; + private final BlockPosition b; + private final BlockPosition c; + private final EnumDirection d; + private final List e = Lists.newArrayList(); + private final List f = Lists.newArrayList(); + + public PistonExtendsChecker(World world, BlockPosition blockposition, EnumDirection enumdirection, boolean flag) { + this.a = world; + this.b = blockposition; + if (flag) { + this.d = enumdirection; + this.c = blockposition.shift(enumdirection); + } else { + this.d = enumdirection.opposite(); + this.c = blockposition.shift(enumdirection, 2); + } + + } + + public boolean a() { + this.e.clear(); + this.f.clear(); + Block block = this.a.getType(this.c).getBlock(); + + if (!BlockPiston.a(block, this.a, this.c, this.d, false)) { + if (block.k() != 1) { + return false; + } else { + this.f.add(this.c); + return true; + } + } else if (!this.a(this.c)) { + return false; + } else { + for (int i = 0; i < this.e.size(); ++i) { + BlockPosition blockposition = (BlockPosition) this.e.get(i); + + if (this.a.getType(blockposition).getBlock() == Blocks.SLIME && !this.b(blockposition)) { + return false; + } + } + + return true; + } + } + + private boolean a(BlockPosition blockposition) { + Block block = this.a.getType(blockposition).getBlock(); + + if (block.getMaterial() == Material.AIR) { + return true; + } else if (!BlockPiston.a(block, this.a, blockposition, this.d, false)) { + return true; + } else if (blockposition.equals(this.b)) { + return true; + } else if (this.e.contains(blockposition)) { + return true; + } else { + int i = 1; + + if (i + this.e.size() > 12) { + return false; + } else { + while (block == Blocks.SLIME) { + BlockPosition blockposition1 = blockposition.shift(this.d.opposite(), i); + + block = this.a.getType(blockposition1).getBlock(); + if (block.getMaterial() == Material.AIR || !BlockPiston.a(block, this.a, blockposition1, this.d, false) || blockposition1.equals(this.b)) { + break; + } + + ++i; + if (i + this.e.size() > 12) { + return false; + } + } + + int j = 0; + + int k; + + for (k = i - 1; k >= 0; --k) { + this.e.add(blockposition.shift(this.d.opposite(), k)); + ++j; + } + + k = 1; + + while (true) { + BlockPosition blockposition2 = blockposition.shift(this.d, k); + int l = this.e.indexOf(blockposition2); + + if (l > -1) { + this.a(j, l); + + for (int i1 = 0; i1 <= l + j; ++i1) { + BlockPosition blockposition3 = (BlockPosition) this.e.get(i1); + + if (this.a.getType(blockposition3).getBlock() == Blocks.SLIME && !this.b(blockposition3)) { + return false; + } + } + + return true; + } + + block = this.a.getType(blockposition2).getBlock(); + if (block.getMaterial() == Material.AIR) { + return true; + } + + if (!BlockPiston.a(block, this.a, blockposition2, this.d, true) || blockposition2.equals(this.b)) { + return false; + } + + if (block.k() == 1) { + this.f.add(blockposition2); + return true; + } + + if (this.e.size() >= 12) { + return false; + } + + this.e.add(blockposition2); + ++j; + ++k; + } + } + } + } + + private void a(int i, int j) { + ArrayList arraylist = Lists.newArrayList(); + ArrayList arraylist1 = Lists.newArrayList(); + ArrayList arraylist2 = Lists.newArrayList(); + + arraylist.addAll(this.e.subList(0, j)); + arraylist1.addAll(this.e.subList(this.e.size() - i, this.e.size())); + arraylist2.addAll(this.e.subList(j, this.e.size() - i)); + this.e.clear(); + this.e.addAll(arraylist); + this.e.addAll(arraylist1); + this.e.addAll(arraylist2); + } + + private boolean b(BlockPosition blockposition) { + EnumDirection[] aenumdirection = EnumDirection.values(); + int i = aenumdirection.length; + + for (int j = 0; j < i; ++j) { + EnumDirection enumdirection = aenumdirection[j]; + + if (enumdirection.k() != this.d.k() && !this.a(blockposition.shift(enumdirection))) { + return false; + } + } + + return true; + } + + public List getMovedBlocks() { + return this.e; + } + + public List getBrokenBlocks() { + return this.f; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PlayerAbilities.java b/eSpigot-Server/src/main/java/net/minecraft/server/PlayerAbilities.java new file mode 100644 index 0000000..b04b9e6 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PlayerAbilities.java @@ -0,0 +1,55 @@ +package net.minecraft.server; + +public class PlayerAbilities { + + public boolean isInvulnerable; + public boolean isFlying; + public boolean canFly; + public boolean canInstantlyBuild; + public boolean mayBuild = true; + public float flySpeed = 0.05F; + public float walkSpeed = 0.1F; + + public PlayerAbilities() {} + + public void a(NBTTagCompound nbttagcompound) { + NBTTagCompound nbttagcompound1 = new NBTTagCompound(); + + nbttagcompound1.setBoolean("invulnerable", this.isInvulnerable); + nbttagcompound1.setBoolean("flying", this.isFlying); + nbttagcompound1.setBoolean("mayfly", this.canFly); + nbttagcompound1.setBoolean("instabuild", this.canInstantlyBuild); + nbttagcompound1.setBoolean("mayBuild", this.mayBuild); + nbttagcompound1.setFloat("flySpeed", this.flySpeed); + nbttagcompound1.setFloat("walkSpeed", this.walkSpeed); + nbttagcompound.set("abilities", nbttagcompound1); + } + + public void b(NBTTagCompound nbttagcompound) { + if (nbttagcompound.hasKeyOfType("abilities", 10)) { + NBTTagCompound nbttagcompound1 = nbttagcompound.getCompound("abilities"); + + this.isInvulnerable = nbttagcompound1.getBoolean("invulnerable"); + this.isFlying = nbttagcompound1.getBoolean("flying"); + this.canFly = nbttagcompound1.getBoolean("mayfly"); + this.canInstantlyBuild = nbttagcompound1.getBoolean("instabuild"); + if (nbttagcompound1.hasKeyOfType("flySpeed", 99)) { + this.flySpeed = nbttagcompound1.getFloat("flySpeed"); + this.walkSpeed = nbttagcompound1.getFloat("walkSpeed"); + } + + if (nbttagcompound1.hasKeyOfType("mayBuild", 1)) { + this.mayBuild = nbttagcompound1.getBoolean("mayBuild"); + } + } + + } + + public float a() { + return this.flySpeed; + } + + public float b() { + return this.walkSpeed; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PlayerChunkMap.java b/eSpigot-Server/src/main/java/net/minecraft/server/PlayerChunkMap.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PlayerChunkMap.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PlayerChunkMap.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PlayerConnection.java b/eSpigot-Server/src/main/java/net/minecraft/server/PlayerConnection.java similarity index 98% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PlayerConnection.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PlayerConnection.java index b29c5dc..703f6ed 100644 --- a/TacoSpigot-Server/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PlayerConnection.java @@ -2254,19 +2254,36 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList } // CraftBukkit start else if (packetplayincustompayload.a().equals("REGISTER")) { - String channels = packetplayincustompayload.b().toString(com.google.common.base.Charsets.UTF_8); - for (String channel : channels.split("\0")) { - getPlayer().addChannel(channel); + // PandaSpigot start - Disconnect for payload errors + try { + String channels = packetplayincustompayload.b().toString(com.google.common.base.Charsets.UTF_8); + for (String channel : channels.split("\0")) { + getPlayer().addChannel(channel); + } + } catch (Exception ex) { + PlayerConnection.c.error("Couldn\'t register custom payload", ex); + this.disconnect("Invalid payload REGISTER!"); } } else if (packetplayincustompayload.a().equals("UNREGISTER")) { - String channels = packetplayincustompayload.b().toString(com.google.common.base.Charsets.UTF_8); - for (String channel : channels.split("\0")) { - getPlayer().removeChannel(channel); + try { + String channels = packetplayincustompayload.b().toString(com.google.common.base.Charsets.UTF_8); + for (String channel : channels.split("\0")) { + getPlayer().removeChannel(channel); + } + } catch (Exception ex) { + PlayerConnection.c.error("Couldn\'t register custom payload", ex); + this.disconnect("Invalid payload UNREGISTER!"); } } else { - byte[] data = new byte[packetplayincustompayload.b().readableBytes()]; - packetplayincustompayload.b().readBytes(data); - server.getMessenger().dispatchIncomingMessage(player.getBukkitEntity(), packetplayincustompayload.a(), data); + try { + byte[] data = new byte[packetplayincustompayload.b().readableBytes()]; + packetplayincustompayload.b().readBytes(data); + server.getMessenger().dispatchIncomingMessage(player.getBukkitEntity(), packetplayincustompayload.a(), data); + } catch (Exception ex) { + PlayerConnection.c.error("Couldn\'t register custom payload", ex); + this.disconnect("Invalid custom payload!"); + } + // PandaSpigot end - Disconnect for payload errors } // CraftBukkit end // CraftBukkit start diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PlayerConnectionUtils.java b/eSpigot-Server/src/main/java/net/minecraft/server/PlayerConnectionUtils.java new file mode 100644 index 0000000..87c066c --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PlayerConnectionUtils.java @@ -0,0 +1,15 @@ +package net.minecraft.server; + +public class PlayerConnectionUtils { + + public static void ensureMainThread(final Packet packet, final T packetlistener, IAsyncTaskHandler iasynctaskhandler) throws CancelledPacketHandleException { + if (!iasynctaskhandler.isMainThread()) { + iasynctaskhandler.postToMainThread(new Runnable() { + public void run() { + packet.a(packetlistener); + } + }); + throw CancelledPacketHandleException.INSTANCE; + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PlayerInteractManager.java b/eSpigot-Server/src/main/java/net/minecraft/server/PlayerInteractManager.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PlayerInteractManager.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PlayerInteractManager.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PlayerInventory.java b/eSpigot-Server/src/main/java/net/minecraft/server/PlayerInventory.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PlayerInventory.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PlayerInventory.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PlayerList.java b/eSpigot-Server/src/main/java/net/minecraft/server/PlayerList.java similarity index 99% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PlayerList.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PlayerList.java index 41f2cd5..39f90e3 100644 --- a/TacoSpigot-Server/src/main/java/net/minecraft/server/PlayerList.java +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PlayerList.java @@ -1,5 +1,6 @@ package net.minecraft.server; +import com.elevatemc.spigot.console.PandaConsoleCommandSender; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; @@ -11,7 +12,6 @@ import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.UUID; @@ -73,8 +73,7 @@ public abstract class PlayerList { public PlayerList(MinecraftServer minecraftserver) { this.cserver = minecraftserver.server = new CraftServer(minecraftserver, this); - minecraftserver.console = org.bukkit.craftbukkit.command.ColouredConsoleSender.getInstance(); - minecraftserver.reader.addCompleter(new org.bukkit.craftbukkit.command.ConsoleCommandCompleter(minecraftserver.server)); + minecraftserver.console = new PandaConsoleCommandSender(); // CraftBukkit end this.k = new GameProfileBanList(PlayerList.a); diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PlayerListBox.java b/eSpigot-Server/src/main/java/net/minecraft/server/PlayerListBox.java new file mode 100644 index 0000000..46a762a --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PlayerListBox.java @@ -0,0 +1,28 @@ +package net.minecraft.server; + +import java.util.Vector; +import javax.swing.JList; + +public class PlayerListBox extends JList implements IUpdatePlayerListBox { + + private MinecraftServer a; + private int b; + + public PlayerListBox(MinecraftServer minecraftserver) { + this.a = minecraftserver; + minecraftserver.a((IUpdatePlayerListBox) this); + } + + public void c() { + if (this.b++ % 20 == 0) { + Vector vector = new Vector(); + + for (int i = 0; i < this.a.getPlayerList().v().size(); ++i) { + vector.add(((EntityPlayer) this.a.getPlayerList().v().get(i)).getName()); + } + + this.setListData(vector); + } + + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PlayerSelector.java b/eSpigot-Server/src/main/java/net/minecraft/server/PlayerSelector.java new file mode 100644 index 0000000..7b48073 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PlayerSelector.java @@ -0,0 +1,628 @@ +package net.minecraft.server; + +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.google.common.collect.ComparisonChain; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.Map.Entry; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class PlayerSelector { + + private static final Pattern a = Pattern.compile("^@([pare])(?:\\[([\\w=,!-]*)\\])?$"); + private static final Pattern b = Pattern.compile("\\G([-!]?[\\w-]*)(?:$|,)"); + private static final Pattern c = Pattern.compile("\\G(\\w+)=([-!]?[\\w-]*)(?:$|,)"); + private static final Set d = Sets.newHashSet(new String[] { "x", "y", "z", "dx", "dy", "dz", "rm", "r"}); + + public static EntityPlayer getPlayer(ICommandListener icommandlistener, String s) { + return (EntityPlayer) getEntity(icommandlistener, s, EntityPlayer.class); + } + + public static T getEntity(ICommandListener icommandlistener, String s, Class oclass) { + List list = getPlayers(icommandlistener, s, oclass); + + return list.size() == 1 ? list.get(0) : null; + } + + public static IChatBaseComponent getPlayerNames(ICommandListener icommandlistener, String s) { + List list = getPlayers(icommandlistener, s, Entity.class); + + if (list.isEmpty()) { + return null; + } else { + ArrayList arraylist = Lists.newArrayList(); + Iterator iterator = list.iterator(); + + while (iterator.hasNext()) { + Entity entity = (Entity) iterator.next(); + + arraylist.add(entity.getScoreboardDisplayName()); + } + + return CommandAbstract.a(arraylist); + } + } + + public static List getPlayers(ICommandListener icommandlistener, String s, Class oclass) { + Matcher matcher = PlayerSelector.a.matcher(s); + + if (matcher.matches() && icommandlistener.a(1, "@")) { + Map map = c(matcher.group(2)); + + if (!b(icommandlistener, map)) { + return Collections.emptyList(); + } else { + String s1 = matcher.group(1); + BlockPosition blockposition = b(map, icommandlistener.getChunkCoordinates()); + List list = a(icommandlistener, map); + ArrayList arraylist = Lists.newArrayList(); + Iterator iterator = list.iterator(); + + while (iterator.hasNext()) { + World world = (World) iterator.next(); + + if (world != null) { + ArrayList arraylist1 = Lists.newArrayList(); + + arraylist1.addAll(a(map, s1)); + arraylist1.addAll(b(map)); + arraylist1.addAll(c(map)); + arraylist1.addAll(d(map)); + arraylist1.addAll(e(map)); + arraylist1.addAll(f(map)); + arraylist1.addAll(a(map, blockposition)); + arraylist1.addAll(g(map)); + arraylist.addAll(a(map, oclass, (List) arraylist1, s1, world, blockposition)); + } + } + + return a((List) arraylist, map, icommandlistener, oclass, s1, blockposition); + } + } else { + return Collections.emptyList(); + } + } + + private static List a(ICommandListener icommandlistener, Map map) { + ArrayList arraylist = Lists.newArrayList(); + + if (h(map)) { + arraylist.add(icommandlistener.getWorld()); + } else { + Collections.addAll(arraylist, MinecraftServer.getServer().worldServer); + } + + return arraylist; + } + + private static boolean b(ICommandListener icommandlistener, Map map) { + String s = b(map, "type"); + + s = s != null && s.startsWith("!") ? s.substring(1) : s; + if (s != null && !EntityTypes.b(s)) { + ChatMessage chatmessage = new ChatMessage("commands.generic.entity.invalidType", new Object[] { s}); + + chatmessage.getChatModifier().setColor(EnumChatFormat.RED); + icommandlistener.sendMessage(chatmessage); + return false; + } else { + return true; + } + } + + private static List> a(Map map, String s) { + ArrayList arraylist = Lists.newArrayList(); + String s1 = b(map, "type"); + final boolean flag = s1 != null && s1.startsWith("!"); + + if (flag) { + s1 = s1.substring(1); + } + + boolean flag1 = !s.equals("e"); + boolean flag2 = s.equals("r") && s1 != null; + + if ((s1 == null || !s.equals("e")) && !flag2) { + if (flag1) { + arraylist.add(new Predicate() { + public boolean a(Entity entity) { + return entity instanceof EntityHuman; + } + + public boolean apply(Object object) { + return this.a((Entity) object); + } + }); + } + } else { + arraylist.add(new Predicate() { + public boolean a(Entity entity) { + return EntityTypes.a(entity, s) != flag; + } + + public boolean apply(Object object) { + return this.a((Entity) object); + } + }); + } + + return arraylist; + } + + private static List> b(Map map) { + ArrayList arraylist = Lists.newArrayList(); + final int i = a(map, "lm", -1); + final int j = a(map, "l", -1); + + if (i > -1 || j > -1) { + arraylist.add(new Predicate() { + public boolean a(Entity entity) { + if (!(entity instanceof EntityPlayer)) { + return false; + } else { + EntityPlayer entityplayer = (EntityPlayer) entity; + + return (i <= -1 || entityplayer.expLevel >= i) && (j <= -1 || entityplayer.expLevel <= j); + } + } + + public boolean apply(Object object) { + return this.a((Entity) object); + } + }); + } + + return arraylist; + } + + private static List> c(Map map) { + ArrayList arraylist = Lists.newArrayList(); + final int i = a(map, "m", WorldSettings.EnumGamemode.NOT_SET.getId()); + + if (i != WorldSettings.EnumGamemode.NOT_SET.getId()) { + arraylist.add(new Predicate() { + public boolean a(Entity entity) { + if (!(entity instanceof EntityPlayer)) { + return false; + } else { + EntityPlayer entityplayer = (EntityPlayer) entity; + + return entityplayer.playerInteractManager.getGameMode().getId() == i; + } + } + + public boolean apply(Object object) { + return this.a((Entity) object); + } + }); + } + + return arraylist; + } + + private static List> d(Map map) { + ArrayList arraylist = Lists.newArrayList(); + String s = b(map, "team"); + final boolean flag = s != null && s.startsWith("!"); + + if (flag) { + s = s.substring(1); + } + final String sFinal = s; // required to use in anonymous class below + + if (s != null) { + arraylist.add(new Predicate() { + public boolean a(Entity entity) { + if (!(entity instanceof EntityLiving)) { + return false; + } else { + EntityLiving entityliving = (EntityLiving) entity; + ScoreboardTeamBase scoreboardteambase = entityliving.getScoreboardTeam(); + String s1 = scoreboardteambase == null ? "" : scoreboardteambase.getName(); + + return sFinal.equals(s1) != flag; + } + } + + public boolean apply(Object object) { + return this.a((Entity) object); + } + }); + } + + return arraylist; + } + + private static List> e(Map map) { + ArrayList arraylist = Lists.newArrayList(); + final Map map1 = a(map); + + if (map1 != null && map1.size() > 0) { + arraylist.add(new Predicate() { + public boolean a(Entity entity) { + Scoreboard scoreboard = MinecraftServer.getServer().getWorldServer(0).getScoreboard(); + Iterator iterator = map.entrySet().iterator(); + + Entry entry; + boolean flag; + int i; + + do { + if (!iterator.hasNext()) { + return true; + } + + entry = (Entry) iterator.next(); + String s = (String) entry.getKey(); + + flag = false; + if (s.endsWith("_min") && s.length() > 4) { + flag = true; + s = s.substring(0, s.length() - 4); + } + + ScoreboardObjective scoreboardobjective = scoreboard.getObjective(s); + + if (scoreboardobjective == null) { + return false; + } + + String s1 = entity instanceof EntityPlayer ? entity.getName() : entity.getUniqueID().toString(); + + if (!scoreboard.b(s1, scoreboardobjective)) { + return false; + } + + ScoreboardScore scoreboardscore = scoreboard.getPlayerScoreForObjective(s1, scoreboardobjective); + + i = scoreboardscore.getScore(); + if (i < ((Integer) entry.getValue()).intValue() && flag) { + return false; + } + } while (i <= ((Integer) entry.getValue()).intValue() || flag); + + return false; + } + + public boolean apply(Object object) { + return this.a((Entity) object); + } + }); + } + + return arraylist; + } + + private static List> f(Map map) { + ArrayList arraylist = Lists.newArrayList(); + String s = b(map, "name"); + final boolean flag = s != null && s.startsWith("!"); + + if (flag) { + s = s.substring(1); + } + final String sFinal = s; // required to use in anonymous class below + + if (s != null) { + arraylist.add(new Predicate() { + public boolean a(Entity entity) { + return entity.getName().equals(sFinal) != flag; + } + + public boolean apply(Object object) { + return this.a((Entity) object); + } + }); + } + + return arraylist; + } + + private static List> a(Map map, final BlockPosition blockposition) { + ArrayList arraylist = Lists.newArrayList(); + final int i = a(map, "rm", -1); + final int j = a(map, "r", -1); + + if (blockposition != null && (i >= 0 || j >= 0)) { + final int k = i * i; + final int l = j * j; + + arraylist.add(new Predicate() { + public boolean a(Entity entity) { + int i1 = (int) entity.c(blockposition); + + return (j < 0 || i >= k) && (l < 0 || i <= i1); + } + + public boolean apply(Object object) { + return this.a((Entity) object); + } + }); + } + + return arraylist; + } + + private static List> g(Map map) { + ArrayList arraylist = Lists.newArrayList(); + + if (map.containsKey("rym") || map.containsKey("ry")) { + final int k = a(a(map, "rym", 0)); + final int j = a(a(map, "ry", 359)); + arraylist.add(new Predicate() { + public boolean a(Entity entity) { + int i = PlayerSelector.a((int) Math.floor((double) entity.yaw)); + + return j > k ? i >= j || i <= k : i >= j && i <= k; + } + + public boolean apply(Object object) { + return this.a((Entity) object); + } + }); + } + + if (map.containsKey("rxm") || map.containsKey("rx")) { + final int k = a(a(map, "rxm", 0));; + final int j = a(a(map, "rx", 359)); + arraylist.add(new Predicate() { + public boolean a(Entity entity) { + int i = PlayerSelector.a((int) Math.floor((double) entity.pitch)); + + return j > k ? i >= j || i <= k : i >= j && i <= k; + } + + public boolean apply(Object object) { + return this.a((Entity) object); + } + }); + } + + return arraylist; + } + + private static List a(Map map, Class oclass, List> list, String s, World world, BlockPosition blockposition) { + ArrayList arraylist = Lists.newArrayList(); + String s1 = b(map, "type"); + + s1 = s1 != null && s1.startsWith("!") ? s1.substring(1) : s1; + boolean flag = !s.equals("e"); + boolean flag1 = s.equals("r") && s1 != null; + int i = a(map, "dx", 0); + int j = a(map, "dy", 0); + int k = a(map, "dz", 0); + int l = a(map, "r", -1); + Predicate predicate = Predicates.and(list); + Predicate predicate1 = Predicates.and(IEntitySelector.a, predicate); + + if (blockposition != null) { + int i1 = world.players.size(); + int j1 = world.entityList.size(); + boolean flag2 = i1 < j1 / 16; + final AxisAlignedBB axisalignedbb; + + if (!map.containsKey("dx") && !map.containsKey("dy") && !map.containsKey("dz")) { + if (l >= 0) { + axisalignedbb = new AxisAlignedBB((double) (blockposition.getX() - l), (double) (blockposition.getY() - l), (double) (blockposition.getZ() - l), (double) (blockposition.getX() + l + 1), (double) (blockposition.getY() + l + 1), (double) (blockposition.getZ() + l + 1)); + if (flag && flag2 && !flag1) { + arraylist.addAll(world.b(oclass, predicate1)); + } else { + arraylist.addAll(world.a(oclass, axisalignedbb, predicate1)); + } + } else if (s.equals("a")) { + arraylist.addAll(world.b(oclass, predicate)); + } else if (!s.equals("p") && (!s.equals("r") || flag1)) { + arraylist.addAll(world.a(oclass, predicate1)); + } else { + arraylist.addAll(world.b(oclass, predicate1)); + } + } else { + axisalignedbb = a(blockposition, i, j, k); + if (flag && flag2 && !flag1) { + Predicate predicate2 = new Predicate() { + public boolean a(Entity entity) { + return entity.locX >= axisalignedbb.a && entity.locY >= axisalignedbb.b && entity.locZ >= axisalignedbb.c ? entity.locX < axisalignedbb.d && entity.locY < axisalignedbb.e && entity.locZ < axisalignedbb.f : false; + } + + public boolean apply(Object object) { + return this.a((Entity) object); + } + }; + + arraylist.addAll(world.b(oclass, Predicates.and(predicate1, predicate2))); + } else { + arraylist.addAll(world.a(oclass, axisalignedbb, predicate1)); + } + } + } else if (s.equals("a")) { + arraylist.addAll(world.b(oclass, predicate)); + } else if (!s.equals("p") && (!s.equals("r") || flag1)) { + arraylist.addAll(world.a(oclass, predicate1)); + } else { + arraylist.addAll(world.b(oclass, predicate1)); + } + + return arraylist; + } + + private static List a(List list, Map map, ICommandListener icommandlistener, Class oclass, String s, final BlockPosition blockposition) { + int i = a(map, "c", !s.equals("a") && !s.equals("e") ? 1 : 0); + + if (!s.equals("p") && !s.equals("a") && !s.equals("e")) { + if (s.equals("r")) { + Collections.shuffle((List) list); + } + } else if (blockposition != null) { + Collections.sort((List) list, new Comparator() { + public int a(Entity entity, Entity entity1) { + return ComparisonChain.start().compare(entity.b(blockposition), entity1.b(blockposition)).result(); + } + + public int compare(Object object, Object object1) { + return this.a((Entity) object, (Entity) object1); + } + }); + } + + Entity entity = icommandlistener.f(); + + if (entity != null && oclass.isAssignableFrom(entity.getClass()) && i == 1 && ((List) list).contains(entity) && !"r".equals(s)) { + list = (List) Lists.newArrayList(entity); + } + + if (i != 0) { + if (i < 0) { + Collections.reverse((List) list); + } + + list = ((List) list).subList(0, Math.min(Math.abs(i), ((List) list).size())); + } + + return (List) list; + } + + private static AxisAlignedBB a(BlockPosition blockposition, int i, int j, int k) { + boolean flag = i < 0; + boolean flag1 = j < 0; + boolean flag2 = k < 0; + int l = blockposition.getX() + (flag ? i : 0); + int i1 = blockposition.getY() + (flag1 ? j : 0); + int j1 = blockposition.getZ() + (flag2 ? k : 0); + int k1 = blockposition.getX() + (flag ? 0 : i) + 1; + int l1 = blockposition.getY() + (flag1 ? 0 : j) + 1; + int i2 = blockposition.getZ() + (flag2 ? 0 : k) + 1; + + return new AxisAlignedBB((double) l, (double) i1, (double) j1, (double) k1, (double) l1, (double) i2); + } + + public static int a(int i) { + i %= 360; + if (i >= 160) { + i -= 360; + } + + if (i < 0) { + i += 360; + } + + return i; + } + + private static BlockPosition b(Map map, BlockPosition blockposition) { + return new BlockPosition(a(map, "x", blockposition.getX()), a(map, "y", blockposition.getY()), a(map, "z", blockposition.getZ())); + } + + private static boolean h(Map map) { + Iterator iterator = PlayerSelector.d.iterator(); + + String s; + + do { + if (!iterator.hasNext()) { + return false; + } + + s = (String) iterator.next(); + } while (!map.containsKey(s)); + + return true; + } + + private static int a(Map map, String s, int i) { + return map.containsKey(s) ? MathHelper.a((String) map.get(s), i) : i; + } + + private static String b(Map map, String s) { + return (String) map.get(s); + } + + public static Map a(Map map) { + HashMap hashmap = Maps.newHashMap(); + Iterator iterator = map.keySet().iterator(); + + while (iterator.hasNext()) { + String s = (String) iterator.next(); + + if (s.startsWith("score_") && s.length() > "score_".length()) { + hashmap.put(s.substring("score_".length()), Integer.valueOf(MathHelper.a((String) map.get(s), 1))); + } + } + + return hashmap; + } + + public static boolean isList(String s) { + Matcher matcher = PlayerSelector.a.matcher(s); + + if (!matcher.matches()) { + return false; + } else { + Map map = c(matcher.group(2)); + String s1 = matcher.group(1); + int i = !"a".equals(s1) && !"e".equals(s1) ? 1 : 0; + + return a(map, "c", i) != 1; + } + } + + public static boolean isPattern(String s) { + return PlayerSelector.a.matcher(s).matches(); + } + + private static Map c(String s) { + HashMap hashmap = Maps.newHashMap(); + + if (s == null) { + return hashmap; + } else { + int i = 0; + int j = -1; + + for (Matcher matcher = PlayerSelector.b.matcher(s); matcher.find(); j = matcher.end()) { + String s1 = null; + + switch (i++) { + case 0: + s1 = "x"; + break; + + case 1: + s1 = "y"; + break; + + case 2: + s1 = "z"; + break; + + case 3: + s1 = "r"; + } + + if (s1 != null && matcher.group(1).length() > 0) { + hashmap.put(s1, matcher.group(1)); + } + } + + if (j < s.length()) { + Matcher matcher1 = PlayerSelector.c.matcher(j == -1 ? s : s.substring(j)); + + while (matcher1.find()) { + hashmap.put(matcher1.group(1), matcher1.group(2)); + } + } + + return hashmap; + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PortalTravelAgent.java b/eSpigot-Server/src/main/java/net/minecraft/server/PortalTravelAgent.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PortalTravelAgent.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PortalTravelAgent.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/Position.java b/eSpigot-Server/src/main/java/net/minecraft/server/Position.java new file mode 100644 index 0000000..6c40cc1 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/Position.java @@ -0,0 +1,26 @@ +package net.minecraft.server; + +public class Position implements IPosition { + + protected final double a; + protected final double b; + protected final double c; + + public Position(double d0, double d1, double d2) { + this.a = d0; + this.b = d1; + this.c = d2; + } + + public double getX() { + return this.a; + } + + public double getY() { + return this.b; + } + + public double getZ() { + return this.c; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PossibleFishingResult.java b/eSpigot-Server/src/main/java/net/minecraft/server/PossibleFishingResult.java new file mode 100644 index 0000000..2e7f861 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PossibleFishingResult.java @@ -0,0 +1,50 @@ +package net.minecraft.server; + +import java.util.Random; + +public class PossibleFishingResult extends WeightedRandom.WeightedRandomChoice { + + private final ItemStack b; + private float c; + private boolean d; + + public PossibleFishingResult(ItemStack itemstack, int i) { + super(i); + this.b = itemstack; + } + + public ItemStack a(Random random) { + ItemStack itemstack = this.b.cloneItemStack(); + + if (this.c > 0.0F) { + int i = (int) (this.c * (float) this.b.j()); + int j = itemstack.j() - random.nextInt(random.nextInt(i) + 1); + + if (j > i) { + j = i; + } + + if (j < 1) { + j = 1; + } + + itemstack.setData(j); + } + + if (this.d) { + EnchantmentManager.a(random, itemstack, 30); + } + + return itemstack; + } + + public PossibleFishingResult a(float f) { + this.c = f; + return this; + } + + public PossibleFishingResult a() { + this.d = true; + return this; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PotionBrewer.java b/eSpigot-Server/src/main/java/net/minecraft/server/PotionBrewer.java new file mode 100644 index 0000000..a6bf653 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PotionBrewer.java @@ -0,0 +1,456 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +public class PotionBrewer { + + public static final String a = null; + public static final String b; + public static final String c = "+0-1-2-3&4-4+13"; + public static final String d; + public static final String e; + public static final String f; + public static final String g; + public static final String h; + public static final String i; + public static final String j; + public static final String k; + public static final String l; + public static final String m; + public static final String n; + private static final Map effectDurations = Maps.newHashMap(); + private static final Map effectAmplifiers = Maps.newHashMap(); + private static final Map q; + private static final String[] appearances; + + public static boolean a(int i, int j) { + return (i & 1 << j) != 0; + } + + private static int c(int i, int j) { + return a(i, j) ? 1 : 0; + } + + private static int d(int i, int j) { + return a(i, j) ? 0 : 1; + } + + public static int a(int i) { + return a(i, 5, 4, 3, 2, 1); + } + + public static int a(Collection collection) { + int i = 3694022; + + if (collection != null && !collection.isEmpty()) { + float f = 0.0F; + float f1 = 0.0F; + float f2 = 0.0F; + float f3 = 0.0F; + Iterator iterator = collection.iterator(); + + while (iterator.hasNext()) { + MobEffect mobeffect = (MobEffect) iterator.next(); + + if (mobeffect.isShowParticles()) { + int j = MobEffectList.byId[mobeffect.getEffectId()].k(); + + for (int k = 0; k <= mobeffect.getAmplifier(); ++k) { + f += (float) (j >> 16 & 255) / 255.0F; + f1 += (float) (j >> 8 & 255) / 255.0F; + f2 += (float) (j >> 0 & 255) / 255.0F; + ++f3; + } + } + } + + if (f3 == 0.0F) { + return 0; + } else { + f = f / f3 * 255.0F; + f1 = f1 / f3 * 255.0F; + f2 = f2 / f3 * 255.0F; + return (int) f << 16 | (int) f1 << 8 | (int) f2; + } + } else { + return i; + } + } + + public static boolean b(Collection collection) { + Iterator iterator = collection.iterator(); + + MobEffect mobeffect; + + do { + if (!iterator.hasNext()) { + return true; + } + + mobeffect = (MobEffect) iterator.next(); + } while (mobeffect.isAmbient()); + + return false; + } + + public static String c(int i) { + int j = a(i); + + return PotionBrewer.appearances[j]; + } + + private static int a(boolean flag, boolean flag1, boolean flag2, int i, int j, int k, int l) { + int i1 = 0; + + if (flag) { + i1 = d(l, j); + } else if (i != -1) { + if (i == 0 && h(l) == j) { + i1 = 1; + } else if (i == 1 && h(l) > j) { + i1 = 1; + } else if (i == 2 && h(l) < j) { + i1 = 1; + } + } else { + i1 = c(l, j); + } + + if (flag1) { + i1 *= k; + } + + if (flag2) { + i1 *= -1; + } + + return i1; + } + + private static int h(int i) { + int j; + + for (j = 0; i > 0; ++j) { + i &= i - 1; + } + + return j; + } + + private static int a(String s, int i, int j, int k) { + if (i < s.length() && j >= 0 && i < j) { + int l = s.indexOf(124, i); + int i1; + int j1; + + if (l >= 0 && l < j) { + i1 = a(s, i, l - 1, k); + if (i1 > 0) { + return i1; + } else { + j1 = a(s, l + 1, j, k); + return j1 > 0 ? j1 : 0; + } + } else { + i1 = s.indexOf(38, i); + if (i1 >= 0 && i1 < j) { + j1 = a(s, i, i1 - 1, k); + if (j1 <= 0) { + return 0; + } else { + int k1 = a(s, i1 + 1, j, k); + + return k1 <= 0 ? 0 : (j1 > k1 ? j1 : k1); + } + } else { + boolean flag = false; + boolean flag1 = false; + boolean flag2 = false; + boolean flag3 = false; + boolean flag4 = false; + byte b0 = -1; + int l1 = 0; + int i2 = 0; + int j2 = 0; + + for (int k2 = i; k2 < j; ++k2) { + char c0 = s.charAt(k2); + + if (c0 >= 48 && c0 <= 57) { + if (flag) { + i2 = c0 - 48; + flag1 = true; + } else { + l1 *= 10; + l1 += c0 - 48; + flag2 = true; + } + } else if (c0 == 42) { + flag = true; + } else if (c0 == 33) { + if (flag2) { + j2 += a(flag3, flag1, flag4, b0, l1, i2, k); + flag3 = false; + flag4 = false; + flag = false; + flag1 = false; + flag2 = false; + i2 = 0; + l1 = 0; + b0 = -1; + } + + flag3 = true; + } else if (c0 == 45) { + if (flag2) { + j2 += a(flag3, flag1, flag4, b0, l1, i2, k); + flag3 = false; + flag4 = false; + flag = false; + flag1 = false; + flag2 = false; + i2 = 0; + l1 = 0; + b0 = -1; + } + + flag4 = true; + } else if (c0 != 61 && c0 != 60 && c0 != 62) { + if (c0 == 43 && flag2) { + j2 += a(flag3, flag1, flag4, b0, l1, i2, k); + flag3 = false; + flag4 = false; + flag = false; + flag1 = false; + flag2 = false; + i2 = 0; + l1 = 0; + b0 = -1; + } + } else { + if (flag2) { + j2 += a(flag3, flag1, flag4, b0, l1, i2, k); + flag3 = false; + flag4 = false; + flag = false; + flag1 = false; + flag2 = false; + i2 = 0; + l1 = 0; + b0 = -1; + } + + if (c0 == 61) { + b0 = 0; + } else if (c0 == 60) { + b0 = 2; + } else if (c0 == 62) { + b0 = 1; + } + } + } + + if (flag2) { + j2 += a(flag3, flag1, flag4, b0, l1, i2, k); + } + + return j2; + } + } + } else { + return 0; + } + } + + public static List getEffects(int i, boolean flag) { + ArrayList arraylist = null; + MobEffectList[] amobeffectlist = MobEffectList.byId; + int j = amobeffectlist.length; + + for (int k = 0; k < j; ++k) { + MobEffectList mobeffectlist = amobeffectlist[k]; + + if (mobeffectlist != null && (!mobeffectlist.j() || flag)) { + String s = (String) PotionBrewer.effectDurations.get(Integer.valueOf(mobeffectlist.getId())); + + if (s != null) { + int l = a(s, 0, s.length(), i); + + if (l > 0) { + int i1 = 0; + String s1 = (String) PotionBrewer.effectAmplifiers.get(Integer.valueOf(mobeffectlist.getId())); + + if (s1 != null) { + i1 = a(s1, 0, s1.length(), i); + if (i1 < 0) { + i1 = 0; + } + } + + if (mobeffectlist.isInstant()) { + l = 1; + } else { + l = 1200 * (l * 3 + (l - 1) * 2); + l >>= i1; + l = (int) Math.round((double) l * mobeffectlist.getDurationModifier()); + if ((i & 16384) != 0) { + l = (int) Math.round((double) l * 0.75D + 0.5D); + } + } + + if (arraylist == null) { + arraylist = Lists.newArrayList(); + } + + MobEffect mobeffect = new MobEffect(mobeffectlist.getId(), l, i1); + + if ((i & 16384) != 0) { + mobeffect.setSplash(true); + } + + arraylist.add(mobeffect); + } + } + } + } + + return arraylist; + } + + private static int a(int i, int j, boolean flag, boolean flag1, boolean flag2) { + if (flag2) { + if (!a(i, j)) { + return 0; + } + } else if (flag) { + i &= ~(1 << j); + } else if (flag1) { + if ((i & 1 << j) == 0) { + i |= 1 << j; + } else { + i &= ~(1 << j); + } + } else { + i |= 1 << j; + } + + return i; + } + + public static int a(int i, String s) { + byte b0 = 0; + int j = s.length(); + boolean flag = false; + boolean flag1 = false; + boolean flag2 = false; + boolean flag3 = false; + int k = 0; + + for (int l = b0; l < j; ++l) { + char c0 = s.charAt(l); + + if (c0 >= 48 && c0 <= 57) { + k *= 10; + k += c0 - 48; + flag = true; + } else if (c0 == 33) { + if (flag) { + i = a(i, k, flag2, flag1, flag3); + flag3 = false; + flag1 = false; + flag2 = false; + flag = false; + k = 0; + } + + flag1 = true; + } else if (c0 == 45) { + if (flag) { + i = a(i, k, flag2, flag1, flag3); + flag3 = false; + flag1 = false; + flag2 = false; + flag = false; + k = 0; + } + + flag2 = true; + } else if (c0 == 43) { + if (flag) { + i = a(i, k, flag2, flag1, flag3); + flag3 = false; + flag1 = false; + flag2 = false; + flag = false; + k = 0; + } + } else if (c0 == 38) { + if (flag) { + i = a(i, k, flag2, flag1, flag3); + flag3 = false; + flag1 = false; + flag2 = false; + flag = false; + k = 0; + } + + flag3 = true; + } + } + + if (flag) { + i = a(i, k, flag2, flag1, flag3); + } + + return i & 32767; + } + + public static int a(int i, int j, int k, int l, int i1, int j1) { + return (a(i, j) ? 16 : 0) | (a(i, k) ? 8 : 0) | (a(i, l) ? 4 : 0) | (a(i, i1) ? 2 : 0) | (a(i, j1) ? 1 : 0); + } + + static { + PotionBrewer.effectDurations.put(Integer.valueOf(MobEffectList.REGENERATION.getId()), "0 & !1 & !2 & !3 & 0+6"); + b = "-0+1-2-3&4-4+13"; + PotionBrewer.effectDurations.put(Integer.valueOf(MobEffectList.FASTER_MOVEMENT.getId()), "!0 & 1 & !2 & !3 & 1+6"); + h = "+0+1-2-3&4-4+13"; + PotionBrewer.effectDurations.put(Integer.valueOf(MobEffectList.FIRE_RESISTANCE.getId()), "0 & 1 & !2 & !3 & 0+6"); + f = "+0-1+2-3&4-4+13"; + PotionBrewer.effectDurations.put(Integer.valueOf(MobEffectList.HEAL.getId()), "0 & !1 & 2 & !3"); + d = "-0-1+2-3&4-4+13"; + PotionBrewer.effectDurations.put(Integer.valueOf(MobEffectList.POISON.getId()), "!0 & !1 & 2 & !3 & 2+6"); + e = "-0+3-4+13"; + PotionBrewer.effectDurations.put(Integer.valueOf(MobEffectList.WEAKNESS.getId()), "!0 & !1 & !2 & 3 & 3+6"); + PotionBrewer.effectDurations.put(Integer.valueOf(MobEffectList.HARM.getId()), "!0 & !1 & 2 & 3"); + PotionBrewer.effectDurations.put(Integer.valueOf(MobEffectList.SLOWER_MOVEMENT.getId()), "!0 & 1 & !2 & 3 & 3+6"); + g = "+0-1-2+3&4-4+13"; + PotionBrewer.effectDurations.put(Integer.valueOf(MobEffectList.INCREASE_DAMAGE.getId()), "0 & !1 & !2 & 3 & 3+6"); + l = "-0+1+2-3+13&4-4"; + PotionBrewer.effectDurations.put(Integer.valueOf(MobEffectList.NIGHT_VISION.getId()), "!0 & 1 & 2 & !3 & 2+6"); + PotionBrewer.effectDurations.put(Integer.valueOf(MobEffectList.INVISIBILITY.getId()), "!0 & 1 & 2 & 3 & 2+6"); + m = "+0-1+2+3+13&4-4"; + PotionBrewer.effectDurations.put(Integer.valueOf(MobEffectList.WATER_BREATHING.getId()), "0 & !1 & 2 & 3 & 2+6"); + n = "+0+1-2+3&4-4+13"; + PotionBrewer.effectDurations.put(Integer.valueOf(MobEffectList.JUMP.getId()), "0 & 1 & !2 & 3 & 3+6"); + j = "+5-6-7"; + PotionBrewer.effectAmplifiers.put(Integer.valueOf(MobEffectList.FASTER_MOVEMENT.getId()), "5"); + PotionBrewer.effectAmplifiers.put(Integer.valueOf(MobEffectList.FASTER_DIG.getId()), "5"); + PotionBrewer.effectAmplifiers.put(Integer.valueOf(MobEffectList.INCREASE_DAMAGE.getId()), "5"); + PotionBrewer.effectAmplifiers.put(Integer.valueOf(MobEffectList.REGENERATION.getId()), "5"); + PotionBrewer.effectAmplifiers.put(Integer.valueOf(MobEffectList.HARM.getId()), "5"); + PotionBrewer.effectAmplifiers.put(Integer.valueOf(MobEffectList.HEAL.getId()), "5"); + PotionBrewer.effectAmplifiers.put(Integer.valueOf(MobEffectList.RESISTANCE.getId()), "5"); + PotionBrewer.effectAmplifiers.put(Integer.valueOf(MobEffectList.POISON.getId()), "5"); + PotionBrewer.effectAmplifiers.put(Integer.valueOf(MobEffectList.JUMP.getId()), "5"); + i = "-5+6-7"; + k = "+14&13-13"; + q = Maps.newHashMap(); + appearances = new String[] { "potion.prefix.mundane", "potion.prefix.uninteresting", "potion.prefix.bland", "potion.prefix.clear", "potion.prefix.milky", "potion.prefix.diffuse", "potion.prefix.artless", "potion.prefix.thin", "potion.prefix.awkward", "potion.prefix.flat", "potion.prefix.bulky", "potion.prefix.bungling", "potion.prefix.buttered", "potion.prefix.smooth", "potion.prefix.suave", "potion.prefix.debonair", "potion.prefix.thick", "potion.prefix.elegant", "potion.prefix.fancy", "potion.prefix.charming", "potion.prefix.dashing", "potion.prefix.refined", "potion.prefix.cordial", "potion.prefix.sparkling", "potion.prefix.potent", "potion.prefix.foul", "potion.prefix.odorless", "potion.prefix.rank", "potion.prefix.harsh", "potion.prefix.acrid", "potion.prefix.gross", "potion.prefix.stinky"}; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/PropertyManager.java b/eSpigot-Server/src/main/java/net/minecraft/server/PropertyManager.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/PropertyManager.java rename to eSpigot-Server/src/main/java/net/minecraft/server/PropertyManager.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/RandomPositionGenerator.java b/eSpigot-Server/src/main/java/net/minecraft/server/RandomPositionGenerator.java new file mode 100644 index 0000000..17fe75f --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/RandomPositionGenerator.java @@ -0,0 +1,88 @@ +package net.minecraft.server; + +import java.util.Random; + +public class RandomPositionGenerator { + + private static Vec3D a = new Vec3D(0.0D, 0.0D, 0.0D); + + public static Vec3D a(EntityCreature entitycreature, int i, int j) { + return c(entitycreature, i, j, (Vec3D) null); + } + + public static Vec3D a(EntityCreature entitycreature, int i, int j, Vec3D vec3d) { + RandomPositionGenerator.a = vec3d.a(entitycreature.locX, entitycreature.locY, entitycreature.locZ); + return c(entitycreature, i, j, RandomPositionGenerator.a); + } + + public static Vec3D b(EntityCreature entitycreature, int i, int j, Vec3D vec3d) { + RandomPositionGenerator.a = (new Vec3D(entitycreature.locX, entitycreature.locY, entitycreature.locZ)).d(vec3d); + return c(entitycreature, i, j, RandomPositionGenerator.a); + } + + private static Vec3D c(EntityCreature entitycreature, int i, int j, Vec3D vec3d) { + Random random = entitycreature.bc(); + boolean flag = false; + int k = 0; + int l = 0; + int i1 = 0; + float f = -99999.0F; + boolean flag1; + + if (entitycreature.ck()) { + double d0 = entitycreature.ch().c((double) MathHelper.floor(entitycreature.locX), (double) MathHelper.floor(entitycreature.locY), (double) MathHelper.floor(entitycreature.locZ)) + 4.0D; + double d1 = (double) (entitycreature.ci() + (float) i); + + flag1 = d0 < d1 * d1; + } else { + flag1 = false; + } + + for (int j1 = 0; j1 < 10; ++j1) { + int k1 = random.nextInt(2 * i + 1) - i; + int l1 = random.nextInt(2 * j + 1) - j; + int i2 = random.nextInt(2 * i + 1) - i; + + if (vec3d == null || (double) k1 * vec3d.a + (double) i2 * vec3d.c >= 0.0D) { + BlockPosition blockposition; + + if (entitycreature.ck() && i > 1) { + blockposition = entitycreature.ch(); + if (entitycreature.locX > (double) blockposition.getX()) { + k1 -= random.nextInt(i / 2); + } else { + k1 += random.nextInt(i / 2); + } + + if (entitycreature.locZ > (double) blockposition.getZ()) { + i2 -= random.nextInt(i / 2); + } else { + i2 += random.nextInt(i / 2); + } + } + + k1 += MathHelper.floor(entitycreature.locX); + l1 += MathHelper.floor(entitycreature.locY); + i2 += MathHelper.floor(entitycreature.locZ); + blockposition = new BlockPosition(k1, l1, i2); + if (!flag1 || entitycreature.e(blockposition)) { + float f1 = entitycreature.a(blockposition); + + if (f1 > f) { + f = f1; + k = k1; + l = l1; + i1 = i2; + flag = true; + } + } + } + } + + if (flag) { + return new Vec3D((double) k, (double) l, (double) i1); + } else { + return null; + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/RecipeArmorDye.java b/eSpigot-Server/src/main/java/net/minecraft/server/RecipeArmorDye.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/RecipeArmorDye.java rename to eSpigot-Server/src/main/java/net/minecraft/server/RecipeArmorDye.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/RecipeBookClone.java b/eSpigot-Server/src/main/java/net/minecraft/server/RecipeBookClone.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/RecipeBookClone.java rename to eSpigot-Server/src/main/java/net/minecraft/server/RecipeBookClone.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/RecipeFireworks.java b/eSpigot-Server/src/main/java/net/minecraft/server/RecipeFireworks.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/RecipeFireworks.java rename to eSpigot-Server/src/main/java/net/minecraft/server/RecipeFireworks.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/RecipeIngots.java b/eSpigot-Server/src/main/java/net/minecraft/server/RecipeIngots.java new file mode 100644 index 0000000..01c8bfd --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/RecipeIngots.java @@ -0,0 +1,23 @@ +package net.minecraft.server; + +public class RecipeIngots { + + private Object[][] a; + + public RecipeIngots() { + this.a = new Object[][] { { Blocks.GOLD_BLOCK, new ItemStack(Items.GOLD_INGOT, 9)}, { Blocks.IRON_BLOCK, new ItemStack(Items.IRON_INGOT, 9)}, { Blocks.DIAMOND_BLOCK, new ItemStack(Items.DIAMOND, 9)}, { Blocks.EMERALD_BLOCK, new ItemStack(Items.EMERALD, 9)}, { Blocks.LAPIS_BLOCK, new ItemStack(Items.DYE, 9, EnumColor.BLUE.getInvColorIndex())}, { Blocks.REDSTONE_BLOCK, new ItemStack(Items.REDSTONE, 9)}, { Blocks.COAL_BLOCK, new ItemStack(Items.COAL, 9, 0)}, { Blocks.HAY_BLOCK, new ItemStack(Items.WHEAT, 9)}, { Blocks.SLIME, new ItemStack(Items.SLIME, 9)}}; + } + + public void a(CraftingManager craftingmanager) { + for (int i = 0; i < this.a.length; ++i) { + Block block = (Block) this.a[i][0]; + ItemStack itemstack = (ItemStack) this.a[i][1]; + + craftingmanager.registerShapedRecipe(new ItemStack(block), new Object[] { "###", "###", "###", Character.valueOf('#'), itemstack}); + craftingmanager.registerShapedRecipe(itemstack, new Object[] { "#", Character.valueOf('#'), block}); + } + + craftingmanager.registerShapedRecipe(new ItemStack(Items.GOLD_INGOT), new Object[] { "###", "###", "###", Character.valueOf('#'), Items.GOLD_NUGGET}); + craftingmanager.registerShapedRecipe(new ItemStack(Items.GOLD_NUGGET, 9), new Object[] { "#", Character.valueOf('#'), Items.GOLD_INGOT}); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/RecipeMapClone.java b/eSpigot-Server/src/main/java/net/minecraft/server/RecipeMapClone.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/RecipeMapClone.java rename to eSpigot-Server/src/main/java/net/minecraft/server/RecipeMapClone.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/RecipeMapExtend.java b/eSpigot-Server/src/main/java/net/minecraft/server/RecipeMapExtend.java new file mode 100644 index 0000000..accac7a --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/RecipeMapExtend.java @@ -0,0 +1,53 @@ +package net.minecraft.server; + +public class RecipeMapExtend extends ShapedRecipes { + + public RecipeMapExtend() { + super(3, 3, new ItemStack[] { new ItemStack(Items.PAPER), new ItemStack(Items.PAPER), new ItemStack(Items.PAPER), new ItemStack(Items.PAPER), new ItemStack(Items.FILLED_MAP, 0, 32767), new ItemStack(Items.PAPER), new ItemStack(Items.PAPER), new ItemStack(Items.PAPER), new ItemStack(Items.PAPER)}, new ItemStack(Items.MAP, 0, 0)); + } + + public boolean a(InventoryCrafting inventorycrafting, World world) { + if (!super.a(inventorycrafting, world)) { + return false; + } else { + ItemStack itemstack = null; + + for (int i = 0; i < inventorycrafting.getSize() && itemstack == null; ++i) { + ItemStack itemstack1 = inventorycrafting.getItem(i); + + if (itemstack1 != null && itemstack1.getItem() == Items.FILLED_MAP) { + itemstack = itemstack1; + } + } + + if (itemstack == null) { + return false; + } else { + WorldMap worldmap = Items.FILLED_MAP.getSavedMap(itemstack, world); + + return worldmap == null ? false : worldmap.scale < 4; + } + } + } + + public ItemStack craftItem(InventoryCrafting inventorycrafting) { + ItemStack itemstack = null; + + for (int i = 0; i < inventorycrafting.getSize() && itemstack == null; ++i) { + ItemStack itemstack1 = inventorycrafting.getItem(i); + + if (itemstack1 != null && itemstack1.getItem() == Items.FILLED_MAP) { + itemstack = itemstack1; + } + } + + itemstack = itemstack.cloneItemStack(); + itemstack.count = 1; + if (itemstack.getTag() == null) { + itemstack.setTag(new NBTTagCompound()); + } + + itemstack.getTag().setBoolean("map_is_scaling", true); + return itemstack; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/RecipeRepair.java b/eSpigot-Server/src/main/java/net/minecraft/server/RecipeRepair.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/RecipeRepair.java rename to eSpigot-Server/src/main/java/net/minecraft/server/RecipeRepair.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/RecipesArmor.java b/eSpigot-Server/src/main/java/net/minecraft/server/RecipesArmor.java new file mode 100644 index 0000000..e922f16 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/RecipesArmor.java @@ -0,0 +1,24 @@ +package net.minecraft.server; + +public class RecipesArmor { + + private String[][] a = new String[][] { { "XXX", "X X"}, { "X X", "XXX", "XXX"}, { "XXX", "X X", "X X"}, { "X X", "X X"}}; + private Item[][] b; + + public RecipesArmor() { + this.b = new Item[][] { { Items.LEATHER, Items.IRON_INGOT, Items.DIAMOND, Items.GOLD_INGOT}, { Items.LEATHER_HELMET, Items.IRON_HELMET, Items.DIAMOND_HELMET, Items.GOLDEN_HELMET}, { Items.LEATHER_CHESTPLATE, Items.IRON_CHESTPLATE, Items.DIAMOND_CHESTPLATE, Items.GOLDEN_CHESTPLATE}, { Items.LEATHER_LEGGINGS, Items.IRON_LEGGINGS, Items.DIAMOND_LEGGINGS, Items.GOLDEN_LEGGINGS}, { Items.LEATHER_BOOTS, Items.IRON_BOOTS, Items.DIAMOND_BOOTS, Items.GOLDEN_BOOTS}}; + } + + public void a(CraftingManager craftingmanager) { + for (int i = 0; i < this.b[0].length; ++i) { + Item item = this.b[0][i]; + + for (int j = 0; j < this.b.length - 1; ++j) { + Item item1 = this.b[j + 1][i]; + + craftingmanager.registerShapedRecipe(new ItemStack(item1), new Object[] { this.a[j], Character.valueOf('X'), item}); + } + } + + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/RecipesBanner.java b/eSpigot-Server/src/main/java/net/minecraft/server/RecipesBanner.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/RecipesBanner.java rename to eSpigot-Server/src/main/java/net/minecraft/server/RecipesBanner.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/RecipesCrafting.java b/eSpigot-Server/src/main/java/net/minecraft/server/RecipesCrafting.java new file mode 100644 index 0000000..e64aebe --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/RecipesCrafting.java @@ -0,0 +1,42 @@ +package net.minecraft.server; + +public class RecipesCrafting { + + public RecipesCrafting() {} + + public void a(CraftingManager craftingmanager) { + craftingmanager.registerShapedRecipe(new ItemStack(Blocks.CHEST), new Object[] { "###", "# #", "###", Character.valueOf('#'), Blocks.PLANKS}); + craftingmanager.registerShapedRecipe(new ItemStack(Blocks.TRAPPED_CHEST), new Object[] { "#-", Character.valueOf('#'), Blocks.CHEST, Character.valueOf('-'), Blocks.TRIPWIRE_HOOK}); + craftingmanager.registerShapedRecipe(new ItemStack(Blocks.ENDER_CHEST), new Object[] { "###", "#E#", "###", Character.valueOf('#'), Blocks.OBSIDIAN, Character.valueOf('E'), Items.ENDER_EYE}); + craftingmanager.registerShapedRecipe(new ItemStack(Blocks.FURNACE), new Object[] { "###", "# #", "###", Character.valueOf('#'), Blocks.COBBLESTONE}); + craftingmanager.registerShapedRecipe(new ItemStack(Blocks.CRAFTING_TABLE), new Object[] { "##", "##", Character.valueOf('#'), Blocks.PLANKS}); + craftingmanager.registerShapedRecipe(new ItemStack(Blocks.SANDSTONE), new Object[] { "##", "##", Character.valueOf('#'), new ItemStack(Blocks.SAND, 1, BlockSand.EnumSandVariant.SAND.a())}); + craftingmanager.registerShapedRecipe(new ItemStack(Blocks.RED_SANDSTONE), new Object[] { "##", "##", Character.valueOf('#'), new ItemStack(Blocks.SAND, 1, BlockSand.EnumSandVariant.RED_SAND.a())}); + craftingmanager.registerShapedRecipe(new ItemStack(Blocks.SANDSTONE, 4, BlockSandStone.EnumSandstoneVariant.SMOOTH.a()), new Object[] { "##", "##", Character.valueOf('#'), new ItemStack(Blocks.SANDSTONE, 1, BlockSandStone.EnumSandstoneVariant.DEFAULT.a())}); + craftingmanager.registerShapedRecipe(new ItemStack(Blocks.RED_SANDSTONE, 4, BlockRedSandstone.EnumRedSandstoneVariant.SMOOTH.a()), new Object[] { "##", "##", Character.valueOf('#'), new ItemStack(Blocks.RED_SANDSTONE, 1, BlockRedSandstone.EnumRedSandstoneVariant.DEFAULT.a())}); + craftingmanager.registerShapedRecipe(new ItemStack(Blocks.SANDSTONE, 1, BlockSandStone.EnumSandstoneVariant.CHISELED.a()), new Object[] { "#", "#", Character.valueOf('#'), new ItemStack(Blocks.STONE_SLAB, 1, BlockDoubleStepAbstract.EnumStoneSlabVariant.SAND.a())}); + craftingmanager.registerShapedRecipe(new ItemStack(Blocks.RED_SANDSTONE, 1, BlockRedSandstone.EnumRedSandstoneVariant.CHISELED.a()), new Object[] { "#", "#", Character.valueOf('#'), new ItemStack(Blocks.STONE_SLAB2, 1, BlockDoubleStoneStepAbstract.EnumStoneSlab2Variant.RED_SANDSTONE.a())}); + craftingmanager.registerShapedRecipe(new ItemStack(Blocks.QUARTZ_BLOCK, 1, BlockQuartz.EnumQuartzVariant.CHISELED.a()), new Object[] { "#", "#", Character.valueOf('#'), new ItemStack(Blocks.STONE_SLAB, 1, BlockDoubleStepAbstract.EnumStoneSlabVariant.QUARTZ.a())}); + craftingmanager.registerShapedRecipe(new ItemStack(Blocks.QUARTZ_BLOCK, 2, BlockQuartz.EnumQuartzVariant.LINES_Y.a()), new Object[] { "#", "#", Character.valueOf('#'), new ItemStack(Blocks.QUARTZ_BLOCK, 1, BlockQuartz.EnumQuartzVariant.DEFAULT.a())}); + craftingmanager.registerShapedRecipe(new ItemStack(Blocks.STONEBRICK, 4), new Object[] { "##", "##", Character.valueOf('#'), new ItemStack(Blocks.STONE, 1, BlockStone.EnumStoneVariant.STONE.a())}); + craftingmanager.registerShapedRecipe(new ItemStack(Blocks.STONEBRICK, 1, BlockSmoothBrick.P), new Object[] { "#", "#", Character.valueOf('#'), new ItemStack(Blocks.STONE_SLAB, 1, BlockDoubleStepAbstract.EnumStoneSlabVariant.SMOOTHBRICK.a())}); + craftingmanager.registerShapelessRecipe(new ItemStack(Blocks.STONEBRICK, 1, BlockSmoothBrick.N), new Object[] { Blocks.STONEBRICK, Blocks.VINE}); + craftingmanager.registerShapelessRecipe(new ItemStack(Blocks.MOSSY_COBBLESTONE, 1), new Object[] { Blocks.COBBLESTONE, Blocks.VINE}); + craftingmanager.registerShapedRecipe(new ItemStack(Blocks.IRON_BARS, 16), new Object[] { "###", "###", Character.valueOf('#'), Items.IRON_INGOT}); + craftingmanager.registerShapedRecipe(new ItemStack(Blocks.GLASS_PANE, 16), new Object[] { "###", "###", Character.valueOf('#'), Blocks.GLASS}); + craftingmanager.registerShapedRecipe(new ItemStack(Blocks.REDSTONE_LAMP, 1), new Object[] { " R ", "RGR", " R ", Character.valueOf('R'), Items.REDSTONE, Character.valueOf('G'), Blocks.GLOWSTONE}); + craftingmanager.registerShapedRecipe(new ItemStack(Blocks.BEACON, 1), new Object[] { "GGG", "GSG", "OOO", Character.valueOf('G'), Blocks.GLASS, Character.valueOf('S'), Items.NETHER_STAR, Character.valueOf('O'), Blocks.OBSIDIAN}); + craftingmanager.registerShapedRecipe(new ItemStack(Blocks.NETHER_BRICK, 1), new Object[] { "NN", "NN", Character.valueOf('N'), Items.NETHERBRICK}); + craftingmanager.registerShapedRecipe(new ItemStack(Blocks.STONE, 2, BlockStone.EnumStoneVariant.DIORITE.a()), new Object[] { "CQ", "QC", Character.valueOf('C'), Blocks.COBBLESTONE, Character.valueOf('Q'), Items.QUARTZ}); + craftingmanager.registerShapelessRecipe(new ItemStack(Blocks.STONE, 1, BlockStone.EnumStoneVariant.GRANITE.a()), new Object[] { new ItemStack(Blocks.STONE, 1, BlockStone.EnumStoneVariant.DIORITE.a()), Items.QUARTZ}); + craftingmanager.registerShapelessRecipe(new ItemStack(Blocks.STONE, 2, BlockStone.EnumStoneVariant.ANDESITE.a()), new Object[] { new ItemStack(Blocks.STONE, 1, BlockStone.EnumStoneVariant.DIORITE.a()), Blocks.COBBLESTONE}); + craftingmanager.registerShapedRecipe(new ItemStack(Blocks.DIRT, 4, BlockDirt.EnumDirtVariant.COARSE_DIRT.a()), new Object[] { "DG", "GD", Character.valueOf('D'), new ItemStack(Blocks.DIRT, 1, BlockDirt.EnumDirtVariant.DIRT.a()), Character.valueOf('G'), Blocks.GRAVEL}); + craftingmanager.registerShapedRecipe(new ItemStack(Blocks.STONE, 4, BlockStone.EnumStoneVariant.DIORITE_SMOOTH.a()), new Object[] { "SS", "SS", Character.valueOf('S'), new ItemStack(Blocks.STONE, 1, BlockStone.EnumStoneVariant.DIORITE.a())}); + craftingmanager.registerShapedRecipe(new ItemStack(Blocks.STONE, 4, BlockStone.EnumStoneVariant.GRANITE_SMOOTH.a()), new Object[] { "SS", "SS", Character.valueOf('S'), new ItemStack(Blocks.STONE, 1, BlockStone.EnumStoneVariant.GRANITE.a())}); + craftingmanager.registerShapedRecipe(new ItemStack(Blocks.STONE, 4, BlockStone.EnumStoneVariant.ANDESITE_SMOOTH.a()), new Object[] { "SS", "SS", Character.valueOf('S'), new ItemStack(Blocks.STONE, 1, BlockStone.EnumStoneVariant.ANDESITE.a())}); + craftingmanager.registerShapedRecipe(new ItemStack(Blocks.PRISMARINE, 1, BlockPrismarine.b), new Object[] { "SS", "SS", Character.valueOf('S'), Items.PRISMARINE_SHARD}); + craftingmanager.registerShapedRecipe(new ItemStack(Blocks.PRISMARINE, 1, BlockPrismarine.N), new Object[] { "SSS", "SSS", "SSS", Character.valueOf('S'), Items.PRISMARINE_SHARD}); + craftingmanager.registerShapedRecipe(new ItemStack(Blocks.PRISMARINE, 1, BlockPrismarine.O), new Object[] { "SSS", "SIS", "SSS", Character.valueOf('S'), Items.PRISMARINE_SHARD, Character.valueOf('I'), new ItemStack(Items.DYE, 1, EnumColor.BLACK.getInvColorIndex())}); + craftingmanager.registerShapedRecipe(new ItemStack(Blocks.SEA_LANTERN, 1, 0), new Object[] { "SCS", "CCC", "SCS", Character.valueOf('S'), Items.PRISMARINE_SHARD, Character.valueOf('C'), Items.PRISMARINE_CRYSTALS}); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/RecipesDyes.java b/eSpigot-Server/src/main/java/net/minecraft/server/RecipesDyes.java new file mode 100644 index 0000000..48a08c1 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/RecipesDyes.java @@ -0,0 +1,50 @@ +package net.minecraft.server; + +public class RecipesDyes { + + public RecipesDyes() {} + + public void a(CraftingManager craftingmanager) { + int i; + + for (i = 0; i < 16; ++i) { + craftingmanager.registerShapelessRecipe(new ItemStack(Blocks.WOOL, 1, i), new Object[] { new ItemStack(Items.DYE, 1, 15 - i), new ItemStack(Item.getItemOf(Blocks.WOOL), 1, 0)}); + craftingmanager.registerShapedRecipe(new ItemStack(Blocks.STAINED_HARDENED_CLAY, 8, 15 - i), new Object[] { "###", "#X#", "###", Character.valueOf('#'), new ItemStack(Blocks.HARDENED_CLAY), Character.valueOf('X'), new ItemStack(Items.DYE, 1, i)}); + craftingmanager.registerShapedRecipe(new ItemStack(Blocks.STAINED_GLASS, 8, 15 - i), new Object[] { "###", "#X#", "###", Character.valueOf('#'), new ItemStack(Blocks.GLASS), Character.valueOf('X'), new ItemStack(Items.DYE, 1, i)}); + craftingmanager.registerShapedRecipe(new ItemStack(Blocks.STAINED_GLASS_PANE, 16, i), new Object[] { "###", "###", Character.valueOf('#'), new ItemStack(Blocks.STAINED_GLASS, 1, i)}); + } + + craftingmanager.registerShapelessRecipe(new ItemStack(Items.DYE, 1, EnumColor.YELLOW.getInvColorIndex()), new Object[] { new ItemStack(Blocks.YELLOW_FLOWER, 1, BlockFlowers.EnumFlowerVarient.DANDELION.b())}); + craftingmanager.registerShapelessRecipe(new ItemStack(Items.DYE, 1, EnumColor.RED.getInvColorIndex()), new Object[] { new ItemStack(Blocks.RED_FLOWER, 1, BlockFlowers.EnumFlowerVarient.POPPY.b())}); + craftingmanager.registerShapelessRecipe(new ItemStack(Items.DYE, 3, EnumColor.WHITE.getInvColorIndex()), new Object[] { Items.BONE}); + craftingmanager.registerShapelessRecipe(new ItemStack(Items.DYE, 2, EnumColor.PINK.getInvColorIndex()), new Object[] { new ItemStack(Items.DYE, 1, EnumColor.RED.getInvColorIndex()), new ItemStack(Items.DYE, 1, EnumColor.WHITE.getInvColorIndex())}); + craftingmanager.registerShapelessRecipe(new ItemStack(Items.DYE, 2, EnumColor.ORANGE.getInvColorIndex()), new Object[] { new ItemStack(Items.DYE, 1, EnumColor.RED.getInvColorIndex()), new ItemStack(Items.DYE, 1, EnumColor.YELLOW.getInvColorIndex())}); + craftingmanager.registerShapelessRecipe(new ItemStack(Items.DYE, 2, EnumColor.LIME.getInvColorIndex()), new Object[] { new ItemStack(Items.DYE, 1, EnumColor.GREEN.getInvColorIndex()), new ItemStack(Items.DYE, 1, EnumColor.WHITE.getInvColorIndex())}); + craftingmanager.registerShapelessRecipe(new ItemStack(Items.DYE, 2, EnumColor.GRAY.getInvColorIndex()), new Object[] { new ItemStack(Items.DYE, 1, EnumColor.BLACK.getInvColorIndex()), new ItemStack(Items.DYE, 1, EnumColor.WHITE.getInvColorIndex())}); + craftingmanager.registerShapelessRecipe(new ItemStack(Items.DYE, 2, EnumColor.SILVER.getInvColorIndex()), new Object[] { new ItemStack(Items.DYE, 1, EnumColor.GRAY.getInvColorIndex()), new ItemStack(Items.DYE, 1, EnumColor.WHITE.getInvColorIndex())}); + craftingmanager.registerShapelessRecipe(new ItemStack(Items.DYE, 3, EnumColor.SILVER.getInvColorIndex()), new Object[] { new ItemStack(Items.DYE, 1, EnumColor.BLACK.getInvColorIndex()), new ItemStack(Items.DYE, 1, EnumColor.WHITE.getInvColorIndex()), new ItemStack(Items.DYE, 1, EnumColor.WHITE.getInvColorIndex())}); + craftingmanager.registerShapelessRecipe(new ItemStack(Items.DYE, 2, EnumColor.LIGHT_BLUE.getInvColorIndex()), new Object[] { new ItemStack(Items.DYE, 1, EnumColor.BLUE.getInvColorIndex()), new ItemStack(Items.DYE, 1, EnumColor.WHITE.getInvColorIndex())}); + craftingmanager.registerShapelessRecipe(new ItemStack(Items.DYE, 2, EnumColor.CYAN.getInvColorIndex()), new Object[] { new ItemStack(Items.DYE, 1, EnumColor.BLUE.getInvColorIndex()), new ItemStack(Items.DYE, 1, EnumColor.GREEN.getInvColorIndex())}); + craftingmanager.registerShapelessRecipe(new ItemStack(Items.DYE, 2, EnumColor.PURPLE.getInvColorIndex()), new Object[] { new ItemStack(Items.DYE, 1, EnumColor.BLUE.getInvColorIndex()), new ItemStack(Items.DYE, 1, EnumColor.RED.getInvColorIndex())}); + craftingmanager.registerShapelessRecipe(new ItemStack(Items.DYE, 2, EnumColor.MAGENTA.getInvColorIndex()), new Object[] { new ItemStack(Items.DYE, 1, EnumColor.PURPLE.getInvColorIndex()), new ItemStack(Items.DYE, 1, EnumColor.PINK.getInvColorIndex())}); + craftingmanager.registerShapelessRecipe(new ItemStack(Items.DYE, 3, EnumColor.MAGENTA.getInvColorIndex()), new Object[] { new ItemStack(Items.DYE, 1, EnumColor.BLUE.getInvColorIndex()), new ItemStack(Items.DYE, 1, EnumColor.RED.getInvColorIndex()), new ItemStack(Items.DYE, 1, EnumColor.PINK.getInvColorIndex())}); + craftingmanager.registerShapelessRecipe(new ItemStack(Items.DYE, 4, EnumColor.MAGENTA.getInvColorIndex()), new Object[] { new ItemStack(Items.DYE, 1, EnumColor.BLUE.getInvColorIndex()), new ItemStack(Items.DYE, 1, EnumColor.RED.getInvColorIndex()), new ItemStack(Items.DYE, 1, EnumColor.RED.getInvColorIndex()), new ItemStack(Items.DYE, 1, EnumColor.WHITE.getInvColorIndex())}); + craftingmanager.registerShapelessRecipe(new ItemStack(Items.DYE, 1, EnumColor.LIGHT_BLUE.getInvColorIndex()), new Object[] { new ItemStack(Blocks.RED_FLOWER, 1, BlockFlowers.EnumFlowerVarient.BLUE_ORCHID.b())}); + craftingmanager.registerShapelessRecipe(new ItemStack(Items.DYE, 1, EnumColor.MAGENTA.getInvColorIndex()), new Object[] { new ItemStack(Blocks.RED_FLOWER, 1, BlockFlowers.EnumFlowerVarient.ALLIUM.b())}); + craftingmanager.registerShapelessRecipe(new ItemStack(Items.DYE, 1, EnumColor.SILVER.getInvColorIndex()), new Object[] { new ItemStack(Blocks.RED_FLOWER, 1, BlockFlowers.EnumFlowerVarient.HOUSTONIA.b())}); + craftingmanager.registerShapelessRecipe(new ItemStack(Items.DYE, 1, EnumColor.RED.getInvColorIndex()), new Object[] { new ItemStack(Blocks.RED_FLOWER, 1, BlockFlowers.EnumFlowerVarient.RED_TULIP.b())}); + craftingmanager.registerShapelessRecipe(new ItemStack(Items.DYE, 1, EnumColor.ORANGE.getInvColorIndex()), new Object[] { new ItemStack(Blocks.RED_FLOWER, 1, BlockFlowers.EnumFlowerVarient.ORANGE_TULIP.b())}); + craftingmanager.registerShapelessRecipe(new ItemStack(Items.DYE, 1, EnumColor.SILVER.getInvColorIndex()), new Object[] { new ItemStack(Blocks.RED_FLOWER, 1, BlockFlowers.EnumFlowerVarient.WHITE_TULIP.b())}); + craftingmanager.registerShapelessRecipe(new ItemStack(Items.DYE, 1, EnumColor.PINK.getInvColorIndex()), new Object[] { new ItemStack(Blocks.RED_FLOWER, 1, BlockFlowers.EnumFlowerVarient.PINK_TULIP.b())}); + craftingmanager.registerShapelessRecipe(new ItemStack(Items.DYE, 1, EnumColor.SILVER.getInvColorIndex()), new Object[] { new ItemStack(Blocks.RED_FLOWER, 1, BlockFlowers.EnumFlowerVarient.OXEYE_DAISY.b())}); + craftingmanager.registerShapelessRecipe(new ItemStack(Items.DYE, 2, EnumColor.YELLOW.getInvColorIndex()), new Object[] { new ItemStack(Blocks.DOUBLE_PLANT, 1, BlockTallPlant.EnumTallFlowerVariants.SUNFLOWER.a())}); + craftingmanager.registerShapelessRecipe(new ItemStack(Items.DYE, 2, EnumColor.MAGENTA.getInvColorIndex()), new Object[] { new ItemStack(Blocks.DOUBLE_PLANT, 1, BlockTallPlant.EnumTallFlowerVariants.SYRINGA.a())}); + craftingmanager.registerShapelessRecipe(new ItemStack(Items.DYE, 2, EnumColor.RED.getInvColorIndex()), new Object[] { new ItemStack(Blocks.DOUBLE_PLANT, 1, BlockTallPlant.EnumTallFlowerVariants.ROSE.a())}); + craftingmanager.registerShapelessRecipe(new ItemStack(Items.DYE, 2, EnumColor.PINK.getInvColorIndex()), new Object[] { new ItemStack(Blocks.DOUBLE_PLANT, 1, BlockTallPlant.EnumTallFlowerVariants.PAEONIA.a())}); + + for (i = 0; i < 16; ++i) { + craftingmanager.registerShapedRecipe(new ItemStack(Blocks.CARPET, 3, i), new Object[] { "##", Character.valueOf('#'), new ItemStack(Blocks.WOOL, 1, i)}); + } + + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/RecipesFood.java b/eSpigot-Server/src/main/java/net/minecraft/server/RecipesFood.java new file mode 100644 index 0000000..66e99e7 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/RecipesFood.java @@ -0,0 +1,20 @@ +package net.minecraft.server; + +public class RecipesFood { + + public RecipesFood() {} + + public void a(CraftingManager craftingmanager) { + craftingmanager.registerShapelessRecipe(new ItemStack(Items.MUSHROOM_STEW), new Object[] { Blocks.BROWN_MUSHROOM, Blocks.RED_MUSHROOM, Items.BOWL}); + craftingmanager.registerShapedRecipe(new ItemStack(Items.COOKIE, 8), new Object[] { "#X#", Character.valueOf('X'), new ItemStack(Items.DYE, 1, EnumColor.BROWN.getInvColorIndex()), Character.valueOf('#'), Items.WHEAT}); + craftingmanager.registerShapedRecipe(new ItemStack(Items.RABBIT_STEW), new Object[] { " R ", "CPM", " B ", Character.valueOf('R'), new ItemStack(Items.COOKED_RABBIT), Character.valueOf('C'), Items.CARROT, Character.valueOf('P'), Items.BAKED_POTATO, Character.valueOf('M'), Blocks.BROWN_MUSHROOM, Character.valueOf('B'), Items.BOWL}); + craftingmanager.registerShapedRecipe(new ItemStack(Items.RABBIT_STEW), new Object[] { " R ", "CPD", " B ", Character.valueOf('R'), new ItemStack(Items.COOKED_RABBIT), Character.valueOf('C'), Items.CARROT, Character.valueOf('P'), Items.BAKED_POTATO, Character.valueOf('D'), Blocks.RED_MUSHROOM, Character.valueOf('B'), Items.BOWL}); + craftingmanager.registerShapedRecipe(new ItemStack(Blocks.MELON_BLOCK), new Object[] { "MMM", "MMM", "MMM", Character.valueOf('M'), Items.MELON}); + craftingmanager.registerShapedRecipe(new ItemStack(Items.MELON_SEEDS), new Object[] { "M", Character.valueOf('M'), Items.MELON}); + craftingmanager.registerShapedRecipe(new ItemStack(Items.PUMPKIN_SEEDS, 4), new Object[] { "M", Character.valueOf('M'), Blocks.PUMPKIN}); + craftingmanager.registerShapelessRecipe(new ItemStack(Items.PUMPKIN_PIE), new Object[] { Blocks.PUMPKIN, Items.SUGAR, Items.EGG}); + craftingmanager.registerShapelessRecipe(new ItemStack(Items.FERMENTED_SPIDER_EYE), new Object[] { Items.SPIDER_EYE, Blocks.BROWN_MUSHROOM, Items.SUGAR}); + craftingmanager.registerShapelessRecipe(new ItemStack(Items.BLAZE_POWDER, 2), new Object[] { Items.BLAZE_ROD}); + craftingmanager.registerShapelessRecipe(new ItemStack(Items.MAGMA_CREAM), new Object[] { Items.BLAZE_POWDER, Items.SLIME}); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/RecipesFurnace.java b/eSpigot-Server/src/main/java/net/minecraft/server/RecipesFurnace.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/RecipesFurnace.java rename to eSpigot-Server/src/main/java/net/minecraft/server/RecipesFurnace.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/RecipesTools.java b/eSpigot-Server/src/main/java/net/minecraft/server/RecipesTools.java new file mode 100644 index 0000000..5f23f6c --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/RecipesTools.java @@ -0,0 +1,25 @@ +package net.minecraft.server; + +public class RecipesTools { + + private String[][] a = new String[][] { { "XXX", " # ", " # "}, { "X", "#", "#"}, { "XX", "X#", " #"}, { "XX", " #", " #"}}; + private Object[][] b; + + public RecipesTools() { + this.b = new Object[][] { { Blocks.PLANKS, Blocks.COBBLESTONE, Items.IRON_INGOT, Items.DIAMOND, Items.GOLD_INGOT}, { Items.WOODEN_PICKAXE, Items.STONE_PICKAXE, Items.IRON_PICKAXE, Items.DIAMOND_PICKAXE, Items.GOLDEN_PICKAXE}, { Items.WOODEN_SHOVEL, Items.STONE_SHOVEL, Items.IRON_SHOVEL, Items.DIAMOND_SHOVEL, Items.GOLDEN_SHOVEL}, { Items.WOODEN_AXE, Items.STONE_AXE, Items.IRON_AXE, Items.DIAMOND_AXE, Items.GOLDEN_AXE}, { Items.WOODEN_HOE, Items.STONE_HOE, Items.IRON_HOE, Items.DIAMOND_HOE, Items.GOLDEN_HOE}}; + } + + public void a(CraftingManager craftingmanager) { + for (int i = 0; i < this.b[0].length; ++i) { + Object object = this.b[0][i]; + + for (int j = 0; j < this.b.length - 1; ++j) { + Item item = (Item) this.b[j + 1][i]; + + craftingmanager.registerShapedRecipe(new ItemStack(item), new Object[] { this.a[j], Character.valueOf('#'), Items.STICK, Character.valueOf('X'), object}); + } + } + + craftingmanager.registerShapedRecipe(new ItemStack(Items.SHEARS), new Object[] { " #", "# ", Character.valueOf('#'), Items.IRON_INGOT}); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/RecipesWeapons.java b/eSpigot-Server/src/main/java/net/minecraft/server/RecipesWeapons.java new file mode 100644 index 0000000..d06b602 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/RecipesWeapons.java @@ -0,0 +1,26 @@ +package net.minecraft.server; + +public class RecipesWeapons { + + private String[][] a = new String[][] { { "X", "X", "#"}}; + private Object[][] b; + + public RecipesWeapons() { + this.b = new Object[][] { { Blocks.PLANKS, Blocks.COBBLESTONE, Items.IRON_INGOT, Items.DIAMOND, Items.GOLD_INGOT}, { Items.WOODEN_SWORD, Items.STONE_SWORD, Items.IRON_SWORD, Items.DIAMOND_SWORD, Items.GOLDEN_SWORD}}; + } + + public void a(CraftingManager craftingmanager) { + for (int i = 0; i < this.b[0].length; ++i) { + Object object = this.b[0][i]; + + for (int j = 0; j < this.b.length - 1; ++j) { + Item item = (Item) this.b[j + 1][i]; + + craftingmanager.registerShapedRecipe(new ItemStack(item), new Object[] { this.a[j], Character.valueOf('#'), Items.STICK, Character.valueOf('X'), object}); + } + } + + craftingmanager.registerShapedRecipe(new ItemStack(Items.BOW, 1), new Object[] { " #X", "# X", " #X", Character.valueOf('X'), Items.STRING, Character.valueOf('#'), Items.STICK}); + craftingmanager.registerShapedRecipe(new ItemStack(Items.ARROW, 4), new Object[] { "X", "#", "Y", Character.valueOf('Y'), Items.FEATHER, Character.valueOf('X'), Items.FLINT, Character.valueOf('#'), Items.STICK}); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/RedirectStream.java b/eSpigot-Server/src/main/java/net/minecraft/server/RedirectStream.java new file mode 100644 index 0000000..2bd51d5 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/RedirectStream.java @@ -0,0 +1,32 @@ +package net.minecraft.server; + +import java.io.OutputStream; +import java.io.PrintStream; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class RedirectStream extends PrintStream { + + private static final Logger a = LogManager.getLogger(); + private final String b; + + public RedirectStream(String s, OutputStream outputstream) { + super(outputstream); + this.b = s; + } + + public void println(String s) { + this.a(s); + } + + public void println(Object object) { + this.a(String.valueOf(object)); + } + + private void a(String s) { + StackTraceElement[] astacktraceelement = Thread.currentThread().getStackTrace(); + StackTraceElement stacktraceelement = astacktraceelement[Math.min(3, astacktraceelement.length)]; + + RedirectStream.a.info("[{}]@.({}:{}): {}", new Object[] { this.b, stacktraceelement.getFileName(), Integer.valueOf(stacktraceelement.getLineNumber()), s}); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/RegionFile.java b/eSpigot-Server/src/main/java/net/minecraft/server/RegionFile.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/RegionFile.java rename to eSpigot-Server/src/main/java/net/minecraft/server/RegionFile.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/RegionFileCache.java b/eSpigot-Server/src/main/java/net/minecraft/server/RegionFileCache.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/RegionFileCache.java rename to eSpigot-Server/src/main/java/net/minecraft/server/RegionFileCache.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/Registry.java b/eSpigot-Server/src/main/java/net/minecraft/server/Registry.java new file mode 100644 index 0000000..44f52d1 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/Registry.java @@ -0,0 +1,3 @@ +package net.minecraft.server; + +public interface Registry extends Iterable {} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/RegistryBlocks.java b/eSpigot-Server/src/main/java/net/minecraft/server/RegistryBlocks.java new file mode 100644 index 0000000..fa0c450 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/RegistryBlocks.java @@ -0,0 +1,37 @@ +package net.minecraft.server; + +import org.apache.commons.lang3.Validate; + +public class RegistryBlocks extends RegistryMaterials { + + private final K d; + private V e; + + public RegistryBlocks(K k0) { + this.d = k0; + } + + public void a(int i, K k0, V v0) { + if (this.d.equals(k0)) { + this.e = v0; + } + + super.a(i, k0, v0); + } + + public void a() { + Validate.notNull(this.d); + } + + public V get(K k0) { + V object = super.get(k0); + + return object == null ? this.e : object; + } + + public V a(int i) { + V object = super.a(i); + + return object == null ? this.e : object; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/RegistryDefault.java b/eSpigot-Server/src/main/java/net/minecraft/server/RegistryDefault.java new file mode 100644 index 0000000..0988617 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/RegistryDefault.java @@ -0,0 +1,16 @@ +package net.minecraft.server; + +public class RegistryDefault extends RegistrySimple { + + private final V a; + + public RegistryDefault(V v0) { + this.a = v0; + } + + public V get(K k0) { + V object = super.get(k0); + + return object == null ? this.a : object; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/RegistryID.java b/eSpigot-Server/src/main/java/net/minecraft/server/RegistryID.java new file mode 100644 index 0000000..d9d4582 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/RegistryID.java @@ -0,0 +1,40 @@ +package net.minecraft.server; + +import com.google.common.base.Predicates; +import com.google.common.collect.Iterators; +import com.google.common.collect.Lists; +import java.util.IdentityHashMap; +import java.util.Iterator; +import java.util.List; + +public class RegistryID implements Registry { + + private final IdentityHashMap a = new IdentityHashMap(512); + private final List b = Lists.newArrayList(); + + public RegistryID() {} + + public void a(T t0, int i) { + this.a.put(t0, Integer.valueOf(i)); + + while (this.b.size() <= i) { + this.b.add(null); + } + + this.b.set(i, t0); + } + + public int b(T t0) { + Integer integer = (Integer) this.a.get(t0); + + return integer == null ? -1 : integer.intValue(); + } + + public final T a(int i) { + return i >= 0 && i < this.b.size() ? this.b.get(i) : null; + } + + public Iterator iterator() { + return Iterators.filter(this.b.iterator(), Predicates.notNull()); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/RegistryMaterials.java b/eSpigot-Server/src/main/java/net/minecraft/server/RegistryMaterials.java new file mode 100644 index 0000000..936a6e3 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/RegistryMaterials.java @@ -0,0 +1,49 @@ +package net.minecraft.server; + +import com.google.common.collect.BiMap; +import com.google.common.collect.HashBiMap; +import java.util.Iterator; +import java.util.Map; + +public class RegistryMaterials extends RegistrySimple implements Registry { + + protected final RegistryID a = new RegistryID(); + protected final Map b; + + public RegistryMaterials() { + this.b = ((BiMap) this.c).inverse(); + } + + public void a(int i, K k0, V v0) { + this.a.a(v0, i); + this.a(k0, v0); + } + + protected Map b() { + return HashBiMap.create(); + } + + public V get(K k0) { + return super.get(k0); + } + + public K c(V v0) { + return this.b.get(v0); + } + + public boolean d(K k0) { + return super.d(k0); + } + + public int b(V v0) { + return this.a.b(v0); + } + + public V a(int i) { + return this.a.a(i); + } + + public Iterator iterator() { + return this.a.iterator(); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/RegistrySimple.java b/eSpigot-Server/src/main/java/net/minecraft/server/RegistrySimple.java new file mode 100644 index 0000000..e76cb6e --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/RegistrySimple.java @@ -0,0 +1,48 @@ +package net.minecraft.server; + +import com.google.common.collect.Maps; +import java.util.Collections; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import org.apache.commons.lang3.Validate; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class RegistrySimple implements IRegistry { + + private static final Logger a = LogManager.getLogger(); + protected final Map c = this.b(); + + public RegistrySimple() {} + + protected Map b() { + return Maps.newHashMap(); + } + + public V get(K k0) { + return this.c.get(k0); + } + + public void a(K k0, V v0) { + Validate.notNull(k0); + Validate.notNull(v0); + if (this.c.containsKey(k0)) { + RegistrySimple.a.debug("Adding duplicate key \'" + k0 + "\' to registry"); + } + + this.c.put(k0, v0); + } + + public Set keySet() { + return Collections.unmodifiableSet(this.c.keySet()); + } + + public boolean d(K k0) { + return this.c.containsKey(k0); + } + + public Iterator iterator() { + return this.c.values().iterator(); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/RemoteConnectionThread.java b/eSpigot-Server/src/main/java/net/minecraft/server/RemoteConnectionThread.java new file mode 100644 index 0000000..6109842 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/RemoteConnectionThread.java @@ -0,0 +1,147 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import java.io.IOException; +import java.net.DatagramSocket; +import java.net.ServerSocket; +import java.util.Iterator; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; + +public abstract class RemoteConnectionThread implements Runnable { + + private static final AtomicInteger h = new AtomicInteger(0); + protected boolean a; + protected IMinecraftServer b; + protected final String c; + protected Thread d; + protected int e = 5; + protected List f = Lists.newArrayList(); + protected List g = Lists.newArrayList(); + + protected RemoteConnectionThread(IMinecraftServer iminecraftserver, String s) { + this.b = iminecraftserver; + this.c = s; + if (this.b.isDebugging()) { + this.c("Debugging is enabled, performance maybe reduced!"); + } + + } + + public synchronized void a() { + this.d = new Thread(this, this.c + " #" + RemoteConnectionThread.h.incrementAndGet()); + this.d.start(); + this.a = true; + } + + public boolean c() { + return this.a; + } + + protected void a(String s) { + this.b.h(s); + } + + protected void b(String s) { + this.b.info(s); + } + + protected void c(String s) { + this.b.warning(s); + } + + protected void d(String s) { + this.b.g(s); + } + + protected int d() { + return this.b.I(); + } + + protected void a(DatagramSocket datagramsocket) { + this.a("registerSocket: " + datagramsocket); + this.f.add(datagramsocket); + } + + protected boolean a(DatagramSocket datagramsocket, boolean flag) { + this.a("closeSocket: " + datagramsocket); + if (null == datagramsocket) { + return false; + } else { + boolean flag1 = false; + + if (!datagramsocket.isClosed()) { + datagramsocket.close(); + flag1 = true; + } + + if (flag) { + this.f.remove(datagramsocket); + } + + return flag1; + } + } + + protected boolean b(ServerSocket serversocket) { + return this.a(serversocket, true); + } + + protected boolean a(ServerSocket serversocket, boolean flag) { + this.a("closeSocket: " + serversocket); + if (null == serversocket) { + return false; + } else { + boolean flag1 = false; + + try { + if (!serversocket.isClosed()) { + serversocket.close(); + flag1 = true; + } + } catch (IOException ioexception) { + this.c("IO: " + ioexception.getMessage()); + } + + if (flag) { + this.g.remove(serversocket); + } + + return flag1; + } + } + + protected void e() { + this.a(false); + } + + protected void a(boolean flag) { + int i = 0; + Iterator iterator = this.f.iterator(); + + while (iterator.hasNext()) { + DatagramSocket datagramsocket = (DatagramSocket) iterator.next(); + + if (this.a(datagramsocket, false)) { + ++i; + } + } + + this.f.clear(); + iterator = this.g.iterator(); + + while (iterator.hasNext()) { + ServerSocket serversocket = (ServerSocket) iterator.next(); + + if (this.a(serversocket, false)) { + ++i; + } + } + + this.g.clear(); + if (flag && 0 < i) { + this.c("Force closed " + i + " sockets"); + } + + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/RemoteControlCommandListener.java b/eSpigot-Server/src/main/java/net/minecraft/server/RemoteControlCommandListener.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/RemoteControlCommandListener.java rename to eSpigot-Server/src/main/java/net/minecraft/server/RemoteControlCommandListener.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/RemoteControlListener.java b/eSpigot-Server/src/main/java/net/minecraft/server/RemoteControlListener.java new file mode 100644 index 0000000..a4da2b4 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/RemoteControlListener.java @@ -0,0 +1,111 @@ +package net.minecraft.server; + +import com.google.common.collect.Maps; +import java.io.IOException; +import java.net.InetAddress; +import java.net.ServerSocket; +import java.net.Socket; +import java.net.SocketAddress; +import java.net.SocketTimeoutException; +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; + +public class RemoteControlListener extends RemoteConnectionThread { + + private int h; + private int i; + private String j; + private ServerSocket k; + private String l; + private Map m; + + public RemoteControlListener(IMinecraftServer iminecraftserver) { + super(iminecraftserver, "RCON Listener"); + this.h = iminecraftserver.a("rcon.port", 0); + this.l = iminecraftserver.a("rcon.password", ""); + this.j = iminecraftserver.E(); + this.i = iminecraftserver.F(); + if (0 == this.h) { + this.h = this.i + 10; + this.b("Setting default rcon port to " + this.h); + iminecraftserver.a("rcon.port", (Object) Integer.valueOf(this.h)); + if (0 == this.l.length()) { + iminecraftserver.a("rcon.password", (Object) ""); + } + + iminecraftserver.a(); + } + + if (0 == this.j.length()) { + this.j = "0.0.0.0"; + } + + this.f(); + this.k = null; + } + + private void f() { + this.m = Maps.newHashMap(); + } + + private void g() { + Iterator iterator = this.m.entrySet().iterator(); + + while (iterator.hasNext()) { + Entry entry = (Entry) iterator.next(); + + if (!((RemoteControlSession) entry.getValue()).c()) { + iterator.remove(); + } + } + + } + + public void run() { + this.b("RCON running on " + this.j + ":" + this.h); + + try { + while (this.a) { + try { + Socket socket = this.k.accept(); + + socket.setSoTimeout(500); + RemoteControlSession remotecontrolsession = new RemoteControlSession(this.b, socket); + + remotecontrolsession.a(); + this.m.put(socket.getRemoteSocketAddress(), remotecontrolsession); + this.g(); + } catch (SocketTimeoutException sockettimeoutexception) { + this.g(); + } catch (IOException ioexception) { + if (this.a) { + this.b("IO: " + ioexception.getMessage()); + } + } + } + } finally { + this.b(this.k); + } + + } + + public void a() { + if (0 == this.l.length()) { + this.c("No rcon password set in \'" + this.b.b() + "\', rcon disabled!"); + } else if (0 < this.h && '\uffff' >= this.h) { + if (!this.a) { + try { + this.k = new ServerSocket(this.h, 0, InetAddress.getByName(this.j)); + this.k.setSoTimeout(500); + super.a(); + } catch (IOException ioexception) { + this.c("Unable to initialise rcon on " + this.j + ":" + this.h + " : " + ioexception.getMessage()); + } + + } + } else { + this.c("Invalid rcon port " + this.h + " found in \'" + this.b.b() + "\', rcon disabled!"); + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/RemoteControlSession.java b/eSpigot-Server/src/main/java/net/minecraft/server/RemoteControlSession.java new file mode 100644 index 0000000..1b45f81 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/RemoteControlSession.java @@ -0,0 +1,152 @@ +package net.minecraft.server; + +import java.io.BufferedInputStream; +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.net.Socket; +import java.net.SocketTimeoutException; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class RemoteControlSession extends RemoteConnectionThread { + + private static final Logger h = LogManager.getLogger(); + private boolean i; + private Socket j; + private byte[] k = new byte[1460]; + private String l; + + RemoteControlSession(IMinecraftServer iminecraftserver, Socket socket) { + super(iminecraftserver, "RCON Client"); + this.j = socket; + + try { + this.j.setSoTimeout(0); + } catch (Exception exception) { + this.a = false; + } + + this.l = iminecraftserver.a("rcon.password", ""); + this.b("Rcon connection from: " + socket.getInetAddress()); + } + + public void run() { + while (true) { + try { + if (!this.a) { + break; + } + + BufferedInputStream bufferedinputstream = new BufferedInputStream(this.j.getInputStream()); + int i = bufferedinputstream.read(this.k, 0, 1460); + + if (10 <= i) { + byte b0 = 0; + int j = StatusChallengeUtils.b(this.k, 0, i); + + if (j != i - 4) { + return; + } + + int k = b0 + 4; + int l = StatusChallengeUtils.b(this.k, k, i); + + k += 4; + int i1 = StatusChallengeUtils.b(this.k, k); + + k += 4; + switch (i1) { + case 2: + if (this.i) { + String s = StatusChallengeUtils.a(this.k, k, i); + + try { + this.a(l, this.b.executeRemoteCommand(s)); + } catch (Exception exception) { + this.a(l, "Error executing: " + s + " (" + exception.getMessage() + ")"); + } + continue; + } + + this.f(); + continue; + + case 3: + String s1 = StatusChallengeUtils.a(this.k, k, i); + int j1 = k + s1.length(); + + if (0 != s1.length() && s1.equals(this.l)) { + this.i = true; + this.a(l, 2, ""); + continue; + } + + this.i = false; + this.f(); + continue; + + default: + this.a(l, String.format("Unknown request %s", new Object[] { Integer.toHexString(i1)})); + continue; + } + } + } catch (SocketTimeoutException sockettimeoutexception) { + break; + } catch (IOException ioexception) { + break; + } catch (Exception exception1) { + RemoteControlSession.h.error("Exception whilst parsing RCON input", exception1); + break; + } finally { + this.g(); + } + + return; + } + + } + + private void a(int i, int j, String s) throws IOException { + ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream(1248); + DataOutputStream dataoutputstream = new DataOutputStream(bytearrayoutputstream); + byte[] abyte = s.getBytes("UTF-8"); + + dataoutputstream.writeInt(Integer.reverseBytes(abyte.length + 10)); + dataoutputstream.writeInt(Integer.reverseBytes(i)); + dataoutputstream.writeInt(Integer.reverseBytes(j)); + dataoutputstream.write(abyte); + dataoutputstream.write(0); + dataoutputstream.write(0); + this.j.getOutputStream().write(bytearrayoutputstream.toByteArray()); + } + + private void f() throws IOException { + this.a(-1, 2, ""); + } + + private void a(int i, String s) throws IOException { + int j = s.length(); + + do { + int k = 4096 <= j ? 4096 : j; + + this.a(i, 0, s.substring(0, k)); + s = s.substring(k); + j = s.length(); + } while (0 != j); + + } + + private void g() { + if (null != this.j) { + try { + this.j.close(); + } catch (IOException ioexception) { + this.c("IO: " + ioexception.getMessage()); + } + + this.j = null; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/RemoteStatusListener.java b/eSpigot-Server/src/main/java/net/minecraft/server/RemoteStatusListener.java new file mode 100644 index 0000000..82c97f2 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/RemoteStatusListener.java @@ -0,0 +1,331 @@ +package net.minecraft.server; + +import com.google.common.collect.Maps; +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.DatagramSocket; +import java.net.InetAddress; +import java.net.PortUnreachableException; +import java.net.SocketAddress; +import java.net.SocketException; +import java.net.SocketTimeoutException; +import java.net.UnknownHostException; +import java.util.Date; +import java.util.Iterator; +import java.util.Map; +import java.util.Random; +import java.util.Map.Entry; + +public class RemoteStatusListener extends RemoteConnectionThread { + + private long h; + private int i; + private int j; + private int k; + private String l; + private String m; + private DatagramSocket n; + private byte[] o = new byte[1460]; + private DatagramPacket p; + private Map q; + private String r; + private String s; + private Map t; + private long u; + private RemoteStatusReply v; + private long w; + + public RemoteStatusListener(IMinecraftServer iminecraftserver) { + super(iminecraftserver, "Query Listener"); + this.i = iminecraftserver.a("query.port", 0); + this.s = iminecraftserver.E(); + this.j = iminecraftserver.F(); + this.l = iminecraftserver.G(); + this.k = iminecraftserver.J(); + this.m = iminecraftserver.U(); + this.w = 0L; + this.r = "0.0.0.0"; + if (0 != this.s.length() && !this.r.equals(this.s)) { + this.r = this.s; + } else { + this.s = "0.0.0.0"; + + try { + InetAddress inetaddress = InetAddress.getLocalHost(); + + this.r = inetaddress.getHostAddress(); + } catch (UnknownHostException unknownhostexception) { + this.c("Unable to determine local host IP, please set server-ip in \'" + iminecraftserver.b() + "\' : " + unknownhostexception.getMessage()); + } + } + + if (0 == this.i) { + this.i = this.j; + this.b("Setting default query port to " + this.i); + iminecraftserver.a("query.port", (Object) Integer.valueOf(this.i)); + iminecraftserver.a("debug", (Object) Boolean.valueOf(false)); + iminecraftserver.a(); + } + + this.q = Maps.newHashMap(); + this.v = new RemoteStatusReply(1460); + this.t = Maps.newHashMap(); + this.u = (new Date()).getTime(); + } + + private void a(byte[] abyte, DatagramPacket datagrampacket) throws IOException { + this.n.send(new DatagramPacket(abyte, abyte.length, datagrampacket.getSocketAddress())); + } + + private boolean a(DatagramPacket datagrampacket) throws IOException { + byte[] abyte = datagrampacket.getData(); + int i = datagrampacket.getLength(); + SocketAddress socketaddress = datagrampacket.getSocketAddress(); + + this.a("Packet len " + i + " [" + socketaddress + "]"); + if (3 <= i && -2 == abyte[0] && -3 == abyte[1]) { + this.a("Packet \'" + StatusChallengeUtils.a(abyte[2]) + "\' [" + socketaddress + "]"); + switch (abyte[2]) { + case 0: + if (!this.c(datagrampacket).booleanValue()) { + this.a("Invalid challenge [" + socketaddress + "]"); + return false; + } else if (15 == i) { + this.a(this.b(datagrampacket), datagrampacket); + this.a("Rules [" + socketaddress + "]"); + } else { + RemoteStatusReply remotestatusreply = new RemoteStatusReply(1460); + + remotestatusreply.a((int) 0); + remotestatusreply.a(this.a(datagrampacket.getSocketAddress())); + remotestatusreply.a(this.l); + remotestatusreply.a("SMP"); + remotestatusreply.a(this.m); + remotestatusreply.a(Integer.toString(this.d())); + remotestatusreply.a(Integer.toString(this.k)); + remotestatusreply.a((short) this.j); + remotestatusreply.a(this.r); + this.a(remotestatusreply.a(), datagrampacket); + this.a("Status [" + socketaddress + "]"); + } + + default: + return true; + + case 9: + this.d(datagrampacket); + this.a("Challenge [" + socketaddress + "]"); + return true; + } + } else { + this.a("Invalid packet [" + socketaddress + "]"); + return false; + } + } + + private byte[] b(DatagramPacket datagrampacket) throws IOException { + long i = MinecraftServer.az(); + + if (i < this.w + 5000L) { + byte[] abyte = this.v.a(); + byte[] abyte1 = this.a(datagrampacket.getSocketAddress()); + + abyte[1] = abyte1[0]; + abyte[2] = abyte1[1]; + abyte[3] = abyte1[2]; + abyte[4] = abyte1[3]; + return abyte; + } else { + this.w = i; + this.v.b(); + this.v.a((int) 0); + this.v.a(this.a(datagrampacket.getSocketAddress())); + this.v.a("splitnum"); + this.v.a((int) 128); + this.v.a((int) 0); + this.v.a("hostname"); + this.v.a(this.l); + this.v.a("gametype"); + this.v.a("SMP"); + this.v.a("game_id"); + this.v.a("MINECRAFT"); + this.v.a("version"); + this.v.a(this.b.getVersion()); + this.v.a("plugins"); + this.v.a(this.b.getPlugins()); + this.v.a("map"); + this.v.a(this.m); + this.v.a("numplayers"); + this.v.a("" + this.d()); + this.v.a("maxplayers"); + this.v.a("" + this.k); + this.v.a("hostport"); + this.v.a("" + this.j); + this.v.a("hostip"); + this.v.a(this.r); + this.v.a((int) 0); + this.v.a((int) 1); + this.v.a("player_"); + this.v.a((int) 0); + String[] astring = this.b.getPlayers(); + String[] astring1 = astring; + int j = astring.length; + + for (int k = 0; k < j; ++k) { + String s = astring1[k]; + + this.v.a(s); + } + + this.v.a((int) 0); + return this.v.a(); + } + } + + private byte[] a(SocketAddress socketaddress) { + return ((RemoteStatusListener.RemoteStatusChallenge) this.t.get(socketaddress)).c(); + } + + private Boolean c(DatagramPacket datagrampacket) { + SocketAddress socketaddress = datagrampacket.getSocketAddress(); + + if (!this.t.containsKey(socketaddress)) { + return Boolean.valueOf(false); + } else { + byte[] abyte = datagrampacket.getData(); + + return ((RemoteStatusListener.RemoteStatusChallenge) this.t.get(socketaddress)).a() != StatusChallengeUtils.c(abyte, 7, datagrampacket.getLength()) ? Boolean.valueOf(false) : Boolean.valueOf(true); + } + } + + private void d(DatagramPacket datagrampacket) throws IOException { + RemoteStatusListener.RemoteStatusChallenge remotestatuslistener_remotestatuschallenge = new RemoteStatusListener.RemoteStatusChallenge(datagrampacket); + + this.t.put(datagrampacket.getSocketAddress(), remotestatuslistener_remotestatuschallenge); + this.a(remotestatuslistener_remotestatuschallenge.b(), datagrampacket); + } + + private void f() { + if (this.a) { + long i = MinecraftServer.az(); + + if (i >= this.h + 30000L) { + this.h = i; + Iterator iterator = this.t.entrySet().iterator(); + + while (iterator.hasNext()) { + Entry entry = (Entry) iterator.next(); + + if (((RemoteStatusListener.RemoteStatusChallenge) entry.getValue()).a(i).booleanValue()) { + iterator.remove(); + } + } + + } + } + } + + public void run() { + this.b("Query running on " + this.s + ":" + this.i); + this.h = MinecraftServer.az(); + this.p = new DatagramPacket(this.o, this.o.length); + + try { + while (this.a) { + try { + this.n.receive(this.p); + this.f(); + this.a(this.p); + } catch (SocketTimeoutException sockettimeoutexception) { + this.f(); + } catch (PortUnreachableException portunreachableexception) { + ; + } catch (IOException ioexception) { + this.a((Exception) ioexception); + } + } + } finally { + this.e(); + } + + } + + public void a() { + if (!this.a) { + if (0 < this.i && '\uffff' >= this.i) { + if (this.g()) { + super.a(); + } + + } else { + this.c("Invalid query port " + this.i + " found in \'" + this.b.b() + "\' (queries disabled)"); + } + } + } + + private void a(Exception exception) { + if (this.a) { + this.c("Unexpected exception, buggy JRE? (" + exception.toString() + ")"); + if (!this.g()) { + this.d("Failed to recover from buggy JRE, shutting down!"); + this.a = false; + } + + } + } + + private boolean g() { + try { + this.n = new DatagramSocket(this.i, InetAddress.getByName(this.s)); + this.a(this.n); + this.n.setSoTimeout(500); + return true; + } catch (SocketException socketexception) { + this.c("Unable to initialise query system on " + this.s + ":" + this.i + " (Socket): " + socketexception.getMessage()); + } catch (UnknownHostException unknownhostexception) { + this.c("Unable to initialise query system on " + this.s + ":" + this.i + " (Unknown Host): " + unknownhostexception.getMessage()); + } catch (Exception exception) { + this.c("Unable to initialise query system on " + this.s + ":" + this.i + " (E): " + exception.getMessage()); + } + + return false; + } + + class RemoteStatusChallenge { + + private long time = (new Date()).getTime(); + private int token; + private byte[] identity; + private byte[] response; + private String f; + + public RemoteStatusChallenge(DatagramPacket datagrampacket) { + byte[] abyte = datagrampacket.getData(); + + this.identity = new byte[4]; + this.identity[0] = abyte[3]; + this.identity[1] = abyte[4]; + this.identity[2] = abyte[5]; + this.identity[3] = abyte[6]; + this.f = new String(this.identity); + this.token = (new Random()).nextInt(16777216); + this.response = String.format("\t%s%d\u0000", new Object[] { this.f, Integer.valueOf(this.token)}).getBytes(); + } + + public Boolean a(long i) { + return Boolean.valueOf(this.time < i); + } + + public int a() { + return this.token; + } + + public byte[] b() { + return this.response; + } + + public byte[] c() { + return this.identity; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/RemoteStatusReply.java b/eSpigot-Server/src/main/java/net/minecraft/server/RemoteStatusReply.java new file mode 100644 index 0000000..a1dbd1e --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/RemoteStatusReply.java @@ -0,0 +1,41 @@ +package net.minecraft.server; + +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class RemoteStatusReply { + + private ByteArrayOutputStream buffer; + private DataOutputStream stream; + + public RemoteStatusReply(int i) { + this.buffer = new ByteArrayOutputStream(i); + this.stream = new DataOutputStream(this.buffer); + } + + public void a(byte[] abyte) throws IOException { + this.stream.write(abyte, 0, abyte.length); + } + + public void a(String s) throws IOException { + this.stream.writeBytes(s); + this.stream.write(0); + } + + public void a(int i) throws IOException { + this.stream.write(i); + } + + public void a(short short0) throws IOException { + this.stream.writeShort(Short.reverseBytes(short0)); + } + + public byte[] a() { + return this.buffer.toByteArray(); + } + + public void b() { + this.buffer.reset(); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ReportedException.java b/eSpigot-Server/src/main/java/net/minecraft/server/ReportedException.java new file mode 100644 index 0000000..434854e --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ReportedException.java @@ -0,0 +1,22 @@ +package net.minecraft.server; + +public class ReportedException extends RuntimeException { + + private final CrashReport a; + + public ReportedException(CrashReport crashreport) { + this.a = crashreport; + } + + public CrashReport a() { + return this.a; + } + + public Throwable getCause() { + return this.a.b(); + } + + public String getMessage() { + return this.a.a(); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/Scoreboard.java b/eSpigot-Server/src/main/java/net/minecraft/server/Scoreboard.java new file mode 100644 index 0000000..5ec2075 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/Scoreboard.java @@ -0,0 +1,353 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +public class Scoreboard { + + private final Map objectivesByName = Maps.newHashMap(); + private final Map> objectivesByCriteria = Maps.newHashMap(); + private final Map> playerScores = Maps.newHashMap(); + private final ScoreboardObjective[] displaySlots = new ScoreboardObjective[19]; + private final Map teamsByName = Maps.newHashMap(); + private final Map teamsByPlayer = Maps.newHashMap(); + private static String[] g = null; + + public Scoreboard() {} + + public ScoreboardObjective getObjective(String s) { + return (ScoreboardObjective) this.objectivesByName.get(s); + } + + public ScoreboardObjective registerObjective(String s, IScoreboardCriteria iscoreboardcriteria) { + if (s.length() > 16) { + throw new IllegalArgumentException("The objective name \'" + s + "\' is too long!"); + } else { + ScoreboardObjective scoreboardobjective = this.getObjective(s); + + if (scoreboardobjective != null) { + throw new IllegalArgumentException("An objective with the name \'" + s + "\' already exists!"); + } else { + scoreboardobjective = new ScoreboardObjective(this, s, iscoreboardcriteria); + List list = this.objectivesByCriteria.computeIfAbsent(iscoreboardcriteria, k -> Lists.newArrayList()); + + list.add(scoreboardobjective); + this.objectivesByName.put(s, scoreboardobjective); + this.handleObjectiveAdded(scoreboardobjective); + return scoreboardobjective; + } + } + } + + public Collection getObjectivesForCriteria(IScoreboardCriteria iscoreboardcriteria) { + Collection collection = (Collection) this.objectivesByCriteria.get(iscoreboardcriteria); + + return collection == null ? Lists.newArrayList() : Lists.newArrayList(collection); + } + + public boolean b(String s, ScoreboardObjective scoreboardobjective) { + Map map = (Map) this.playerScores.get(s); + + if (map == null) { + return false; + } else { + ScoreboardScore scoreboardscore = (ScoreboardScore) map.get(scoreboardobjective); + + return scoreboardscore != null; + } + } + + public ScoreboardScore getPlayerScoreForObjective(String s, ScoreboardObjective scoreboardobjective) { + if (s.length() > 40) { + throw new IllegalArgumentException("The player name \'" + s + "\' is too long!"); + } else { + Map map = this.playerScores.computeIfAbsent(s, k -> Maps.newHashMap()); + + return map.computeIfAbsent(scoreboardobjective, k -> new ScoreboardScore(this, scoreboardobjective, s)); + } + } + + public Collection getScoresForObjective(ScoreboardObjective scoreboardobjective) { + ArrayList arraylist = Lists.newArrayList(); + Iterator iterator = this.playerScores.values().iterator(); + + while (iterator.hasNext()) { + Map map = (Map) iterator.next(); + ScoreboardScore scoreboardscore = (ScoreboardScore) map.get(scoreboardobjective); + + if (scoreboardscore != null) { + arraylist.add(scoreboardscore); + } + } + + Collections.sort(arraylist, ScoreboardScore.a); + return arraylist; + } + + public Collection getObjectives() { + return this.objectivesByName.values(); + } + + public Collection getPlayers() { + return this.playerScores.keySet(); + } + + public void resetPlayerScores(String s, ScoreboardObjective scoreboardobjective) { + Map map; + + if (scoreboardobjective == null) { + map = (Map) this.playerScores.remove(s); + if (map != null) { + this.handlePlayerRemoved(s); + } + } else { + map = (Map) this.playerScores.get(s); + if (map != null) { + ScoreboardScore scoreboardscore = (ScoreboardScore) map.remove(scoreboardobjective); + + if (map.size() < 1) { + Map map1 = (Map) this.playerScores.remove(s); + + if (map1 != null) { + this.handlePlayerRemoved(s); + } + } else if (scoreboardscore != null) { + this.a(s, scoreboardobjective); + } + } + } + + } + + public Collection getScores() { + Collection collection = this.playerScores.values(); + ArrayList arraylist = Lists.newArrayList(); + Iterator iterator = collection.iterator(); + + while (iterator.hasNext()) { + Map map = (Map) iterator.next(); + + arraylist.addAll(map.values()); + } + + return arraylist; + } + + public Map getPlayerObjectives(String s) { + Object object = (Map) this.playerScores.get(s); + + if (object == null) { + object = Maps.newHashMap(); + } + + return (Map) object; + } + + public void unregisterObjective(ScoreboardObjective scoreboardobjective) { + this.objectivesByName.remove(scoreboardobjective.getName()); + + for (int i = 0; i < 19; ++i) { + if (this.getObjectiveForSlot(i) == scoreboardobjective) { + this.setDisplaySlot(i, (ScoreboardObjective) null); + } + } + + List list = (List) this.objectivesByCriteria.get(scoreboardobjective.getCriteria()); + + if (list != null) { + list.remove(scoreboardobjective); + } + + Iterator iterator = this.playerScores.values().iterator(); + + while (iterator.hasNext()) { + Map map = (Map) iterator.next(); + + map.remove(scoreboardobjective); + } + + this.handleObjectiveRemoved(scoreboardobjective); + } + + public void setDisplaySlot(int i, ScoreboardObjective scoreboardobjective) { + this.displaySlots[i] = scoreboardobjective; + } + + public ScoreboardObjective getObjectiveForSlot(int i) { + return this.displaySlots[i]; + } + + public ScoreboardTeam getTeam(String s) { + return (ScoreboardTeam) this.teamsByName.get(s); + } + + public ScoreboardTeam createTeam(String s) { + if (s.length() > 16) { + throw new IllegalArgumentException("The team name \'" + s + "\' is too long!"); + } else { + ScoreboardTeam scoreboardteam = this.getTeam(s); + + if (scoreboardteam != null) { + throw new IllegalArgumentException("A team with the name \'" + s + "\' already exists!"); + } else { + scoreboardteam = new ScoreboardTeam(this, s); + this.teamsByName.put(s, scoreboardteam); + this.handleTeamAdded(scoreboardteam); + return scoreboardteam; + } + } + } + + public void removeTeam(ScoreboardTeam scoreboardteam) { + this.teamsByName.remove(scoreboardteam.getName()); + Iterator iterator = scoreboardteam.getPlayerNameSet().iterator(); + + while (iterator.hasNext()) { + String s = (String) iterator.next(); + + this.teamsByPlayer.remove(s); + } + + this.handleTeamRemoved(scoreboardteam); + } + + public boolean addPlayerToTeam(String s, String s1) { + if (s.length() > 40) { + throw new IllegalArgumentException("The player name \'" + s + "\' is too long!"); + } else if (!this.teamsByName.containsKey(s1)) { + return false; + } else { + ScoreboardTeam scoreboardteam = this.getTeam(s1); + + if (this.getPlayerTeam(s) != null) { + this.removePlayerFromTeam(s); + } + + this.teamsByPlayer.put(s, scoreboardteam); + scoreboardteam.getPlayerNameSet().add(s); + return true; + } + } + + public boolean removePlayerFromTeam(String s) { + ScoreboardTeam scoreboardteam = this.getPlayerTeam(s); + + if (scoreboardteam != null) { + this.removePlayerFromTeam(s, scoreboardteam); + return true; + } else { + return false; + } + } + + public void removePlayerFromTeam(String s, ScoreboardTeam scoreboardteam) { + if (this.getPlayerTeam(s) != scoreboardteam) { + throw new IllegalStateException("Player is either on another team or not on any team. Cannot remove from team \'" + scoreboardteam.getName() + "\'."); + } else { + this.teamsByPlayer.remove(s); + scoreboardteam.getPlayerNameSet().remove(s); + } + } + + public Collection getTeamNames() { + return this.teamsByName.keySet(); + } + + public Collection getTeams() { + return this.teamsByName.values(); + } + + public ScoreboardTeam getPlayerTeam(String s) { + return (ScoreboardTeam) this.teamsByPlayer.get(s); + } + + public void handleObjectiveAdded(ScoreboardObjective scoreboardobjective) {} + + public void handleObjectiveChanged(ScoreboardObjective scoreboardobjective) {} + + public void handleObjectiveRemoved(ScoreboardObjective scoreboardobjective) {} + + public void handleScoreChanged(ScoreboardScore scoreboardscore) {} + + public void handlePlayerRemoved(String s) {} + + public void a(String s, ScoreboardObjective scoreboardobjective) {} + + public void handleTeamAdded(ScoreboardTeam scoreboardteam) {} + + public void handleTeamChanged(ScoreboardTeam scoreboardteam) {} + + public void handleTeamRemoved(ScoreboardTeam scoreboardteam) {} + + public static String getSlotName(int i) { + switch (i) { + case 0: + return "list"; + + case 1: + return "sidebar"; + + case 2: + return "belowName"; + + default: + if (i >= 3 && i <= 18) { + EnumChatFormat enumchatformat = EnumChatFormat.a(i - 3); + + if (enumchatformat != null && enumchatformat != EnumChatFormat.RESET) { + return "sidebar.team." + enumchatformat.e(); + } + } + + return null; + } + } + + public static int getSlotForName(String s) { + if (s.equalsIgnoreCase("list")) { + return 0; + } else if (s.equalsIgnoreCase("sidebar")) { + return 1; + } else if (s.equalsIgnoreCase("belowName")) { + return 2; + } else { + if (s.startsWith("sidebar.team.")) { + String s1 = s.substring("sidebar.team.".length()); + EnumChatFormat enumchatformat = EnumChatFormat.b(s1); + + if (enumchatformat != null && enumchatformat.b() >= 0) { + return enumchatformat.b() + 3; + } + } + + return -1; + } + } + + public static String[] h() { + if (Scoreboard.g == null) { + Scoreboard.g = new String[19]; + + for (int i = 0; i < 19; ++i) { + Scoreboard.g[i] = getSlotName(i); + } + } + + return Scoreboard.g; + } + + public void a(Entity entity) { + if (entity != null && !(entity instanceof EntityHuman) && !entity.isAlive()) { + String s = entity.getUniqueID().toString(); + + this.resetPlayerScores(s, (ScoreboardObjective) null); + this.removePlayerFromTeam(s); + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ScoreboardBaseCriteria.java b/eSpigot-Server/src/main/java/net/minecraft/server/ScoreboardBaseCriteria.java new file mode 100644 index 0000000..72422ec --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ScoreboardBaseCriteria.java @@ -0,0 +1,29 @@ +package net.minecraft.server; + +import java.util.List; + +public class ScoreboardBaseCriteria implements IScoreboardCriteria { + + private final String j; + + public ScoreboardBaseCriteria(String s) { + this.j = s; + IScoreboardCriteria.criteria.put(s, this); + } + + public String getName() { + return this.j; + } + + public int getScoreModifier(List list) { + return 0; + } + + public boolean isReadOnly() { + return false; + } + + public IScoreboardCriteria.EnumScoreboardHealthDisplay c() { + return IScoreboardCriteria.EnumScoreboardHealthDisplay.INTEGER; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ScoreboardCriteriaInteger.java b/eSpigot-Server/src/main/java/net/minecraft/server/ScoreboardCriteriaInteger.java new file mode 100644 index 0000000..9e8111d --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ScoreboardCriteriaInteger.java @@ -0,0 +1,29 @@ +package net.minecraft.server; + +import java.util.List; + +public class ScoreboardCriteriaInteger implements IScoreboardCriteria { + + private final String j; + + public ScoreboardCriteriaInteger(String s, EnumChatFormat enumchatformat) { + this.j = s + enumchatformat.e(); + IScoreboardCriteria.criteria.put(this.j, this); + } + + public String getName() { + return this.j; + } + + public int getScoreModifier(List list) { + return 0; + } + + public boolean isReadOnly() { + return false; + } + + public IScoreboardCriteria.EnumScoreboardHealthDisplay c() { + return IScoreboardCriteria.EnumScoreboardHealthDisplay.INTEGER; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ScoreboardHealthCriteria.java b/eSpigot-Server/src/main/java/net/minecraft/server/ScoreboardHealthCriteria.java new file mode 100644 index 0000000..18d489a --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ScoreboardHealthCriteria.java @@ -0,0 +1,35 @@ +package net.minecraft.server; + +import java.util.Iterator; +import java.util.List; + +public class ScoreboardHealthCriteria extends ScoreboardBaseCriteria { + + public ScoreboardHealthCriteria(String s) { + super(s); + } + + public int getScoreModifier(List list) { + float f = 0.0F; + + EntityHuman entityhuman; + + for (Iterator iterator = list.iterator(); iterator.hasNext(); f += entityhuman.getHealth() + entityhuman.getAbsorptionHearts()) { + entityhuman = (EntityHuman) iterator.next(); + } + + if (list.size() > 0) { + f /= (float) list.size(); + } + + return MathHelper.f(f); + } + + public boolean isReadOnly() { + return true; + } + + public IScoreboardCriteria.EnumScoreboardHealthDisplay c() { + return IScoreboardCriteria.EnumScoreboardHealthDisplay.HEARTS; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ScoreboardObjective.java b/eSpigot-Server/src/main/java/net/minecraft/server/ScoreboardObjective.java new file mode 100644 index 0000000..791fc18 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ScoreboardObjective.java @@ -0,0 +1,44 @@ +package net.minecraft.server; + +public class ScoreboardObjective { + + private final Scoreboard a; + private final String b; + private final IScoreboardCriteria c; + private IScoreboardCriteria.EnumScoreboardHealthDisplay d; + private String e; + + public ScoreboardObjective(Scoreboard scoreboard, String s, IScoreboardCriteria iscoreboardcriteria) { + this.a = scoreboard; + this.b = s; + this.c = iscoreboardcriteria; + this.e = s; + this.d = iscoreboardcriteria.c(); + } + + public String getName() { + return this.b; + } + + public IScoreboardCriteria getCriteria() { + return this.c; + } + + public String getDisplayName() { + return this.e; + } + + public void setDisplayName(String s) { + this.e = s; + this.a.handleObjectiveChanged(this); + } + + public IScoreboardCriteria.EnumScoreboardHealthDisplay e() { + return this.d; + } + + public void a(IScoreboardCriteria.EnumScoreboardHealthDisplay iscoreboardcriteria_enumscoreboardhealthdisplay) { + this.d = iscoreboardcriteria_enumscoreboardhealthdisplay; + this.a.handleObjectiveChanged(this); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ScoreboardScore.java b/eSpigot-Server/src/main/java/net/minecraft/server/ScoreboardScore.java new file mode 100644 index 0000000..79e98df --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ScoreboardScore.java @@ -0,0 +1,93 @@ +package net.minecraft.server; + +import java.util.Comparator; +import java.util.List; + +public class ScoreboardScore { + + public static final Comparator a = new Comparator() { + public int a(ScoreboardScore scoreboardscore, ScoreboardScore scoreboardscore1) { + return scoreboardscore.getScore() > scoreboardscore1.getScore() ? 1 : (scoreboardscore.getScore() < scoreboardscore1.getScore() ? -1 : scoreboardscore1.getPlayerName().compareToIgnoreCase(scoreboardscore.getPlayerName())); + } + + public int compare(Object object, Object object1) { + return this.a((ScoreboardScore) object, (ScoreboardScore) object1); + } + }; + private final Scoreboard b; + private final ScoreboardObjective c; + private final String playerName; + private int score; + private boolean f; + private boolean g; + + public ScoreboardScore(Scoreboard scoreboard, ScoreboardObjective scoreboardobjective, String s) { + this.b = scoreboard; + this.c = scoreboardobjective; + this.playerName = s; + this.g = true; + } + + public void addScore(int i) { + if (this.c.getCriteria().isReadOnly()) { + throw new IllegalStateException("Cannot modify read-only score"); + } else { + this.setScore(this.getScore() + i); + } + } + + public void removeScore(int i) { + if (this.c.getCriteria().isReadOnly()) { + throw new IllegalStateException("Cannot modify read-only score"); + } else { + this.setScore(this.getScore() - i); + } + } + + public void incrementScore() { + if (this.c.getCriteria().isReadOnly()) { + throw new IllegalStateException("Cannot modify read-only score"); + } else { + this.addScore(1); + } + } + + public int getScore() { + return this.score; + } + + public void setScore(int i) { + int j = this.score; + + this.score = i; + if (j != i || this.g) { + this.g = false; + this.f().handleScoreChanged(this); + } + + } + + public ScoreboardObjective getObjective() { + return this.c; + } + + public String getPlayerName() { + return this.playerName; + } + + public Scoreboard f() { + return this.b; + } + + public boolean g() { + return this.f; + } + + public void a(boolean flag) { + this.f = flag; + } + + public void updateForList(List list) { + this.setScore(this.c.getCriteria().getScoreModifier(list)); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ScoreboardServer.java b/eSpigot-Server/src/main/java/net/minecraft/server/ScoreboardServer.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ScoreboardServer.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ScoreboardServer.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ScoreboardStatisticCriteria.java b/eSpigot-Server/src/main/java/net/minecraft/server/ScoreboardStatisticCriteria.java new file mode 100644 index 0000000..e1e3bc0 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ScoreboardStatisticCriteria.java @@ -0,0 +1,11 @@ +package net.minecraft.server; + +public class ScoreboardStatisticCriteria extends ScoreboardBaseCriteria { + + private final Statistic j; + + public ScoreboardStatisticCriteria(Statistic statistic) { + super(statistic.name); + this.j = statistic; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ScoreboardTeam.java b/eSpigot-Server/src/main/java/net/minecraft/server/ScoreboardTeam.java new file mode 100644 index 0000000..302c53b --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ScoreboardTeam.java @@ -0,0 +1,138 @@ +package net.minecraft.server; + +import com.google.common.collect.Sets; +import java.util.Collection; +import java.util.Set; + +public class ScoreboardTeam extends ScoreboardTeamBase { + + private final Scoreboard a; + private final String b; + private final Set c = Sets.newHashSet(); + private String d; + private String e = ""; + private String f = ""; + private boolean g = true; + private boolean h = true; + private ScoreboardTeamBase.EnumNameTagVisibility i; + private ScoreboardTeamBase.EnumNameTagVisibility j; + private EnumChatFormat k; + + public ScoreboardTeam(Scoreboard scoreboard, String s) { + this.i = ScoreboardTeamBase.EnumNameTagVisibility.ALWAYS; + this.j = ScoreboardTeamBase.EnumNameTagVisibility.ALWAYS; + this.k = EnumChatFormat.RESET; + this.a = scoreboard; + this.b = s; + this.d = s; + } + + public String getName() { + return this.b; + } + + public String getDisplayName() { + return this.d; + } + + public void setDisplayName(String s) { + if (s == null) { + throw new IllegalArgumentException("Name cannot be null"); + } else { + this.d = s; + this.a.handleTeamChanged(this); + } + } + + public Collection getPlayerNameSet() { + return this.c; + } + + public String getPrefix() { + return this.e; + } + + public void setPrefix(String s) { + if (s == null) { + throw new IllegalArgumentException("Prefix cannot be null"); + } else { + this.e = s; + this.a.handleTeamChanged(this); + } + } + + public String getSuffix() { + return this.f; + } + + public void setSuffix(String s) { + this.f = s; + this.a.handleTeamChanged(this); + } + + public String getFormattedName(String s) { + return this.getPrefix() + s + this.getSuffix(); + } + + public static String getPlayerDisplayName(ScoreboardTeamBase scoreboardteambase, String s) { + return scoreboardteambase == null ? s : scoreboardteambase.getFormattedName(s); + } + + public boolean allowFriendlyFire() { + return this.g; + } + + public void setAllowFriendlyFire(boolean flag) { + this.g = flag; + this.a.handleTeamChanged(this); + } + + public boolean canSeeFriendlyInvisibles() { + return this.h; + } + + public void setCanSeeFriendlyInvisibles(boolean flag) { + this.h = flag; + this.a.handleTeamChanged(this); + } + + public ScoreboardTeamBase.EnumNameTagVisibility getNameTagVisibility() { + return this.i; + } + + public ScoreboardTeamBase.EnumNameTagVisibility j() { + return this.j; + } + + public void setNameTagVisibility(ScoreboardTeamBase.EnumNameTagVisibility scoreboardteambase_enumnametagvisibility) { + this.i = scoreboardteambase_enumnametagvisibility; + this.a.handleTeamChanged(this); + } + + public void b(ScoreboardTeamBase.EnumNameTagVisibility scoreboardteambase_enumnametagvisibility) { + this.j = scoreboardteambase_enumnametagvisibility; + this.a.handleTeamChanged(this); + } + + public int packOptionData() { + int i = 0; + + if (this.allowFriendlyFire()) { + i |= 1; + } + + if (this.canSeeFriendlyInvisibles()) { + i |= 2; + } + + return i; + } + + public void a(EnumChatFormat enumchatformat) { + this.k = enumchatformat; + } + + public EnumChatFormat l() { + return this.k; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ScoreboardTeamBase.java b/eSpigot-Server/src/main/java/net/minecraft/server/ScoreboardTeamBase.java new file mode 100644 index 0000000..b31f9dc --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ScoreboardTeamBase.java @@ -0,0 +1,58 @@ +package net.minecraft.server; + +import com.google.common.collect.Maps; +import java.util.Collection; +import java.util.Map; + +public abstract class ScoreboardTeamBase { + + public ScoreboardTeamBase() {} + + public boolean isAlly(ScoreboardTeamBase scoreboardteambase) { + return scoreboardteambase == null ? false : this == scoreboardteambase; + } + + public abstract String getName(); + + public abstract String getFormattedName(String s); + + public abstract boolean allowFriendlyFire(); + + public abstract Collection getPlayerNameSet(); + + public abstract ScoreboardTeamBase.EnumNameTagVisibility j(); + + public static enum EnumNameTagVisibility { + + ALWAYS("always", 0), NEVER("never", 1), HIDE_FOR_OTHER_TEAMS("hideForOtherTeams", 2), HIDE_FOR_OWN_TEAM("hideForOwnTeam", 3); + + private static Map g = Maps.newHashMap(); + public final String e; + public final int f; + + public static String[] a() { + return (String[]) ScoreboardTeamBase.EnumNameTagVisibility.g.keySet().toArray(new String[ScoreboardTeamBase.EnumNameTagVisibility.g.size()]); + } + + public static ScoreboardTeamBase.EnumNameTagVisibility a(String s) { + return (ScoreboardTeamBase.EnumNameTagVisibility) ScoreboardTeamBase.EnumNameTagVisibility.g.get(s); + } + + private EnumNameTagVisibility(String s, int i) { + this.e = s; + this.f = i; + } + + static { + ScoreboardTeamBase.EnumNameTagVisibility[] ascoreboardteambase_enumnametagvisibility = values(); + int i = ascoreboardteambase_enumnametagvisibility.length; + + for (int j = 0; j < i; ++j) { + ScoreboardTeamBase.EnumNameTagVisibility scoreboardteambase_enumnametagvisibility = ascoreboardteambase_enumnametagvisibility[j]; + + ScoreboardTeamBase.EnumNameTagVisibility.g.put(scoreboardteambase_enumnametagvisibility.e, scoreboardteambase_enumnametagvisibility); + } + + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/SecondaryWorldData.java b/eSpigot-Server/src/main/java/net/minecraft/server/SecondaryWorldData.java new file mode 100644 index 0000000..d1d4ecd --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/SecondaryWorldData.java @@ -0,0 +1,134 @@ +package net.minecraft.server; + +public class SecondaryWorldData extends WorldData { + + private final WorldData b; + + public SecondaryWorldData(WorldData worlddata) { + this.b = worlddata; + } + + public NBTTagCompound a() { + return this.b.a(); + } + + public NBTTagCompound a(NBTTagCompound nbttagcompound) { + return this.b.a(nbttagcompound); + } + + public long getSeed() { + return this.b.getSeed(); + } + + public double c() { + return this.b.c(); + } + + public double d() { + return this.b.d(); + } + + public double e() { + return this.b.e(); + } + + public long getTime() { + return this.b.getTime(); + } + + public long getDayTime() { + return this.b.getDayTime(); + } + + public NBTTagCompound i() { + return this.b.i(); + } + + public String getName() { + return this.b.getName(); + } + + public int l() { + return this.b.l(); + } + + public boolean isThundering() { + return this.b.isThundering(); + } + + public int getThunderDuration() { + return this.b.getThunderDuration(); + } + + public boolean hasStorm() { + return this.b.hasStorm(); + } + + public int getWeatherDuration() { + return this.b.getWeatherDuration(); + } + + public WorldSettings.EnumGamemode getGameType() { + return this.b.getGameType(); + } + + public void setTime(long i) {} + + public void setDayTime(long i) {} + + public void setSpawn(BlockPosition blockposition) {} + + public void a(String s) {} + + public void e(int i) {} + + public void setThundering(boolean flag) {} + + public void setThunderDuration(int i) {} + + public void setStorm(boolean flag) {} + + public void setWeatherDuration(int i) {} + + public boolean shouldGenerateMapFeatures() { + return this.b.shouldGenerateMapFeatures(); + } + + public boolean isHardcore() { + return this.b.isHardcore(); + } + + public WorldType getType() { + return this.b.getType(); + } + + public void a(WorldType worldtype) {} + + public boolean v() { + return this.b.v(); + } + + public void c(boolean flag) {} + + public boolean w() { + return this.b.w(); + } + + public void d(boolean flag) {} + + public GameRules x() { + return this.b.x(); + } + + public EnumDifficulty getDifficulty() { + return this.b.getDifficulty(); + } + + public void setDifficulty(EnumDifficulty enumdifficulty) {} + + public boolean isDifficultyLocked() { + return this.b.isDifficultyLocked(); + } + + public void e(boolean flag) {} +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/SecondaryWorldServer.java b/eSpigot-Server/src/main/java/net/minecraft/server/SecondaryWorldServer.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/SecondaryWorldServer.java rename to eSpigot-Server/src/main/java/net/minecraft/server/SecondaryWorldServer.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ServerCommand.java b/eSpigot-Server/src/main/java/net/minecraft/server/ServerCommand.java new file mode 100644 index 0000000..c8232f6 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ServerCommand.java @@ -0,0 +1,12 @@ +package net.minecraft.server; + +public class ServerCommand { + + public final String command; + public final ICommandListener source; + + public ServerCommand(String s, ICommandListener icommandlistener) { + this.command = s; + this.source = icommandlistener; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ServerConnection.java b/eSpigot-Server/src/main/java/net/minecraft/server/ServerConnection.java similarity index 87% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ServerConnection.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ServerConnection.java index 2c2665e..c32f4e7 100644 --- a/TacoSpigot-Server/src/main/java/net/minecraft/server/ServerConnection.java +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ServerConnection.java @@ -80,7 +80,12 @@ public class ServerConnection { } // Paper end + // PandaSpigot start public void a(InetAddress inetaddress, int i) throws IOException { + bind(new java.net.InetSocketAddress(inetaddress, i)); + } + public void bind(java.net.SocketAddress address) throws IOException { + // PandaSpigot end List list = this.g; synchronized (this.g) { @@ -88,7 +93,13 @@ public class ServerConnection { LazyInitVar lazyinitvar; if (Epoll.isAvailable() && this.f.ai()) { - oclass = EpollServerSocketChannel.class; + // PandaSpigot start - Unix domain socket support + if (address instanceof io.netty.channel.unix.DomainSocketAddress) { + oclass = io.netty.channel.epoll.EpollServerDomainSocketChannel.class; + } else { + oclass = EpollServerSocketChannel.class; + } + // PandaSpigot end lazyinitvar = ServerConnection.b; ServerConnection.e.info("Using epoll channel type"); } else { @@ -112,7 +123,14 @@ public class ServerConnection { // KigPaper start if(PaperSpigotConfig.nettyReadTimeout) channel.pipeline().addLast("timeout", new ReadTimeoutHandler(30)); // KigPaper end - channel.pipeline().addLast("legacy_query", new LegacyPingHandler(ServerConnection.this)).addLast("splitter", new PacketSplitter()).addLast("decoder", new PacketDecoder(EnumProtocolDirection.SERVERBOUND)).addLast("prepender", new PacketPrepender()).addLast("encoder", new PacketEncoder(EnumProtocolDirection.CLIENTBOUND)); + // PandaSpigot start - newlines + channel.pipeline() + .addLast("legacy_query", new LegacyPingHandler(ServerConnection.this)) + .addLast("splitter", new PacketSplitter()) + .addLast("decoder", new PacketDecoder(EnumProtocolDirection.SERVERBOUND)) + .addLast("prepender", PacketPrepender.INSTANCE) // PandaSpigot - Share PacketPrepender instance + .addLast("encoder", new PacketEncoder(EnumProtocolDirection.CLIENTBOUND)); + // PandaSpigot end NetworkManager networkmanager = new NetworkManager(EnumProtocolDirection.SERVERBOUND); //ServerConnection.this.h.add(networkmanager); @@ -120,7 +138,7 @@ public class ServerConnection { channel.pipeline().addLast("packet_handler", networkmanager); networkmanager.a(new HandshakeListener(ServerConnection.this.f, networkmanager)); } - }).group((EventLoopGroup) lazyinitvar.c()).localAddress(inetaddress, i).bind().syncUninterruptibly()); + }).group((EventLoopGroup) lazyinitvar.c()).localAddress(address).bind().syncUninterruptibly()); } } diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ServerGUI.java b/eSpigot-Server/src/main/java/net/minecraft/server/ServerGUI.java new file mode 100644 index 0000000..cf4ff0e --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ServerGUI.java @@ -0,0 +1,169 @@ +package net.minecraft.server; + +import com.mojang.util.QueueLogAppender; +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.FocusAdapter; +import java.awt.event.FocusEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import javax.swing.JComponent; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JScrollBar; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; +import javax.swing.JTextField; +import javax.swing.SwingUtilities; +import javax.swing.UIManager; +import javax.swing.border.EtchedBorder; +import javax.swing.border.TitledBorder; +import javax.swing.text.AttributeSet; +import javax.swing.text.BadLocationException; +import javax.swing.text.Document; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class ServerGUI extends JComponent { + + private static final Font a = new Font("Monospaced", 0, 12); + private static final Logger b = LogManager.getLogger(); + private DedicatedServer c; + + public static void a(final DedicatedServer dedicatedserver) { + try { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + } catch (Exception exception) { + ; + } + + ServerGUI servergui = new ServerGUI(dedicatedserver); + JFrame jframe = new JFrame("Minecraft server"); + + jframe.add(servergui); + jframe.pack(); + jframe.setLocationRelativeTo((Component) null); + jframe.setVisible(true); + jframe.addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent windowevent) { + dedicatedserver.safeShutdown(); + + while (!dedicatedserver.isStopped()) { + try { + Thread.sleep(100L); + } catch (InterruptedException interruptedexception) { + interruptedexception.printStackTrace(); + } + } + + System.exit(0); + } + }); + } + + public ServerGUI(DedicatedServer dedicatedserver) { + this.c = dedicatedserver; + this.setPreferredSize(new Dimension(854, 480)); + this.setLayout(new BorderLayout()); + + try { + this.add(this.c(), "Center"); + this.add(this.a(), "West"); + } catch (Exception exception) { + ServerGUI.b.error("Couldn\'t build server GUI", exception); + } + + } + + private JComponent a() throws Exception { + JPanel jpanel = new JPanel(new BorderLayout()); + + jpanel.add(new GuiStatsComponent(this.c), "North"); + jpanel.add(this.b(), "Center"); + jpanel.setBorder(new TitledBorder(new EtchedBorder(), "Stats")); + return jpanel; + } + + private JComponent b() throws Exception { + PlayerListBox playerlistbox = new PlayerListBox(this.c); + JScrollPane jscrollpane = new JScrollPane(playerlistbox, 22, 30); + + jscrollpane.setBorder(new TitledBorder(new EtchedBorder(), "Players")); + return jscrollpane; + } + + private JComponent c() throws Exception { + JPanel jpanel = new JPanel(new BorderLayout()); + final JTextArea jtextarea = new JTextArea(); + final JScrollPane jscrollpane = new JScrollPane(jtextarea, 22, 30); + + jtextarea.setEditable(false); + jtextarea.setFont(ServerGUI.a); + final JTextField jtextfield = new JTextField(); + + jtextfield.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionevent) { + String s = jtextfield.getText().trim(); + + if (s.length() > 0) { + ServerGUI.this.c.issueCommand(s, MinecraftServer.getServer()); + } + + jtextfield.setText(""); + } + }); + jtextarea.addFocusListener(new FocusAdapter() { + public void focusGained(FocusEvent focusevent) {} + }); + jpanel.add(jscrollpane, "Center"); + jpanel.add(jtextfield, "South"); + jpanel.setBorder(new TitledBorder(new EtchedBorder(), "Log and chat")); + Thread thread = new Thread(new Runnable() { + public void run() { + String s; + + while ((s = QueueLogAppender.getNextLogEvent("ServerGuiConsole")) != null) { + ServerGUI.this.a(jtextarea, jscrollpane, s); + } + + } + }); + + thread.setDaemon(true); + thread.start(); + return jpanel; + } + + public void a(final JTextArea jtextarea, final JScrollPane jscrollpane, final String s) { + if (!SwingUtilities.isEventDispatchThread()) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + ServerGUI.this.a(jtextarea, jscrollpane, s); + } + }); + } else { + Document document = jtextarea.getDocument(); + JScrollBar jscrollbar = jscrollpane.getVerticalScrollBar(); + boolean flag = false; + + if (jscrollpane.getViewport().getView() == jtextarea) { + flag = (double) jscrollbar.getValue() + jscrollbar.getSize().getHeight() + (double) (ServerGUI.a.getSize() * 4) > (double) jscrollbar.getMaximum(); + } + + try { + document.insertString(document.getLength(), s, (AttributeSet) null); + } catch (BadLocationException badlocationexception) { + ; + } + + if (flag) { + jscrollbar.setValue(Integer.MAX_VALUE); + } + + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ServerNBTManager.java b/eSpigot-Server/src/main/java/net/minecraft/server/ServerNBTManager.java new file mode 100644 index 0000000..7b3985f --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ServerNBTManager.java @@ -0,0 +1,42 @@ +package net.minecraft.server; + +import java.io.File; + +public class ServerNBTManager extends WorldNBTStorage { + + public ServerNBTManager(File file, String s, boolean flag) { + super(file, s, flag); + } + + public IChunkLoader createChunkLoader(WorldProvider worldprovider) { + File file = this.getDirectory(); + File file1; + + if (worldprovider instanceof WorldProviderHell) { + file1 = new File(file, "DIM-1"); + file1.mkdirs(); + return new ChunkRegionLoader(file1); + } else if (worldprovider instanceof WorldProviderTheEnd) { + file1 = new File(file, "DIM1"); + file1.mkdirs(); + return new ChunkRegionLoader(file1); + } else { + return new ChunkRegionLoader(file); + } + } + + public void saveWorldData(WorldData worlddata, NBTTagCompound nbttagcompound) { + worlddata.e(19133); + super.saveWorldData(worlddata, nbttagcompound); + } + + public void a() { + try { + FileIOThread.a().b(); + } catch (InterruptedException interruptedexception) { + interruptedexception.printStackTrace(); + } + + RegionFileCache.a(); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ServerPing.java b/eSpigot-Server/src/main/java/net/minecraft/server/ServerPing.java new file mode 100644 index 0000000..eeb8100 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ServerPing.java @@ -0,0 +1,247 @@ +package net.minecraft.server; + +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; +import com.mojang.authlib.GameProfile; +import java.lang.reflect.Type; +import java.util.UUID; + +public class ServerPing { + + private IChatBaseComponent a; + private ServerPing.ServerPingPlayerSample b; + private ServerPing.ServerData c; + private String d; + + public ServerPing() {} + + public IChatBaseComponent a() { + return this.a; + } + + public void setMOTD(IChatBaseComponent ichatbasecomponent) { + this.a = ichatbasecomponent; + } + + public ServerPing.ServerPingPlayerSample b() { + return this.b; + } + + public void setPlayerSample(ServerPing.ServerPingPlayerSample serverping_serverpingplayersample) { + this.b = serverping_serverpingplayersample; + } + + public ServerPing.ServerData c() { + return this.c; + } + + public void setServerInfo(ServerPing.ServerData serverping_serverdata) { + this.c = serverping_serverdata; + } + + public void setFavicon(String s) { + this.d = s; + } + + public String d() { + return this.d; + } + + public static class Serializer implements JsonDeserializer, JsonSerializer { + + public Serializer() {} + + public ServerPing a(JsonElement jsonelement, Type type, JsonDeserializationContext jsondeserializationcontext) throws JsonParseException { + JsonObject jsonobject = ChatDeserializer.l(jsonelement, "status"); + ServerPing serverping = new ServerPing(); + + if (jsonobject.has("description")) { + serverping.setMOTD((IChatBaseComponent) jsondeserializationcontext.deserialize(jsonobject.get("description"), IChatBaseComponent.class)); + } + + if (jsonobject.has("players")) { + serverping.setPlayerSample((ServerPing.ServerPingPlayerSample) jsondeserializationcontext.deserialize(jsonobject.get("players"), ServerPing.ServerPingPlayerSample.class)); + } + + if (jsonobject.has("version")) { + serverping.setServerInfo((ServerPing.ServerData) jsondeserializationcontext.deserialize(jsonobject.get("version"), ServerPing.ServerData.class)); + } + + if (jsonobject.has("favicon")) { + serverping.setFavicon(ChatDeserializer.h(jsonobject, "favicon")); + } + + return serverping; + } + + public JsonElement a(ServerPing serverping, Type type, JsonSerializationContext jsonserializationcontext) { + JsonObject jsonobject = new JsonObject(); + + if (serverping.a() != null) { + jsonobject.add("description", jsonserializationcontext.serialize(serverping.a())); + } + + if (serverping.b() != null) { + jsonobject.add("players", jsonserializationcontext.serialize(serverping.b())); + } + + if (serverping.c() != null) { + jsonobject.add("version", jsonserializationcontext.serialize(serverping.c())); + } + + if (serverping.d() != null) { + jsonobject.addProperty("favicon", serverping.d()); + } + + return jsonobject; + } + + public JsonElement serialize(ServerPing object, Type type, JsonSerializationContext jsonserializationcontext) { + return this.a(object, type, jsonserializationcontext); + } + + public ServerPing deserialize(JsonElement jsonelement, Type type, JsonDeserializationContext jsondeserializationcontext) throws JsonParseException { + return this.a(jsonelement, type, jsondeserializationcontext); + } + } + + public static class ServerData { + + private final String a; + private final int b; + + public ServerData(String s, int i) { + this.a = s; + this.b = i; + } + + public String a() { + return this.a; + } + + public int b() { + return this.b; + } + + public static class Serializer implements JsonDeserializer, JsonSerializer { + + public Serializer() {} + + public ServerPing.ServerData a(JsonElement jsonelement, Type type, JsonDeserializationContext jsondeserializationcontext) throws JsonParseException { + JsonObject jsonobject = ChatDeserializer.l(jsonelement, "version"); + + return new ServerPing.ServerData(ChatDeserializer.h(jsonobject, "name"), ChatDeserializer.m(jsonobject, "protocol")); + } + + public JsonElement a(ServerPing.ServerData serverping_serverdata, Type type, JsonSerializationContext jsonserializationcontext) { + JsonObject jsonobject = new JsonObject(); + + jsonobject.addProperty("name", serverping_serverdata.a()); + jsonobject.addProperty("protocol", Integer.valueOf(serverping_serverdata.b())); + return jsonobject; + } + + public JsonElement serialize(ServerPing.ServerData object, Type type, JsonSerializationContext jsonserializationcontext) { + return this.a(object, type, jsonserializationcontext); + } + + public ServerPing.ServerData deserialize(JsonElement jsonelement, Type type, JsonDeserializationContext jsondeserializationcontext) throws JsonParseException { + return this.a(jsonelement, type, jsondeserializationcontext); + } + } + } + + public static class ServerPingPlayerSample { + + private final int a; + private final int b; + private GameProfile[] c; + + public ServerPingPlayerSample(int i, int j) { + this.a = i; + this.b = j; + } + + public int a() { + return this.a; + } + + public int b() { + return this.b; + } + + public GameProfile[] c() { + return this.c; + } + + public void a(GameProfile[] agameprofile) { + this.c = agameprofile; + } + + public static class Serializer implements JsonDeserializer, JsonSerializer { + + public Serializer() {} + + public ServerPing.ServerPingPlayerSample a(JsonElement jsonelement, Type type, JsonDeserializationContext jsondeserializationcontext) throws JsonParseException { + JsonObject jsonobject = ChatDeserializer.l(jsonelement, "players"); + ServerPing.ServerPingPlayerSample serverping_serverpingplayersample = new ServerPing.ServerPingPlayerSample(ChatDeserializer.m(jsonobject, "max"), ChatDeserializer.m(jsonobject, "online")); + + if (ChatDeserializer.d(jsonobject, "sample")) { + JsonArray jsonarray = ChatDeserializer.t(jsonobject, "sample"); + + if (jsonarray.size() > 0) { + GameProfile[] agameprofile = new GameProfile[jsonarray.size()]; + + for (int i = 0; i < agameprofile.length; ++i) { + JsonObject jsonobject1 = ChatDeserializer.l(jsonarray.get(i), "player[" + i + "]"); + String s = ChatDeserializer.h(jsonobject1, "id"); + + agameprofile[i] = new GameProfile(UUID.fromString(s), ChatDeserializer.h(jsonobject1, "name")); + } + + serverping_serverpingplayersample.a(agameprofile); + } + } + + return serverping_serverpingplayersample; + } + + public JsonElement a(ServerPing.ServerPingPlayerSample serverping_serverpingplayersample, Type type, JsonSerializationContext jsonserializationcontext) { + JsonObject jsonobject = new JsonObject(); + + jsonobject.addProperty("max", Integer.valueOf(serverping_serverpingplayersample.a())); + jsonobject.addProperty("online", Integer.valueOf(serverping_serverpingplayersample.b())); + if (serverping_serverpingplayersample.c() != null && serverping_serverpingplayersample.c().length > 0) { + JsonArray jsonarray = new JsonArray(); + + for (int i = 0; i < serverping_serverpingplayersample.c().length; ++i) { + JsonObject jsonobject1 = new JsonObject(); + UUID uuid = serverping_serverpingplayersample.c()[i].getId(); + + jsonobject1.addProperty("id", uuid == null ? "" : uuid.toString()); + jsonobject1.addProperty("name", serverping_serverpingplayersample.c()[i].getName()); + jsonarray.add(jsonobject1); + } + + jsonobject.add("sample", jsonarray); + } + + return jsonobject; + } + + public JsonElement serialize(ServerPing.ServerPingPlayerSample object, Type type, JsonSerializationContext jsonserializationcontext) { + return this.a(object, type, jsonserializationcontext); + } + + public ServerPing.ServerPingPlayerSample deserialize(JsonElement jsonelement, Type type, JsonDeserializationContext jsondeserializationcontext) throws JsonParseException { + return this.a(jsonelement, type, jsondeserializationcontext); + } + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ServerStatisticManager.java b/eSpigot-Server/src/main/java/net/minecraft/server/ServerStatisticManager.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ServerStatisticManager.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ServerStatisticManager.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ShapeDetector.java b/eSpigot-Server/src/main/java/net/minecraft/server/ShapeDetector.java new file mode 100644 index 0000000..d455629 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ShapeDetector.java @@ -0,0 +1,171 @@ +package net.minecraft.server; + +import com.google.common.base.MoreObjects; +import com.google.common.base.Predicate; +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; +import java.util.Iterator; + +public class ShapeDetector { + + private final Predicate[][][] a; + private final int b; + private final int c; + private final int d; + + public ShapeDetector(Predicate[][][] apredicate) { + this.a = apredicate; + this.b = apredicate.length; + if (this.b > 0) { + this.c = apredicate[0].length; + if (this.c > 0) { + this.d = apredicate[0][0].length; + } else { + this.d = 0; + } + } else { + this.c = 0; + this.d = 0; + } + + } + + public int b() { + return this.c; + } + + public int c() { + return this.d; + } + + private ShapeDetector.ShapeDetectorCollection a(BlockPosition blockposition, EnumDirection enumdirection, EnumDirection enumdirection1, LoadingCache loadingcache) { + for (int i = 0; i < this.d; ++i) { + for (int j = 0; j < this.c; ++j) { + for (int k = 0; k < this.b; ++k) { + if (!this.a[k][j][i].apply(loadingcache.getUnchecked(a(blockposition, enumdirection, enumdirection1, i, j, k)))) { + return null; + } + } + } + } + + return new ShapeDetector.ShapeDetectorCollection(blockposition, enumdirection, enumdirection1, loadingcache, this.d, this.c, this.b); + } + + public ShapeDetector.ShapeDetectorCollection a(World world, BlockPosition blockposition) { + LoadingCache loadingcache = a(world, false); + int i = Math.max(Math.max(this.d, this.c), this.b); + Iterator iterator = BlockPosition.a(blockposition, blockposition.a(i - 1, i - 1, i - 1)).iterator(); + + while (iterator.hasNext()) { + BlockPosition blockposition1 = (BlockPosition) iterator.next(); + EnumDirection[] aenumdirection = EnumDirection.values(); + int j = aenumdirection.length; + + for (int k = 0; k < j; ++k) { + EnumDirection enumdirection = aenumdirection[k]; + EnumDirection[] aenumdirection1 = EnumDirection.values(); + int l = aenumdirection1.length; + + for (int i1 = 0; i1 < l; ++i1) { + EnumDirection enumdirection1 = aenumdirection1[i1]; + + if (enumdirection1 != enumdirection && enumdirection1 != enumdirection.opposite()) { + ShapeDetector.ShapeDetectorCollection shapedetector_shapedetectorcollection = this.a(blockposition1, enumdirection, enumdirection1, loadingcache); + + if (shapedetector_shapedetectorcollection != null) { + return shapedetector_shapedetectorcollection; + } + } + } + } + } + + return null; + } + + public static LoadingCache a(World world, boolean flag) { + return CacheBuilder.newBuilder().build(new ShapeDetector.BlockLoader(world, flag)); + } + + protected static BlockPosition a(BlockPosition blockposition, EnumDirection enumdirection, EnumDirection enumdirection1, int i, int j, int k) { + if (enumdirection != enumdirection1 && enumdirection != enumdirection1.opposite()) { + BaseBlockPosition baseblockposition = new BaseBlockPosition(enumdirection.getAdjacentX(), enumdirection.getAdjacentY(), enumdirection.getAdjacentZ()); + BaseBlockPosition baseblockposition1 = new BaseBlockPosition(enumdirection1.getAdjacentX(), enumdirection1.getAdjacentY(), enumdirection1.getAdjacentZ()); + BaseBlockPosition baseblockposition2 = baseblockposition.d(baseblockposition1); + + return blockposition.a(baseblockposition1.getX() * -j + baseblockposition2.getX() * i + baseblockposition.getX() * k, baseblockposition1.getY() * -j + baseblockposition2.getY() * i + baseblockposition.getY() * k, baseblockposition1.getZ() * -j + baseblockposition2.getZ() * i + baseblockposition.getZ() * k); + } else { + throw new IllegalArgumentException("Invalid forwards & up combination"); + } + } + + public static class ShapeDetectorCollection { + + private final BlockPosition a; + private final EnumDirection b; + private final EnumDirection c; + private final LoadingCache d; + private final int e; + private final int f; + private final int g; + + public ShapeDetectorCollection(BlockPosition blockposition, EnumDirection enumdirection, EnumDirection enumdirection1, LoadingCache loadingcache, int i, int j, int k) { + this.a = blockposition; + this.b = enumdirection; + this.c = enumdirection1; + this.d = loadingcache; + this.e = i; + this.f = j; + this.g = k; + } + + public BlockPosition a() { + return this.a; + } + + public EnumDirection b() { + return this.b; + } + + public EnumDirection c() { + return this.c; + } + + public int d() { + return this.e; + } + + public int e() { + return this.f; + } + + public ShapeDetectorBlock a(int i, int j, int k) { + return (ShapeDetectorBlock) this.d.getUnchecked(ShapeDetector.a(this.a, this.b(), this.c(), i, j, k)); + } + + public String toString() { + return MoreObjects.toStringHelper(this).add("up", this.c).add("forwards", this.b).add("frontTopLeft", this.a).toString(); + } + } + + static class BlockLoader extends CacheLoader { + + private final World a; + private final boolean b; + + public BlockLoader(World world, boolean flag) { + this.a = world; + this.b = flag; + } + + public ShapeDetectorBlock a(BlockPosition blockposition) throws Exception { + return new ShapeDetectorBlock(this.a, blockposition, this.b); + } + + public ShapeDetectorBlock load(BlockPosition object) throws Exception { + return this.a(object); + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ShapeDetectorBlock.java b/eSpigot-Server/src/main/java/net/minecraft/server/ShapeDetectorBlock.java new file mode 100644 index 0000000..3fe62af --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ShapeDetectorBlock.java @@ -0,0 +1,52 @@ +package net.minecraft.server; + +import com.google.common.base.Predicate; + +public class ShapeDetectorBlock { + + private final World a; + private final BlockPosition b; + private final boolean c; + private IBlockData d; + private TileEntity e; + private boolean f; + + public ShapeDetectorBlock(World world, BlockPosition blockposition, boolean flag) { + this.a = world; + this.b = blockposition; + this.c = flag; + } + + public IBlockData a() { + if (this.d == null && (this.c || this.a.isLoaded(this.b))) { + this.d = this.a.getType(this.b); + } + + return this.d; + } + + public TileEntity b() { + if (this.e == null && !this.f) { + this.e = this.a.getTileEntity(this.b); + this.f = true; + } + + return this.e; + } + + public BlockPosition getPosition() { + return this.b; + } + + public static Predicate a(final Predicate predicate) { + return new Predicate() { + public boolean a(ShapeDetectorBlock shapedetectorblock) { + return shapedetectorblock != null && predicate.apply(shapedetectorblock.a()); + } + + public boolean apply(Object object) { + return this.a((ShapeDetectorBlock) object); + } + }; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ShapeDetectorBuilder.java b/eSpigot-Server/src/main/java/net/minecraft/server/ShapeDetectorBuilder.java new file mode 100644 index 0000000..65b077d --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ShapeDetectorBuilder.java @@ -0,0 +1,113 @@ +package net.minecraft.server; + +import com.google.common.base.Joiner; +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import java.lang.reflect.Array; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import org.apache.commons.lang3.ArrayUtils; +import org.apache.commons.lang3.StringUtils; + +public class ShapeDetectorBuilder { + + private static final Joiner a = Joiner.on(","); + private final List b = Lists.newArrayList(); + private final Map> c = Maps.newHashMap(); + private int d; + private int e; + + private ShapeDetectorBuilder() { + this.c.put(Character.valueOf(' '), Predicates.alwaysTrue()); + } + + public ShapeDetectorBuilder a(String... astring) { + if (!ArrayUtils.isEmpty(astring) && !StringUtils.isEmpty(astring[0])) { + if (this.b.isEmpty()) { + this.d = astring.length; + this.e = astring[0].length(); + } + + if (astring.length != this.d) { + throw new IllegalArgumentException("Expected aisle with height of " + this.d + ", but was given one with a height of " + astring.length + ")"); + } else { + String[] astring1 = astring; + int i = astring.length; + + for (int j = 0; j < i; ++j) { + String s = astring1[j]; + + if (s.length() != this.e) { + throw new IllegalArgumentException("Not all rows in the given aisle are the correct width (expected " + this.e + ", found one with " + s.length() + ")"); + } + + char[] achar = s.toCharArray(); + int k = achar.length; + + for (int l = 0; l < k; ++l) { + char c0 = achar[l]; + + if (!this.c.containsKey(c0)) { + this.c.put(c0, null); + } + } + } + + this.b.add(astring); + return this; + } + } else { + throw new IllegalArgumentException("Empty pattern for aisle"); + } + } + + public static ShapeDetectorBuilder a() { + return new ShapeDetectorBuilder(); + } + + public ShapeDetectorBuilder a(char c0, Predicate predicate) { + this.c.put(Character.valueOf(c0), predicate); + return this; + } + + public ShapeDetector b() { + return new ShapeDetector(this.c()); + } + + private Predicate[][][] c() { + this.d(); + Predicate[][][] apredicate = (Predicate[][][]) ((Predicate[][][]) Array.newInstance(Predicate.class, new int[] { this.b.size(), this.d, this.e})); + + for (int i = 0; i < this.b.size(); ++i) { + for (int j = 0; j < this.d; ++j) { + for (int k = 0; k < this.e; ++k) { + apredicate[i][j][k] = (Predicate) this.c.get(Character.valueOf(((String[]) this.b.get(i))[j].charAt(k))); + } + } + } + + return apredicate; + } + + private void d() { + ArrayList arraylist = Lists.newArrayList(); + Iterator iterator = this.c.entrySet().iterator(); + + while (iterator.hasNext()) { + Entry entry = (Entry) iterator.next(); + + if (entry.getValue() == null) { + arraylist.add(entry.getKey()); + } + } + + if (!arraylist.isEmpty()) { + throw new IllegalStateException("Predicates for character(s) " + ShapeDetectorBuilder.a.join(arraylist) + " are missing"); + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ShapedRecipes.java b/eSpigot-Server/src/main/java/net/minecraft/server/ShapedRecipes.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ShapedRecipes.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ShapedRecipes.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/ShapelessRecipes.java b/eSpigot-Server/src/main/java/net/minecraft/server/ShapelessRecipes.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/ShapelessRecipes.java rename to eSpigot-Server/src/main/java/net/minecraft/server/ShapelessRecipes.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/SharedConstants.java b/eSpigot-Server/src/main/java/net/minecraft/server/SharedConstants.java new file mode 100644 index 0000000..fcf4c79 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/SharedConstants.java @@ -0,0 +1,26 @@ +package net.minecraft.server; + +public class SharedConstants { + + public static final char[] allowedCharacters = new char[] { '/', '\n', '\r', '\t', '\u0000', '\f', '`', '?', '*', '\\', '<', '>', '|', '\"', ':'}; + + public static boolean isAllowedChatCharacter(char c0) { + return c0 != 167 && c0 >= 32 && c0 != 127; + } + + public static String a(String s) { + StringBuilder stringbuilder = new StringBuilder(); + char[] achar = s.toCharArray(); + int i = achar.length; + + for (int j = 0; j < i; ++j) { + char c0 = achar[j]; + + if (isAllowedChatCharacter(c0)) { + stringbuilder.append(c0); + } + } + + return stringbuilder.toString(); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/Slot.java b/eSpigot-Server/src/main/java/net/minecraft/server/Slot.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/Slot.java rename to eSpigot-Server/src/main/java/net/minecraft/server/Slot.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/SlotFurnaceFuel.java b/eSpigot-Server/src/main/java/net/minecraft/server/SlotFurnaceFuel.java new file mode 100644 index 0000000..2bbedad --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/SlotFurnaceFuel.java @@ -0,0 +1,20 @@ +package net.minecraft.server; + +public class SlotFurnaceFuel extends Slot { + + public SlotFurnaceFuel(IInventory iinventory, int i, int j, int k) { + super(iinventory, i, j, k); + } + + public boolean isAllowed(ItemStack itemstack) { + return TileEntityFurnace.isFuel(itemstack) || c_(itemstack); + } + + public int getMaxStackSize(ItemStack itemstack) { + return c_(itemstack) ? 1 : super.getMaxStackSize(itemstack); + } + + public static boolean c_(ItemStack itemstack) { + return itemstack != null && itemstack.getItem() != null && itemstack.getItem() == Items.BUCKET; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/SlotFurnaceResult.java b/eSpigot-Server/src/main/java/net/minecraft/server/SlotFurnaceResult.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/SlotFurnaceResult.java rename to eSpigot-Server/src/main/java/net/minecraft/server/SlotFurnaceResult.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/SlotMerchantResult.java b/eSpigot-Server/src/main/java/net/minecraft/server/SlotMerchantResult.java new file mode 100644 index 0000000..468d3d2 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/SlotMerchantResult.java @@ -0,0 +1,84 @@ +package net.minecraft.server; + +public class SlotMerchantResult extends Slot { + + private final InventoryMerchant a; + private EntityHuman b; + private int c; + private final IMerchant h; + + public SlotMerchantResult(EntityHuman entityhuman, IMerchant imerchant, InventoryMerchant inventorymerchant, int i, int j, int k) { + super(inventorymerchant, i, j, k); + this.b = entityhuman; + this.h = imerchant; + this.a = inventorymerchant; + } + + public boolean isAllowed(ItemStack itemstack) { + return false; + } + + public ItemStack a(int i) { + if (this.hasItem()) { + this.c += Math.min(i, this.getItem().count); + } + + return super.a(i); + } + + protected void a(ItemStack itemstack, int i) { + this.c += i; + this.c(itemstack); + } + + protected void c(ItemStack itemstack) { + itemstack.a(this.b.world, this.b, this.c); + this.c = 0; + } + + public void a(EntityHuman entityhuman, ItemStack itemstack) { + this.c(itemstack); + MerchantRecipe merchantrecipe = this.a.getRecipe(); + + if (merchantrecipe != null) { + ItemStack itemstack1 = this.a.getItem(0); + ItemStack itemstack2 = this.a.getItem(1); + + if (this.a(merchantrecipe, itemstack1, itemstack2) || this.a(merchantrecipe, itemstack2, itemstack1)) { + this.h.a(merchantrecipe); + entityhuman.b(StatisticList.G); + if (itemstack1 != null && itemstack1.count <= 0) { + itemstack1 = null; + } + + if (itemstack2 != null && itemstack2.count <= 0) { + itemstack2 = null; + } + + this.a.setItem(0, itemstack1); + this.a.setItem(1, itemstack2); + } + } + + } + + private boolean a(MerchantRecipe merchantrecipe, ItemStack itemstack, ItemStack itemstack1) { + ItemStack itemstack2 = merchantrecipe.getBuyItem1(); + ItemStack itemstack3 = merchantrecipe.getBuyItem2(); + + if (itemstack != null && itemstack.getItem() == itemstack2.getItem()) { + if (itemstack3 != null && itemstack1 != null && itemstack3.getItem() == itemstack1.getItem()) { + itemstack.count -= itemstack2.count; + itemstack1.count -= itemstack3.count; + return true; + } + + if (itemstack3 == null && itemstack1 == null) { + itemstack.count -= itemstack2.count; + return true; + } + } + + return false; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/SlotResult.java b/eSpigot-Server/src/main/java/net/minecraft/server/SlotResult.java new file mode 100644 index 0000000..d2551cf --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/SlotResult.java @@ -0,0 +1,106 @@ +package net.minecraft.server; + +public class SlotResult extends Slot { + + private final InventoryCrafting a; + private final EntityHuman b; + private int c; + + public SlotResult(EntityHuman entityhuman, InventoryCrafting inventorycrafting, IInventory iinventory, int i, int j, int k) { + super(iinventory, i, j, k); + this.b = entityhuman; + this.a = inventorycrafting; + } + + public boolean isAllowed(ItemStack itemstack) { + return false; + } + + public ItemStack a(int i) { + if (this.hasItem()) { + this.c += Math.min(i, this.getItem().count); + } + + return super.a(i); + } + + protected void a(ItemStack itemstack, int i) { + this.c += i; + this.c(itemstack); + } + + protected void c(ItemStack itemstack) { + if (this.c > 0) { + itemstack.a(this.b.world, this.b, this.c); + } + + this.c = 0; + if (itemstack.getItem() == Item.getItemOf(Blocks.CRAFTING_TABLE)) { + this.b.b((Statistic) AchievementList.h); + } + + if (itemstack.getItem() instanceof ItemPickaxe) { + this.b.b((Statistic) AchievementList.i); + } + + if (itemstack.getItem() == Item.getItemOf(Blocks.FURNACE)) { + this.b.b((Statistic) AchievementList.j); + } + + if (itemstack.getItem() instanceof ItemHoe) { + this.b.b((Statistic) AchievementList.l); + } + + if (itemstack.getItem() == Items.BREAD) { + this.b.b((Statistic) AchievementList.m); + } + + if (itemstack.getItem() == Items.CAKE) { + this.b.b((Statistic) AchievementList.n); + } + + if (itemstack.getItem() instanceof ItemPickaxe && ((ItemPickaxe) itemstack.getItem()).g() != Item.EnumToolMaterial.WOOD) { + this.b.b((Statistic) AchievementList.o); + } + + if (itemstack.getItem() instanceof ItemSword) { + this.b.b((Statistic) AchievementList.r); + } + + if (itemstack.getItem() == Item.getItemOf(Blocks.ENCHANTING_TABLE)) { + this.b.b((Statistic) AchievementList.E); + } + + if (itemstack.getItem() == Item.getItemOf(Blocks.BOOKSHELF)) { + this.b.b((Statistic) AchievementList.G); + } + + if (itemstack.getItem() == Items.GOLDEN_APPLE && itemstack.getData() == 1) { + this.b.b((Statistic) AchievementList.M); + } + + } + + public void a(EntityHuman entityhuman, ItemStack itemstack) { + this.c(itemstack); + ItemStack[] aitemstack = CraftingManager.getInstance().b(this.a, entityhuman.world); + + for (int i = 0; i < aitemstack.length; ++i) { + ItemStack itemstack1 = this.a.getItem(i); + ItemStack itemstack2 = aitemstack[i]; + + if (itemstack1 != null) { + this.a.splitStack(i, 1); + } + + if (itemstack2 != null) { + if (this.a.getItem(i) == null) { + this.a.setItem(i, itemstack2); + } else if (!this.b.inventory.pickup(itemstack2)) { + this.b.drop(itemstack2, false); + } + } + } + + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/SourceBlock.java b/eSpigot-Server/src/main/java/net/minecraft/server/SourceBlock.java new file mode 100644 index 0000000..7390678 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/SourceBlock.java @@ -0,0 +1,42 @@ +package net.minecraft.server; + +public class SourceBlock implements ISourceBlock { + + private final World a; + private final BlockPosition b; + + public SourceBlock(World world, BlockPosition blockposition) { + this.a = world; + this.b = blockposition; + } + + public World getWorld() { + return this.a; + } + + public double getX() { + return (double) this.b.getX() + 0.5D; + } + + public double getY() { + return (double) this.b.getY() + 0.5D; + } + + public double getZ() { + return (double) this.b.getZ() + 0.5D; + } + + public BlockPosition getBlockPosition() { + return this.b; + } + + public int f() { + IBlockData iblockdata = this.a.getType(this.b); + + return iblockdata.getBlock().toLegacyData(iblockdata); + } + + public T getTileEntity() { + return (T) this.a.getTileEntity(this.b); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/SpawnerCreature.java b/eSpigot-Server/src/main/java/net/minecraft/server/SpawnerCreature.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/SpawnerCreature.java rename to eSpigot-Server/src/main/java/net/minecraft/server/SpawnerCreature.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/Statistic.java b/eSpigot-Server/src/main/java/net/minecraft/server/Statistic.java new file mode 100644 index 0000000..5be70d4 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/Statistic.java @@ -0,0 +1,105 @@ +package net.minecraft.server; + +import java.text.DecimalFormat; +import java.text.NumberFormat; +import java.util.Locale; + +public class Statistic { + + public final String name; + private final IChatBaseComponent a; + public boolean f; + private final Counter b; + private final IScoreboardCriteria c; + private Class d; + private static NumberFormat k = NumberFormat.getIntegerInstance(Locale.US); + public static Counter g = new Counter() { + }; + private static DecimalFormat l = new DecimalFormat("########0.00"); + public static Counter h = new Counter() { + }; + public static Counter i = new Counter() { + }; + public static Counter j = new Counter() { + }; + + public Statistic(String s, IChatBaseComponent ichatbasecomponent, Counter counter) { + this.name = s; + this.a = ichatbasecomponent; + this.b = counter; + this.c = new ScoreboardStatisticCriteria(this); + IScoreboardCriteria.criteria.put(this.c.getName(), this.c); + } + + public Statistic(String s, IChatBaseComponent ichatbasecomponent) { + this(s, ichatbasecomponent, Statistic.g); + } + + public Statistic i() { + this.f = true; + return this; + } + + public Statistic h() { + if (StatisticList.a.containsKey(this.name)) { + throw new RuntimeException("Duplicate stat id: \"" + ((Statistic) StatisticList.a.get(this.name)).a + "\" and \"" + this.a + "\" at id " + this.name); + } else { + StatisticList.stats.add(this); + StatisticList.a.put(this.name, this); + return this; + } + } + + public boolean d() { + return false; + } + + public IChatBaseComponent e() { + IChatBaseComponent ichatbasecomponent = this.a.f(); + + ichatbasecomponent.getChatModifier().setColor(EnumChatFormat.GRAY); + ichatbasecomponent.getChatModifier().setChatHoverable(new ChatHoverable(ChatHoverable.EnumHoverAction.SHOW_ACHIEVEMENT, new ChatComponentText(this.name))); + return ichatbasecomponent; + } + + public IChatBaseComponent j() { + IChatBaseComponent ichatbasecomponent = this.e(); + IChatBaseComponent ichatbasecomponent1 = (new ChatComponentText("[")).addSibling(ichatbasecomponent).a("]"); + + ichatbasecomponent1.setChatModifier(ichatbasecomponent.getChatModifier()); + return ichatbasecomponent1; + } + + public boolean equals(Object object) { + if (this == object) { + return true; + } else if (object != null && this.getClass() == object.getClass()) { + Statistic statistic = (Statistic) object; + + return this.name.equals(statistic.name); + } else { + return false; + } + } + + public int hashCode() { + return this.name.hashCode(); + } + + public String toString() { + return "Stat{id=" + this.name + ", nameId=" + this.a + ", awardLocallyOnly=" + this.f + ", formatter=" + this.b + ", objectiveCriteria=" + this.c + '}'; + } + + public IScoreboardCriteria k() { + return this.c; + } + + public Class l() { + return this.d; + } + + public Statistic b(Class oclass) { + this.d = oclass; + return this; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/StatisticList.java b/eSpigot-Server/src/main/java/net/minecraft/server/StatisticList.java new file mode 100644 index 0000000..b5ceb9a --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/StatisticList.java @@ -0,0 +1,232 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +public class StatisticList { + + protected static Map a = Maps.newHashMap(); + public static List stats = Lists.newArrayList(); + public static List c = Lists.newArrayList(); + public static List d = Lists.newArrayList(); + public static List e = Lists.newArrayList(); + public static Statistic f = (new CounterStatistic("stat.leaveGame", new ChatMessage("stat.leaveGame", new Object[0]))).i().h(); + public static Statistic g = (new CounterStatistic("stat.playOneMinute", new ChatMessage("stat.playOneMinute", new Object[0]), Statistic.h)).i().h(); + public static Statistic h = (new CounterStatistic("stat.timeSinceDeath", new ChatMessage("stat.timeSinceDeath", new Object[0]), Statistic.h)).i().h(); + public static Statistic i = (new CounterStatistic("stat.walkOneCm", new ChatMessage("stat.walkOneCm", new Object[0]), Statistic.i)).i().h(); + public static Statistic j = (new CounterStatistic("stat.crouchOneCm", new ChatMessage("stat.crouchOneCm", new Object[0]), Statistic.i)).i().h(); + public static Statistic k = (new CounterStatistic("stat.sprintOneCm", new ChatMessage("stat.sprintOneCm", new Object[0]), Statistic.i)).i().h(); + public static Statistic l = (new CounterStatistic("stat.swimOneCm", new ChatMessage("stat.swimOneCm", new Object[0]), Statistic.i)).i().h(); + public static Statistic m = (new CounterStatistic("stat.fallOneCm", new ChatMessage("stat.fallOneCm", new Object[0]), Statistic.i)).i().h(); + public static Statistic n = (new CounterStatistic("stat.climbOneCm", new ChatMessage("stat.climbOneCm", new Object[0]), Statistic.i)).i().h(); + public static Statistic o = (new CounterStatistic("stat.flyOneCm", new ChatMessage("stat.flyOneCm", new Object[0]), Statistic.i)).i().h(); + public static Statistic p = (new CounterStatistic("stat.diveOneCm", new ChatMessage("stat.diveOneCm", new Object[0]), Statistic.i)).i().h(); + public static Statistic q = (new CounterStatistic("stat.minecartOneCm", new ChatMessage("stat.minecartOneCm", new Object[0]), Statistic.i)).i().h(); + public static Statistic r = (new CounterStatistic("stat.boatOneCm", new ChatMessage("stat.boatOneCm", new Object[0]), Statistic.i)).i().h(); + public static Statistic s = (new CounterStatistic("stat.pigOneCm", new ChatMessage("stat.pigOneCm", new Object[0]), Statistic.i)).i().h(); + public static Statistic t = (new CounterStatistic("stat.horseOneCm", new ChatMessage("stat.horseOneCm", new Object[0]), Statistic.i)).i().h(); + public static Statistic u = (new CounterStatistic("stat.jump", new ChatMessage("stat.jump", new Object[0]))).i().h(); + public static Statistic v = (new CounterStatistic("stat.drop", new ChatMessage("stat.drop", new Object[0]))).i().h(); + public static Statistic w = (new CounterStatistic("stat.damageDealt", new ChatMessage("stat.damageDealt", new Object[0]), Statistic.j)).h(); + public static Statistic x = (new CounterStatistic("stat.damageTaken", new ChatMessage("stat.damageTaken", new Object[0]), Statistic.j)).h(); + public static Statistic y = (new CounterStatistic("stat.deaths", new ChatMessage("stat.deaths", new Object[0]))).h(); + public static Statistic z = (new CounterStatistic("stat.mobKills", new ChatMessage("stat.mobKills", new Object[0]))).h(); + public static Statistic A = (new CounterStatistic("stat.animalsBred", new ChatMessage("stat.animalsBred", new Object[0]))).h(); + public static Statistic B = (new CounterStatistic("stat.playerKills", new ChatMessage("stat.playerKills", new Object[0]))).h(); + public static Statistic C = (new CounterStatistic("stat.fishCaught", new ChatMessage("stat.fishCaught", new Object[0]))).h(); + public static Statistic D = (new CounterStatistic("stat.junkFished", new ChatMessage("stat.junkFished", new Object[0]))).h(); + public static Statistic E = (new CounterStatistic("stat.treasureFished", new ChatMessage("stat.treasureFished", new Object[0]))).h(); + public static Statistic F = (new CounterStatistic("stat.talkedToVillager", new ChatMessage("stat.talkedToVillager", new Object[0]))).h(); + public static Statistic G = (new CounterStatistic("stat.tradedWithVillager", new ChatMessage("stat.tradedWithVillager", new Object[0]))).h(); + public static Statistic H = (new CounterStatistic("stat.cakeSlicesEaten", new ChatMessage("stat.cakeSlicesEaten", new Object[0]))).h(); + public static Statistic I = (new CounterStatistic("stat.cauldronFilled", new ChatMessage("stat.cauldronFilled", new Object[0]))).h(); + public static Statistic J = (new CounterStatistic("stat.cauldronUsed", new ChatMessage("stat.cauldronUsed", new Object[0]))).h(); + public static Statistic K = (new CounterStatistic("stat.armorCleaned", new ChatMessage("stat.armorCleaned", new Object[0]))).h(); + public static Statistic L = (new CounterStatistic("stat.bannerCleaned", new ChatMessage("stat.bannerCleaned", new Object[0]))).h(); + public static Statistic M = (new CounterStatistic("stat.brewingstandInteraction", new ChatMessage("stat.brewingstandInteraction", new Object[0]))).h(); + public static Statistic N = (new CounterStatistic("stat.beaconInteraction", new ChatMessage("stat.beaconInteraction", new Object[0]))).h(); + public static Statistic O = (new CounterStatistic("stat.dropperInspected", new ChatMessage("stat.dropperInspected", new Object[0]))).h(); + public static Statistic P = (new CounterStatistic("stat.hopperInspected", new ChatMessage("stat.hopperInspected", new Object[0]))).h(); + public static Statistic Q = (new CounterStatistic("stat.dispenserInspected", new ChatMessage("stat.dispenserInspected", new Object[0]))).h(); + public static Statistic R = (new CounterStatistic("stat.noteblockPlayed", new ChatMessage("stat.noteblockPlayed", new Object[0]))).h(); + public static Statistic S = (new CounterStatistic("stat.noteblockTuned", new ChatMessage("stat.noteblockTuned", new Object[0]))).h(); + public static Statistic T = (new CounterStatistic("stat.flowerPotted", new ChatMessage("stat.flowerPotted", new Object[0]))).h(); + public static Statistic U = (new CounterStatistic("stat.trappedChestTriggered", new ChatMessage("stat.trappedChestTriggered", new Object[0]))).h(); + public static Statistic V = (new CounterStatistic("stat.enderchestOpened", new ChatMessage("stat.enderchestOpened", new Object[0]))).h(); + public static Statistic W = (new CounterStatistic("stat.itemEnchanted", new ChatMessage("stat.itemEnchanted", new Object[0]))).h(); + public static Statistic X = (new CounterStatistic("stat.recordPlayed", new ChatMessage("stat.recordPlayed", new Object[0]))).h(); + public static Statistic Y = (new CounterStatistic("stat.furnaceInteraction", new ChatMessage("stat.furnaceInteraction", new Object[0]))).h(); + public static Statistic Z = (new CounterStatistic("stat.craftingTableInteraction", new ChatMessage("stat.workbenchInteraction", new Object[0]))).h(); + public static Statistic aa = (new CounterStatistic("stat.chestOpened", new ChatMessage("stat.chestOpened", new Object[0]))).h(); + public static final Statistic[] MINE_BLOCK_COUNT = new Statistic[4096]; + public static final Statistic[] CRAFT_BLOCK_COUNT = new Statistic[32000]; + public static final Statistic[] USE_ITEM_COUNT = new Statistic[32000]; + public static final Statistic[] BREAK_ITEM_COUNT = new Statistic[32000]; + + public static void a() { + c(); + d(); + e(); + b(); + AchievementList.a(); + EntityTypes.a(); + } + + private static void b() { + HashSet hashset = Sets.newHashSet(); + Iterator iterator = CraftingManager.getInstance().getRecipes().iterator(); + + while (iterator.hasNext()) { + IRecipe irecipe = (IRecipe) iterator.next(); + + if (irecipe.b() != null) { + hashset.add(irecipe.b().getItem()); + } + } + + iterator = RecipesFurnace.getInstance().getRecipes().values().iterator(); + + while (iterator.hasNext()) { + ItemStack itemstack = (ItemStack) iterator.next(); + + hashset.add(itemstack.getItem()); + } + + iterator = hashset.iterator(); + + while (iterator.hasNext()) { + Item item = (Item) iterator.next(); + + if (item != null) { + int i = Item.getId(item); + String s = a(item); + + if (s != null) { + StatisticList.CRAFT_BLOCK_COUNT[i] = (new CraftingStatistic("stat.craftItem.", s, new ChatMessage("stat.craftItem", new Object[] { (new ItemStack(item)).C()}), item)).h(); + } + } + } + + a(StatisticList.CRAFT_BLOCK_COUNT); + } + + private static void c() { + Iterator iterator = Block.REGISTRY.iterator(); + + while (iterator.hasNext()) { + Block block = (Block) iterator.next(); + Item item = Item.getItemOf(block); + + if (item != null) { + int i = Block.getId(block); + String s = a(item); + + if (s != null && block.J()) { + StatisticList.MINE_BLOCK_COUNT[i] = (new CraftingStatistic("stat.mineBlock.", s, new ChatMessage("stat.mineBlock", new Object[] { (new ItemStack(block)).C()}), item)).h(); + StatisticList.e.add((CraftingStatistic) StatisticList.MINE_BLOCK_COUNT[i]); + } + } + } + + a(StatisticList.MINE_BLOCK_COUNT); + } + + private static void d() { + Iterator iterator = Item.REGISTRY.iterator(); + + while (iterator.hasNext()) { + Item item = (Item) iterator.next(); + + if (item != null) { + int i = Item.getId(item); + String s = a(item); + + if (s != null) { + StatisticList.USE_ITEM_COUNT[i] = (new CraftingStatistic("stat.useItem.", s, new ChatMessage("stat.useItem", new Object[] { (new ItemStack(item)).C()}), item)).h(); + if (!(item instanceof ItemBlock)) { + StatisticList.d.add((CraftingStatistic) StatisticList.USE_ITEM_COUNT[i]); + } + } + } + } + + a(StatisticList.USE_ITEM_COUNT); + } + + private static void e() { + Iterator iterator = Item.REGISTRY.iterator(); + + while (iterator.hasNext()) { + Item item = (Item) iterator.next(); + + if (item != null) { + int i = Item.getId(item); + String s = a(item); + + if (s != null && item.usesDurability()) { + StatisticList.BREAK_ITEM_COUNT[i] = (new CraftingStatistic("stat.breakItem.", s, new ChatMessage("stat.breakItem", new Object[] { (new ItemStack(item)).C()}), item)).h(); + } + } + } + + a(StatisticList.BREAK_ITEM_COUNT); + } + + private static String a(Item item) { + MinecraftKey minecraftkey = (MinecraftKey) Item.REGISTRY.c(item); + + return minecraftkey != null ? minecraftkey.toString().replace(':', '.') : null; + } + + private static void a(Statistic[] astatistic) { + a(astatistic, Blocks.WATER, Blocks.FLOWING_WATER); + a(astatistic, Blocks.LAVA, Blocks.FLOWING_LAVA); + a(astatistic, Blocks.LIT_PUMPKIN, Blocks.PUMPKIN); + a(astatistic, Blocks.LIT_FURNACE, Blocks.FURNACE); + a(astatistic, Blocks.LIT_REDSTONE_ORE, Blocks.REDSTONE_ORE); + a(astatistic, Blocks.POWERED_REPEATER, Blocks.UNPOWERED_REPEATER); + a(astatistic, Blocks.POWERED_COMPARATOR, Blocks.UNPOWERED_COMPARATOR); + a(astatistic, Blocks.REDSTONE_TORCH, Blocks.UNLIT_REDSTONE_TORCH); + a(astatistic, Blocks.LIT_REDSTONE_LAMP, Blocks.REDSTONE_LAMP); + a(astatistic, Blocks.DOUBLE_STONE_SLAB, Blocks.STONE_SLAB); + a(astatistic, Blocks.DOUBLE_WOODEN_SLAB, Blocks.WOODEN_SLAB); + a(astatistic, Blocks.DOUBLE_STONE_SLAB2, Blocks.STONE_SLAB2); + a(astatistic, Blocks.GRASS, Blocks.DIRT); + a(astatistic, Blocks.FARMLAND, Blocks.DIRT); + } + + private static void a(Statistic[] astatistic, Block block, Block block1) { + int i = Block.getId(block); + int j = Block.getId(block1); + + if (astatistic[i] != null && astatistic[j] == null) { + astatistic[j] = astatistic[i]; + } else { + StatisticList.stats.remove(astatistic[i]); + StatisticList.e.remove(astatistic[i]); + StatisticList.c.remove(astatistic[i]); + astatistic[i] = astatistic[j]; + } + } + + public static Statistic a(EntityTypes.MonsterEggInfo entitytypes_monsteregginfo) { + String s = EntityTypes.b(entitytypes_monsteregginfo.a); + + return s == null ? null : (new Statistic("stat.killEntity." + s, new ChatMessage("stat.entityKill", new Object[] { new ChatMessage("entity." + s + ".name", new Object[0])}))).h(); + } + + public static Statistic b(EntityTypes.MonsterEggInfo entitytypes_monsteregginfo) { + String s = EntityTypes.b(entitytypes_monsteregginfo.a); + + return s == null ? null : (new Statistic("stat.entityKilledBy." + s, new ChatMessage("stat.entityKilledBy", new Object[] { new ChatMessage("entity." + s + ".name", new Object[0])}))).h(); + } + + public static Statistic getStatistic(String s) { + return (Statistic) StatisticList.a.get(s); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/StatisticManager.java b/eSpigot-Server/src/main/java/net/minecraft/server/StatisticManager.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/StatisticManager.java rename to eSpigot-Server/src/main/java/net/minecraft/server/StatisticManager.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/StatisticWrapper.java b/eSpigot-Server/src/main/java/net/minecraft/server/StatisticWrapper.java new file mode 100644 index 0000000..906aa3d --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/StatisticWrapper.java @@ -0,0 +1,25 @@ +package net.minecraft.server; + +public class StatisticWrapper { + + private int a; + private IJsonStatistic b; + + public StatisticWrapper() {} + + public int a() { + return this.a; + } + + public void a(int i) { + this.a = i; + } + + public T b() { + return (T) this.b; + } + + public void a(IJsonStatistic ijsonstatistic) { + this.b = ijsonstatistic; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/StatusChallengeUtils.java b/eSpigot-Server/src/main/java/net/minecraft/server/StatusChallengeUtils.java new file mode 100644 index 0000000..32dae8f --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/StatusChallengeUtils.java @@ -0,0 +1,36 @@ +package net.minecraft.server; + +import com.google.common.base.Charsets; + +public class StatusChallengeUtils { + + public static final char[] a = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; + + public static String a(byte[] abyte, int i, int j) { + int k = j - 1; + + int l; + + for (l = i > k ? k : i; 0 != abyte[l] && l < k; ++l) { + ; + } + + return new String(abyte, i, l - i, Charsets.UTF_8); + } + + public static int b(byte[] abyte, int i) { + return b(abyte, i, abyte.length); + } + + public static int b(byte[] abyte, int i, int j) { + return 0 > j - i - 4 ? 0 : abyte[i + 3] << 24 | (abyte[i + 2] & 255) << 16 | (abyte[i + 1] & 255) << 8 | abyte[i] & 255; + } + + public static int c(byte[] abyte, int i, int j) { + return 0 > j - i - 4 ? 0 : abyte[i] << 24 | (abyte[i + 1] & 255) << 16 | (abyte[i + 2] & 255) << 8 | abyte[i + 3] & 255; + } + + public static String a(byte b0) { + return "" + StatusChallengeUtils.a[(b0 & 240) >>> 4] + StatusChallengeUtils.a[b0 & 15]; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/StructureBoundingBox.java b/eSpigot-Server/src/main/java/net/minecraft/server/StructureBoundingBox.java new file mode 100644 index 0000000..b59c059 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/StructureBoundingBox.java @@ -0,0 +1,180 @@ +package net.minecraft.server; + +import com.google.common.base.MoreObjects; + +public class StructureBoundingBox { + + public int a; + public int b; + public int c; + public int d; + public int e; + public int f; + + public StructureBoundingBox() {} + + public StructureBoundingBox(int[] aint) { + if (aint.length == 6) { + this.a = aint[0]; + this.b = aint[1]; + this.c = aint[2]; + this.d = aint[3]; + this.e = aint[4]; + this.f = aint[5]; + } + + } + + public static StructureBoundingBox a() { + return new StructureBoundingBox(Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MIN_VALUE, Integer.MIN_VALUE, Integer.MIN_VALUE); + } + + public static StructureBoundingBox a(int i, int j, int k, int l, int i1, int j1, int k1, int l1, int i2, EnumDirection enumdirection) { + switch (StructureBoundingBox.SyntheticClass_1.a[enumdirection.ordinal()]) { + case 1: + return new StructureBoundingBox(i + l, j + i1, k - i2 + 1 + j1, i + k1 - 1 + l, j + l1 - 1 + i1, k + j1); + + case 2: + return new StructureBoundingBox(i + l, j + i1, k + j1, i + k1 - 1 + l, j + l1 - 1 + i1, k + i2 - 1 + j1); + + case 3: + return new StructureBoundingBox(i - i2 + 1 + j1, j + i1, k + l, i + j1, j + l1 - 1 + i1, k + k1 - 1 + l); + + case 4: + return new StructureBoundingBox(i + j1, j + i1, k + l, i + i2 - 1 + j1, j + l1 - 1 + i1, k + k1 - 1 + l); + + default: + return new StructureBoundingBox(i + l, j + i1, k + j1, i + k1 - 1 + l, j + l1 - 1 + i1, k + i2 - 1 + j1); + } + } + + public static StructureBoundingBox a(int i, int j, int k, int l, int i1, int j1) { + return new StructureBoundingBox(Math.min(i, l), Math.min(j, i1), Math.min(k, j1), Math.max(i, l), Math.max(j, i1), Math.max(k, j1)); + } + + public StructureBoundingBox(StructureBoundingBox structureboundingbox) { + this.a = structureboundingbox.a; + this.b = structureboundingbox.b; + this.c = structureboundingbox.c; + this.d = structureboundingbox.d; + this.e = structureboundingbox.e; + this.f = structureboundingbox.f; + } + + public StructureBoundingBox(int i, int j, int k, int l, int i1, int j1) { + this.a = i; + this.b = j; + this.c = k; + this.d = l; + this.e = i1; + this.f = j1; + } + + public StructureBoundingBox(BaseBlockPosition baseblockposition, BaseBlockPosition baseblockposition1) { + this.a = Math.min(baseblockposition.getX(), baseblockposition1.getX()); + this.b = Math.min(baseblockposition.getY(), baseblockposition1.getY()); + this.c = Math.min(baseblockposition.getZ(), baseblockposition1.getZ()); + this.d = Math.max(baseblockposition.getX(), baseblockposition1.getX()); + this.e = Math.max(baseblockposition.getY(), baseblockposition1.getY()); + this.f = Math.max(baseblockposition.getZ(), baseblockposition1.getZ()); + } + + public StructureBoundingBox(int i, int j, int k, int l) { + this.a = i; + this.c = j; + this.d = k; + this.f = l; + this.b = 1; + this.e = 512; + } + + public boolean a(StructureBoundingBox structureboundingbox) { + return this.d >= structureboundingbox.a && this.a <= structureboundingbox.d && this.f >= structureboundingbox.c && this.c <= structureboundingbox.f && this.e >= structureboundingbox.b && this.b <= structureboundingbox.e; + } + + public boolean a(int i, int j, int k, int l) { + return this.d >= i && this.a <= k && this.f >= j && this.c <= l; + } + + public void b(StructureBoundingBox structureboundingbox) { + this.a = Math.min(this.a, structureboundingbox.a); + this.b = Math.min(this.b, structureboundingbox.b); + this.c = Math.min(this.c, structureboundingbox.c); + this.d = Math.max(this.d, structureboundingbox.d); + this.e = Math.max(this.e, structureboundingbox.e); + this.f = Math.max(this.f, structureboundingbox.f); + } + + public void a(int i, int j, int k) { + this.a += i; + this.b += j; + this.c += k; + this.d += i; + this.e += j; + this.f += k; + } + + public boolean b(BaseBlockPosition baseblockposition) { + return baseblockposition.getX() >= this.a && baseblockposition.getX() <= this.d && baseblockposition.getZ() >= this.c && baseblockposition.getZ() <= this.f && baseblockposition.getY() >= this.b && baseblockposition.getY() <= this.e; + } + + public BaseBlockPosition b() { + return new BaseBlockPosition(this.d - this.a, this.e - this.b, this.f - this.c); + } + + public int c() { + return this.d - this.a + 1; + } + + public int d() { + return this.e - this.b + 1; + } + + public int e() { + return this.f - this.c + 1; + } + + public BaseBlockPosition f() { + return new BlockPosition(this.a + (this.d - this.a + 1) / 2, this.b + (this.e - this.b + 1) / 2, this.c + (this.f - this.c + 1) / 2); + } + + public String toString() { + return MoreObjects.toStringHelper(this).add("x0", this.a).add("y0", this.b).add("z0", this.c).add("x1", this.d).add("y1", this.e).add("z1", this.f).toString(); + } + + public NBTTagIntArray g() { + return new NBTTagIntArray(new int[] { this.a, this.b, this.c, this.d, this.e, this.f}); + } + + static class SyntheticClass_1 { + + static final int[] a = new int[EnumDirection.values().length]; + + static { + try { + StructureBoundingBox.SyntheticClass_1.a[EnumDirection.NORTH.ordinal()] = 1; + } catch (NoSuchFieldError nosuchfielderror) { + ; + } + + try { + StructureBoundingBox.SyntheticClass_1.a[EnumDirection.SOUTH.ordinal()] = 2; + } catch (NoSuchFieldError nosuchfielderror1) { + ; + } + + try { + StructureBoundingBox.SyntheticClass_1.a[EnumDirection.WEST.ordinal()] = 3; + } catch (NoSuchFieldError nosuchfielderror2) { + ; + } + + try { + StructureBoundingBox.SyntheticClass_1.a[EnumDirection.EAST.ordinal()] = 4; + } catch (NoSuchFieldError nosuchfielderror3) { + ; + } + + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/StructureGenerator.java b/eSpigot-Server/src/main/java/net/minecraft/server/StructureGenerator.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/StructureGenerator.java rename to eSpigot-Server/src/main/java/net/minecraft/server/StructureGenerator.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/StructurePiece.java b/eSpigot-Server/src/main/java/net/minecraft/server/StructurePiece.java new file mode 100644 index 0000000..0f4a499 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/StructurePiece.java @@ -0,0 +1,646 @@ +package net.minecraft.server; + +import java.util.Iterator; +import java.util.List; +import java.util.Random; + +public abstract class StructurePiece { + + protected StructureBoundingBox l; + protected EnumDirection m; + protected int n; + + public StructurePiece() {} + + protected StructurePiece(int i) { + this.n = i; + } + + public NBTTagCompound b() { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + + nbttagcompound.setString("id", WorldGenFactory.a(this)); + nbttagcompound.set("BB", this.l.g()); + nbttagcompound.setInt("O", this.m == null ? -1 : this.m.b()); + nbttagcompound.setInt("GD", this.n); + this.a(nbttagcompound); + return nbttagcompound; + } + + protected abstract void a(NBTTagCompound nbttagcompound); + + public void a(World world, NBTTagCompound nbttagcompound) { + if (nbttagcompound.hasKey("BB")) { + this.l = new StructureBoundingBox(nbttagcompound.getIntArray("BB")); + } + + int i = nbttagcompound.getInt("O"); + + this.m = i == -1 ? null : EnumDirection.fromType2(i); + this.n = nbttagcompound.getInt("GD"); + this.b(nbttagcompound); + } + + protected abstract void b(NBTTagCompound nbttagcompound); + + public void a(StructurePiece structurepiece, List list, Random random) {} + + public abstract boolean a(World world, Random random, StructureBoundingBox structureboundingbox); + + public StructureBoundingBox c() { + return this.l; + } + + public int d() { + return this.n; + } + + public static StructurePiece a(List list, StructureBoundingBox structureboundingbox) { + Iterator iterator = list.iterator(); + + StructurePiece structurepiece; + + do { + if (!iterator.hasNext()) { + return null; + } + + structurepiece = (StructurePiece) iterator.next(); + } while (structurepiece.c() == null || !structurepiece.c().a(structureboundingbox)); + + return structurepiece; + } + + public BlockPosition a() { + return new BlockPosition(this.l.f()); + } + + protected boolean a(World world, StructureBoundingBox structureboundingbox) { + int i = Math.max(this.l.a - 1, structureboundingbox.a); + int j = Math.max(this.l.b - 1, structureboundingbox.b); + int k = Math.max(this.l.c - 1, structureboundingbox.c); + int l = Math.min(this.l.d + 1, structureboundingbox.d); + int i1 = Math.min(this.l.e + 1, structureboundingbox.e); + int j1 = Math.min(this.l.f + 1, structureboundingbox.f); + BlockPosition.MutableBlockPosition blockposition_mutableblockposition = new BlockPosition.MutableBlockPosition(); + + int k1; + int l1; + + for (k1 = i; k1 <= l; ++k1) { + for (l1 = k; l1 <= j1; ++l1) { + if (world.getType(blockposition_mutableblockposition.c(k1, j, l1)).getBlock().getMaterial().isLiquid()) { + return true; + } + + if (world.getType(blockposition_mutableblockposition.c(k1, i1, l1)).getBlock().getMaterial().isLiquid()) { + return true; + } + } + } + + for (k1 = i; k1 <= l; ++k1) { + for (l1 = j; l1 <= i1; ++l1) { + if (world.getType(blockposition_mutableblockposition.c(k1, l1, k)).getBlock().getMaterial().isLiquid()) { + return true; + } + + if (world.getType(blockposition_mutableblockposition.c(k1, l1, j1)).getBlock().getMaterial().isLiquid()) { + return true; + } + } + } + + for (k1 = k; k1 <= j1; ++k1) { + for (l1 = j; l1 <= i1; ++l1) { + if (world.getType(blockposition_mutableblockposition.c(i, l1, k1)).getBlock().getMaterial().isLiquid()) { + return true; + } + + if (world.getType(blockposition_mutableblockposition.c(l, l1, k1)).getBlock().getMaterial().isLiquid()) { + return true; + } + } + } + + return false; + } + + protected int a(int i, int j) { + if (this.m == null) { + return i; + } else { + switch (StructurePiece.SyntheticClass_1.a[this.m.ordinal()]) { + case 1: + case 2: + return this.l.a + i; + + case 3: + return this.l.d - j; + + case 4: + return this.l.a + j; + + default: + return i; + } + } + } + + protected int d(int i) { + return this.m == null ? i : i + this.l.b; + } + + protected int b(int i, int j) { + if (this.m == null) { + return j; + } else { + switch (StructurePiece.SyntheticClass_1.a[this.m.ordinal()]) { + case 1: + return this.l.f - j; + + case 2: + return this.l.c + j; + + case 3: + case 4: + return this.l.c + i; + + default: + return j; + } + } + } + + protected int a(Block block, int i) { + if (block == Blocks.RAIL) { + if (this.m == EnumDirection.WEST || this.m == EnumDirection.EAST) { + if (i == 1) { + return 0; + } + + return 1; + } + } else if (block instanceof BlockDoor) { + if (this.m == EnumDirection.SOUTH) { + if (i == 0) { + return 2; + } + + if (i == 2) { + return 0; + } + } else { + if (this.m == EnumDirection.WEST) { + return i + 1 & 3; + } + + if (this.m == EnumDirection.EAST) { + return i + 3 & 3; + } + } + } else if (block != Blocks.STONE_STAIRS && block != Blocks.OAK_STAIRS && block != Blocks.NETHER_BRICK_STAIRS && block != Blocks.STONE_BRICK_STAIRS && block != Blocks.SANDSTONE_STAIRS) { + if (block == Blocks.LADDER) { + if (this.m == EnumDirection.SOUTH) { + if (i == EnumDirection.NORTH.a()) { + return EnumDirection.SOUTH.a(); + } + + if (i == EnumDirection.SOUTH.a()) { + return EnumDirection.NORTH.a(); + } + } else if (this.m == EnumDirection.WEST) { + if (i == EnumDirection.NORTH.a()) { + return EnumDirection.WEST.a(); + } + + if (i == EnumDirection.SOUTH.a()) { + return EnumDirection.EAST.a(); + } + + if (i == EnumDirection.WEST.a()) { + return EnumDirection.NORTH.a(); + } + + if (i == EnumDirection.EAST.a()) { + return EnumDirection.SOUTH.a(); + } + } else if (this.m == EnumDirection.EAST) { + if (i == EnumDirection.NORTH.a()) { + return EnumDirection.EAST.a(); + } + + if (i == EnumDirection.SOUTH.a()) { + return EnumDirection.WEST.a(); + } + + if (i == EnumDirection.WEST.a()) { + return EnumDirection.NORTH.a(); + } + + if (i == EnumDirection.EAST.a()) { + return EnumDirection.SOUTH.a(); + } + } + } else if (block == Blocks.STONE_BUTTON) { + if (this.m == EnumDirection.SOUTH) { + if (i == 3) { + return 4; + } + + if (i == 4) { + return 3; + } + } else if (this.m == EnumDirection.WEST) { + if (i == 3) { + return 1; + } + + if (i == 4) { + return 2; + } + + if (i == 2) { + return 3; + } + + if (i == 1) { + return 4; + } + } else if (this.m == EnumDirection.EAST) { + if (i == 3) { + return 2; + } + + if (i == 4) { + return 1; + } + + if (i == 2) { + return 3; + } + + if (i == 1) { + return 4; + } + } + } else if (block != Blocks.TRIPWIRE_HOOK && !(block instanceof BlockDirectional)) { + if (block == Blocks.PISTON || block == Blocks.STICKY_PISTON || block == Blocks.LEVER || block == Blocks.DISPENSER) { + if (this.m == EnumDirection.SOUTH) { + if (i == EnumDirection.NORTH.a() || i == EnumDirection.SOUTH.a()) { + return EnumDirection.fromType1(i).opposite().a(); + } + } else if (this.m == EnumDirection.WEST) { + if (i == EnumDirection.NORTH.a()) { + return EnumDirection.WEST.a(); + } + + if (i == EnumDirection.SOUTH.a()) { + return EnumDirection.EAST.a(); + } + + if (i == EnumDirection.WEST.a()) { + return EnumDirection.NORTH.a(); + } + + if (i == EnumDirection.EAST.a()) { + return EnumDirection.SOUTH.a(); + } + } else if (this.m == EnumDirection.EAST) { + if (i == EnumDirection.NORTH.a()) { + return EnumDirection.EAST.a(); + } + + if (i == EnumDirection.SOUTH.a()) { + return EnumDirection.WEST.a(); + } + + if (i == EnumDirection.WEST.a()) { + return EnumDirection.NORTH.a(); + } + + if (i == EnumDirection.EAST.a()) { + return EnumDirection.SOUTH.a(); + } + } + } + } else { + EnumDirection enumdirection = EnumDirection.fromType2(i); + + if (this.m == EnumDirection.SOUTH) { + if (enumdirection == EnumDirection.SOUTH || enumdirection == EnumDirection.NORTH) { + return enumdirection.opposite().b(); + } + } else if (this.m == EnumDirection.WEST) { + if (enumdirection == EnumDirection.NORTH) { + return EnumDirection.WEST.b(); + } + + if (enumdirection == EnumDirection.SOUTH) { + return EnumDirection.EAST.b(); + } + + if (enumdirection == EnumDirection.WEST) { + return EnumDirection.NORTH.b(); + } + + if (enumdirection == EnumDirection.EAST) { + return EnumDirection.SOUTH.b(); + } + } else if (this.m == EnumDirection.EAST) { + if (enumdirection == EnumDirection.NORTH) { + return EnumDirection.EAST.b(); + } + + if (enumdirection == EnumDirection.SOUTH) { + return EnumDirection.WEST.b(); + } + + if (enumdirection == EnumDirection.WEST) { + return EnumDirection.NORTH.b(); + } + + if (enumdirection == EnumDirection.EAST) { + return EnumDirection.SOUTH.b(); + } + } + } + } else if (this.m == EnumDirection.SOUTH) { + if (i == 2) { + return 3; + } + + if (i == 3) { + return 2; + } + } else if (this.m == EnumDirection.WEST) { + if (i == 0) { + return 2; + } + + if (i == 1) { + return 3; + } + + if (i == 2) { + return 0; + } + + if (i == 3) { + return 1; + } + } else if (this.m == EnumDirection.EAST) { + if (i == 0) { + return 2; + } + + if (i == 1) { + return 3; + } + + if (i == 2) { + return 1; + } + + if (i == 3) { + return 0; + } + } + + return i; + } + + protected void a(World world, IBlockData iblockdata, int i, int j, int k, StructureBoundingBox structureboundingbox) { + BlockPosition blockposition = new BlockPosition(this.a(i, k), this.d(j), this.b(i, k)); + + if (structureboundingbox.b((BaseBlockPosition) blockposition)) { + world.setTypeAndData(blockposition, iblockdata, 2); + } + } + + protected IBlockData a(World world, int i, int j, int k, StructureBoundingBox structureboundingbox) { + int l = this.a(i, k); + int i1 = this.d(j); + int j1 = this.b(i, k); + BlockPosition blockposition = new BlockPosition(l, i1, j1); + + return !structureboundingbox.b((BaseBlockPosition) blockposition) ? Blocks.AIR.getBlockData() : world.getType(blockposition); + } + + protected void a(World world, StructureBoundingBox structureboundingbox, int i, int j, int k, int l, int i1, int j1) { + for (int k1 = j; k1 <= i1; ++k1) { + for (int l1 = i; l1 <= l; ++l1) { + for (int i2 = k; i2 <= j1; ++i2) { + this.a(world, Blocks.AIR.getBlockData(), l1, k1, i2, structureboundingbox); + } + } + } + + } + + protected void a(World world, StructureBoundingBox structureboundingbox, int i, int j, int k, int l, int i1, int j1, IBlockData iblockdata, IBlockData iblockdata1, boolean flag) { + for (int k1 = j; k1 <= i1; ++k1) { + for (int l1 = i; l1 <= l; ++l1) { + for (int i2 = k; i2 <= j1; ++i2) { + if (!flag || this.a(world, l1, k1, i2, structureboundingbox).getBlock().getMaterial() != Material.AIR) { + if (k1 != j && k1 != i1 && l1 != i && l1 != l && i2 != k && i2 != j1) { + this.a(world, iblockdata1, l1, k1, i2, structureboundingbox); + } else { + this.a(world, iblockdata, l1, k1, i2, structureboundingbox); + } + } + } + } + } + + } + + protected void a(World world, StructureBoundingBox structureboundingbox, int i, int j, int k, int l, int i1, int j1, boolean flag, Random random, StructurePiece.StructurePieceBlockSelector structurepiece_structurepieceblockselector) { + for (int k1 = j; k1 <= i1; ++k1) { + for (int l1 = i; l1 <= l; ++l1) { + for (int i2 = k; i2 <= j1; ++i2) { + if (!flag || this.a(world, l1, k1, i2, structureboundingbox).getBlock().getMaterial() != Material.AIR) { + structurepiece_structurepieceblockselector.a(random, l1, k1, i2, k1 == j || k1 == i1 || l1 == i || l1 == l || i2 == k || i2 == j1); + this.a(world, structurepiece_structurepieceblockselector.a(), l1, k1, i2, structureboundingbox); + } + } + } + } + + } + + protected void a(World world, StructureBoundingBox structureboundingbox, Random random, float f, int i, int j, int k, int l, int i1, int j1, IBlockData iblockdata, IBlockData iblockdata1, boolean flag) { + for (int k1 = j; k1 <= i1; ++k1) { + for (int l1 = i; l1 <= l; ++l1) { + for (int i2 = k; i2 <= j1; ++i2) { + if (random.nextFloat() <= f && (!flag || this.a(world, l1, k1, i2, structureboundingbox).getBlock().getMaterial() != Material.AIR)) { + if (k1 != j && k1 != i1 && l1 != i && l1 != l && i2 != k && i2 != j1) { + this.a(world, iblockdata1, l1, k1, i2, structureboundingbox); + } else { + this.a(world, iblockdata, l1, k1, i2, structureboundingbox); + } + } + } + } + } + + } + + protected void a(World world, StructureBoundingBox structureboundingbox, Random random, float f, int i, int j, int k, IBlockData iblockdata) { + if (random.nextFloat() < f) { + this.a(world, iblockdata, i, j, k, structureboundingbox); + } + + } + + protected void a(World world, StructureBoundingBox structureboundingbox, int i, int j, int k, int l, int i1, int j1, IBlockData iblockdata, boolean flag) { + float f = (float) (l - i + 1); + float f1 = (float) (i1 - j + 1); + float f2 = (float) (j1 - k + 1); + float f3 = (float) i + f / 2.0F; + float f4 = (float) k + f2 / 2.0F; + + for (int k1 = j; k1 <= i1; ++k1) { + float f5 = (float) (k1 - j) / f1; + + for (int l1 = i; l1 <= l; ++l1) { + float f6 = ((float) l1 - f3) / (f * 0.5F); + + for (int i2 = k; i2 <= j1; ++i2) { + float f7 = ((float) i2 - f4) / (f2 * 0.5F); + + if (!flag || this.a(world, l1, k1, i2, structureboundingbox).getBlock().getMaterial() != Material.AIR) { + float f8 = f6 * f6 + f5 * f5 + f7 * f7; + + if (f8 <= 1.05F) { + this.a(world, iblockdata, l1, k1, i2, structureboundingbox); + } + } + } + } + } + + } + + protected void b(World world, int i, int j, int k, StructureBoundingBox structureboundingbox) { + BlockPosition blockposition = new BlockPosition(this.a(i, k), this.d(j), this.b(i, k)); + + if (structureboundingbox.b((BaseBlockPosition) blockposition)) { + while (!world.isEmpty(blockposition) && blockposition.getY() < 255) { + world.setTypeAndData(blockposition, Blocks.AIR.getBlockData(), 2); + blockposition = blockposition.up(); + } + + } + } + + protected void b(World world, IBlockData iblockdata, int i, int j, int k, StructureBoundingBox structureboundingbox) { + int l = this.a(i, k); + int i1 = this.d(j); + int j1 = this.b(i, k); + + if (structureboundingbox.b((BaseBlockPosition) (new BlockPosition(l, i1, j1)))) { + while ((world.isEmpty(new BlockPosition(l, i1, j1)) || world.getType(new BlockPosition(l, i1, j1)).getBlock().getMaterial().isLiquid()) && i1 > 1) { + world.setTypeAndData(new BlockPosition(l, i1, j1), iblockdata, 2); + --i1; + } + + } + } + + protected boolean a(World world, StructureBoundingBox structureboundingbox, Random random, int i, int j, int k, List list, int l) { + BlockPosition blockposition = new BlockPosition(this.a(i, k), this.d(j), this.b(i, k)); + + if (structureboundingbox.b((BaseBlockPosition) blockposition) && world.getType(blockposition).getBlock() != Blocks.CHEST) { + IBlockData iblockdata = Blocks.CHEST.getBlockData(); + + world.setTypeAndData(blockposition, Blocks.CHEST.f(world, blockposition, iblockdata), 2); + TileEntity tileentity = world.getTileEntity(blockposition); + + if (tileentity instanceof TileEntityChest) { + StructurePieceTreasure.a(random, list, (IInventory) ((TileEntityChest) tileentity), l); + } + + return true; + } else { + return false; + } + } + + protected boolean a(World world, StructureBoundingBox structureboundingbox, Random random, int i, int j, int k, int l, List list, int i1) { + BlockPosition blockposition = new BlockPosition(this.a(i, k), this.d(j), this.b(i, k)); + + if (structureboundingbox.b((BaseBlockPosition) blockposition) && world.getType(blockposition).getBlock() != Blocks.DISPENSER) { + world.setTypeAndData(blockposition, Blocks.DISPENSER.fromLegacyData(this.a(Blocks.DISPENSER, l)), 2); + TileEntity tileentity = world.getTileEntity(blockposition); + + if (tileentity instanceof TileEntityDispenser) { + StructurePieceTreasure.a(random, list, (TileEntityDispenser) tileentity, i1); + } + + return true; + } else { + return false; + } + } + + protected void a(World world, StructureBoundingBox structureboundingbox, Random random, int i, int j, int k, EnumDirection enumdirection) { + BlockPosition blockposition = new BlockPosition(this.a(i, k), this.d(j), this.b(i, k)); + + if (structureboundingbox.b((BaseBlockPosition) blockposition)) { + ItemDoor.a(world, blockposition, enumdirection.f(), Blocks.WOODEN_DOOR); + } + + } + + public void a(int i, int j, int k) { + this.l.a(i, j, k); + } + + static class SyntheticClass_1 { + + static final int[] a = new int[EnumDirection.values().length]; + + static { + try { + StructurePiece.SyntheticClass_1.a[EnumDirection.NORTH.ordinal()] = 1; + } catch (NoSuchFieldError nosuchfielderror) { + ; + } + + try { + StructurePiece.SyntheticClass_1.a[EnumDirection.SOUTH.ordinal()] = 2; + } catch (NoSuchFieldError nosuchfielderror1) { + ; + } + + try { + StructurePiece.SyntheticClass_1.a[EnumDirection.WEST.ordinal()] = 3; + } catch (NoSuchFieldError nosuchfielderror2) { + ; + } + + try { + StructurePiece.SyntheticClass_1.a[EnumDirection.EAST.ordinal()] = 4; + } catch (NoSuchFieldError nosuchfielderror3) { + ; + } + + } + } + + public abstract static class StructurePieceBlockSelector { + + protected IBlockData a; + + protected StructurePieceBlockSelector() { + this.a = Blocks.AIR.getBlockData(); + } + + public abstract void a(Random random, int i, int j, int k, boolean flag); + + public IBlockData a() { + return this.a; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/StructurePieceTreasure.java b/eSpigot-Server/src/main/java/net/minecraft/server/StructurePieceTreasure.java new file mode 100644 index 0000000..6f0d2ad --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/StructurePieceTreasure.java @@ -0,0 +1,79 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Random; + +public class StructurePieceTreasure extends WeightedRandom.WeightedRandomChoice { + + private ItemStack b; + private int c; + private int d; + + public StructurePieceTreasure(Item item, int i, int j, int k, int l) { + super(l); + this.b = new ItemStack(item, 1, i); + this.c = j; + this.d = k; + } + + public StructurePieceTreasure(ItemStack itemstack, int i, int j, int k) { + super(k); + this.b = itemstack; + this.c = i; + this.d = j; + } + + public static void a(Random random, List list, IInventory iinventory, int i) { + for (int j = 0; j < i; ++j) { + StructurePieceTreasure structurepiecetreasure = (StructurePieceTreasure) WeightedRandom.a(random, list); + int k = structurepiecetreasure.c + random.nextInt(structurepiecetreasure.d - structurepiecetreasure.c + 1); + + if (structurepiecetreasure.b.getMaxStackSize() >= k) { + ItemStack itemstack = structurepiecetreasure.b.cloneItemStack(); + + itemstack.count = k; + iinventory.setItem(random.nextInt(iinventory.getSize()), itemstack); + } else { + for (int l = 0; l < k; ++l) { + ItemStack itemstack1 = structurepiecetreasure.b.cloneItemStack(); + + itemstack1.count = 1; + iinventory.setItem(random.nextInt(iinventory.getSize()), itemstack1); + } + } + } + + } + + public static void a(Random random, List list, TileEntityDispenser tileentitydispenser, int i) { + for (int j = 0; j < i; ++j) { + StructurePieceTreasure structurepiecetreasure = (StructurePieceTreasure) WeightedRandom.a(random, list); + int k = structurepiecetreasure.c + random.nextInt(structurepiecetreasure.d - structurepiecetreasure.c + 1); + + if (structurepiecetreasure.b.getMaxStackSize() >= k) { + ItemStack itemstack = structurepiecetreasure.b.cloneItemStack(); + + itemstack.count = k; + tileentitydispenser.setItem(random.nextInt(tileentitydispenser.getSize()), itemstack); + } else { + for (int l = 0; l < k; ++l) { + ItemStack itemstack1 = structurepiecetreasure.b.cloneItemStack(); + + itemstack1.count = 1; + tileentitydispenser.setItem(random.nextInt(tileentitydispenser.getSize()), itemstack1); + } + } + } + + } + + public static List a(List list, StructurePieceTreasure... astructurepiecetreasure) { + ArrayList arraylist = Lists.newArrayList(list); + + Collections.addAll(arraylist, astructurepiecetreasure); + return arraylist; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/StructureStart.java b/eSpigot-Server/src/main/java/net/minecraft/server/StructureStart.java new file mode 100644 index 0000000..22ba322 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/StructureStart.java @@ -0,0 +1,157 @@ +package net.minecraft.server; + +import java.util.Iterator; +import java.util.LinkedList; +import java.util.Random; + +public abstract class StructureStart { + + protected LinkedList a = new LinkedList(); + protected StructureBoundingBox b; + private int c; + private int d; + + public StructureStart() {} + + public StructureStart(int i, int j) { + this.c = i; + this.d = j; + } + + public StructureBoundingBox a() { + return this.b; + } + + public LinkedList b() { + return this.a; + } + + public void a(World world, Random random, StructureBoundingBox structureboundingbox) { + Iterator iterator = this.a.iterator(); + + while (iterator.hasNext()) { + StructurePiece structurepiece = (StructurePiece) iterator.next(); + + if (structurepiece.c().a(structureboundingbox) && !structurepiece.a(world, random, structureboundingbox)) { + iterator.remove(); + } + } + + } + + protected void c() { + this.b = StructureBoundingBox.a(); + Iterator iterator = this.a.iterator(); + + while (iterator.hasNext()) { + StructurePiece structurepiece = (StructurePiece) iterator.next(); + + this.b.b(structurepiece.c()); + } + + } + + public NBTTagCompound a(int i, int j) { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + + nbttagcompound.setString("id", WorldGenFactory.a(this)); + nbttagcompound.setInt("ChunkX", i); + nbttagcompound.setInt("ChunkZ", j); + nbttagcompound.set("BB", this.b.g()); + NBTTagList nbttaglist = new NBTTagList(); + Iterator iterator = this.a.iterator(); + + while (iterator.hasNext()) { + StructurePiece structurepiece = (StructurePiece) iterator.next(); + + nbttaglist.add(structurepiece.b()); + } + + nbttagcompound.set("Children", nbttaglist); + this.a(nbttagcompound); + return nbttagcompound; + } + + public void a(NBTTagCompound nbttagcompound) {} + + public void a(World world, NBTTagCompound nbttagcompound) { + this.c = nbttagcompound.getInt("ChunkX"); + this.d = nbttagcompound.getInt("ChunkZ"); + if (nbttagcompound.hasKey("BB")) { + this.b = new StructureBoundingBox(nbttagcompound.getIntArray("BB")); + } + + NBTTagList nbttaglist = nbttagcompound.getList("Children", 10); + + for (int i = 0; i < nbttaglist.size(); ++i) { + this.a.add(WorldGenFactory.b(nbttaglist.get(i), world)); + } + + this.b(nbttagcompound); + } + + public void b(NBTTagCompound nbttagcompound) {} + + protected void a(World world, Random random, int i) { + int j = world.F() - i; + int k = this.b.d() + 1; + + if (k < j) { + k += random.nextInt(j - k); + } + + int l = k - this.b.e; + + this.b.a(0, l, 0); + Iterator iterator = this.a.iterator(); + + while (iterator.hasNext()) { + StructurePiece structurepiece = (StructurePiece) iterator.next(); + + structurepiece.a(0, l, 0); + } + + } + + protected void a(World world, Random random, int i, int j) { + int k = j - i + 1 - this.b.d(); + boolean flag = true; + int l; + + if (k > 1) { + l = i + random.nextInt(k); + } else { + l = i; + } + + int i1 = l - this.b.b; + + this.b.a(0, i1, 0); + Iterator iterator = this.a.iterator(); + + while (iterator.hasNext()) { + StructurePiece structurepiece = (StructurePiece) iterator.next(); + + structurepiece.a(0, i1, 0); + } + + } + + public boolean d() { + return true; + } + + public boolean a(ChunkCoordIntPair chunkcoordintpair) { + return true; + } + + public void b(ChunkCoordIntPair chunkcoordintpair) {} + + public int e() { + return this.c; + } + + public int f() { + return this.d; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/SystemUtils.java b/eSpigot-Server/src/main/java/net/minecraft/server/SystemUtils.java new file mode 100644 index 0000000..e65ffc1 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/SystemUtils.java @@ -0,0 +1,21 @@ +package net.minecraft.server; + +import java.util.concurrent.ExecutionException; +import java.util.concurrent.FutureTask; +import org.apache.logging.log4j.Logger; + +public class SystemUtils { + + public static V a(FutureTask futuretask, Logger logger) { + try { + futuretask.run(); + return futuretask.get(); + } catch (ExecutionException executionexception) { + logger.fatal("Error executing task", executionexception); + } catch (InterruptedException interruptedexception) { + logger.fatal("Error executing task", interruptedexception); + } + + return null; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/ThreadWatchdog.java b/eSpigot-Server/src/main/java/net/minecraft/server/ThreadWatchdog.java new file mode 100644 index 0000000..8a56c23 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/ThreadWatchdog.java @@ -0,0 +1,93 @@ +package net.minecraft.server; + +import java.io.File; +import java.lang.management.ManagementFactory; +import java.lang.management.ThreadInfo; +import java.lang.management.ThreadMXBean; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Timer; +import java.util.TimerTask; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class ThreadWatchdog implements Runnable { + + private static final Logger a = LogManager.getLogger(); + private final DedicatedServer b; + private final long c; + + public ThreadWatchdog(DedicatedServer dedicatedserver) { + this.b = dedicatedserver; + this.c = dedicatedserver.aS(); + } + + public void run() { + while (this.b.isRunning()) { + long i = this.b.aL(); + long j = MinecraftServer.az(); + long k = j - i; + + if (k > this.c) { + ThreadWatchdog.a.fatal("A single server tick took " + String.format("%.2f", new Object[] { Float.valueOf((float) k / 1000.0F)}) + " seconds (should be max " + String.format("%.2f", new Object[] { Float.valueOf(0.05F)}) + ")"); + ThreadWatchdog.a.fatal("Considering it to be crashed, server will forcibly shutdown."); + ThreadMXBean threadmxbean = ManagementFactory.getThreadMXBean(); + ThreadInfo[] athreadinfo = threadmxbean.dumpAllThreads(true, true); + StringBuilder stringbuilder = new StringBuilder(); + Error error = new Error(); + ThreadInfo[] athreadinfo1 = athreadinfo; + int l = athreadinfo.length; + + for (int i1 = 0; i1 < l; ++i1) { + ThreadInfo threadinfo = athreadinfo1[i1]; + + if (threadinfo.getThreadId() == this.b.aM().getId()) { + error.setStackTrace(threadinfo.getStackTrace()); + } + + stringbuilder.append(threadinfo); + stringbuilder.append("\n"); + } + + CrashReport crashreport = new CrashReport("Watching Server", error); + + this.b.b(crashreport); + CrashReportSystemDetails crashreportsystemdetails = crashreport.a("Thread Dump"); + + crashreportsystemdetails.a("Threads", (Object) stringbuilder); + File file = new File(new File(this.b.y(), "crash-reports"), "crash-" + (new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss")).format(new Date()) + "-server.txt"); + + if (crashreport.a(file)) { + ThreadWatchdog.a.error("This crash report has been saved to: " + file.getAbsolutePath()); + } else { + ThreadWatchdog.a.error("We were unable to save this crash report to disk."); + } + + this.a(); + } + + try { + Thread.sleep(i + this.c - j); + } catch (InterruptedException interruptedexception) { + ; + } + } + + } + + private void a() { + try { + Timer timer = new Timer(); + + timer.schedule(new TimerTask() { + public void run() { + Runtime.getRuntime().halt(1); + } + }, 10000L); + System.exit(1); + } catch (Throwable throwable) { + Runtime.getRuntime().halt(1); + } + + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/TileEntity.java b/eSpigot-Server/src/main/java/net/minecraft/server/TileEntity.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/TileEntity.java rename to eSpigot-Server/src/main/java/net/minecraft/server/TileEntity.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/TileEntityBanner.java b/eSpigot-Server/src/main/java/net/minecraft/server/TileEntityBanner.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/TileEntityBanner.java rename to eSpigot-Server/src/main/java/net/minecraft/server/TileEntityBanner.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/TileEntityBeacon.java b/eSpigot-Server/src/main/java/net/minecraft/server/TileEntityBeacon.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/TileEntityBeacon.java rename to eSpigot-Server/src/main/java/net/minecraft/server/TileEntityBeacon.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/TileEntityBrewingStand.java b/eSpigot-Server/src/main/java/net/minecraft/server/TileEntityBrewingStand.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/TileEntityBrewingStand.java rename to eSpigot-Server/src/main/java/net/minecraft/server/TileEntityBrewingStand.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/TileEntityChest.java b/eSpigot-Server/src/main/java/net/minecraft/server/TileEntityChest.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/TileEntityChest.java rename to eSpigot-Server/src/main/java/net/minecraft/server/TileEntityChest.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/TileEntityCommand.java b/eSpigot-Server/src/main/java/net/minecraft/server/TileEntityCommand.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/TileEntityCommand.java rename to eSpigot-Server/src/main/java/net/minecraft/server/TileEntityCommand.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/TileEntityComparator.java b/eSpigot-Server/src/main/java/net/minecraft/server/TileEntityComparator.java new file mode 100644 index 0000000..0150c3d --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/TileEntityComparator.java @@ -0,0 +1,26 @@ +package net.minecraft.server; + +public class TileEntityComparator extends TileEntity { + + private int a; + + public TileEntityComparator() {} + + public void b(NBTTagCompound nbttagcompound) { + super.b(nbttagcompound); + nbttagcompound.setInt("OutputSignal", this.a); + } + + public void a(NBTTagCompound nbttagcompound) { + super.a(nbttagcompound); + this.a = nbttagcompound.getInt("OutputSignal"); + } + + public int b() { + return this.a; + } + + public void a(int i) { + this.a = i; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/TileEntityContainer.java b/eSpigot-Server/src/main/java/net/minecraft/server/TileEntityContainer.java new file mode 100644 index 0000000..209fe3b --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/TileEntityContainer.java @@ -0,0 +1,39 @@ +package net.minecraft.server; + +public abstract class TileEntityContainer extends TileEntity implements ITileEntityContainer, ITileInventory { + + private ChestLock a; + + public TileEntityContainer() { + this.a = ChestLock.a; + } + + public void a(NBTTagCompound nbttagcompound) { + super.a(nbttagcompound); + this.a = ChestLock.b(nbttagcompound); + } + + public void b(NBTTagCompound nbttagcompound) { + super.b(nbttagcompound); + if (this.a != null) { + this.a.a(nbttagcompound); + } + + } + + public boolean r_() { + return this.a != null && !this.a.a(); + } + + public ChestLock i() { + return this.a; + } + + public void a(ChestLock chestlock) { + this.a = chestlock; + } + + public IChatBaseComponent getScoreboardDisplayName() { + return (IChatBaseComponent) (this.hasCustomName() ? new ChatComponentText(this.getName()) : new ChatMessage(this.getName(), new Object[0])); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/TileEntityDispenser.java b/eSpigot-Server/src/main/java/net/minecraft/server/TileEntityDispenser.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/TileEntityDispenser.java rename to eSpigot-Server/src/main/java/net/minecraft/server/TileEntityDispenser.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/TileEntityDropper.java b/eSpigot-Server/src/main/java/net/minecraft/server/TileEntityDropper.java new file mode 100644 index 0000000..ec7722d --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/TileEntityDropper.java @@ -0,0 +1,14 @@ +package net.minecraft.server; + +public class TileEntityDropper extends TileEntityDispenser { + + public TileEntityDropper() {} + + public String getName() { + return this.hasCustomName() ? this.a : "container.dropper"; + } + + public String getContainerName() { + return "minecraft:dropper"; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/TileEntityEnchantTable.java b/eSpigot-Server/src/main/java/net/minecraft/server/TileEntityEnchantTable.java new file mode 100644 index 0000000..e054166 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/TileEntityEnchantTable.java @@ -0,0 +1,122 @@ +package net.minecraft.server; + +import java.util.Random; + +public class TileEntityEnchantTable extends TileEntity implements IUpdatePlayerListBox, ITileEntityContainer { + + public int a; + public float f; + public float g; + public float h; + public float i; + public float j; + public float k; + public float l; + public float m; + public float n; + private static Random o = new Random(); + private String p; + + public TileEntityEnchantTable() {} + + public void b(NBTTagCompound nbttagcompound) { + super.b(nbttagcompound); + if (this.hasCustomName()) { + nbttagcompound.setString("CustomName", this.p); + } + + } + + public void a(NBTTagCompound nbttagcompound) { + super.a(nbttagcompound); + if (nbttagcompound.hasKeyOfType("CustomName", 8)) { + this.p = nbttagcompound.getString("CustomName"); + } + + } + + public void c() { + this.k = this.j; + this.m = this.l; + EntityHuman entityhuman = this.world.findNearbyPlayer((double) ((float) this.position.getX() + 0.5F), (double) ((float) this.position.getY() + 0.5F), (double) ((float) this.position.getZ() + 0.5F), 3.0D); + + if (entityhuman != null) { + double d0 = entityhuman.locX - (double) ((float) this.position.getX() + 0.5F); + double d1 = entityhuman.locZ - (double) ((float) this.position.getZ() + 0.5F); + + this.n = (float) MathHelper.b(d1, d0); + this.j += 0.1F; + if (this.j < 0.5F || TileEntityEnchantTable.o.nextInt(40) == 0) { + float f = this.h; + + do { + this.h += (float) (TileEntityEnchantTable.o.nextInt(4) - TileEntityEnchantTable.o.nextInt(4)); + } while (f == this.h); + } + } else { + this.n += 0.02F; + this.j -= 0.1F; + } + + while (this.l >= 3.1415927F) { + this.l -= 6.2831855F; + } + + while (this.l < -3.1415927F) { + this.l += 6.2831855F; + } + + while (this.n >= 3.1415927F) { + this.n -= 6.2831855F; + } + + while (this.n < -3.1415927F) { + this.n += 6.2831855F; + } + + float f1; + + for (f1 = this.n - this.l; f1 >= 3.1415927F; f1 -= 6.2831855F) { + ; + } + + while (f1 < -3.1415927F) { + f1 += 6.2831855F; + } + + this.l += f1 * 0.4F; + this.j = MathHelper.a(this.j, 0.0F, 1.0F); + ++this.a; + this.g = this.f; + float f2 = (this.h - this.f) * 0.4F; + float f3 = 0.2F; + + f2 = MathHelper.a(f2, -f3, f3); + this.i += (f2 - this.i) * 0.9F; + this.f += this.i; + } + + public String getName() { + return this.hasCustomName() ? this.p : "container.enchant"; + } + + public boolean hasCustomName() { + return this.p != null && this.p.length() > 0; + } + + public void a(String s) { + this.p = s; + } + + public IChatBaseComponent getScoreboardDisplayName() { + return (IChatBaseComponent) (this.hasCustomName() ? new ChatComponentText(this.getName()) : new ChatMessage(this.getName(), new Object[0])); + } + + public Container createContainer(PlayerInventory playerinventory, EntityHuman entityhuman) { + return new ContainerEnchantTable(playerinventory, this.world, this.position); + } + + public String getContainerName() { + return "minecraft:enchanting_table"; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/TileEntityEnderChest.java b/eSpigot-Server/src/main/java/net/minecraft/server/TileEntityEnderChest.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/TileEntityEnderChest.java rename to eSpigot-Server/src/main/java/net/minecraft/server/TileEntityEnderChest.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/TileEntityEnderPortal.java b/eSpigot-Server/src/main/java/net/minecraft/server/TileEntityEnderPortal.java new file mode 100644 index 0000000..09c78a9 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/TileEntityEnderPortal.java @@ -0,0 +1,6 @@ +package net.minecraft.server; + +public class TileEntityEnderPortal extends TileEntity { + + public TileEntityEnderPortal() {} +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/TileEntityFlowerPot.java b/eSpigot-Server/src/main/java/net/minecraft/server/TileEntityFlowerPot.java new file mode 100644 index 0000000..676e101 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/TileEntityFlowerPot.java @@ -0,0 +1,55 @@ +package net.minecraft.server; + +public class TileEntityFlowerPot extends TileEntity { + + private Item a; + private int f; + + public TileEntityFlowerPot() {} + + public TileEntityFlowerPot(Item item, int i) { + this.a = item; + this.f = i; + } + + public void b(NBTTagCompound nbttagcompound) { + super.b(nbttagcompound); + MinecraftKey minecraftkey = (MinecraftKey) Item.REGISTRY.c(this.a); + + nbttagcompound.setString("Item", minecraftkey == null ? "" : minecraftkey.toString()); + nbttagcompound.setInt("Data", this.f); + } + + public void a(NBTTagCompound nbttagcompound) { + super.a(nbttagcompound); + if (nbttagcompound.hasKeyOfType("Item", 8)) { + this.a = Item.d(nbttagcompound.getString("Item")); + } else { + this.a = Item.getById(nbttagcompound.getInt("Item")); + } + + this.f = nbttagcompound.getInt("Data"); + } + + public Packet getUpdatePacket() { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + + this.b(nbttagcompound); + nbttagcompound.remove("Item"); + nbttagcompound.setInt("Item", Item.getId(this.a)); + return new PacketPlayOutTileEntityData(this.position, 5, nbttagcompound); + } + + public void a(Item item, int i) { + this.a = item; + this.f = i; + } + + public Item b() { + return this.a; + } + + public int c() { + return this.f; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/TileEntityFurnace.java b/eSpigot-Server/src/main/java/net/minecraft/server/TileEntityFurnace.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/TileEntityFurnace.java rename to eSpigot-Server/src/main/java/net/minecraft/server/TileEntityFurnace.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/TileEntityHopper.java b/eSpigot-Server/src/main/java/net/minecraft/server/TileEntityHopper.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/TileEntityHopper.java rename to eSpigot-Server/src/main/java/net/minecraft/server/TileEntityHopper.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/TileEntityLightDetector.java b/eSpigot-Server/src/main/java/net/minecraft/server/TileEntityLightDetector.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/TileEntityLightDetector.java rename to eSpigot-Server/src/main/java/net/minecraft/server/TileEntityLightDetector.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/TileEntityMobSpawner.java b/eSpigot-Server/src/main/java/net/minecraft/server/TileEntityMobSpawner.java new file mode 100644 index 0000000..c6cd84d --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/TileEntityMobSpawner.java @@ -0,0 +1,62 @@ +package net.minecraft.server; + +public class TileEntityMobSpawner extends TileEntity implements IUpdatePlayerListBox { + + private final MobSpawnerAbstract a = new MobSpawnerAbstract() { + public void a(int i) { + TileEntityMobSpawner.this.world.playBlockAction(TileEntityMobSpawner.this.position, Blocks.MOB_SPAWNER, i, 0); + } + + public World a() { + return TileEntityMobSpawner.this.world; + } + + public BlockPosition b() { + return TileEntityMobSpawner.this.position; + } + + public void a(MobSpawnerAbstract.a mobspawnerabstract_tileentitymobspawnerdata) { + super.a(mobspawnerabstract_tileentitymobspawnerdata); + if (this.a() != null) { + this.a().notify(TileEntityMobSpawner.this.position); + } + + } + }; + + public TileEntityMobSpawner() {} + + public void a(NBTTagCompound nbttagcompound) { + super.a(nbttagcompound); + this.a.a(nbttagcompound); + } + + public void b(NBTTagCompound nbttagcompound) { + super.b(nbttagcompound); + this.a.b(nbttagcompound); + } + + public void c() { + this.a.c(); + } + + public Packet getUpdatePacket() { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + + this.b(nbttagcompound); + nbttagcompound.remove("SpawnPotentials"); + return new PacketPlayOutTileEntityData(this.position, 1, nbttagcompound); + } + + public boolean c(int i, int j) { + return this.a.b(i) ? true : super.c(i, j); + } + + public boolean F() { + return true; + } + + public MobSpawnerAbstract getSpawner() { + return this.a; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/TileEntityNote.java b/eSpigot-Server/src/main/java/net/minecraft/server/TileEntityNote.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/TileEntityNote.java rename to eSpigot-Server/src/main/java/net/minecraft/server/TileEntityNote.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/TileEntityPiston.java b/eSpigot-Server/src/main/java/net/minecraft/server/TileEntityPiston.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/TileEntityPiston.java rename to eSpigot-Server/src/main/java/net/minecraft/server/TileEntityPiston.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/TileEntitySign.java b/eSpigot-Server/src/main/java/net/minecraft/server/TileEntitySign.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/TileEntitySign.java rename to eSpigot-Server/src/main/java/net/minecraft/server/TileEntitySign.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/TileEntitySkull.java b/eSpigot-Server/src/main/java/net/minecraft/server/TileEntitySkull.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/TileEntitySkull.java rename to eSpigot-Server/src/main/java/net/minecraft/server/TileEntitySkull.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/Tuple.java b/eSpigot-Server/src/main/java/net/minecraft/server/Tuple.java new file mode 100644 index 0000000..29df471 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/Tuple.java @@ -0,0 +1,20 @@ +package net.minecraft.server; + +public class Tuple { + + private A a; + private B b; + + public Tuple(A a0, B b0) { + this.a = a0; + this.b = b0; + } + + public A a() { + return this.a; + } + + public B b() { + return this.b; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/UserCache.java b/eSpigot-Server/src/main/java/net/minecraft/server/UserCache.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/UserCache.java rename to eSpigot-Server/src/main/java/net/minecraft/server/UserCache.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/UtilColor.java b/eSpigot-Server/src/main/java/net/minecraft/server/UtilColor.java new file mode 100644 index 0000000..ed94451 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/UtilColor.java @@ -0,0 +1,13 @@ +package net.minecraft.server; + +import java.util.regex.Pattern; +import org.apache.commons.lang3.StringUtils; + +public class UtilColor { + + private static final Pattern a = Pattern.compile("(?i)\\u00A7[0-9A-FK-OR]"); + + public static boolean b(String s) { + return StringUtils.isEmpty(s); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/Vec3D.java b/eSpigot-Server/src/main/java/net/minecraft/server/Vec3D.java new file mode 100644 index 0000000..9925903 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/Vec3D.java @@ -0,0 +1,134 @@ +package net.minecraft.server; + +public class Vec3D { + + public final double a; + public final double b; + public final double c; + + public Vec3D(double d0, double d1, double d2) { + if (d0 == -0.0D) { + d0 = 0.0D; + } + + if (d1 == -0.0D) { + d1 = 0.0D; + } + + if (d2 == -0.0D) { + d2 = 0.0D; + } + + this.a = d0; + this.b = d1; + this.c = d2; + } + + public Vec3D(BaseBlockPosition baseblockposition) { + this((double) baseblockposition.getX(), (double) baseblockposition.getY(), (double) baseblockposition.getZ()); + } + + public Vec3D a() { + double d0 = (double) MathHelper.sqrt(this.a * this.a + this.b * this.b + this.c * this.c); + + return d0 < 1.0E-4D ? new Vec3D(0.0D, 0.0D, 0.0D) : new Vec3D(this.a / d0, this.b / d0, this.c / d0); + } + + public double b(Vec3D vec3d) { + return this.a * vec3d.a + this.b * vec3d.b + this.c * vec3d.c; + } + + public Vec3D d(Vec3D vec3d) { + return this.a(vec3d.a, vec3d.b, vec3d.c); + } + + public Vec3D a(double d0, double d1, double d2) { + return this.add(-d0, -d1, -d2); + } + + public Vec3D e(Vec3D vec3d) { + return this.add(vec3d.a, vec3d.b, vec3d.c); + } + + public Vec3D add(double d0, double d1, double d2) { + return new Vec3D(this.a + d0, this.b + d1, this.c + d2); + } + + public double distanceSquared(Vec3D vec3d) { + double d0 = vec3d.a - this.a; + double d1 = vec3d.b - this.b; + double d2 = vec3d.c - this.c; + + return d0 * d0 + d1 * d1 + d2 * d2; + } + + public double b() { + return (double) MathHelper.sqrt(this.a * this.a + this.b * this.b + this.c * this.c); + } + + public Vec3D a(Vec3D vec3d, double d0) { + double d1 = vec3d.a - this.a; + double d2 = vec3d.b - this.b; + double d3 = vec3d.c - this.c; + + if (d1 * d1 < 1.0000000116860974E-7D) { + return null; + } else { + double d4 = (d0 - this.a) / d1; + + return d4 >= 0.0D && d4 <= 1.0D ? new Vec3D(this.a + d1 * d4, this.b + d2 * d4, this.c + d3 * d4) : null; + } + } + + public Vec3D b(Vec3D vec3d, double d0) { + double d1 = vec3d.a - this.a; + double d2 = vec3d.b - this.b; + double d3 = vec3d.c - this.c; + + if (d2 * d2 < 1.0000000116860974E-7D) { + return null; + } else { + double d4 = (d0 - this.b) / d2; + + return d4 >= 0.0D && d4 <= 1.0D ? new Vec3D(this.a + d1 * d4, this.b + d2 * d4, this.c + d3 * d4) : null; + } + } + + public Vec3D c(Vec3D vec3d, double d0) { + double d1 = vec3d.a - this.a; + double d2 = vec3d.b - this.b; + double d3 = vec3d.c - this.c; + + if (d3 * d3 < 1.0000000116860974E-7D) { + return null; + } else { + double d4 = (d0 - this.c) / d3; + + return d4 >= 0.0D && d4 <= 1.0D ? new Vec3D(this.a + d1 * d4, this.b + d2 * d4, this.c + d3 * d4) : null; + } + } + + public String toString() { + return "(" + this.a + ", " + this.b + ", " + this.c + ")"; + } + + public Vec3D a(float f) { + float f1 = MathHelper.cos(f); + float f2 = MathHelper.sin(f); + double d0 = this.a; + double d1 = this.b * (double) f1 + this.c * (double) f2; + double d2 = this.c * (double) f1 - this.b * (double) f2; + + return new Vec3D(d0, d1, d2); + } + + public Vec3D b(float f) { + float f1 = MathHelper.cos(f); + float f2 = MathHelper.sin(f); + double d0 = this.a * (double) f1 + this.c * (double) f2; + double d1 = this.b; + double d2 = this.c * (double) f1 - this.a * (double) f2; + + return new Vec3D(d0, d1, d2); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/Vector3f.java b/eSpigot-Server/src/main/java/net/minecraft/server/Vector3f.java new file mode 100644 index 0000000..cb6fb53 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/Vector3f.java @@ -0,0 +1,51 @@ +package net.minecraft.server; + +public class Vector3f { + + protected final float x; + protected final float y; + protected final float z; + + public Vector3f(float f, float f1, float f2) { + this.x = f; + this.y = f1; + this.z = f2; + } + + public Vector3f(NBTTagList nbttaglist) { + this.x = nbttaglist.e(0); + this.y = nbttaglist.e(1); + this.z = nbttaglist.e(2); + } + + public NBTTagList a() { + NBTTagList nbttaglist = new NBTTagList(); + + nbttaglist.add(new NBTTagFloat(this.x)); + nbttaglist.add(new NBTTagFloat(this.y)); + nbttaglist.add(new NBTTagFloat(this.z)); + return nbttaglist; + } + + public boolean equals(Object object) { + if (!(object instanceof Vector3f)) { + return false; + } else { + Vector3f vector3f = (Vector3f) object; + + return this.x == vector3f.x && this.y == vector3f.y && this.z == vector3f.z; + } + } + + public float getX() { + return this.x; + } + + public float getY() { + return this.y; + } + + public float getZ() { + return this.z; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/Village.java b/eSpigot-Server/src/main/java/net/minecraft/server/Village.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/Village.java rename to eSpigot-Server/src/main/java/net/minecraft/server/Village.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/VillageDoor.java b/eSpigot-Server/src/main/java/net/minecraft/server/VillageDoor.java new file mode 100644 index 0000000..74b74dd --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/VillageDoor.java @@ -0,0 +1,89 @@ +package net.minecraft.server; + +public class VillageDoor { + + private final BlockPosition a; + private final BlockPosition b; + private final EnumDirection c; + private int d; + private boolean e; + private int f; + + public VillageDoor(BlockPosition blockposition, int i, int j, int k) { + this(blockposition, a(i, j), k); + } + + private static EnumDirection a(int i, int j) { + return i < 0 ? EnumDirection.WEST : (i > 0 ? EnumDirection.EAST : (j < 0 ? EnumDirection.NORTH : EnumDirection.SOUTH)); + } + + public VillageDoor(BlockPosition blockposition, EnumDirection enumdirection, int i) { + this.a = blockposition; + this.c = enumdirection; + this.b = blockposition.shift(enumdirection, 2); + this.d = i; + } + + public int b(int i, int j, int k) { + return (int) this.a.c((double) i, (double) j, (double) k); + } + + public int a(BlockPosition blockposition) { + return (int) blockposition.i(this.d()); + } + + public int b(BlockPosition blockposition) { + return (int) this.b.i(blockposition); + } + + public boolean c(BlockPosition blockposition) { + int i = blockposition.getX() - this.a.getX(); + int j = blockposition.getZ() - this.a.getY(); + + return i * this.c.getAdjacentX() + j * this.c.getAdjacentZ() >= 0; + } + + public void a() { + this.f = 0; + } + + public void b() { + ++this.f; + } + + public int c() { + return this.f; + } + + public BlockPosition d() { + return this.a; + } + + public BlockPosition e() { + return this.b; + } + + public int f() { + return this.c.getAdjacentX() * 2; + } + + public int g() { + return this.c.getAdjacentZ() * 2; + } + + public int h() { + return this.d; + } + + public void a(int i) { + this.d = i; + } + + public boolean i() { + return this.e; + } + + public void a(boolean flag) { + this.e = flag; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/VillageSiege.java b/eSpigot-Server/src/main/java/net/minecraft/server/VillageSiege.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/VillageSiege.java rename to eSpigot-Server/src/main/java/net/minecraft/server/VillageSiege.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WeightedRandom.java b/eSpigot-Server/src/main/java/net/minecraft/server/WeightedRandom.java new file mode 100644 index 0000000..58789a3 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WeightedRandom.java @@ -0,0 +1,60 @@ +package net.minecraft.server; + +import java.util.Collection; +import java.util.Iterator; +import java.util.Random; + +public class WeightedRandom { + + public static int a(Collection collection) { + int i = 0; + + WeightedRandom.WeightedRandomChoice weightedrandom_weightedrandomchoice; + + for (Iterator iterator = collection.iterator(); iterator.hasNext(); i += weightedrandom_weightedrandomchoice.a) { + weightedrandom_weightedrandomchoice = (WeightedRandom.WeightedRandomChoice) iterator.next(); + } + + return i; + } + + public static T a(Random random, Collection collection, int i) { + if (i <= 0) { + throw new IllegalArgumentException(); + } else { + int j = random.nextInt(i); + + return a(collection, j); + } + } + + public static T a(Collection collection, int i) { + Iterator iterator = collection.iterator(); + + T weightedrandom_weightedrandomchoice; + + do { + if (!iterator.hasNext()) { + return null; + } + + weightedrandom_weightedrandomchoice = iterator.next(); + i -= weightedrandom_weightedrandomchoice.a; + } while (i >= 0); + + return weightedrandom_weightedrandomchoice; + } + + public static T a(Random random, Collection collection) { + return a(random, collection, a(collection)); + } + + public static class WeightedRandomChoice { + + protected int a; + + public WeightedRandomChoice(int i) { + this.a = i; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WeightedRandomEnchant.java b/eSpigot-Server/src/main/java/net/minecraft/server/WeightedRandomEnchant.java new file mode 100644 index 0000000..68595aa --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WeightedRandomEnchant.java @@ -0,0 +1,13 @@ +package net.minecraft.server; + +public class WeightedRandomEnchant extends WeightedRandom.WeightedRandomChoice { + + public final Enchantment enchantment; + public final int level; + + public WeightedRandomEnchant(Enchantment enchantment, int i) { + super(enchantment.getRandomWeight()); + this.enchantment = enchantment; + this.level = i; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WhiteList.java b/eSpigot-Server/src/main/java/net/minecraft/server/WhiteList.java new file mode 100644 index 0000000..b25a0f6 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WhiteList.java @@ -0,0 +1,58 @@ +package net.minecraft.server; + +import com.google.gson.JsonObject; +import com.mojang.authlib.GameProfile; +import java.io.File; +import java.util.Iterator; + +public class WhiteList extends JsonList { + + public WhiteList(File file) { + super(file); + } + + protected JsonListEntry a(JsonObject jsonobject) { + return new WhiteListEntry(jsonobject); + } + + public boolean isWhitelisted(GameProfile gameprofile) { + return this.d(gameprofile); + } + + public String[] getEntries() { + String[] astring = new String[this.e().size()]; + int i = 0; + + WhiteListEntry whitelistentry; + + for (Iterator iterator = this.e().values().iterator(); iterator.hasNext(); astring[i++] = ((GameProfile) whitelistentry.getKey()).getName()) { + whitelistentry = (WhiteListEntry) iterator.next(); + } + + return astring; + } + + protected String b(GameProfile gameprofile) { + return gameprofile.getId().toString(); + } + + public GameProfile a(String s) { + Iterator iterator = this.e().values().iterator(); + + WhiteListEntry whitelistentry; + + do { + if (!iterator.hasNext()) { + return null; + } + + whitelistentry = (WhiteListEntry) iterator.next(); + } while (!s.equalsIgnoreCase(((GameProfile) whitelistentry.getKey()).getName())); + + return (GameProfile) whitelistentry.getKey(); + } + + protected String a(GameProfile object) { + return this.b(object); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WhiteListEntry.java b/eSpigot-Server/src/main/java/net/minecraft/server/WhiteListEntry.java new file mode 100644 index 0000000..06d29a4 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WhiteListEntry.java @@ -0,0 +1,42 @@ +package net.minecraft.server; + +import com.google.gson.JsonObject; +import com.mojang.authlib.GameProfile; +import java.util.UUID; + +public class WhiteListEntry extends JsonListEntry { + + public WhiteListEntry(GameProfile gameprofile) { + super(gameprofile); + } + + public WhiteListEntry(JsonObject jsonobject) { + super(b(jsonobject), jsonobject); + } + + protected void a(JsonObject jsonobject) { + if (this.getKey() != null) { + jsonobject.addProperty("uuid", ((GameProfile) this.getKey()).getId() == null ? "" : ((GameProfile) this.getKey()).getId().toString()); + jsonobject.addProperty("name", ((GameProfile) this.getKey()).getName()); + super.a(jsonobject); + } + } + + private static GameProfile b(JsonObject jsonobject) { + if (jsonobject.has("uuid") && jsonobject.has("name")) { + String s = jsonobject.get("uuid").getAsString(); + + UUID uuid; + + try { + uuid = UUID.fromString(s); + } catch (Throwable throwable) { + return null; + } + + return new GameProfile(uuid, jsonobject.get("name").getAsString()); + } else { + return null; + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/World.java b/eSpigot-Server/src/main/java/net/minecraft/server/World.java similarity index 99% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/World.java rename to eSpigot-Server/src/main/java/net/minecraft/server/World.java index fdcbe27..81ec6c0 100644 --- a/TacoSpigot-Server/src/main/java/net/minecraft/server/World.java +++ b/eSpigot-Server/src/main/java/net/minecraft/server/World.java @@ -620,7 +620,7 @@ public abstract class World implements IBlockAccess { // CraftBukkit start CraftWorld world = this.getWorld(); // TacoSpigot start - Add config to disable redstone firing BlockPhysicsEvent - if (world != null && (this.tacoSpigotConfig.isRedstoneFireBPE || !(block instanceof BlockRedstoneWire || block instanceof BlockRedstoneTorch || block instanceof BlockRepeater))) { + if (world != null && (this.tacoSpigotConfig.isRedstoneFireBPE || !(block instanceof BlockRedstoneWire || block instanceof BlockRedstoneTorch || block instanceof BlockRepeater)) && ((WorldServer) this).hasPhysicsEvent) { // TacoSpigot end BlockPhysicsEvent event = new BlockPhysicsEvent(world.getBlockAt(blockposition.getX(), blockposition.getY(), blockposition.getZ()), CraftMagicNumbers.getId(block)); this.getServer().getPluginManager().callEvent(event); diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/WorldBorder.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldBorder.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/WorldBorder.java rename to eSpigot-Server/src/main/java/net/minecraft/server/WorldBorder.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldChunkManager.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldChunkManager.java new file mode 100644 index 0000000..56afc55 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldChunkManager.java @@ -0,0 +1,202 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import java.util.List; +import java.util.Random; + +public class WorldChunkManager { + + private GenLayer b; + private GenLayer c; + private BiomeCache d; + private List e; + private String f; + + protected WorldChunkManager() { + this.d = new BiomeCache(this); + this.f = ""; + this.e = Lists.newArrayList(); + this.e.add(BiomeBase.FOREST); + this.e.add(BiomeBase.PLAINS); + this.e.add(BiomeBase.TAIGA); + this.e.add(BiomeBase.TAIGA_HILLS); + this.e.add(BiomeBase.FOREST_HILLS); + this.e.add(BiomeBase.JUNGLE); + this.e.add(BiomeBase.JUNGLE_HILLS); + } + + public WorldChunkManager(long i, WorldType worldtype, String s) { + this(); + this.f = s; + GenLayer[] agenlayer = GenLayer.a(i, worldtype, s); + + this.b = agenlayer[0]; + this.c = agenlayer[1]; + } + + public WorldChunkManager(World world) { + this(world.getSeed(), world.getWorldData().getType(), world.getWorldData().getGeneratorOptions()); + } + + public List a() { + return this.e; + } + + public BiomeBase getBiome(BlockPosition blockposition) { + return this.getBiome(blockposition, (BiomeBase) null); + } + + public BiomeBase getBiome(BlockPosition blockposition, BiomeBase biomebase) { + return this.d.a(blockposition.getX(), blockposition.getZ(), biomebase); + } + + public float[] getWetness(float[] afloat, int i, int j, int k, int l) { + IntCache.a(); + if (afloat == null || afloat.length < k * l) { + afloat = new float[k * l]; + } + + int[] aint = this.c.a(i, j, k, l); + + for (int i1 = 0; i1 < k * l; ++i1) { + try { + float f = (float) BiomeBase.getBiome(aint[i1], BiomeBase.ad).h() / 65536.0F; + + if (f > 1.0F) { + f = 1.0F; + } + + afloat[i1] = f; + } catch (Throwable throwable) { + CrashReport crashreport = CrashReport.a(throwable, "Invalid Biome id"); + CrashReportSystemDetails crashreportsystemdetails = crashreport.a("DownfallBlock"); + + crashreportsystemdetails.a("biome id", (Object) Integer.valueOf(i1)); + crashreportsystemdetails.a("downfalls[] size", (Object) Integer.valueOf(afloat.length)); + crashreportsystemdetails.a("x", (Object) Integer.valueOf(i)); + crashreportsystemdetails.a("z", (Object) Integer.valueOf(j)); + crashreportsystemdetails.a("w", (Object) Integer.valueOf(k)); + crashreportsystemdetails.a("h", (Object) Integer.valueOf(l)); + throw new ReportedException(crashreport); + } + } + + return afloat; + } + + public BiomeBase[] getBiomes(BiomeBase[] abiomebase, int i, int j, int k, int l) { + IntCache.a(); + if (abiomebase == null || abiomebase.length < k * l) { + abiomebase = new BiomeBase[k * l]; + } + + int[] aint = this.b.a(i, j, k, l); + + try { + for (int i1 = 0; i1 < k * l; ++i1) { + abiomebase[i1] = BiomeBase.getBiome(aint[i1], BiomeBase.ad); + } + + return abiomebase; + } catch (Throwable throwable) { + CrashReport crashreport = CrashReport.a(throwable, "Invalid Biome id"); + CrashReportSystemDetails crashreportsystemdetails = crashreport.a("RawBiomeBlock"); + + crashreportsystemdetails.a("biomes[] size", (Object) Integer.valueOf(abiomebase.length)); + crashreportsystemdetails.a("x", (Object) Integer.valueOf(i)); + crashreportsystemdetails.a("z", (Object) Integer.valueOf(j)); + crashreportsystemdetails.a("w", (Object) Integer.valueOf(k)); + crashreportsystemdetails.a("h", (Object) Integer.valueOf(l)); + throw new ReportedException(crashreport); + } + } + + public BiomeBase[] getBiomeBlock(BiomeBase[] abiomebase, int i, int j, int k, int l) { + return this.a(abiomebase, i, j, k, l, true); + } + + public BiomeBase[] a(BiomeBase[] abiomebase, int i, int j, int k, int l, boolean flag) { + IntCache.a(); + if (abiomebase == null || abiomebase.length < k * l) { + abiomebase = new BiomeBase[k * l]; + } + + if (flag && k == 16 && l == 16 && (i & 15) == 0 && (j & 15) == 0) { + BiomeBase[] abiomebase1 = this.d.c(i, j); + + System.arraycopy(abiomebase1, 0, abiomebase, 0, k * l); + return abiomebase; + } else { + int[] aint = this.c.a(i, j, k, l); + + for (int i1 = 0; i1 < k * l; ++i1) { + abiomebase[i1] = BiomeBase.getBiome(aint[i1], BiomeBase.ad); + } + + return abiomebase; + } + } + + public boolean a(int i, int j, int k, List list) { + IntCache.a(); + int l = i - k >> 2; + int i1 = j - k >> 2; + int j1 = i + k >> 2; + int k1 = j + k >> 2; + int l1 = j1 - l + 1; + int i2 = k1 - i1 + 1; + int[] aint = this.b.a(l, i1, l1, i2); + + try { + for (int j2 = 0; j2 < l1 * i2; ++j2) { + BiomeBase biomebase = BiomeBase.getBiome(aint[j2]); + + if (!list.contains(biomebase)) { + return false; + } + } + + return true; + } catch (Throwable throwable) { + CrashReport crashreport = CrashReport.a(throwable, "Invalid Biome id"); + CrashReportSystemDetails crashreportsystemdetails = crashreport.a("Layer"); + + crashreportsystemdetails.a("Layer", (Object) this.b.toString()); + crashreportsystemdetails.a("x", (Object) Integer.valueOf(i)); + crashreportsystemdetails.a("z", (Object) Integer.valueOf(j)); + crashreportsystemdetails.a("radius", (Object) Integer.valueOf(k)); + crashreportsystemdetails.a("allowed", (Object) list); + throw new ReportedException(crashreport); + } + } + + public BlockPosition a(int i, int j, int k, List list, Random random) { + IntCache.a(); + int l = i - k >> 2; + int i1 = j - k >> 2; + int j1 = i + k >> 2; + int k1 = j + k >> 2; + int l1 = j1 - l + 1; + int i2 = k1 - i1 + 1; + int[] aint = this.b.a(l, i1, l1, i2); + BlockPosition blockposition = null; + int j2 = 0; + + for (int k2 = 0; k2 < l1 * i2; ++k2) { + int l2 = l + k2 % l1 << 2; + int i3 = i1 + k2 / l1 << 2; + BiomeBase biomebase = BiomeBase.getBiome(aint[k2]); + + if (list.contains(biomebase) && (blockposition == null || random.nextInt(j2 + 1) == 0)) { + blockposition = new BlockPosition(l2, 0, i3); + ++j2; + } + } + + return blockposition; + } + + public void b() { + this.d.a(); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldChunkManagerHell.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldChunkManagerHell.java new file mode 100644 index 0000000..bdea69f --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldChunkManagerHell.java @@ -0,0 +1,59 @@ +package net.minecraft.server; + +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +public class WorldChunkManagerHell extends WorldChunkManager { + + private BiomeBase b; + private float c; + + public WorldChunkManagerHell(BiomeBase biomebase, float f) { + this.b = biomebase; + this.c = f; + } + + public BiomeBase getBiome(BlockPosition blockposition) { + return this.b; + } + + public BiomeBase[] getBiomes(BiomeBase[] abiomebase, int i, int j, int k, int l) { + if (abiomebase == null || abiomebase.length < k * l) { + abiomebase = new BiomeBase[k * l]; + } + + Arrays.fill(abiomebase, 0, k * l, this.b); + return abiomebase; + } + + public float[] getWetness(float[] afloat, int i, int j, int k, int l) { + if (afloat == null || afloat.length < k * l) { + afloat = new float[k * l]; + } + + Arrays.fill(afloat, 0, k * l, this.c); + return afloat; + } + + public BiomeBase[] getBiomeBlock(BiomeBase[] abiomebase, int i, int j, int k, int l) { + if (abiomebase == null || abiomebase.length < k * l) { + abiomebase = new BiomeBase[k * l]; + } + + Arrays.fill(abiomebase, 0, k * l, this.b); + return abiomebase; + } + + public BiomeBase[] a(BiomeBase[] abiomebase, int i, int j, int k, int l, boolean flag) { + return this.getBiomeBlock(abiomebase, i, j, k, l); + } + + public BlockPosition a(int i, int j, int k, List list, Random random) { + return list.contains(this.b) ? new BlockPosition(i - k + random.nextInt(k * 2 + 1), 0, j - k + random.nextInt(k * 2 + 1)) : null; + } + + public boolean a(int i, int j, int k, List list) { + return list.contains(this.b); + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/WorldData.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldData.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/WorldData.java rename to eSpigot-Server/src/main/java/net/minecraft/server/WorldData.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenAcaciaTree.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenAcaciaTree.java new file mode 100644 index 0000000..9a70548 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenAcaciaTree.java @@ -0,0 +1,179 @@ +package net.minecraft.server; + +import java.util.Random; + +public class WorldGenAcaciaTree extends WorldGenTreeAbstract { + + private static final IBlockData a = Blocks.LOG2.getBlockData().set(BlockLog2.VARIANT, BlockWood.EnumLogVariant.ACACIA); + private static final IBlockData b = Blocks.LEAVES2.getBlockData().set(BlockLeaves2.VARIANT, BlockWood.EnumLogVariant.ACACIA).set(BlockLeaves.CHECK_DECAY, Boolean.valueOf(false)); + + public WorldGenAcaciaTree(boolean flag) { + super(flag); + } + + public boolean generate(World world, Random random, BlockPosition blockposition) { + int i = random.nextInt(3) + random.nextInt(3) + 5; + boolean flag = true; + + if (blockposition.getY() >= 1 && blockposition.getY() + i + 1 <= 256) { + int j; + int k; + + for (int l = blockposition.getY(); l <= blockposition.getY() + 1 + i; ++l) { + byte b0 = 1; + + if (l == blockposition.getY()) { + b0 = 0; + } + + if (l >= blockposition.getY() + 1 + i - 2) { + b0 = 2; + } + + BlockPosition.MutableBlockPosition blockposition_mutableblockposition = new BlockPosition.MutableBlockPosition(); + + for (j = blockposition.getX() - b0; j <= blockposition.getX() + b0 && flag; ++j) { + for (k = blockposition.getZ() - b0; k <= blockposition.getZ() + b0 && flag; ++k) { + if (l >= 0 && l < 256) { + if (!this.a(world.getType(blockposition_mutableblockposition.c(j, l, k)).getBlock())) { + flag = false; + } + } else { + flag = false; + } + } + } + } + + if (!flag) { + return false; + } else { + Block block = world.getType(blockposition.down()).getBlock(); + + if ((block == Blocks.GRASS || block == Blocks.DIRT) && blockposition.getY() < 256 - i - 1) { + this.a(world, blockposition.down()); + EnumDirection enumdirection = EnumDirection.EnumDirectionLimit.HORIZONTAL.a(random); + int i1 = i - random.nextInt(4) - 1; + + j = 3 - random.nextInt(3); + k = blockposition.getX(); + int j1 = blockposition.getZ(); + int k1 = 0; + + int l1; + + for (int i2 = 0; i2 < i; ++i2) { + l1 = blockposition.getY() + i2; + if (i2 >= i1 && j > 0) { + k += enumdirection.getAdjacentX(); + j1 += enumdirection.getAdjacentZ(); + --j; + } + + BlockPosition blockposition1 = new BlockPosition(k, l1, j1); + Material material = world.getType(blockposition1).getBlock().getMaterial(); + + if (material == Material.AIR || material == Material.LEAVES) { + this.b(world, blockposition1); + k1 = l1; + } + } + + BlockPosition blockposition2 = new BlockPosition(k, k1, j1); + + int j2; + + for (l1 = -3; l1 <= 3; ++l1) { + for (j2 = -3; j2 <= 3; ++j2) { + if (Math.abs(l1) != 3 || Math.abs(j2) != 3) { + this.c(world, blockposition2.a(l1, 0, j2)); + } + } + } + + blockposition2 = blockposition2.up(); + + for (l1 = -1; l1 <= 1; ++l1) { + for (j2 = -1; j2 <= 1; ++j2) { + this.c(world, blockposition2.a(l1, 0, j2)); + } + } + + this.c(world, blockposition2.east(2)); + this.c(world, blockposition2.west(2)); + this.c(world, blockposition2.south(2)); + this.c(world, blockposition2.north(2)); + k = blockposition.getX(); + j1 = blockposition.getZ(); + EnumDirection enumdirection1 = EnumDirection.EnumDirectionLimit.HORIZONTAL.a(random); + + if (enumdirection1 != enumdirection) { + l1 = i1 - random.nextInt(2) - 1; + j2 = 1 + random.nextInt(3); + k1 = 0; + + int k2; + + for (int l2 = l1; l2 < i && j2 > 0; --j2) { + if (l2 >= 1) { + k2 = blockposition.getY() + l2; + k += enumdirection1.getAdjacentX(); + j1 += enumdirection1.getAdjacentZ(); + BlockPosition blockposition3 = new BlockPosition(k, k2, j1); + Material material1 = world.getType(blockposition3).getBlock().getMaterial(); + + if (material1 == Material.AIR || material1 == Material.LEAVES) { + this.b(world, blockposition3); + k1 = k2; + } + } + + ++l2; + } + + if (k1 > 0) { + BlockPosition blockposition4 = new BlockPosition(k, k1, j1); + + int i3; + + for (k2 = -2; k2 <= 2; ++k2) { + for (i3 = -2; i3 <= 2; ++i3) { + if (Math.abs(k2) != 2 || Math.abs(i3) != 2) { + this.c(world, blockposition4.a(k2, 0, i3)); + } + } + } + + blockposition4 = blockposition4.up(); + + for (k2 = -1; k2 <= 1; ++k2) { + for (i3 = -1; i3 <= 1; ++i3) { + this.c(world, blockposition4.a(k2, 0, i3)); + } + } + } + } + + return true; + } else { + return false; + } + } + } else { + return false; + } + } + + private void b(World world, BlockPosition blockposition) { + this.a(world, blockposition, WorldGenAcaciaTree.a); + } + + private void c(World world, BlockPosition blockposition) { + Material material = world.getType(blockposition).getBlock().getMaterial(); + + if (material == Material.AIR || material == Material.LEAVES) { + this.a(world, blockposition, WorldGenAcaciaTree.b); + } + + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenBase.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenBase.java new file mode 100644 index 0000000..9c614ec --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenBase.java @@ -0,0 +1,34 @@ +package net.minecraft.server; + +import java.util.Random; + +public class WorldGenBase { + + protected int a = 8; + protected Random b = new Random(); + protected World c; + + public WorldGenBase() {} + + public void a(IChunkProvider ichunkprovider, World world, int i, int j, ChunkSnapshot chunksnapshot) { + int k = this.a; + + this.c = world; + this.b.setSeed(world.getSeed()); + long l = this.b.nextLong(); + long i1 = this.b.nextLong(); + + for (int j1 = i - k; j1 <= i + k; ++j1) { + for (int k1 = j - k; k1 <= j + k; ++k1) { + long l1 = (long) j1 * l; + long i2 = (long) k1 * i1; + + this.b.setSeed(l1 ^ i2 ^ world.getSeed()); + this.a(world, j1, k1, i, j, chunksnapshot); + } + } + + } + + protected void a(World world, int i, int j, int k, int l, ChunkSnapshot chunksnapshot) {} +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenBigTree.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenBigTree.java new file mode 100644 index 0000000..278651f --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenBigTree.java @@ -0,0 +1,292 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import java.util.Iterator; +import java.util.List; +import java.util.Random; + +public class WorldGenBigTree extends WorldGenTreeAbstract { + + private Random k; + private World l; + private BlockPosition m; + int a; + int b; + double c; + double d; + double e; + double f; + int g; + int h; + int i; + List j; + + public WorldGenBigTree(boolean flag) { + super(flag); + this.m = BlockPosition.ZERO; + this.c = 0.618D; + this.d = 0.381D; + this.e = 1.0D; + this.f = 1.0D; + this.g = 1; + this.h = 12; + this.i = 4; + } + + void a() { + this.b = (int) ((double) this.a * this.c); + if (this.b >= this.a) { + this.b = this.a - 1; + } + + int i = (int) (1.382D + Math.pow(this.f * (double) this.a / 13.0D, 2.0D)); + + if (i < 1) { + i = 1; + } + + int j = this.m.getY() + this.b; + int k = this.a - this.i; + + this.j = Lists.newArrayList(); + this.j.add(new WorldGenBigTree.Position(this.m.up(k), j)); + + for (; k >= 0; --k) { + float f = this.a(k); + + if (f >= 0.0F) { + for (int l = 0; l < i; ++l) { + double d0 = this.e * (double) f * ((double) this.k.nextFloat() + 0.328D); + double d1 = (double) (this.k.nextFloat() * 2.0F) * 3.141592653589793D; + double d2 = d0 * Math.sin(d1) + 0.5D; + double d3 = d0 * Math.cos(d1) + 0.5D; + BlockPosition blockposition = this.m.a(d2, (double) (k - 1), d3); + BlockPosition blockposition1 = blockposition.up(this.i); + + if (this.a(blockposition, blockposition1) == -1) { + int i1 = this.m.getX() - blockposition.getX(); + int j1 = this.m.getZ() - blockposition.getZ(); + double d4 = (double) blockposition.getY() - Math.sqrt((double) (i1 * i1 + j1 * j1)) * this.d; + int k1 = d4 > (double) j ? j : (int) d4; + BlockPosition blockposition2 = new BlockPosition(this.m.getX(), k1, this.m.getZ()); + + if (this.a(blockposition2, blockposition) == -1) { + this.j.add(new WorldGenBigTree.Position(blockposition, blockposition2.getY())); + } + } + } + } + } + + } + + void a(BlockPosition blockposition, float f, IBlockData iblockdata) { + int i = (int) ((double) f + 0.618D); + + for (int j = -i; j <= i; ++j) { + for (int k = -i; k <= i; ++k) { + if (Math.pow((double) Math.abs(j) + 0.5D, 2.0D) + Math.pow((double) Math.abs(k) + 0.5D, 2.0D) <= (double) (f * f)) { + BlockPosition blockposition1 = blockposition.a(j, 0, k); + Material material = this.l.getType(blockposition1).getBlock().getMaterial(); + + if (material == Material.AIR || material == Material.LEAVES) { + this.a(this.l, blockposition1, iblockdata); + } + } + } + } + + } + + float a(int i) { + if ((float) i < (float) this.a * 0.3F) { + return -1.0F; + } else { + float f = (float) this.a / 2.0F; + float f1 = f - (float) i; + float f2 = MathHelper.c(f * f - f1 * f1); + + if (f1 == 0.0F) { + f2 = f; + } else if (Math.abs(f1) >= f) { + return 0.0F; + } + + return f2 * 0.5F; + } + } + + float b(int i) { + return i >= 0 && i < this.i ? (i != 0 && i != this.i - 1 ? 3.0F : 2.0F) : -1.0F; + } + + void a(BlockPosition blockposition) { + for (int i = 0; i < this.i; ++i) { + this.a(blockposition.up(i), this.b(i), Blocks.LEAVES.getBlockData().set(BlockLeaves.CHECK_DECAY, Boolean.valueOf(false))); + } + + } + + void a(BlockPosition blockposition, BlockPosition blockposition1, Block block) { + BlockPosition blockposition2 = blockposition1.a(-blockposition.getX(), -blockposition.getY(), -blockposition.getZ()); + int i = this.b(blockposition2); + float f = (float) blockposition2.getX() / (float) i; + float f1 = (float) blockposition2.getY() / (float) i; + float f2 = (float) blockposition2.getZ() / (float) i; + + for (int j = 0; j <= i; ++j) { + BlockPosition blockposition3 = blockposition.a((double) (0.5F + (float) j * f), (double) (0.5F + (float) j * f1), (double) (0.5F + (float) j * f2)); + BlockLogAbstract.EnumLogRotation blocklogabstract_enumlogrotation = this.b(blockposition, blockposition3); + + this.a(this.l, blockposition3, block.getBlockData().set(BlockLogAbstract.AXIS, blocklogabstract_enumlogrotation)); + } + + } + + private int b(BlockPosition blockposition) { + int i = MathHelper.a(blockposition.getX()); + int j = MathHelper.a(blockposition.getY()); + int k = MathHelper.a(blockposition.getZ()); + + return k > i && k > j ? k : (j > i ? j : i); + } + + private BlockLogAbstract.EnumLogRotation b(BlockPosition blockposition, BlockPosition blockposition1) { + BlockLogAbstract.EnumLogRotation blocklogabstract_enumlogrotation = BlockLogAbstract.EnumLogRotation.Y; + int i = Math.abs(blockposition1.getX() - blockposition.getX()); + int j = Math.abs(blockposition1.getZ() - blockposition.getZ()); + int k = Math.max(i, j); + + if (k > 0) { + if (i == k) { + blocklogabstract_enumlogrotation = BlockLogAbstract.EnumLogRotation.X; + } else if (j == k) { + blocklogabstract_enumlogrotation = BlockLogAbstract.EnumLogRotation.Z; + } + } + + return blocklogabstract_enumlogrotation; + } + + void b() { + Iterator iterator = this.j.iterator(); + + while (iterator.hasNext()) { + WorldGenBigTree.Position worldgenbigtree_position = (WorldGenBigTree.Position) iterator.next(); + + this.a((BlockPosition) worldgenbigtree_position); + } + + } + + boolean c(int i) { + return (double) i >= (double) this.a * 0.2D; + } + + void c() { + BlockPosition blockposition = this.m; + BlockPosition blockposition1 = this.m.up(this.b); + Block block = Blocks.LOG; + + this.a(blockposition, blockposition1, block); + if (this.g == 2) { + this.a(blockposition.east(), blockposition1.east(), block); + this.a(blockposition.east().south(), blockposition1.east().south(), block); + this.a(blockposition.south(), blockposition1.south(), block); + } + + } + + void d() { + Iterator iterator = this.j.iterator(); + + while (iterator.hasNext()) { + WorldGenBigTree.Position worldgenbigtree_position = (WorldGenBigTree.Position) iterator.next(); + int i = worldgenbigtree_position.q(); + BlockPosition blockposition = new BlockPosition(this.m.getX(), i, this.m.getZ()); + + if (!blockposition.equals(worldgenbigtree_position) && this.c(i - this.m.getY())) { + this.a(blockposition, (BlockPosition) worldgenbigtree_position, Blocks.LOG); + } + } + + } + + int a(BlockPosition blockposition, BlockPosition blockposition1) { + BlockPosition blockposition2 = blockposition1.a(-blockposition.getX(), -blockposition.getY(), -blockposition.getZ()); + int i = this.b(blockposition2); + float f = (float) blockposition2.getX() / (float) i; + float f1 = (float) blockposition2.getY() / (float) i; + float f2 = (float) blockposition2.getZ() / (float) i; + + if (i == 0) { + return -1; + } else { + for (int j = 0; j <= i; ++j) { + BlockPosition blockposition3 = blockposition.a((double) (0.5F + (float) j * f), (double) (0.5F + (float) j * f1), (double) (0.5F + (float) j * f2)); + + if (!this.a(this.l.getType(blockposition3).getBlock())) { + return j; + } + } + + return -1; + } + } + + public void e() { + this.i = 5; + } + + public boolean generate(World world, Random random, BlockPosition blockposition) { + this.l = world; + this.m = blockposition; + this.k = new Random(random.nextLong()); + if (this.a == 0) { + this.a = 5 + this.k.nextInt(this.h); + } + + if (!this.f()) { + return false; + } else { + this.a(); + this.b(); + this.c(); + this.d(); + return true; + } + } + + private boolean f() { + Block block = this.l.getType(this.m.down()).getBlock(); + + if (block != Blocks.DIRT && block != Blocks.GRASS && block != Blocks.FARMLAND) { + return false; + } else { + int i = this.a(this.m, this.m.up(this.a - 1)); + + if (i == -1) { + return true; + } else if (i < 6) { + return false; + } else { + this.a = i; + return true; + } + } + } + + static class Position extends BlockPosition { + + private final int c; + + public Position(BlockPosition blockposition, int i) { + super(blockposition.getX(), blockposition.getY(), blockposition.getZ()); + this.c = i; + } + + public int q() { + return this.c; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenBonusChest.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenBonusChest.java new file mode 100644 index 0000000..60b2034 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenBonusChest.java @@ -0,0 +1,67 @@ +package net.minecraft.server; + +import java.util.List; +import java.util.Random; + +public class WorldGenBonusChest extends WorldGenerator { + + private final List a; + private final int b; + + public WorldGenBonusChest(List list, int i) { + this.a = list; + this.b = i; + } + + public boolean generate(World world, Random random, BlockPosition blockposition) { + Block block; + + while (((block = world.getType(blockposition).getBlock()).getMaterial() == Material.AIR || block.getMaterial() == Material.LEAVES) && blockposition.getY() > 1) { + blockposition = blockposition.down(); + } + + if (blockposition.getY() < 1) { + return false; + } else { + blockposition = blockposition.up(); + + for (int i = 0; i < 4; ++i) { + BlockPosition blockposition1 = blockposition.a(random.nextInt(4) - random.nextInt(4), random.nextInt(3) - random.nextInt(3), random.nextInt(4) - random.nextInt(4)); + + if (world.isEmpty(blockposition1) && World.a((IBlockAccess) world, blockposition1.down())) { + world.setTypeAndData(blockposition1, Blocks.CHEST.getBlockData(), 2); + TileEntity tileentity = world.getTileEntity(blockposition1); + + if (tileentity instanceof TileEntityChest) { + StructurePieceTreasure.a(random, this.a, (IInventory) ((TileEntityChest) tileentity), this.b); + } + + BlockPosition blockposition2 = blockposition1.east(); + BlockPosition blockposition3 = blockposition1.west(); + BlockPosition blockposition4 = blockposition1.north(); + BlockPosition blockposition5 = blockposition1.south(); + + if (world.isEmpty(blockposition3) && World.a((IBlockAccess) world, blockposition3.down())) { + world.setTypeAndData(blockposition3, Blocks.TORCH.getBlockData(), 2); + } + + if (world.isEmpty(blockposition2) && World.a((IBlockAccess) world, blockposition2.down())) { + world.setTypeAndData(blockposition2, Blocks.TORCH.getBlockData(), 2); + } + + if (world.isEmpty(blockposition4) && World.a((IBlockAccess) world, blockposition4.down())) { + world.setTypeAndData(blockposition4, Blocks.TORCH.getBlockData(), 2); + } + + if (world.isEmpty(blockposition5) && World.a((IBlockAccess) world, blockposition5.down())) { + world.setTypeAndData(blockposition5, Blocks.TORCH.getBlockData(), 2); + } + + return true; + } + } + + return false; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenCactus.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenCactus.java new file mode 100644 index 0000000..fd50e5c --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenCactus.java @@ -0,0 +1,26 @@ +package net.minecraft.server; + +import java.util.Random; + +public class WorldGenCactus extends WorldGenerator { + + public WorldGenCactus() {} + + public boolean generate(World world, Random random, BlockPosition blockposition) { + for (int i = 0; i < 10; ++i) { + BlockPosition blockposition1 = blockposition.a(random.nextInt(8) - random.nextInt(8), random.nextInt(4) - random.nextInt(4), random.nextInt(8) - random.nextInt(8)); + + if (world.isEmpty(blockposition1)) { + int j = 1 + random.nextInt(random.nextInt(3) + 1); + + for (int k = 0; k < j; ++k) { + if (Blocks.CACTUS.e(world, blockposition1)) { + world.setTypeAndData(blockposition1.up(k), Blocks.CACTUS.getBlockData(), 2); + } + } + } + } + + return true; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenCanyon.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenCanyon.java new file mode 100644 index 0000000..3849e3a --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenCanyon.java @@ -0,0 +1,189 @@ +package net.minecraft.server; + +import java.util.Random; + +public class WorldGenCanyon extends WorldGenBase { + + private float[] d = new float[1024]; + + public WorldGenCanyon() {} + + protected void a(long i, int j, int k, ChunkSnapshot chunksnapshot, double d0, double d1, double d2, float f, float f1, float f2, int l, int i1, double d3) { + Random random = new Random(i); + double d4 = (double) (j * 16 + 8); + double d5 = (double) (k * 16 + 8); + float f3 = 0.0F; + float f4 = 0.0F; + + if (i1 <= 0) { + int j1 = this.a * 16 - 16; + + i1 = j1 - random.nextInt(j1 / 4); + } + + boolean flag = false; + + if (l == -1) { + l = i1 / 2; + flag = true; + } + + float f5 = 1.0F; + + for (int k1 = 0; k1 < 256; ++k1) { + if (k1 == 0 || random.nextInt(3) == 0) { + f5 = 1.0F + random.nextFloat() * random.nextFloat() * 1.0F; + } + + this.d[k1] = f5 * f5; + } + + for (; l < i1; ++l) { + double d6 = 1.5D + (double) (MathHelper.sin((float) l * 3.1415927F / (float) i1) * f * 1.0F); + double d7 = d6 * d3; + + d6 *= (double) random.nextFloat() * 0.25D + 0.75D; + d7 *= (double) random.nextFloat() * 0.25D + 0.75D; + float f6 = MathHelper.cos(f2); + float f7 = MathHelper.sin(f2); + + d0 += (double) (MathHelper.cos(f1) * f6); + d1 += (double) f7; + d2 += (double) (MathHelper.sin(f1) * f6); + f2 *= 0.7F; + f2 += f4 * 0.05F; + f1 += f3 * 0.05F; + f4 *= 0.8F; + f3 *= 0.5F; + f4 += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 2.0F; + f3 += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 4.0F; + if (flag || random.nextInt(4) != 0) { + double d8 = d0 - d4; + double d9 = d2 - d5; + double d10 = (double) (i1 - l); + double d11 = (double) (f + 2.0F + 16.0F); + + if (d8 * d8 + d9 * d9 - d10 * d10 > d11 * d11) { + return; + } + + if (d0 >= d4 - 16.0D - d6 * 2.0D && d2 >= d5 - 16.0D - d6 * 2.0D && d0 <= d4 + 16.0D + d6 * 2.0D && d2 <= d5 + 16.0D + d6 * 2.0D) { + int l1 = MathHelper.floor(d0 - d6) - j * 16 - 1; + int i2 = MathHelper.floor(d0 + d6) - j * 16 + 1; + int j2 = MathHelper.floor(d1 - d7) - 1; + int k2 = MathHelper.floor(d1 + d7) + 1; + int l2 = MathHelper.floor(d2 - d6) - k * 16 - 1; + int i3 = MathHelper.floor(d2 + d6) - k * 16 + 1; + + if (l1 < 0) { + l1 = 0; + } + + if (i2 > 16) { + i2 = 16; + } + + if (j2 < 1) { + j2 = 1; + } + + if (k2 > 248) { + k2 = 248; + } + + if (l2 < 0) { + l2 = 0; + } + + if (i3 > 16) { + i3 = 16; + } + + boolean flag1 = false; + + int j3; + + for (int k3 = l1; !flag1 && k3 < i2; ++k3) { + for (j3 = l2; !flag1 && j3 < i3; ++j3) { + for (int l3 = k2 + 1; !flag1 && l3 >= j2 - 1; --l3) { + if (l3 >= 0 && l3 < 256) { + IBlockData iblockdata = chunksnapshot.a(k3, l3, j3); + + if (iblockdata.getBlock() == Blocks.FLOWING_WATER || iblockdata.getBlock() == Blocks.WATER) { + flag1 = true; + } + + if (l3 != j2 - 1 && k3 != l1 && k3 != i2 - 1 && j3 != l2 && j3 != i3 - 1) { + l3 = j2; + } + } + } + } + } + + if (!flag1) { + BlockPosition.MutableBlockPosition blockposition_mutableblockposition = new BlockPosition.MutableBlockPosition(); + + for (j3 = l1; j3 < i2; ++j3) { + double d12 = ((double) (j3 + j * 16) + 0.5D - d0) / d6; + + for (int i4 = l2; i4 < i3; ++i4) { + double d13 = ((double) (i4 + k * 16) + 0.5D - d2) / d6; + boolean flag2 = false; + + if (d12 * d12 + d13 * d13 < 1.0D) { + for (int j4 = k2; j4 > j2; --j4) { + double d14 = ((double) (j4 - 1) + 0.5D - d1) / d7; + + if ((d12 * d12 + d13 * d13) * (double) this.d[j4 - 1] + d14 * d14 / 6.0D < 1.0D) { + IBlockData iblockdata1 = chunksnapshot.a(j3, j4, i4); + + if (iblockdata1.getBlock() == Blocks.GRASS) { + flag2 = true; + } + + if (iblockdata1.getBlock() == Blocks.STONE || iblockdata1.getBlock() == Blocks.DIRT || iblockdata1.getBlock() == Blocks.GRASS) { + if (j4 - 1 < 10) { + chunksnapshot.a(j3, j4, i4, Blocks.FLOWING_LAVA.getBlockData()); + } else { + chunksnapshot.a(j3, j4, i4, Blocks.AIR.getBlockData()); + if (flag2 && chunksnapshot.a(j3, j4 - 1, i4).getBlock() == Blocks.DIRT) { + blockposition_mutableblockposition.c(j3 + j * 16, 0, i4 + k * 16); + chunksnapshot.a(j3, j4 - 1, i4, this.c.getBiome(blockposition_mutableblockposition).ak); + } + } + } + } + } + } + } + } + + if (flag) { + break; + } + } + } + } + } + + } + + protected void a(World world, int i, int j, int k, int l, ChunkSnapshot chunksnapshot) { + if (this.b.nextInt(50) == 0) { + double d0 = (double) (i * 16 + this.b.nextInt(16)); + double d1 = (double) (this.b.nextInt(this.b.nextInt(40) + 8) + 20); + double d2 = (double) (j * 16 + this.b.nextInt(16)); + byte b0 = 1; + + for (int i1 = 0; i1 < b0; ++i1) { + float f = this.b.nextFloat() * 3.1415927F * 2.0F; + float f1 = (this.b.nextFloat() - 0.5F) * 2.0F / 8.0F; + float f2 = (this.b.nextFloat() * 2.0F + this.b.nextFloat()) * 2.0F; + + this.a(this.b.nextLong(), k, l, chunksnapshot, d0, d1, d2, f2, f, f1, 0, 0, 3.0D); + } + + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenCaves.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenCaves.java new file mode 100644 index 0000000..968b747 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenCaves.java @@ -0,0 +1,217 @@ +package net.minecraft.server; + +import com.google.common.base.MoreObjects; +import com.google.common.base.Objects; +import java.util.Random; + +public class WorldGenCaves extends WorldGenBase { + + public WorldGenCaves() {} + + protected void a(long i, int j, int k, ChunkSnapshot chunksnapshot, double d0, double d1, double d2) { + this.a(i, j, k, chunksnapshot, d0, d1, d2, 1.0F + this.b.nextFloat() * 6.0F, 0.0F, 0.0F, -1, -1, 0.5D); + } + + protected void a(long i, int j, int k, ChunkSnapshot chunksnapshot, double d0, double d1, double d2, float f, float f1, float f2, int l, int i1, double d3) { + double d4 = (double) (j * 16 + 8); + double d5 = (double) (k * 16 + 8); + float f3 = 0.0F; + float f4 = 0.0F; + Random random = new Random(i); + + if (i1 <= 0) { + int j1 = this.a * 16 - 16; + + i1 = j1 - random.nextInt(j1 / 4); + } + + boolean flag = false; + + if (l == -1) { + l = i1 / 2; + flag = true; + } + + int k1 = random.nextInt(i1 / 2) + i1 / 4; + + for (boolean flag1 = random.nextInt(6) == 0; l < i1; ++l) { + double d6 = 1.5D + (double) (MathHelper.sin((float) l * 3.1415927F / (float) i1) * f * 1.0F); + double d7 = d6 * d3; + float f5 = MathHelper.cos(f2); + float f6 = MathHelper.sin(f2); + + d0 += (double) (MathHelper.cos(f1) * f5); + d1 += (double) f6; + d2 += (double) (MathHelper.sin(f1) * f5); + if (flag1) { + f2 *= 0.92F; + } else { + f2 *= 0.7F; + } + + f2 += f4 * 0.1F; + f1 += f3 * 0.1F; + f4 *= 0.9F; + f3 *= 0.75F; + f4 += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 2.0F; + f3 += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 4.0F; + if (!flag && l == k1 && f > 1.0F && i1 > 0) { + this.a(random.nextLong(), j, k, chunksnapshot, d0, d1, d2, random.nextFloat() * 0.5F + 0.5F, f1 - 1.5707964F, f2 / 3.0F, l, i1, 1.0D); + this.a(random.nextLong(), j, k, chunksnapshot, d0, d1, d2, random.nextFloat() * 0.5F + 0.5F, f1 + 1.5707964F, f2 / 3.0F, l, i1, 1.0D); + return; + } + + if (flag || random.nextInt(4) != 0) { + double d8 = d0 - d4; + double d9 = d2 - d5; + double d10 = (double) (i1 - l); + double d11 = (double) (f + 2.0F + 16.0F); + + if (d8 * d8 + d9 * d9 - d10 * d10 > d11 * d11) { + return; + } + + if (d0 >= d4 - 16.0D - d6 * 2.0D && d2 >= d5 - 16.0D - d6 * 2.0D && d0 <= d4 + 16.0D + d6 * 2.0D && d2 <= d5 + 16.0D + d6 * 2.0D) { + int l1 = MathHelper.floor(d0 - d6) - j * 16 - 1; + int i2 = MathHelper.floor(d0 + d6) - j * 16 + 1; + int j2 = MathHelper.floor(d1 - d7) - 1; + int k2 = MathHelper.floor(d1 + d7) + 1; + int l2 = MathHelper.floor(d2 - d6) - k * 16 - 1; + int i3 = MathHelper.floor(d2 + d6) - k * 16 + 1; + + if (l1 < 0) { + l1 = 0; + } + + if (i2 > 16) { + i2 = 16; + } + + if (j2 < 1) { + j2 = 1; + } + + if (k2 > 248) { + k2 = 248; + } + + if (l2 < 0) { + l2 = 0; + } + + if (i3 > 16) { + i3 = 16; + } + + boolean flag2 = false; + + int j3; + + for (int k3 = l1; !flag2 && k3 < i2; ++k3) { + for (j3 = l2; !flag2 && j3 < i3; ++j3) { + for (int l3 = k2 + 1; !flag2 && l3 >= j2 - 1; --l3) { + if (l3 >= 0 && l3 < 256) { + IBlockData iblockdata = chunksnapshot.a(k3, l3, j3); + + if (iblockdata.getBlock() == Blocks.FLOWING_WATER || iblockdata.getBlock() == Blocks.WATER) { + flag2 = true; + } + + if (l3 != j2 - 1 && k3 != l1 && k3 != i2 - 1 && j3 != l2 && j3 != i3 - 1) { + l3 = j2; + } + } + } + } + } + + if (!flag2) { + BlockPosition.MutableBlockPosition blockposition_mutableblockposition = new BlockPosition.MutableBlockPosition(); + + for (j3 = l1; j3 < i2; ++j3) { + double d12 = ((double) (j3 + j * 16) + 0.5D - d0) / d6; + + for (int i4 = l2; i4 < i3; ++i4) { + double d13 = ((double) (i4 + k * 16) + 0.5D - d2) / d6; + boolean flag3 = false; + + if (d12 * d12 + d13 * d13 < 1.0D) { + for (int j4 = k2; j4 > j2; --j4) { + double d14 = ((double) (j4 - 1) + 0.5D - d1) / d7; + + if (d14 > -0.7D && d12 * d12 + d14 * d14 + d13 * d13 < 1.0D) { + IBlockData iblockdata1 = chunksnapshot.a(j3, j4, i4); + IBlockData iblockdata2 = MoreObjects.firstNonNull(chunksnapshot.a(j3, j4 + 1, i4), Blocks.AIR.getBlockData()); + + if (iblockdata1.getBlock() == Blocks.GRASS || iblockdata1.getBlock() == Blocks.MYCELIUM) { + flag3 = true; + } + + if (this.a(iblockdata1, iblockdata2)) { + if (j4 - 1 < 10) { + chunksnapshot.a(j3, j4, i4, Blocks.LAVA.getBlockData()); + } else { + chunksnapshot.a(j3, j4, i4, Blocks.AIR.getBlockData()); + if (iblockdata2.getBlock() == Blocks.SAND) { + chunksnapshot.a(j3, j4 + 1, i4, iblockdata2.get(BlockSand.VARIANT) == BlockSand.EnumSandVariant.RED_SAND ? Blocks.RED_SANDSTONE.getBlockData() : Blocks.SANDSTONE.getBlockData()); + } + + if (flag3 && chunksnapshot.a(j3, j4 - 1, i4).getBlock() == Blocks.DIRT) { + blockposition_mutableblockposition.c(j3 + j * 16, 0, i4 + k * 16); + chunksnapshot.a(j3, j4 - 1, i4, this.c.getBiome(blockposition_mutableblockposition).ak.getBlock().getBlockData()); + } + } + } + } + } + } + } + } + + if (flag) { + break; + } + } + } + } + } + + } + + protected boolean a(IBlockData iblockdata, IBlockData iblockdata1) { + return iblockdata.getBlock() == Blocks.STONE ? true : (iblockdata.getBlock() == Blocks.DIRT ? true : (iblockdata.getBlock() == Blocks.GRASS ? true : (iblockdata.getBlock() == Blocks.HARDENED_CLAY ? true : (iblockdata.getBlock() == Blocks.STAINED_HARDENED_CLAY ? true : (iblockdata.getBlock() == Blocks.SANDSTONE ? true : (iblockdata.getBlock() == Blocks.RED_SANDSTONE ? true : (iblockdata.getBlock() == Blocks.MYCELIUM ? true : (iblockdata.getBlock() == Blocks.SNOW_LAYER ? true : (iblockdata.getBlock() == Blocks.SAND || iblockdata.getBlock() == Blocks.GRAVEL) && iblockdata1.getBlock().getMaterial() != Material.WATER)))))))); + } + + protected void a(World world, int i, int j, int k, int l, ChunkSnapshot chunksnapshot) { + int i1 = this.b.nextInt(this.b.nextInt(this.b.nextInt(15) + 1) + 1); + + if (this.b.nextInt(7) != 0) { + i1 = 0; + } + + for (int j1 = 0; j1 < i1; ++j1) { + double d0 = (double) (i * 16 + this.b.nextInt(16)); + double d1 = (double) this.b.nextInt(this.b.nextInt(120) + 8); + double d2 = (double) (j * 16 + this.b.nextInt(16)); + int k1 = 1; + + if (this.b.nextInt(4) == 0) { + this.a(this.b.nextLong(), k, l, chunksnapshot, d0, d1, d2); + k1 += this.b.nextInt(4); + } + + for (int l1 = 0; l1 < k1; ++l1) { + float f = this.b.nextFloat() * 3.1415927F * 2.0F; + float f1 = (this.b.nextFloat() - 0.5F) * 2.0F / 8.0F; + float f2 = this.b.nextFloat() * 2.0F + this.b.nextFloat(); + + if (this.b.nextInt(10) == 0) { + f2 *= this.b.nextFloat() * this.b.nextFloat() * 3.0F + 1.0F; + } + + this.a(this.b.nextLong(), k, l, chunksnapshot, d0, d1, d2, f2, f, f1, 0, 0, 1.0D); + } + } + + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenCavesHell.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenCavesHell.java new file mode 100644 index 0000000..755b3c0 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenCavesHell.java @@ -0,0 +1,185 @@ +package net.minecraft.server; + +import java.util.Random; + +public class WorldGenCavesHell extends WorldGenBase { + + public WorldGenCavesHell() {} + + protected void a(long i, int j, int k, ChunkSnapshot chunksnapshot, double d0, double d1, double d2) { + this.a(i, j, k, chunksnapshot, d0, d1, d2, 1.0F + this.b.nextFloat() * 6.0F, 0.0F, 0.0F, -1, -1, 0.5D); + } + + protected void a(long i, int j, int k, ChunkSnapshot chunksnapshot, double d0, double d1, double d2, float f, float f1, float f2, int l, int i1, double d3) { + double d4 = (double) (j * 16 + 8); + double d5 = (double) (k * 16 + 8); + float f3 = 0.0F; + float f4 = 0.0F; + Random random = new Random(i); + + if (i1 <= 0) { + int j1 = this.a * 16 - 16; + + i1 = j1 - random.nextInt(j1 / 4); + } + + boolean flag = false; + + if (l == -1) { + l = i1 / 2; + flag = true; + } + + int k1 = random.nextInt(i1 / 2) + i1 / 4; + + for (boolean flag1 = random.nextInt(6) == 0; l < i1; ++l) { + double d6 = 1.5D + (double) (MathHelper.sin((float) l * 3.1415927F / (float) i1) * f * 1.0F); + double d7 = d6 * d3; + float f5 = MathHelper.cos(f2); + float f6 = MathHelper.sin(f2); + + d0 += (double) (MathHelper.cos(f1) * f5); + d1 += (double) f6; + d2 += (double) (MathHelper.sin(f1) * f5); + if (flag1) { + f2 *= 0.92F; + } else { + f2 *= 0.7F; + } + + f2 += f4 * 0.1F; + f1 += f3 * 0.1F; + f4 *= 0.9F; + f3 *= 0.75F; + f4 += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 2.0F; + f3 += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 4.0F; + if (!flag && l == k1 && f > 1.0F) { + this.a(random.nextLong(), j, k, chunksnapshot, d0, d1, d2, random.nextFloat() * 0.5F + 0.5F, f1 - 1.5707964F, f2 / 3.0F, l, i1, 1.0D); + this.a(random.nextLong(), j, k, chunksnapshot, d0, d1, d2, random.nextFloat() * 0.5F + 0.5F, f1 + 1.5707964F, f2 / 3.0F, l, i1, 1.0D); + return; + } + + if (flag || random.nextInt(4) != 0) { + double d8 = d0 - d4; + double d9 = d2 - d5; + double d10 = (double) (i1 - l); + double d11 = (double) (f + 2.0F + 16.0F); + + if (d8 * d8 + d9 * d9 - d10 * d10 > d11 * d11) { + return; + } + + if (d0 >= d4 - 16.0D - d6 * 2.0D && d2 >= d5 - 16.0D - d6 * 2.0D && d0 <= d4 + 16.0D + d6 * 2.0D && d2 <= d5 + 16.0D + d6 * 2.0D) { + int l1 = MathHelper.floor(d0 - d6) - j * 16 - 1; + int i2 = MathHelper.floor(d0 + d6) - j * 16 + 1; + int j2 = MathHelper.floor(d1 - d7) - 1; + int k2 = MathHelper.floor(d1 + d7) + 1; + int l2 = MathHelper.floor(d2 - d6) - k * 16 - 1; + int i3 = MathHelper.floor(d2 + d6) - k * 16 + 1; + + if (l1 < 0) { + l1 = 0; + } + + if (i2 > 16) { + i2 = 16; + } + + if (j2 < 1) { + j2 = 1; + } + + if (k2 > 120) { + k2 = 120; + } + + if (l2 < 0) { + l2 = 0; + } + + if (i3 > 16) { + i3 = 16; + } + + boolean flag2 = false; + + int j3; + + for (j3 = l1; !flag2 && j3 < i2; ++j3) { + for (int k3 = l2; !flag2 && k3 < i3; ++k3) { + for (int l3 = k2 + 1; !flag2 && l3 >= j2 - 1; --l3) { + if (l3 >= 0 && l3 < 128) { + IBlockData iblockdata = chunksnapshot.a(j3, l3, k3); + + if (iblockdata.getBlock() == Blocks.FLOWING_LAVA || iblockdata.getBlock() == Blocks.LAVA) { + flag2 = true; + } + + if (l3 != j2 - 1 && j3 != l1 && j3 != i2 - 1 && k3 != l2 && k3 != i3 - 1) { + l3 = j2; + } + } + } + } + } + + if (!flag2) { + for (j3 = l1; j3 < i2; ++j3) { + double d12 = ((double) (j3 + j * 16) + 0.5D - d0) / d6; + + for (int i4 = l2; i4 < i3; ++i4) { + double d13 = ((double) (i4 + k * 16) + 0.5D - d2) / d6; + + for (int j4 = k2; j4 > j2; --j4) { + double d14 = ((double) (j4 - 1) + 0.5D - d1) / d7; + + if (d14 > -0.7D && d12 * d12 + d14 * d14 + d13 * d13 < 1.0D) { + IBlockData iblockdata1 = chunksnapshot.a(j3, j4, i4); + + if (iblockdata1.getBlock() == Blocks.NETHERRACK || iblockdata1.getBlock() == Blocks.DIRT || iblockdata1.getBlock() == Blocks.GRASS) { + chunksnapshot.a(j3, j4, i4, Blocks.AIR.getBlockData()); + } + } + } + } + } + + if (flag) { + break; + } + } + } + } + } + + } + + protected void a(World world, int i, int j, int k, int l, ChunkSnapshot chunksnapshot) { + int i1 = this.b.nextInt(this.b.nextInt(this.b.nextInt(10) + 1) + 1); + + if (this.b.nextInt(5) != 0) { + i1 = 0; + } + + for (int j1 = 0; j1 < i1; ++j1) { + double d0 = (double) (i * 16 + this.b.nextInt(16)); + double d1 = (double) this.b.nextInt(128); + double d2 = (double) (j * 16 + this.b.nextInt(16)); + int k1 = 1; + + if (this.b.nextInt(4) == 0) { + this.a(this.b.nextLong(), k, l, chunksnapshot, d0, d1, d2); + k1 += this.b.nextInt(4); + } + + for (int l1 = 0; l1 < k1; ++l1) { + float f = this.b.nextFloat() * 3.1415927F * 2.0F; + float f1 = (this.b.nextFloat() - 0.5F) * 2.0F / 8.0F; + float f2 = this.b.nextFloat() * 2.0F + this.b.nextFloat(); + + this.a(this.b.nextLong(), k, l, chunksnapshot, d0, d1, d2, f2 * 2.0F, f, f1, 0, 0, 0.5D); + } + } + + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenClay.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenClay.java new file mode 100644 index 0000000..329c385 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenClay.java @@ -0,0 +1,43 @@ +package net.minecraft.server; + +import java.util.Random; + +public class WorldGenClay extends WorldGenerator { + + private Block a; + private int b; + + public WorldGenClay(int i) { + this.a = Blocks.CLAY; + this.b = i; + } + + public boolean generate(World world, Random random, BlockPosition blockposition) { + if (world.getType(blockposition).getBlock().getMaterial() != Material.WATER) { + return false; + } else { + int i = random.nextInt(this.b - 2) + 2; + byte b0 = 1; + + for (int j = blockposition.getX() - i; j <= blockposition.getX() + i; ++j) { + for (int k = blockposition.getZ() - i; k <= blockposition.getZ() + i; ++k) { + int l = j - blockposition.getX(); + int i1 = k - blockposition.getZ(); + + if (l * l + i1 * i1 <= i * i) { + for (int j1 = blockposition.getY() - b0; j1 <= blockposition.getY() + b0; ++j1) { + BlockPosition blockposition1 = new BlockPosition(j, j1, k); + Block block = world.getType(blockposition1).getBlock(); + + if (block == Blocks.DIRT || block == Blocks.CLAY) { + world.setTypeAndData(blockposition1, this.a.getBlockData(), 2); + } + } + } + } + } + + return true; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenDeadBush.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenDeadBush.java new file mode 100644 index 0000000..8345905 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenDeadBush.java @@ -0,0 +1,26 @@ +package net.minecraft.server; + +import java.util.Random; + +public class WorldGenDeadBush extends WorldGenerator { + + public WorldGenDeadBush() {} + + public boolean generate(World world, Random random, BlockPosition blockposition) { + Block block; + + while (((block = world.getType(blockposition).getBlock()).getMaterial() == Material.AIR || block.getMaterial() == Material.LEAVES) && blockposition.getY() > 0) { + blockposition = blockposition.down(); + } + + for (int i = 0; i < 4; ++i) { + BlockPosition blockposition1 = blockposition.a(random.nextInt(8) - random.nextInt(8), random.nextInt(4) - random.nextInt(4), random.nextInt(8) - random.nextInt(8)); + + if (world.isEmpty(blockposition1) && Blocks.DEADBUSH.f(world, blockposition1, Blocks.DEADBUSH.getBlockData())) { + world.setTypeAndData(blockposition1, Blocks.DEADBUSH.getBlockData(), 2); + } + } + + return true; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenDesertWell.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenDesertWell.java new file mode 100644 index 0000000..b8ab3ae --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenDesertWell.java @@ -0,0 +1,89 @@ +package net.minecraft.server; + +import com.google.common.base.Predicates; +import java.util.Iterator; +import java.util.Random; + +public class WorldGenDesertWell extends WorldGenerator { + + private static final BlockStatePredicate a = BlockStatePredicate.a((Block) Blocks.SAND).a(BlockSand.VARIANT, Predicates.equalTo(BlockSand.EnumSandVariant.SAND)); + private final IBlockData b; + private final IBlockData c; + private final IBlockData d; + + public WorldGenDesertWell() { + this.b = Blocks.STONE_SLAB.getBlockData().set(BlockDoubleStepAbstract.VARIANT, BlockDoubleStepAbstract.EnumStoneSlabVariant.SAND).set(BlockStepAbstract.HALF, BlockStepAbstract.EnumSlabHalf.BOTTOM); + this.c = Blocks.SANDSTONE.getBlockData(); + this.d = Blocks.FLOWING_WATER.getBlockData(); + } + + public boolean generate(World world, Random random, BlockPosition blockposition) { + while (world.isEmpty(blockposition) && blockposition.getY() > 2) { + blockposition = blockposition.down(); + } + + if (!WorldGenDesertWell.a.a(world.getType(blockposition))) { + return false; + } else { + int i; + int j; + + for (i = -2; i <= 2; ++i) { + for (j = -2; j <= 2; ++j) { + if (world.isEmpty(blockposition.a(i, -1, j)) && world.isEmpty(blockposition.a(i, -2, j))) { + return false; + } + } + } + + for (i = -1; i <= 0; ++i) { + for (j = -2; j <= 2; ++j) { + for (int k = -2; k <= 2; ++k) { + world.setTypeAndData(blockposition.a(j, i, k), this.c, 2); + } + } + } + + world.setTypeAndData(blockposition, this.d, 2); + Iterator iterator = EnumDirection.EnumDirectionLimit.HORIZONTAL.iterator(); + + while (iterator.hasNext()) { + EnumDirection enumdirection = (EnumDirection) iterator.next(); + + world.setTypeAndData(blockposition.shift(enumdirection), this.d, 2); + } + + for (i = -2; i <= 2; ++i) { + for (j = -2; j <= 2; ++j) { + if (i == -2 || i == 2 || j == -2 || j == 2) { + world.setTypeAndData(blockposition.a(i, 1, j), this.c, 2); + } + } + } + + world.setTypeAndData(blockposition.a(2, 1, 0), this.b, 2); + world.setTypeAndData(blockposition.a(-2, 1, 0), this.b, 2); + world.setTypeAndData(blockposition.a(0, 1, 2), this.b, 2); + world.setTypeAndData(blockposition.a(0, 1, -2), this.b, 2); + + for (i = -1; i <= 1; ++i) { + for (j = -1; j <= 1; ++j) { + if (i == 0 && j == 0) { + world.setTypeAndData(blockposition.a(i, 4, j), this.c, 2); + } else { + world.setTypeAndData(blockposition.a(i, 4, j), this.b, 2); + } + } + } + + for (i = 1; i <= 3; ++i) { + world.setTypeAndData(blockposition.a(-1, i, -1), this.c, 2); + world.setTypeAndData(blockposition.a(-1, i, 1), this.c, 2); + world.setTypeAndData(blockposition.a(1, i, -1), this.c, 2); + world.setTypeAndData(blockposition.a(1, i, 1), this.c, 2); + } + + return true; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenDungeons.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenDungeons.java new file mode 100644 index 0000000..d76e554 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenDungeons.java @@ -0,0 +1,144 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import java.util.Iterator; +import java.util.List; +import java.util.Random; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class WorldGenDungeons extends WorldGenerator { + + private static final Logger a = LogManager.getLogger(); + private static final String[] b = new String[] { "Skeleton", "Zombie", "Zombie", "Spider"}; + private static final List c = Lists.newArrayList(new StructurePieceTreasure[] { new StructurePieceTreasure(Items.SADDLE, 0, 1, 1, 10), new StructurePieceTreasure(Items.IRON_INGOT, 0, 1, 4, 10), new StructurePieceTreasure(Items.BREAD, 0, 1, 1, 10), new StructurePieceTreasure(Items.WHEAT, 0, 1, 4, 10), new StructurePieceTreasure(Items.GUNPOWDER, 0, 1, 4, 10), new StructurePieceTreasure(Items.STRING, 0, 1, 4, 10), new StructurePieceTreasure(Items.BUCKET, 0, 1, 1, 10), new StructurePieceTreasure(Items.GOLDEN_APPLE, 0, 1, 1, 1), new StructurePieceTreasure(Items.REDSTONE, 0, 1, 4, 10), new StructurePieceTreasure(Items.RECORD_13, 0, 1, 1, 4), new StructurePieceTreasure(Items.RECORD_CAT, 0, 1, 1, 4), new StructurePieceTreasure(Items.NAME_TAG, 0, 1, 1, 10), new StructurePieceTreasure(Items.GOLDEN_HORSE_ARMOR, 0, 1, 1, 2), new StructurePieceTreasure(Items.IRON_HORSE_ARMOR, 0, 1, 1, 5), new StructurePieceTreasure(Items.DIAMOND_HORSE_ARMOR, 0, 1, 1, 1)}); + + public WorldGenDungeons() {} + + public boolean generate(World world, Random random, BlockPosition blockposition) { + boolean flag = true; + int i = random.nextInt(2) + 2; + int j = -i - 1; + int k = i + 1; + boolean flag1 = true; + boolean flag2 = true; + int l = random.nextInt(2) + 2; + int i1 = -l - 1; + int j1 = l + 1; + int k1 = 0; + + int l1; + int i2; + int j2; + BlockPosition blockposition1; + + for (l1 = j; l1 <= k; ++l1) { + for (i2 = -1; i2 <= 4; ++i2) { + for (j2 = i1; j2 <= j1; ++j2) { + blockposition1 = blockposition.a(l1, i2, j2); + Material material = world.getType(blockposition1).getBlock().getMaterial(); + boolean flag3 = material.isBuildable(); + + if (i2 == -1 && !flag3) { + return false; + } + + if (i2 == 4 && !flag3) { + return false; + } + + if ((l1 == j || l1 == k || j2 == i1 || j2 == j1) && i2 == 0 && world.isEmpty(blockposition1) && world.isEmpty(blockposition1.up())) { + ++k1; + } + } + } + } + + if (k1 >= 1 && k1 <= 5) { + for (l1 = j; l1 <= k; ++l1) { + for (i2 = 3; i2 >= -1; --i2) { + for (j2 = i1; j2 <= j1; ++j2) { + blockposition1 = blockposition.a(l1, i2, j2); + if (l1 != j && i2 != -1 && j2 != i1 && l1 != k && i2 != 4 && j2 != j1) { + if (world.getType(blockposition1).getBlock() != Blocks.CHEST) { + world.setAir(blockposition1); + } + } else if (blockposition1.getY() >= 0 && !world.getType(blockposition1.down()).getBlock().getMaterial().isBuildable()) { + world.setAir(blockposition1); + } else if (world.getType(blockposition1).getBlock().getMaterial().isBuildable() && world.getType(blockposition1).getBlock() != Blocks.CHEST) { + if (i2 == -1 && random.nextInt(4) != 0) { + world.setTypeAndData(blockposition1, Blocks.MOSSY_COBBLESTONE.getBlockData(), 2); + } else { + world.setTypeAndData(blockposition1, Blocks.COBBLESTONE.getBlockData(), 2); + } + } + } + } + } + + l1 = 0; + + while (l1 < 2) { + i2 = 0; + + while (true) { + if (i2 < 3) { + label197: { + j2 = blockposition.getX() + random.nextInt(i * 2 + 1) - i; + int k2 = blockposition.getY(); + int l2 = blockposition.getZ() + random.nextInt(l * 2 + 1) - l; + BlockPosition blockposition2 = new BlockPosition(j2, k2, l2); + + if (world.isEmpty(blockposition2)) { + int i3 = 0; + Iterator iterator = EnumDirection.EnumDirectionLimit.HORIZONTAL.iterator(); + + while (iterator.hasNext()) { + EnumDirection enumdirection = (EnumDirection) iterator.next(); + + if (world.getType(blockposition2.shift(enumdirection)).getBlock().getMaterial().isBuildable()) { + ++i3; + } + } + + if (i3 == 1) { + world.setTypeAndData(blockposition2, Blocks.CHEST.f(world, blockposition2, Blocks.CHEST.getBlockData()), 2); + List list = StructurePieceTreasure.a(WorldGenDungeons.c, new StructurePieceTreasure[] { Items.ENCHANTED_BOOK.b(random)}); + TileEntity tileentity = world.getTileEntity(blockposition2); + + if (tileentity instanceof TileEntityChest) { + StructurePieceTreasure.a(random, list, (IInventory) ((TileEntityChest) tileentity), 8); + } + break label197; + } + } + + ++i2; + continue; + } + } + + ++l1; + break; + } + } + + world.setTypeAndData(blockposition, Blocks.MOB_SPAWNER.getBlockData(), 2); + TileEntity tileentity1 = world.getTileEntity(blockposition); + + if (tileentity1 instanceof TileEntityMobSpawner) { + ((TileEntityMobSpawner) tileentity1).getSpawner().setMobName(this.a(random)); + } else { + WorldGenDungeons.a.error("Failed to fetch mob spawner entity at (" + blockposition.getX() + ", " + blockposition.getY() + ", " + blockposition.getZ() + ")"); + } + + return true; + } else { + return false; + } + } + + private String a(Random random) { + return WorldGenDungeons.b[random.nextInt(WorldGenDungeons.b.length)]; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenEnder.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenEnder.java new file mode 100644 index 0000000..2d7e14a --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenEnder.java @@ -0,0 +1,57 @@ +package net.minecraft.server; + +import java.util.Random; + +public class WorldGenEnder extends WorldGenerator { + + private Block a; + + public WorldGenEnder(Block block) { + this.a = block; + } + + public boolean generate(World world, Random random, BlockPosition blockposition) { + if (world.isEmpty(blockposition) && world.getType(blockposition.down()).getBlock() == this.a) { + int i = random.nextInt(32) + 6; + int j = random.nextInt(4) + 1; + BlockPosition.MutableBlockPosition blockposition_mutableblockposition = new BlockPosition.MutableBlockPosition(); + + int k; + int l; + int i1; + int j1; + + for (k = blockposition.getX() - j; k <= blockposition.getX() + j; ++k) { + for (l = blockposition.getZ() - j; l <= blockposition.getZ() + j; ++l) { + i1 = k - blockposition.getX(); + j1 = l - blockposition.getZ(); + if (i1 * i1 + j1 * j1 <= j * j + 1 && world.getType(blockposition_mutableblockposition.c(k, blockposition.getY() - 1, l)).getBlock() != this.a) { + return false; + } + } + } + + for (k = blockposition.getY(); k < blockposition.getY() + i && k < 256; ++k) { + for (l = blockposition.getX() - j; l <= blockposition.getX() + j; ++l) { + for (i1 = blockposition.getZ() - j; i1 <= blockposition.getZ() + j; ++i1) { + j1 = l - blockposition.getX(); + int k1 = i1 - blockposition.getZ(); + + if (j1 * j1 + k1 * k1 <= j * j + 1) { + world.setTypeAndData(new BlockPosition(l, k, i1), Blocks.OBSIDIAN.getBlockData(), 2); + } + } + } + } + + EntityEnderCrystal entityendercrystal = new EntityEnderCrystal(world); + + entityendercrystal.setPositionRotation((double) ((float) blockposition.getX() + 0.5F), (double) (blockposition.getY() + i), (double) ((float) blockposition.getZ() + 0.5F), random.nextFloat() * 360.0F, 0.0F); + world.addEntity(entityendercrystal); + world.setTypeAndData(blockposition.up(i), Blocks.BEDROCK.getBlockData(), 2); + return true; + } else { + return false; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenFactory.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenFactory.java new file mode 100644 index 0000000..a324499 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenFactory.java @@ -0,0 +1,94 @@ +package net.minecraft.server; + +import com.google.common.collect.Maps; +import java.util.Map; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class WorldGenFactory { + + private static final Logger a = LogManager.getLogger(); + private static Map> b = Maps.newHashMap(); + private static Map, String> c = Maps.newHashMap(); + private static Map> d = Maps.newHashMap(); + private static Map, String> e = Maps.newHashMap(); + + private static void b(Class oclass, String s) { + WorldGenFactory.b.put(s, oclass); + WorldGenFactory.c.put(oclass, s); + } + + static void a(Class oclass, String s) { + WorldGenFactory.d.put(s, oclass); + WorldGenFactory.e.put(oclass, s); + } + + public static String a(StructureStart structurestart) { + return (String) WorldGenFactory.c.get(structurestart.getClass()); + } + + public static String a(StructurePiece structurepiece) { + return (String) WorldGenFactory.e.get(structurepiece.getClass()); + } + + public static StructureStart a(NBTTagCompound nbttagcompound, World world) { + StructureStart structurestart = null; + + try { + Class oclass = (Class) WorldGenFactory.b.get(nbttagcompound.getString("id")); + + if (oclass != null) { + structurestart = (StructureStart) oclass.newInstance(); + } + } catch (Exception exception) { + WorldGenFactory.a.warn("Failed Start with id " + nbttagcompound.getString("id")); + exception.printStackTrace(); + } + + if (structurestart != null) { + structurestart.a(world, nbttagcompound); + } else { + WorldGenFactory.a.warn("Skipping Structure with id " + nbttagcompound.getString("id")); + } + + return structurestart; + } + + public static StructurePiece b(NBTTagCompound nbttagcompound, World world) { + StructurePiece structurepiece = null; + + try { + Class oclass = (Class) WorldGenFactory.d.get(nbttagcompound.getString("id")); + + if (oclass != null) { + structurepiece = (StructurePiece) oclass.newInstance(); + } + } catch (Exception exception) { + WorldGenFactory.a.warn("Failed Piece with id " + nbttagcompound.getString("id")); + exception.printStackTrace(); + } + + if (structurepiece != null) { + structurepiece.a(world, nbttagcompound); + } else { + WorldGenFactory.a.warn("Skipping Piece with id " + nbttagcompound.getString("id")); + } + + return structurepiece; + } + + static { + b(WorldGenMineshaftStart.class, "Mineshaft"); + b(WorldGenVillage.WorldGenVillageStart.class, "Village"); + b(WorldGenNether.WorldGenNetherStart.class, "Fortress"); + b(WorldGenStronghold.WorldGenStronghold2Start.class, "Stronghold"); + b(WorldGenLargeFeature.WorldGenLargeFeatureStart.class, "Temple"); + b(WorldGenMonument.WorldGenMonumentStart.class, "Monument"); + WorldGenMineshaftPieces.a(); + WorldGenVillagePieces.a(); + WorldGenNetherPieces.a(); + WorldGenStrongholdPieces.a(); + WorldGenRegistration.a(); + WorldGenMonumentPieces.a(); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenFire.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenFire.java new file mode 100644 index 0000000..562d7fd --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenFire.java @@ -0,0 +1,20 @@ +package net.minecraft.server; + +import java.util.Random; + +public class WorldGenFire extends WorldGenerator { + + public WorldGenFire() {} + + public boolean generate(World world, Random random, BlockPosition blockposition) { + for (int i = 0; i < 64; ++i) { + BlockPosition blockposition1 = blockposition.a(random.nextInt(8) - random.nextInt(8), random.nextInt(4) - random.nextInt(4), random.nextInt(8) - random.nextInt(8)); + + if (world.isEmpty(blockposition1) && world.getType(blockposition1.down()).getBlock() == Blocks.NETHERRACK) { + world.setTypeAndData(blockposition1, Blocks.FIRE.getBlockData(), 2); + } + } + + return true; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenFlatInfo.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenFlatInfo.java new file mode 100644 index 0000000..65b431e --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenFlatInfo.java @@ -0,0 +1,272 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +public class WorldGenFlatInfo { + + private final List layers = Lists.newArrayList(); + private final Map> structures = Maps.newHashMap(); + private int c; + + public WorldGenFlatInfo() {} + + public int a() { + return this.c; + } + + public void a(int i) { + this.c = i; + } + + public Map> b() { + return this.structures; + } + + public List c() { + return this.layers; + } + + public void d() { + int i = 0; + + WorldGenFlatLayerInfo worldgenflatlayerinfo; + + for (Iterator iterator = this.layers.iterator(); iterator.hasNext(); i += worldgenflatlayerinfo.b()) { + worldgenflatlayerinfo = (WorldGenFlatLayerInfo) iterator.next(); + worldgenflatlayerinfo.b(i); + } + + } + + public String toString() { + StringBuilder stringbuilder = new StringBuilder(); + + stringbuilder.append(3); + stringbuilder.append(";"); + + int i; + + for (i = 0; i < this.layers.size(); ++i) { + if (i > 0) { + stringbuilder.append(","); + } + + stringbuilder.append(((WorldGenFlatLayerInfo) this.layers.get(i)).toString()); + } + + stringbuilder.append(";"); + stringbuilder.append(this.c); + if (!this.structures.isEmpty()) { + stringbuilder.append(";"); + i = 0; + Iterator iterator = this.structures.entrySet().iterator(); + + while (iterator.hasNext()) { + Entry entry = (Entry) iterator.next(); + + if (i++ > 0) { + stringbuilder.append(","); + } + + stringbuilder.append(((String) entry.getKey()).toLowerCase()); + Map map = (Map) entry.getValue(); + + if (!map.isEmpty()) { + stringbuilder.append("("); + int j = 0; + Iterator iterator1 = map.entrySet().iterator(); + + while (iterator1.hasNext()) { + Entry entry1 = (Entry) iterator1.next(); + + if (j++ > 0) { + stringbuilder.append(" "); + } + + stringbuilder.append((String) entry1.getKey()); + stringbuilder.append("="); + stringbuilder.append((String) entry1.getValue()); + } + + stringbuilder.append(")"); + } + } + } else { + stringbuilder.append(";"); + } + + return stringbuilder.toString(); + } + + private static WorldGenFlatLayerInfo a(int i, String s, int j) { + String[] astring = i >= 3 ? s.split("\\*", 2) : s.split("x", 2); + int k = 1; + int l = 0; + + if (astring.length == 2) { + try { + k = Integer.parseInt(astring[0]); + if (j + k >= 256) { + k = 256 - j; + } + + if (k < 0) { + k = 0; + } + } catch (Throwable throwable) { + return null; + } + } + + Block block = null; + + try { + String s1 = astring[astring.length - 1]; + + if (i < 3) { + astring = s1.split(":", 2); + if (astring.length > 1) { + l = Integer.parseInt(astring[1]); + } + + block = Block.getById(Integer.parseInt(astring[0])); + } else { + astring = s1.split(":", 3); + block = astring.length > 1 ? Block.getByName(astring[0] + ":" + astring[1]) : null; + if (block != null) { + l = astring.length > 2 ? Integer.parseInt(astring[2]) : 0; + } else { + block = Block.getByName(astring[0]); + if (block != null) { + l = astring.length > 1 ? Integer.parseInt(astring[1]) : 0; + } + } + + if (block == null) { + return null; + } + } + + if (block == Blocks.AIR) { + l = 0; + } + + if (l < 0 || l > 15) { + l = 0; + } + } catch (Throwable throwable1) { + return null; + } + + WorldGenFlatLayerInfo worldgenflatlayerinfo = new WorldGenFlatLayerInfo(i, k, block, l); + + worldgenflatlayerinfo.b(j); + return worldgenflatlayerinfo; + } + + private static List a(int i, String s) { + if (s != null && s.length() >= 1) { + ArrayList arraylist = Lists.newArrayList(); + String[] astring = s.split(","); + int j = 0; + String[] astring1 = astring; + int k = astring.length; + + for (int l = 0; l < k; ++l) { + String s1 = astring1[l]; + WorldGenFlatLayerInfo worldgenflatlayerinfo = a(i, s1, j); + + if (worldgenflatlayerinfo == null) { + return null; + } + + arraylist.add(worldgenflatlayerinfo); + j += worldgenflatlayerinfo.b(); + } + + return arraylist; + } else { + return null; + } + } + + public static WorldGenFlatInfo a(String s) { + if (s == null) { + return e(); + } else { + String[] astring = s.split(";", -1); + int i = astring.length == 1 ? 0 : MathHelper.a(astring[0], 0); + + if (i >= 0 && i <= 3) { + WorldGenFlatInfo worldgenflatinfo = new WorldGenFlatInfo(); + int j = astring.length == 1 ? 0 : 1; + List list = a(i, astring[j++]); + + if (list != null && !list.isEmpty()) { + worldgenflatinfo.c().addAll(list); + worldgenflatinfo.d(); + int k = BiomeBase.PLAINS.id; + + if (i > 0 && astring.length > j) { + k = MathHelper.a(astring[j++], k); + } + + worldgenflatinfo.a(k); + if (i > 0 && astring.length > j) { + String[] astring1 = astring[j++].toLowerCase().split(","); + String[] astring2 = astring1; + int l = astring1.length; + + for (int i1 = 0; i1 < l; ++i1) { + String s1 = astring2[i1]; + String[] astring3 = s1.split("\\(", 2); + HashMap hashmap = Maps.newHashMap(); + + if (astring3[0].length() > 0) { + worldgenflatinfo.b().put(astring3[0], hashmap); + if (astring3.length > 1 && astring3[1].endsWith(")") && astring3[1].length() > 1) { + String[] astring4 = astring3[1].substring(0, astring3[1].length() - 1).split(" "); + + for (int j1 = 0; j1 < astring4.length; ++j1) { + String[] astring5 = astring4[j1].split("=", 2); + + if (astring5.length == 2) { + hashmap.put(astring5[0], astring5[1]); + } + } + } + } + } + } else { + worldgenflatinfo.b().put("village", Maps.newHashMap()); + } + + return worldgenflatinfo; + } else { + return e(); + } + } else { + return e(); + } + } + } + + public static WorldGenFlatInfo e() { + WorldGenFlatInfo worldgenflatinfo = new WorldGenFlatInfo(); + + worldgenflatinfo.a(BiomeBase.PLAINS.id); + worldgenflatinfo.c().add(new WorldGenFlatLayerInfo(1, Blocks.BEDROCK)); + worldgenflatinfo.c().add(new WorldGenFlatLayerInfo(2, Blocks.DIRT)); + worldgenflatinfo.c().add(new WorldGenFlatLayerInfo(1, Blocks.GRASS)); + worldgenflatinfo.d(); + worldgenflatinfo.b().put("village", Maps.newHashMap()); + return worldgenflatinfo; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenFlatLayerInfo.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenFlatLayerInfo.java new file mode 100644 index 0000000..3474cfc --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenFlatLayerInfo.java @@ -0,0 +1,75 @@ +package net.minecraft.server; + +public class WorldGenFlatLayerInfo { + + private final int a; + private IBlockData b; + private int c; + private int d; + + public WorldGenFlatLayerInfo(int i, Block block) { + this(3, i, block); + } + + public WorldGenFlatLayerInfo(int i, int j, Block block) { + this.c = 1; + this.a = i; + this.c = j; + this.b = block.getBlockData(); + } + + public WorldGenFlatLayerInfo(int i, int j, Block block, int k) { + this(i, j, block); + this.b = block.fromLegacyData(k); + } + + public int b() { + return this.c; + } + + public IBlockData c() { + return this.b; + } + + private Block e() { + return this.b.getBlock(); + } + + private int f() { + return this.b.getBlock().toLegacyData(this.b); + } + + public int d() { + return this.d; + } + + public void b(int i) { + this.d = i; + } + + public String toString() { + String s; + + if (this.a >= 3) { + MinecraftKey minecraftkey = (MinecraftKey) Block.REGISTRY.c(this.e()); + + s = minecraftkey == null ? "null" : minecraftkey.toString(); + if (this.c > 1) { + s = this.c + "*" + s; + } + } else { + s = Integer.toString(Block.getId(this.e())); + if (this.c > 1) { + s = this.c + "x" + s; + } + } + + int i = this.f(); + + if (i > 0) { + s = s + ":" + i; + } + + return s; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenFlowers.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenFlowers.java new file mode 100644 index 0000000..e9de8cc --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenFlowers.java @@ -0,0 +1,30 @@ +package net.minecraft.server; + +import java.util.Random; + +public class WorldGenFlowers extends WorldGenerator { + + private BlockFlowers a; + private IBlockData b; + + public WorldGenFlowers(BlockFlowers blockflowers, BlockFlowers.EnumFlowerVarient blockflowers_enumflowervarient) { + this.a(blockflowers, blockflowers_enumflowervarient); + } + + public void a(BlockFlowers blockflowers, BlockFlowers.EnumFlowerVarient blockflowers_enumflowervarient) { + this.a = blockflowers; + this.b = blockflowers.getBlockData().set(blockflowers.n(), blockflowers_enumflowervarient); + } + + public boolean generate(World world, Random random, BlockPosition blockposition) { + for (int i = 0; i < 64; ++i) { + BlockPosition blockposition1 = blockposition.a(random.nextInt(8) - random.nextInt(8), random.nextInt(4) - random.nextInt(4), random.nextInt(8) - random.nextInt(8)); + + if (world.isEmpty(blockposition1) && (!world.worldProvider.o() || blockposition1.getY() < 255) && this.a.f(world, blockposition1, this.b)) { + world.setTypeAndData(blockposition1, this.b, 2); + } + } + + return true; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenForest.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenForest.java new file mode 100644 index 0000000..9bc99d3 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenForest.java @@ -0,0 +1,105 @@ +package net.minecraft.server; + +import java.util.Random; + +public class WorldGenForest extends WorldGenTreeAbstract { + + private static final IBlockData a = Blocks.LOG.getBlockData().set(BlockLog1.VARIANT, BlockWood.EnumLogVariant.BIRCH); + private static final IBlockData b = Blocks.LEAVES.getBlockData().set(BlockLeaves1.VARIANT, BlockWood.EnumLogVariant.BIRCH).set(BlockLeaves1.CHECK_DECAY, Boolean.valueOf(false)); + private boolean c; + + public WorldGenForest(boolean flag, boolean flag1) { + super(flag); + this.c = flag1; + } + + public boolean generate(World world, Random random, BlockPosition blockposition) { + int i = random.nextInt(3) + 5; + + if (this.c) { + i += random.nextInt(7); + } + + boolean flag = true; + + if (blockposition.getY() >= 1 && blockposition.getY() + i + 1 <= 256) { + int j; + int k; + + for (int l = blockposition.getY(); l <= blockposition.getY() + 1 + i; ++l) { + byte b0 = 1; + + if (l == blockposition.getY()) { + b0 = 0; + } + + if (l >= blockposition.getY() + 1 + i - 2) { + b0 = 2; + } + + BlockPosition.MutableBlockPosition blockposition_mutableblockposition = new BlockPosition.MutableBlockPosition(); + + for (j = blockposition.getX() - b0; j <= blockposition.getX() + b0 && flag; ++j) { + for (k = blockposition.getZ() - b0; k <= blockposition.getZ() + b0 && flag; ++k) { + if (l >= 0 && l < 256) { + if (!this.a(world.getType(blockposition_mutableblockposition.c(j, l, k)).getBlock())) { + flag = false; + } + } else { + flag = false; + } + } + } + } + + if (!flag) { + return false; + } else { + Block block = world.getType(blockposition.down()).getBlock(); + + if ((block == Blocks.GRASS || block == Blocks.DIRT || block == Blocks.FARMLAND) && blockposition.getY() < 256 - i - 1) { + this.a(world, blockposition.down()); + + int i1; + + for (i1 = blockposition.getY() - 3 + i; i1 <= blockposition.getY() + i; ++i1) { + int j1 = i1 - (blockposition.getY() + i); + + j = 1 - j1 / 2; + + for (k = blockposition.getX() - j; k <= blockposition.getX() + j; ++k) { + int k1 = k - blockposition.getX(); + + for (int l1 = blockposition.getZ() - j; l1 <= blockposition.getZ() + j; ++l1) { + int i2 = l1 - blockposition.getZ(); + + if (Math.abs(k1) != j || Math.abs(i2) != j || random.nextInt(2) != 0 && j1 != 0) { + BlockPosition blockposition1 = new BlockPosition(k, i1, l1); + Block block1 = world.getType(blockposition1).getBlock(); + + if (block1.getMaterial() == Material.AIR || block1.getMaterial() == Material.LEAVES) { + this.a(world, blockposition1, WorldGenForest.b); + } + } + } + } + } + + for (i1 = 0; i1 < i; ++i1) { + Block block2 = world.getType(blockposition.up(i1)).getBlock(); + + if (block2.getMaterial() == Material.AIR || block2.getMaterial() == Material.LEAVES) { + this.a(world, blockposition.up(i1), WorldGenForest.a); + } + } + + return true; + } else { + return false; + } + } + } else { + return false; + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/WorldGenForestTree.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenForestTree.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/WorldGenForestTree.java rename to eSpigot-Server/src/main/java/net/minecraft/server/WorldGenForestTree.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenGrass.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenGrass.java new file mode 100644 index 0000000..2c84c05 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenGrass.java @@ -0,0 +1,30 @@ +package net.minecraft.server; + +import java.util.Random; + +public class WorldGenGrass extends WorldGenerator { + + private final IBlockData a; + + public WorldGenGrass(BlockLongGrass.EnumTallGrassType blocklonggrass_enumtallgrasstype) { + this.a = Blocks.TALLGRASS.getBlockData().set(BlockLongGrass.TYPE, blocklonggrass_enumtallgrasstype); + } + + public boolean generate(World world, Random random, BlockPosition blockposition) { + Block block; + + while (((block = world.getType(blockposition).getBlock()).getMaterial() == Material.AIR || block.getMaterial() == Material.LEAVES) && blockposition.getY() > 0) { + blockposition = blockposition.down(); + } + + for (int i = 0; i < 128; ++i) { + BlockPosition blockposition1 = blockposition.a(random.nextInt(8) - random.nextInt(8), random.nextInt(4) - random.nextInt(4), random.nextInt(8) - random.nextInt(8)); + + if (world.isEmpty(blockposition1) && Blocks.TALLGRASS.f(world, blockposition1, this.a)) { + world.setTypeAndData(blockposition1, this.a, 2); + } + } + + return true; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/WorldGenGroundBush.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenGroundBush.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/WorldGenGroundBush.java rename to eSpigot-Server/src/main/java/net/minecraft/server/WorldGenGroundBush.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenHellLava.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenHellLava.java new file mode 100644 index 0000000..94e61a2 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenHellLava.java @@ -0,0 +1,73 @@ +package net.minecraft.server; + +import java.util.Random; + +public class WorldGenHellLava extends WorldGenerator { + + private final Block a; + private final boolean b; + + public WorldGenHellLava(Block block, boolean flag) { + this.a = block; + this.b = flag; + } + + public boolean generate(World world, Random random, BlockPosition blockposition) { + if (world.getType(blockposition.up()).getBlock() != Blocks.NETHERRACK) { + return false; + } else if (world.getType(blockposition).getBlock().getMaterial() != Material.AIR && world.getType(blockposition).getBlock() != Blocks.NETHERRACK) { + return false; + } else { + int i = 0; + + if (world.getType(blockposition.west()).getBlock() == Blocks.NETHERRACK) { + ++i; + } + + if (world.getType(blockposition.east()).getBlock() == Blocks.NETHERRACK) { + ++i; + } + + if (world.getType(blockposition.north()).getBlock() == Blocks.NETHERRACK) { + ++i; + } + + if (world.getType(blockposition.south()).getBlock() == Blocks.NETHERRACK) { + ++i; + } + + if (world.getType(blockposition.down()).getBlock() == Blocks.NETHERRACK) { + ++i; + } + + int j = 0; + + if (world.isEmpty(blockposition.west())) { + ++j; + } + + if (world.isEmpty(blockposition.east())) { + ++j; + } + + if (world.isEmpty(blockposition.north())) { + ++j; + } + + if (world.isEmpty(blockposition.south())) { + ++j; + } + + if (world.isEmpty(blockposition.down())) { + ++j; + } + + if (!this.b && i == 4 && j == 1 || i == 5) { + world.setTypeAndData(blockposition, this.a.getBlockData(), 2); + world.a(this.a, blockposition, random); + } + + return true; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenHugeMushroom.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenHugeMushroom.java new file mode 100644 index 0000000..34d9a95 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenHugeMushroom.java @@ -0,0 +1,171 @@ +package net.minecraft.server; + +import java.util.Random; + +public class WorldGenHugeMushroom extends WorldGenerator { + + private Block a; + + public WorldGenHugeMushroom(Block block) { + super(true); + this.a = block; + } + + public WorldGenHugeMushroom() { + super(false); + } + + public boolean generate(World world, Random random, BlockPosition blockposition) { + if (this.a == null) { + this.a = random.nextBoolean() ? Blocks.BROWN_MUSHROOM_BLOCK : Blocks.RED_MUSHROOM_BLOCK; + } + + int i = random.nextInt(3) + 4; + boolean flag = true; + + if (blockposition.getY() >= 1 && blockposition.getY() + i + 1 < 256) { + int j; + int k; + + for (int l = blockposition.getY(); l <= blockposition.getY() + 1 + i; ++l) { + byte b0 = 3; + + if (l <= blockposition.getY() + 3) { + b0 = 0; + } + + BlockPosition.MutableBlockPosition blockposition_mutableblockposition = new BlockPosition.MutableBlockPosition(); + + for (j = blockposition.getX() - b0; j <= blockposition.getX() + b0 && flag; ++j) { + for (k = blockposition.getZ() - b0; k <= blockposition.getZ() + b0 && flag; ++k) { + if (l >= 0 && l < 256) { + Block block = world.getType(blockposition_mutableblockposition.c(j, l, k)).getBlock(); + + if (block.getMaterial() != Material.AIR && block.getMaterial() != Material.LEAVES) { + flag = false; + } + } else { + flag = false; + } + } + } + } + + if (!flag) { + return false; + } else { + Block block1 = world.getType(blockposition.down()).getBlock(); + + if (block1 != Blocks.DIRT && block1 != Blocks.GRASS && block1 != Blocks.MYCELIUM) { + return false; + } else { + int i1 = blockposition.getY() + i; + + if (this.a == Blocks.RED_MUSHROOM_BLOCK) { + i1 = blockposition.getY() + i - 3; + } + + int j1; + + for (j1 = i1; j1 <= blockposition.getY() + i; ++j1) { + j = 1; + if (j1 < blockposition.getY() + i) { + ++j; + } + + if (this.a == Blocks.BROWN_MUSHROOM_BLOCK) { + j = 3; + } + + k = blockposition.getX() - j; + int k1 = blockposition.getX() + j; + int l1 = blockposition.getZ() - j; + int i2 = blockposition.getZ() + j; + + for (int j2 = k; j2 <= k1; ++j2) { + for (int k2 = l1; k2 <= i2; ++k2) { + int l2 = 5; + + if (j2 == k) { + --l2; + } else if (j2 == k1) { + ++l2; + } + + if (k2 == l1) { + l2 -= 3; + } else if (k2 == i2) { + l2 += 3; + } + + BlockHugeMushroom.EnumHugeMushroomVariant blockhugemushroom_enumhugemushroomvariant = BlockHugeMushroom.EnumHugeMushroomVariant.a(l2); + + if (this.a == Blocks.BROWN_MUSHROOM_BLOCK || j1 < blockposition.getY() + i) { + if ((j2 == k || j2 == k1) && (k2 == l1 || k2 == i2)) { + continue; + } + + if (j2 == blockposition.getX() - (j - 1) && k2 == l1) { + blockhugemushroom_enumhugemushroomvariant = BlockHugeMushroom.EnumHugeMushroomVariant.NORTH_WEST; + } + + if (j2 == k && k2 == blockposition.getZ() - (j - 1)) { + blockhugemushroom_enumhugemushroomvariant = BlockHugeMushroom.EnumHugeMushroomVariant.NORTH_WEST; + } + + if (j2 == blockposition.getX() + (j - 1) && k2 == l1) { + blockhugemushroom_enumhugemushroomvariant = BlockHugeMushroom.EnumHugeMushroomVariant.NORTH_EAST; + } + + if (j2 == k1 && k2 == blockposition.getZ() - (j - 1)) { + blockhugemushroom_enumhugemushroomvariant = BlockHugeMushroom.EnumHugeMushroomVariant.NORTH_EAST; + } + + if (j2 == blockposition.getX() - (j - 1) && k2 == i2) { + blockhugemushroom_enumhugemushroomvariant = BlockHugeMushroom.EnumHugeMushroomVariant.SOUTH_WEST; + } + + if (j2 == k && k2 == blockposition.getZ() + (j - 1)) { + blockhugemushroom_enumhugemushroomvariant = BlockHugeMushroom.EnumHugeMushroomVariant.SOUTH_WEST; + } + + if (j2 == blockposition.getX() + (j - 1) && k2 == i2) { + blockhugemushroom_enumhugemushroomvariant = BlockHugeMushroom.EnumHugeMushroomVariant.SOUTH_EAST; + } + + if (j2 == k1 && k2 == blockposition.getZ() + (j - 1)) { + blockhugemushroom_enumhugemushroomvariant = BlockHugeMushroom.EnumHugeMushroomVariant.SOUTH_EAST; + } + } + + if (blockhugemushroom_enumhugemushroomvariant == BlockHugeMushroom.EnumHugeMushroomVariant.CENTER && j1 < blockposition.getY() + i) { + blockhugemushroom_enumhugemushroomvariant = BlockHugeMushroom.EnumHugeMushroomVariant.ALL_INSIDE; + } + + if (blockposition.getY() >= blockposition.getY() + i - 1 || blockhugemushroom_enumhugemushroomvariant != BlockHugeMushroom.EnumHugeMushroomVariant.ALL_INSIDE) { + BlockPosition blockposition1 = new BlockPosition(j2, j1, k2); + + if (!world.getType(blockposition1).getBlock().o()) { + this.a(world, blockposition1, this.a.getBlockData().set(BlockHugeMushroom.VARIANT, blockhugemushroom_enumhugemushroomvariant)); + } + } + } + } + } + + for (j1 = 0; j1 < i; ++j1) { + Block block2 = world.getType(blockposition.up(j1)).getBlock(); + + if (!block2.o()) { + this.a(world, blockposition.up(j1), this.a.getBlockData().set(BlockHugeMushroom.VARIANT, BlockHugeMushroom.EnumHugeMushroomVariant.STEM)); + } + } + + return true; + } + } + } else { + return false; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenJungleTree.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenJungleTree.java new file mode 100644 index 0000000..8262400 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenJungleTree.java @@ -0,0 +1,105 @@ +package net.minecraft.server; + +import java.util.Random; + +public class WorldGenJungleTree extends WorldGenMegaTreeAbstract { + + public WorldGenJungleTree(boolean flag, int i, int j, IBlockData iblockdata, IBlockData iblockdata1) { + super(flag, i, j, iblockdata, iblockdata1); + } + + public boolean generate(World world, Random random, BlockPosition blockposition) { + int i = this.a(random); + + if (!this.a(world, random, blockposition, i)) { + return false; + } else { + this.c(world, blockposition.up(i), 2); + + for (int j = blockposition.getY() + i - 2 - random.nextInt(4); j > blockposition.getY() + i / 2; j -= 2 + random.nextInt(4)) { + float f = random.nextFloat() * 3.1415927F * 2.0F; + int k = blockposition.getX() + (int) (0.5F + MathHelper.cos(f) * 4.0F); + int l = blockposition.getZ() + (int) (0.5F + MathHelper.sin(f) * 4.0F); + + int i1; + + for (i1 = 0; i1 < 5; ++i1) { + k = blockposition.getX() + (int) (1.5F + MathHelper.cos(f) * (float) i1); + l = blockposition.getZ() + (int) (1.5F + MathHelper.sin(f) * (float) i1); + this.a(world, new BlockPosition(k, j - 3 + i1 / 2, l), this.b); + } + + i1 = 1 + random.nextInt(2); + int j1 = j; + + for (int k1 = j - i1; k1 <= j1; ++k1) { + int l1 = k1 - j1; + + this.b(world, new BlockPosition(k, k1, l), 1 - l1); + } + } + + for (int i2 = 0; i2 < i; ++i2) { + BlockPosition blockposition1 = blockposition.up(i2); + + if (this.a(world.getType(blockposition1).getBlock())) { + this.a(world, blockposition1, this.b); + if (i2 > 0) { + this.a(world, random, blockposition1.west(), BlockVine.EAST); + this.a(world, random, blockposition1.north(), BlockVine.SOUTH); + } + } + + if (i2 < i - 1) { + BlockPosition blockposition2 = blockposition1.east(); + + if (this.a(world.getType(blockposition2).getBlock())) { + this.a(world, blockposition2, this.b); + if (i2 > 0) { + this.a(world, random, blockposition2.east(), BlockVine.WEST); + this.a(world, random, blockposition2.north(), BlockVine.SOUTH); + } + } + + BlockPosition blockposition3 = blockposition1.south().east(); + + if (this.a(world.getType(blockposition3).getBlock())) { + this.a(world, blockposition3, this.b); + if (i2 > 0) { + this.a(world, random, blockposition3.east(), BlockVine.WEST); + this.a(world, random, blockposition3.south(), BlockVine.NORTH); + } + } + + BlockPosition blockposition4 = blockposition1.south(); + + if (this.a(world.getType(blockposition4).getBlock())) { + this.a(world, blockposition4, this.b); + if (i2 > 0) { + this.a(world, random, blockposition4.west(), BlockVine.EAST); + this.a(world, random, blockposition4.south(), BlockVine.NORTH); + } + } + } + } + + return true; + } + } + + private void a(World world, Random random, BlockPosition blockposition, BlockStateBoolean blockstateboolean) { + if (random.nextInt(3) > 0 && world.isEmpty(blockposition)) { + this.a(world, blockposition, Blocks.VINE.getBlockData().set(blockstateboolean, Boolean.valueOf(true))); + } + + } + + private void c(World world, BlockPosition blockposition, int i) { + byte b0 = 2; + + for (int j = -b0; j <= 0; ++j) { + this.a(world, blockposition.up(j), i + 1 - j); + } + + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenLakes.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenLakes.java new file mode 100644 index 0000000..ecd439a --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenLakes.java @@ -0,0 +1,132 @@ +package net.minecraft.server; + +import java.util.Random; + +public class WorldGenLakes extends WorldGenerator { + + private Block a; + + public WorldGenLakes(Block block) { + this.a = block; + } + + public boolean generate(World world, Random random, BlockPosition blockposition) { + for (blockposition = blockposition.a(-8, 0, -8); blockposition.getY() > 5 && world.isEmpty(blockposition); blockposition = blockposition.down()) { + ; + } + + if (blockposition.getY() <= 4) { + return false; + } else { + blockposition = blockposition.down(4); + boolean[] aboolean = new boolean[2048]; + int i = random.nextInt(4) + 4; + + int j; + + for (j = 0; j < i; ++j) { + double d0 = random.nextDouble() * 6.0D + 3.0D; + double d1 = random.nextDouble() * 4.0D + 2.0D; + double d2 = random.nextDouble() * 6.0D + 3.0D; + double d3 = random.nextDouble() * (16.0D - d0 - 2.0D) + 1.0D + d0 / 2.0D; + double d4 = random.nextDouble() * (8.0D - d1 - 4.0D) + 2.0D + d1 / 2.0D; + double d5 = random.nextDouble() * (16.0D - d2 - 2.0D) + 1.0D + d2 / 2.0D; + + for (int k = 1; k < 15; ++k) { + for (int l = 1; l < 15; ++l) { + for (int i1 = 1; i1 < 7; ++i1) { + double d6 = ((double) k - d3) / (d0 / 2.0D); + double d7 = ((double) i1 - d4) / (d1 / 2.0D); + double d8 = ((double) l - d5) / (d2 / 2.0D); + double d9 = d6 * d6 + d7 * d7 + d8 * d8; + + if (d9 < 1.0D) { + aboolean[(k * 16 + l) * 8 + i1] = true; + } + } + } + } + } + + int j1; + int k1; + boolean flag; + + for (j = 0; j < 16; ++j) { + for (k1 = 0; k1 < 16; ++k1) { + for (j1 = 0; j1 < 8; ++j1) { + flag = !aboolean[(j * 16 + k1) * 8 + j1] && (j < 15 && aboolean[((j + 1) * 16 + k1) * 8 + j1] || j > 0 && aboolean[((j - 1) * 16 + k1) * 8 + j1] || k1 < 15 && aboolean[(j * 16 + k1 + 1) * 8 + j1] || k1 > 0 && aboolean[(j * 16 + (k1 - 1)) * 8 + j1] || j1 < 7 && aboolean[(j * 16 + k1) * 8 + j1 + 1] || j1 > 0 && aboolean[(j * 16 + k1) * 8 + (j1 - 1)]); + if (flag) { + Material material = world.getType(blockposition.a(j, j1, k1)).getBlock().getMaterial(); + + if (j1 >= 4 && material.isLiquid()) { + return false; + } + + if (j1 < 4 && !material.isBuildable() && world.getType(blockposition.a(j, j1, k1)).getBlock() != this.a) { + return false; + } + } + } + } + } + + for (j = 0; j < 16; ++j) { + for (k1 = 0; k1 < 16; ++k1) { + for (j1 = 0; j1 < 8; ++j1) { + if (aboolean[(j * 16 + k1) * 8 + j1]) { + world.setTypeAndData(blockposition.a(j, j1, k1), j1 >= 4 ? Blocks.AIR.getBlockData() : this.a.getBlockData(), 2); + } + } + } + } + + for (j = 0; j < 16; ++j) { + for (k1 = 0; k1 < 16; ++k1) { + for (j1 = 4; j1 < 8; ++j1) { + if (aboolean[(j * 16 + k1) * 8 + j1]) { + BlockPosition blockposition1 = blockposition.a(j, j1 - 1, k1); + + if (world.getType(blockposition1).getBlock() == Blocks.DIRT && world.b(EnumSkyBlock.SKY, blockposition.a(j, j1, k1)) > 0) { + BiomeBase biomebase = world.getBiome(blockposition1); + + if (biomebase.ak.getBlock() == Blocks.MYCELIUM) { + world.setTypeAndData(blockposition1, Blocks.MYCELIUM.getBlockData(), 2); + } else { + world.setTypeAndData(blockposition1, Blocks.GRASS.getBlockData(), 2); + } + } + } + } + } + } + + if (this.a.getMaterial() == Material.LAVA) { + for (j = 0; j < 16; ++j) { + for (k1 = 0; k1 < 16; ++k1) { + for (j1 = 0; j1 < 8; ++j1) { + flag = !aboolean[(j * 16 + k1) * 8 + j1] && (j < 15 && aboolean[((j + 1) * 16 + k1) * 8 + j1] || j > 0 && aboolean[((j - 1) * 16 + k1) * 8 + j1] || k1 < 15 && aboolean[(j * 16 + k1 + 1) * 8 + j1] || k1 > 0 && aboolean[(j * 16 + (k1 - 1)) * 8 + j1] || j1 < 7 && aboolean[(j * 16 + k1) * 8 + j1 + 1] || j1 > 0 && aboolean[(j * 16 + k1) * 8 + (j1 - 1)]); + if (flag && (j1 < 4 || random.nextInt(2) != 0) && world.getType(blockposition.a(j, j1, k1)).getBlock().getMaterial().isBuildable()) { + world.setTypeAndData(blockposition.a(j, j1, k1), Blocks.STONE.getBlockData(), 2); + } + } + } + } + } + + if (this.a.getMaterial() == Material.WATER) { + for (j = 0; j < 16; ++j) { + for (k1 = 0; k1 < 16; ++k1) { + byte b0 = 4; + + if (world.v(blockposition.a(j, b0, k1))) { + world.setTypeAndData(blockposition.a(j, b0, k1), Blocks.ICE.getBlockData(), 2); + } + } + } + } + + return true; + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/WorldGenLargeFeature.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenLargeFeature.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/WorldGenLargeFeature.java rename to eSpigot-Server/src/main/java/net/minecraft/server/WorldGenLargeFeature.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenLightStone1.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenLightStone1.java new file mode 100644 index 0000000..d783f49 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenLightStone1.java @@ -0,0 +1,46 @@ +package net.minecraft.server; + +import java.util.Random; + +public class WorldGenLightStone1 extends WorldGenerator { + + public WorldGenLightStone1() {} + + public boolean generate(World world, Random random, BlockPosition blockposition) { + if (!world.isEmpty(blockposition)) { + return false; + } else if (world.getType(blockposition.up()).getBlock() != Blocks.NETHERRACK) { + return false; + } else { + world.setTypeAndData(blockposition, Blocks.GLOWSTONE.getBlockData(), 2); + + for (int i = 0; i < 1500; ++i) { + BlockPosition blockposition1 = blockposition.a(random.nextInt(8) - random.nextInt(8), -random.nextInt(12), random.nextInt(8) - random.nextInt(8)); + + if (world.getType(blockposition1).getBlock().getMaterial() == Material.AIR) { + int j = 0; + EnumDirection[] aenumdirection = EnumDirection.values(); + int k = aenumdirection.length; + + for (int l = 0; l < k; ++l) { + EnumDirection enumdirection = aenumdirection[l]; + + if (world.getType(blockposition1.shift(enumdirection)).getBlock() == Blocks.GLOWSTONE) { + ++j; + } + + if (j > 1) { + break; + } + } + + if (j == 1) { + world.setTypeAndData(blockposition1, Blocks.GLOWSTONE.getBlockData(), 2); + } + } + } + + return true; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenLightStone2.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenLightStone2.java new file mode 100644 index 0000000..ebd3c9c --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenLightStone2.java @@ -0,0 +1,46 @@ +package net.minecraft.server; + +import java.util.Random; + +public class WorldGenLightStone2 extends WorldGenerator { + + public WorldGenLightStone2() {} + + public boolean generate(World world, Random random, BlockPosition blockposition) { + if (!world.isEmpty(blockposition)) { + return false; + } else if (world.getType(blockposition.up()).getBlock() != Blocks.NETHERRACK) { + return false; + } else { + world.setTypeAndData(blockposition, Blocks.GLOWSTONE.getBlockData(), 2); + + for (int i = 0; i < 1500; ++i) { + BlockPosition blockposition1 = blockposition.a(random.nextInt(8) - random.nextInt(8), -random.nextInt(12), random.nextInt(8) - random.nextInt(8)); + + if (world.getType(blockposition1).getBlock().getMaterial() == Material.AIR) { + int j = 0; + EnumDirection[] aenumdirection = EnumDirection.values(); + int k = aenumdirection.length; + + for (int l = 0; l < k; ++l) { + EnumDirection enumdirection = aenumdirection[l]; + + if (world.getType(blockposition1.shift(enumdirection)).getBlock() == Blocks.GLOWSTONE) { + ++j; + } + + if (j > 1) { + break; + } + } + + if (j == 1) { + world.setTypeAndData(blockposition1, Blocks.GLOWSTONE.getBlockData(), 2); + } + } + } + + return true; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenLiquids.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenLiquids.java new file mode 100644 index 0000000..044abd0 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenLiquids.java @@ -0,0 +1,65 @@ +package net.minecraft.server; + +import java.util.Random; + +public class WorldGenLiquids extends WorldGenerator { + + private Block a; + + public WorldGenLiquids(Block block) { + this.a = block; + } + + public boolean generate(World world, Random random, BlockPosition blockposition) { + if (world.getType(blockposition.up()).getBlock() != Blocks.STONE) { + return false; + } else if (world.getType(blockposition.down()).getBlock() != Blocks.STONE) { + return false; + } else if (world.getType(blockposition).getBlock().getMaterial() != Material.AIR && world.getType(blockposition).getBlock() != Blocks.STONE) { + return false; + } else { + int i = 0; + + if (world.getType(blockposition.west()).getBlock() == Blocks.STONE) { + ++i; + } + + if (world.getType(blockposition.east()).getBlock() == Blocks.STONE) { + ++i; + } + + if (world.getType(blockposition.north()).getBlock() == Blocks.STONE) { + ++i; + } + + if (world.getType(blockposition.south()).getBlock() == Blocks.STONE) { + ++i; + } + + int j = 0; + + if (world.isEmpty(blockposition.west())) { + ++j; + } + + if (world.isEmpty(blockposition.east())) { + ++j; + } + + if (world.isEmpty(blockposition.north())) { + ++j; + } + + if (world.isEmpty(blockposition.south())) { + ++j; + } + + if (i == 3 && j == 1) { + world.setTypeAndData(blockposition, this.a.getBlockData(), 2); + world.a(this.a, blockposition, random); + } + + return true; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenMegaTree.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenMegaTree.java new file mode 100644 index 0000000..257da5e --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenMegaTree.java @@ -0,0 +1,113 @@ +package net.minecraft.server; + +import java.util.Random; + +public class WorldGenMegaTree extends WorldGenMegaTreeAbstract { + + private static final IBlockData e = Blocks.LOG.getBlockData().set(BlockLog1.VARIANT, BlockWood.EnumLogVariant.SPRUCE); + private static final IBlockData f = Blocks.LEAVES.getBlockData().set(BlockLeaves1.VARIANT, BlockWood.EnumLogVariant.SPRUCE).set(BlockLeaves.CHECK_DECAY, Boolean.valueOf(false)); + private static final IBlockData g = Blocks.DIRT.getBlockData().set(BlockDirt.VARIANT, BlockDirt.EnumDirtVariant.PODZOL); + private boolean h; + + public WorldGenMegaTree(boolean flag, boolean flag1) { + super(flag, 13, 15, WorldGenMegaTree.e, WorldGenMegaTree.f); + this.h = flag1; + } + + public boolean generate(World world, Random random, BlockPosition blockposition) { + int i = this.a(random); + + if (!this.a(world, random, blockposition, i)) { + return false; + } else { + this.a(world, blockposition.getX(), blockposition.getZ(), blockposition.getY() + i, 0, random); + + for (int j = 0; j < i; ++j) { + Block block = world.getType(blockposition.up(j)).getBlock(); + + if (block.getMaterial() == Material.AIR || block.getMaterial() == Material.LEAVES) { + this.a(world, blockposition.up(j), this.b); + } + + if (j < i - 1) { + block = world.getType(blockposition.a(1, j, 0)).getBlock(); + if (block.getMaterial() == Material.AIR || block.getMaterial() == Material.LEAVES) { + this.a(world, blockposition.a(1, j, 0), this.b); + } + + block = world.getType(blockposition.a(1, j, 1)).getBlock(); + if (block.getMaterial() == Material.AIR || block.getMaterial() == Material.LEAVES) { + this.a(world, blockposition.a(1, j, 1), this.b); + } + + block = world.getType(blockposition.a(0, j, 1)).getBlock(); + if (block.getMaterial() == Material.AIR || block.getMaterial() == Material.LEAVES) { + this.a(world, blockposition.a(0, j, 1), this.b); + } + } + } + + return true; + } + } + + private void a(World world, int i, int j, int k, int l, Random random) { + int i1 = random.nextInt(5) + (this.h ? this.a : 3); + int j1 = 0; + + for (int k1 = k - i1; k1 <= k; ++k1) { + int l1 = k - k1; + int i2 = l + MathHelper.d((float) l1 / (float) i1 * 3.5F); + + this.a(world, new BlockPosition(i, k1, j), i2 + (l1 > 0 && i2 == j1 && (k1 & 1) == 0 ? 1 : 0)); + j1 = i2; + } + + } + + public void a(World world, Random random, BlockPosition blockposition) { + this.b(world, blockposition.west().north()); + this.b(world, blockposition.east(2).north()); + this.b(world, blockposition.west().south(2)); + this.b(world, blockposition.east(2).south(2)); + + for (int i = 0; i < 5; ++i) { + int j = random.nextInt(64); + int k = j % 8; + int l = j / 8; + + if (k == 0 || k == 7 || l == 0 || l == 7) { + this.b(world, blockposition.a(-3 + k, 0, -3 + l)); + } + } + + } + + private void b(World world, BlockPosition blockposition) { + for (int i = -2; i <= 2; ++i) { + for (int j = -2; j <= 2; ++j) { + if (Math.abs(i) != 2 || Math.abs(j) != 2) { + this.c(world, blockposition.a(i, 0, j)); + } + } + } + + } + + private void c(World world, BlockPosition blockposition) { + for (int i = 2; i >= -3; --i) { + BlockPosition blockposition1 = blockposition.up(i); + Block block = world.getType(blockposition1).getBlock(); + + if (block == Blocks.GRASS || block == Blocks.DIRT) { + this.a(world, blockposition1, WorldGenMegaTree.g); + break; + } + + if (block.getMaterial() != Material.AIR && i < 0) { + break; + } + } + + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/WorldGenMegaTreeAbstract.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenMegaTreeAbstract.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/WorldGenMegaTreeAbstract.java rename to eSpigot-Server/src/main/java/net/minecraft/server/WorldGenMegaTreeAbstract.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenMelon.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenMelon.java new file mode 100644 index 0000000..69c1920 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenMelon.java @@ -0,0 +1,20 @@ +package net.minecraft.server; + +import java.util.Random; + +public class WorldGenMelon extends WorldGenerator { + + public WorldGenMelon() {} + + public boolean generate(World world, Random random, BlockPosition blockposition) { + for (int i = 0; i < 64; ++i) { + BlockPosition blockposition1 = blockposition.a(random.nextInt(8) - random.nextInt(8), random.nextInt(4) - random.nextInt(4), random.nextInt(8) - random.nextInt(8)); + + if (Blocks.MELON_BLOCK.canPlace(world, blockposition1) && world.getType(blockposition1.down()).getBlock() == Blocks.GRASS) { + world.setTypeAndData(blockposition1, Blocks.MELON_BLOCK.getBlockData(), 2); + } + } + + return true; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenMinable.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenMinable.java new file mode 100644 index 0000000..2307c87 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenMinable.java @@ -0,0 +1,73 @@ +package net.minecraft.server; + +import com.google.common.base.Predicate; +import java.util.Random; + +public class WorldGenMinable extends WorldGenerator { + + private final IBlockData a; + private final int b; + private final Predicate c; + + public WorldGenMinable(IBlockData iblockdata, int i) { + this(iblockdata, i, BlockPredicate.a(Blocks.STONE)); + } + + public WorldGenMinable(IBlockData iblockdata, int i, Predicate predicate) { + this.a = iblockdata; + this.b = i; + this.c = predicate; + } + + public boolean generate(World world, Random random, BlockPosition blockposition) { + float f = random.nextFloat() * 3.1415927F; + double d0 = (double) ((float) (blockposition.getX() + 8) + MathHelper.sin(f) * (float) this.b / 8.0F); + double d1 = (double) ((float) (blockposition.getX() + 8) - MathHelper.sin(f) * (float) this.b / 8.0F); + double d2 = (double) ((float) (blockposition.getZ() + 8) + MathHelper.cos(f) * (float) this.b / 8.0F); + double d3 = (double) ((float) (blockposition.getZ() + 8) - MathHelper.cos(f) * (float) this.b / 8.0F); + double d4 = (double) (blockposition.getY() + random.nextInt(3) - 2); + double d5 = (double) (blockposition.getY() + random.nextInt(3) - 2); + + for (int i = 0; i < this.b; ++i) { + float f1 = (float) i / (float) this.b; + double d6 = d0 + (d1 - d0) * (double) f1; + double d7 = d4 + (d5 - d4) * (double) f1; + double d8 = d2 + (d3 - d2) * (double) f1; + double d9 = random.nextDouble() * (double) this.b / 16.0D; + double d10 = (double) (MathHelper.sin(3.1415927F * f1) + 1.0F) * d9 + 1.0D; + double d11 = (double) (MathHelper.sin(3.1415927F * f1) + 1.0F) * d9 + 1.0D; + int j = MathHelper.floor(d6 - d10 / 2.0D); + int k = MathHelper.floor(d7 - d11 / 2.0D); + int l = MathHelper.floor(d8 - d10 / 2.0D); + int i1 = MathHelper.floor(d6 + d10 / 2.0D); + int j1 = MathHelper.floor(d7 + d11 / 2.0D); + int k1 = MathHelper.floor(d8 + d10 / 2.0D); + + for (int l1 = j; l1 <= i1; ++l1) { + double d12 = ((double) l1 + 0.5D - d6) / (d10 / 2.0D); + + if (d12 * d12 < 1.0D) { + for (int i2 = k; i2 <= j1; ++i2) { + double d13 = ((double) i2 + 0.5D - d7) / (d11 / 2.0D); + + if (d12 * d12 + d13 * d13 < 1.0D) { + for (int j2 = l; j2 <= k1; ++j2) { + double d14 = ((double) j2 + 0.5D - d8) / (d10 / 2.0D); + + if (d12 * d12 + d13 * d13 + d14 * d14 < 1.0D) { + BlockPosition blockposition1 = new BlockPosition(l1, i2, j2); + + if (this.c.apply(world.getType(blockposition1))) { + world.setTypeAndData(blockposition1, this.a, 2); + } + } + } + } + } + } + } + } + + return true; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenMineshaft.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenMineshaft.java new file mode 100644 index 0000000..018e2e6 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenMineshaft.java @@ -0,0 +1,37 @@ +package net.minecraft.server; + +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; + +public class WorldGenMineshaft extends StructureGenerator { + + private double d = 0.004D; + + public WorldGenMineshaft() {} + + public String a() { + return "Mineshaft"; + } + + public WorldGenMineshaft(Map map) { + Iterator iterator = map.entrySet().iterator(); + + while (iterator.hasNext()) { + Entry entry = (Entry) iterator.next(); + + if (((String) entry.getKey()).equals("chance")) { + this.d = MathHelper.a((String) entry.getValue(), this.d); + } + } + + } + + protected boolean a(int i, int j) { + return this.b.nextDouble() < this.d && this.b.nextInt(80) < Math.max(Math.abs(i), Math.abs(j)); + } + + protected StructureStart b(int i, int j) { + return new WorldGenMineshaftStart(this.c, this.b, i, j); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenMineshaftPieces.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenMineshaftPieces.java new file mode 100644 index 0000000..e66f43a --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenMineshaftPieces.java @@ -0,0 +1,704 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import java.util.Iterator; +import java.util.List; +import java.util.Random; + +public class WorldGenMineshaftPieces { + + private static final List a = Lists.newArrayList(new StructurePieceTreasure[] { new StructurePieceTreasure(Items.IRON_INGOT, 0, 1, 5, 10), new StructurePieceTreasure(Items.GOLD_INGOT, 0, 1, 3, 5), new StructurePieceTreasure(Items.REDSTONE, 0, 4, 9, 5), new StructurePieceTreasure(Items.DYE, EnumColor.BLUE.getInvColorIndex(), 4, 9, 5), new StructurePieceTreasure(Items.DIAMOND, 0, 1, 2, 3), new StructurePieceTreasure(Items.COAL, 0, 3, 8, 10), new StructurePieceTreasure(Items.BREAD, 0, 1, 3, 15), new StructurePieceTreasure(Items.IRON_PICKAXE, 0, 1, 1, 1), new StructurePieceTreasure(Item.getItemOf(Blocks.RAIL), 0, 4, 8, 1), new StructurePieceTreasure(Items.MELON_SEEDS, 0, 2, 4, 10), new StructurePieceTreasure(Items.PUMPKIN_SEEDS, 0, 2, 4, 10), new StructurePieceTreasure(Items.SADDLE, 0, 1, 1, 3), new StructurePieceTreasure(Items.IRON_HORSE_ARMOR, 0, 1, 1, 1)}); + + public static void a() { + WorldGenFactory.a(WorldGenMineshaftPieces.WorldGenMineshaftCorridor.class, "MSCorridor"); + WorldGenFactory.a(WorldGenMineshaftPieces.WorldGenMineshaftCross.class, "MSCrossing"); + WorldGenFactory.a(WorldGenMineshaftPieces.WorldGenMineshaftRoom.class, "MSRoom"); + WorldGenFactory.a(WorldGenMineshaftPieces.WorldGenMineshaftStairs.class, "MSStairs"); + } + + private static StructurePiece a(List list, Random random, int i, int j, int k, EnumDirection enumdirection, int l) { + int i1 = random.nextInt(100); + StructureBoundingBox structureboundingbox; + + if (i1 >= 80) { + structureboundingbox = WorldGenMineshaftPieces.WorldGenMineshaftCross.a(list, random, i, j, k, enumdirection); + if (structureboundingbox != null) { + return new WorldGenMineshaftPieces.WorldGenMineshaftCross(l, random, structureboundingbox, enumdirection); + } + } else if (i1 >= 70) { + structureboundingbox = WorldGenMineshaftPieces.WorldGenMineshaftStairs.a(list, random, i, j, k, enumdirection); + if (structureboundingbox != null) { + return new WorldGenMineshaftPieces.WorldGenMineshaftStairs(l, random, structureboundingbox, enumdirection); + } + } else { + structureboundingbox = WorldGenMineshaftPieces.WorldGenMineshaftCorridor.a(list, random, i, j, k, enumdirection); + if (structureboundingbox != null) { + return new WorldGenMineshaftPieces.WorldGenMineshaftCorridor(l, random, structureboundingbox, enumdirection); + } + } + + return null; + } + + private static StructurePiece b(StructurePiece structurepiece, List list, Random random, int i, int j, int k, EnumDirection enumdirection, int l) { + if (l > 8) { + return null; + } else if (Math.abs(i - structurepiece.c().a) <= 80 && Math.abs(k - structurepiece.c().c) <= 80) { + StructurePiece structurepiece1 = a(list, random, i, j, k, enumdirection, l + 1); + + if (structurepiece1 != null) { + list.add(structurepiece1); + structurepiece1.a(structurepiece, list, random); + } + + return structurepiece1; + } else { + return null; + } + } + + static class SyntheticClass_1 { + + static final int[] a = new int[EnumDirection.values().length]; + + static { + try { + WorldGenMineshaftPieces.SyntheticClass_1.a[EnumDirection.NORTH.ordinal()] = 1; + } catch (NoSuchFieldError nosuchfielderror) { + ; + } + + try { + WorldGenMineshaftPieces.SyntheticClass_1.a[EnumDirection.SOUTH.ordinal()] = 2; + } catch (NoSuchFieldError nosuchfielderror1) { + ; + } + + try { + WorldGenMineshaftPieces.SyntheticClass_1.a[EnumDirection.WEST.ordinal()] = 3; + } catch (NoSuchFieldError nosuchfielderror2) { + ; + } + + try { + WorldGenMineshaftPieces.SyntheticClass_1.a[EnumDirection.EAST.ordinal()] = 4; + } catch (NoSuchFieldError nosuchfielderror3) { + ; + } + + } + } + + public static class WorldGenMineshaftStairs extends StructurePiece { + + public WorldGenMineshaftStairs() {} + + public WorldGenMineshaftStairs(int i, Random random, StructureBoundingBox structureboundingbox, EnumDirection enumdirection) { + super(i); + this.m = enumdirection; + this.l = structureboundingbox; + } + + protected void a(NBTTagCompound nbttagcompound) {} + + protected void b(NBTTagCompound nbttagcompound) {} + + public static StructureBoundingBox a(List list, Random random, int i, int j, int k, EnumDirection enumdirection) { + StructureBoundingBox structureboundingbox = new StructureBoundingBox(i, j - 5, k, i, j + 2, k); + + switch (WorldGenMineshaftPieces.SyntheticClass_1.a[enumdirection.ordinal()]) { + case 1: + structureboundingbox.d = i + 2; + structureboundingbox.c = k - 8; + break; + + case 2: + structureboundingbox.d = i + 2; + structureboundingbox.f = k + 8; + break; + + case 3: + structureboundingbox.a = i - 8; + structureboundingbox.f = k + 2; + break; + + case 4: + structureboundingbox.d = i + 8; + structureboundingbox.f = k + 2; + } + + return StructurePiece.a(list, structureboundingbox) != null ? null : structureboundingbox; + } + + public void a(StructurePiece structurepiece, List list, Random random) { + int i = this.d(); + + if (this.m != null) { + switch (WorldGenMineshaftPieces.SyntheticClass_1.a[this.m.ordinal()]) { + case 1: + WorldGenMineshaftPieces.b(structurepiece, list, random, this.l.a, this.l.b, this.l.c - 1, EnumDirection.NORTH, i); + break; + + case 2: + WorldGenMineshaftPieces.b(structurepiece, list, random, this.l.a, this.l.b, this.l.f + 1, EnumDirection.SOUTH, i); + break; + + case 3: + WorldGenMineshaftPieces.b(structurepiece, list, random, this.l.a - 1, this.l.b, this.l.c, EnumDirection.WEST, i); + break; + + case 4: + WorldGenMineshaftPieces.b(structurepiece, list, random, this.l.d + 1, this.l.b, this.l.c, EnumDirection.EAST, i); + } + } + + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + if (this.a(world, structureboundingbox)) { + return false; + } else { + this.a(world, structureboundingbox, 0, 5, 0, 2, 7, 1, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + this.a(world, structureboundingbox, 0, 0, 7, 2, 2, 8, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + + for (int i = 0; i < 5; ++i) { + this.a(world, structureboundingbox, 0, 5 - i - (i < 4 ? 1 : 0), 2 + i, 2, 7 - i, 2 + i, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + } + + return true; + } + } + } + + public static class WorldGenMineshaftCross extends StructurePiece { + + private EnumDirection a; + private boolean b; + + public WorldGenMineshaftCross() {} + + protected void a(NBTTagCompound nbttagcompound) { + nbttagcompound.setBoolean("tf", this.b); + nbttagcompound.setInt("D", this.a.b()); + } + + protected void b(NBTTagCompound nbttagcompound) { + this.b = nbttagcompound.getBoolean("tf"); + this.a = EnumDirection.fromType2(nbttagcompound.getInt("D")); + } + + public WorldGenMineshaftCross(int i, Random random, StructureBoundingBox structureboundingbox, EnumDirection enumdirection) { + super(i); + this.a = enumdirection; + this.l = structureboundingbox; + this.b = structureboundingbox.d() > 3; + } + + public static StructureBoundingBox a(List list, Random random, int i, int j, int k, EnumDirection enumdirection) { + StructureBoundingBox structureboundingbox = new StructureBoundingBox(i, j, k, i, j + 2, k); + + if (random.nextInt(4) == 0) { + structureboundingbox.e += 4; + } + + switch (WorldGenMineshaftPieces.SyntheticClass_1.a[enumdirection.ordinal()]) { + case 1: + structureboundingbox.a = i - 1; + structureboundingbox.d = i + 3; + structureboundingbox.c = k - 4; + break; + + case 2: + structureboundingbox.a = i - 1; + structureboundingbox.d = i + 3; + structureboundingbox.f = k + 4; + break; + + case 3: + structureboundingbox.a = i - 4; + structureboundingbox.c = k - 1; + structureboundingbox.f = k + 3; + break; + + case 4: + structureboundingbox.d = i + 4; + structureboundingbox.c = k - 1; + structureboundingbox.f = k + 3; + } + + return StructurePiece.a(list, structureboundingbox) != null ? null : structureboundingbox; + } + + public void a(StructurePiece structurepiece, List list, Random random) { + int i = this.d(); + + switch (WorldGenMineshaftPieces.SyntheticClass_1.a[this.a.ordinal()]) { + case 1: + WorldGenMineshaftPieces.b(structurepiece, list, random, this.l.a + 1, this.l.b, this.l.c - 1, EnumDirection.NORTH, i); + WorldGenMineshaftPieces.b(structurepiece, list, random, this.l.a - 1, this.l.b, this.l.c + 1, EnumDirection.WEST, i); + WorldGenMineshaftPieces.b(structurepiece, list, random, this.l.d + 1, this.l.b, this.l.c + 1, EnumDirection.EAST, i); + break; + + case 2: + WorldGenMineshaftPieces.b(structurepiece, list, random, this.l.a + 1, this.l.b, this.l.f + 1, EnumDirection.SOUTH, i); + WorldGenMineshaftPieces.b(structurepiece, list, random, this.l.a - 1, this.l.b, this.l.c + 1, EnumDirection.WEST, i); + WorldGenMineshaftPieces.b(structurepiece, list, random, this.l.d + 1, this.l.b, this.l.c + 1, EnumDirection.EAST, i); + break; + + case 3: + WorldGenMineshaftPieces.b(structurepiece, list, random, this.l.a + 1, this.l.b, this.l.c - 1, EnumDirection.NORTH, i); + WorldGenMineshaftPieces.b(structurepiece, list, random, this.l.a + 1, this.l.b, this.l.f + 1, EnumDirection.SOUTH, i); + WorldGenMineshaftPieces.b(structurepiece, list, random, this.l.a - 1, this.l.b, this.l.c + 1, EnumDirection.WEST, i); + break; + + case 4: + WorldGenMineshaftPieces.b(structurepiece, list, random, this.l.a + 1, this.l.b, this.l.c - 1, EnumDirection.NORTH, i); + WorldGenMineshaftPieces.b(structurepiece, list, random, this.l.a + 1, this.l.b, this.l.f + 1, EnumDirection.SOUTH, i); + WorldGenMineshaftPieces.b(structurepiece, list, random, this.l.d + 1, this.l.b, this.l.c + 1, EnumDirection.EAST, i); + } + + if (this.b) { + if (random.nextBoolean()) { + WorldGenMineshaftPieces.b(structurepiece, list, random, this.l.a + 1, this.l.b + 3 + 1, this.l.c - 1, EnumDirection.NORTH, i); + } + + if (random.nextBoolean()) { + WorldGenMineshaftPieces.b(structurepiece, list, random, this.l.a - 1, this.l.b + 3 + 1, this.l.c + 1, EnumDirection.WEST, i); + } + + if (random.nextBoolean()) { + WorldGenMineshaftPieces.b(structurepiece, list, random, this.l.d + 1, this.l.b + 3 + 1, this.l.c + 1, EnumDirection.EAST, i); + } + + if (random.nextBoolean()) { + WorldGenMineshaftPieces.b(structurepiece, list, random, this.l.a + 1, this.l.b + 3 + 1, this.l.f + 1, EnumDirection.SOUTH, i); + } + } + + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + if (this.a(world, structureboundingbox)) { + return false; + } else { + if (this.b) { + this.a(world, structureboundingbox, this.l.a + 1, this.l.b, this.l.c, this.l.d - 1, this.l.b + 3 - 1, this.l.f, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + this.a(world, structureboundingbox, this.l.a, this.l.b, this.l.c + 1, this.l.d, this.l.b + 3 - 1, this.l.f - 1, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + this.a(world, structureboundingbox, this.l.a + 1, this.l.e - 2, this.l.c, this.l.d - 1, this.l.e, this.l.f, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + this.a(world, structureboundingbox, this.l.a, this.l.e - 2, this.l.c + 1, this.l.d, this.l.e, this.l.f - 1, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + this.a(world, structureboundingbox, this.l.a + 1, this.l.b + 3, this.l.c + 1, this.l.d - 1, this.l.b + 3, this.l.f - 1, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + } else { + this.a(world, structureboundingbox, this.l.a + 1, this.l.b, this.l.c, this.l.d - 1, this.l.e, this.l.f, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + this.a(world, structureboundingbox, this.l.a, this.l.b, this.l.c + 1, this.l.d, this.l.e, this.l.f - 1, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + } + + this.a(world, structureboundingbox, this.l.a + 1, this.l.b, this.l.c + 1, this.l.a + 1, this.l.e, this.l.c + 1, Blocks.PLANKS.getBlockData(), Blocks.AIR.getBlockData(), false); + this.a(world, structureboundingbox, this.l.a + 1, this.l.b, this.l.f - 1, this.l.a + 1, this.l.e, this.l.f - 1, Blocks.PLANKS.getBlockData(), Blocks.AIR.getBlockData(), false); + this.a(world, structureboundingbox, this.l.d - 1, this.l.b, this.l.c + 1, this.l.d - 1, this.l.e, this.l.c + 1, Blocks.PLANKS.getBlockData(), Blocks.AIR.getBlockData(), false); + this.a(world, structureboundingbox, this.l.d - 1, this.l.b, this.l.f - 1, this.l.d - 1, this.l.e, this.l.f - 1, Blocks.PLANKS.getBlockData(), Blocks.AIR.getBlockData(), false); + + for (int i = this.l.a; i <= this.l.d; ++i) { + for (int j = this.l.c; j <= this.l.f; ++j) { + if (this.a(world, i, this.l.b - 1, j, structureboundingbox).getBlock().getMaterial() == Material.AIR) { + this.a(world, Blocks.PLANKS.getBlockData(), i, this.l.b - 1, j, structureboundingbox); + } + } + } + + return true; + } + } + } + + public static class WorldGenMineshaftCorridor extends StructurePiece { + + private boolean a; + private boolean b; + private boolean c; + private int d; + + public WorldGenMineshaftCorridor() {} + + protected void a(NBTTagCompound nbttagcompound) { + nbttagcompound.setBoolean("hr", this.a); + nbttagcompound.setBoolean("sc", this.b); + nbttagcompound.setBoolean("hps", this.c); + nbttagcompound.setInt("Num", this.d); + } + + protected void b(NBTTagCompound nbttagcompound) { + this.a = nbttagcompound.getBoolean("hr"); + this.b = nbttagcompound.getBoolean("sc"); + this.c = nbttagcompound.getBoolean("hps"); + this.d = nbttagcompound.getInt("Num"); + } + + public WorldGenMineshaftCorridor(int i, Random random, StructureBoundingBox structureboundingbox, EnumDirection enumdirection) { + super(i); + this.m = enumdirection; + this.l = structureboundingbox; + this.a = random.nextInt(3) == 0; + this.b = !this.a && random.nextInt(23) == 0; + if (this.m != EnumDirection.NORTH && this.m != EnumDirection.SOUTH) { + this.d = structureboundingbox.c() / 5; + } else { + this.d = structureboundingbox.e() / 5; + } + + } + + public static StructureBoundingBox a(List list, Random random, int i, int j, int k, EnumDirection enumdirection) { + StructureBoundingBox structureboundingbox = new StructureBoundingBox(i, j, k, i, j + 2, k); + + int l; + + for (l = random.nextInt(3) + 2; l > 0; --l) { + int i1 = l * 5; + + switch (WorldGenMineshaftPieces.SyntheticClass_1.a[enumdirection.ordinal()]) { + case 1: + structureboundingbox.d = i + 2; + structureboundingbox.c = k - (i1 - 1); + break; + + case 2: + structureboundingbox.d = i + 2; + structureboundingbox.f = k + (i1 - 1); + break; + + case 3: + structureboundingbox.a = i - (i1 - 1); + structureboundingbox.f = k + 2; + break; + + case 4: + structureboundingbox.d = i + (i1 - 1); + structureboundingbox.f = k + 2; + } + + if (StructurePiece.a(list, structureboundingbox) == null) { + break; + } + } + + return l > 0 ? structureboundingbox : null; + } + + public void a(StructurePiece structurepiece, List list, Random random) { + int i = this.d(); + int j = random.nextInt(4); + + if (this.m != null) { + switch (WorldGenMineshaftPieces.SyntheticClass_1.a[this.m.ordinal()]) { + case 1: + if (j <= 1) { + WorldGenMineshaftPieces.b(structurepiece, list, random, this.l.a, this.l.b - 1 + random.nextInt(3), this.l.c - 1, this.m, i); + } else if (j == 2) { + WorldGenMineshaftPieces.b(structurepiece, list, random, this.l.a - 1, this.l.b - 1 + random.nextInt(3), this.l.c, EnumDirection.WEST, i); + } else { + WorldGenMineshaftPieces.b(structurepiece, list, random, this.l.d + 1, this.l.b - 1 + random.nextInt(3), this.l.c, EnumDirection.EAST, i); + } + break; + + case 2: + if (j <= 1) { + WorldGenMineshaftPieces.b(structurepiece, list, random, this.l.a, this.l.b - 1 + random.nextInt(3), this.l.f + 1, this.m, i); + } else if (j == 2) { + WorldGenMineshaftPieces.b(structurepiece, list, random, this.l.a - 1, this.l.b - 1 + random.nextInt(3), this.l.f - 3, EnumDirection.WEST, i); + } else { + WorldGenMineshaftPieces.b(structurepiece, list, random, this.l.d + 1, this.l.b - 1 + random.nextInt(3), this.l.f - 3, EnumDirection.EAST, i); + } + break; + + case 3: + if (j <= 1) { + WorldGenMineshaftPieces.b(structurepiece, list, random, this.l.a - 1, this.l.b - 1 + random.nextInt(3), this.l.c, this.m, i); + } else if (j == 2) { + WorldGenMineshaftPieces.b(structurepiece, list, random, this.l.a, this.l.b - 1 + random.nextInt(3), this.l.c - 1, EnumDirection.NORTH, i); + } else { + WorldGenMineshaftPieces.b(structurepiece, list, random, this.l.a, this.l.b - 1 + random.nextInt(3), this.l.f + 1, EnumDirection.SOUTH, i); + } + break; + + case 4: + if (j <= 1) { + WorldGenMineshaftPieces.b(structurepiece, list, random, this.l.d + 1, this.l.b - 1 + random.nextInt(3), this.l.c, this.m, i); + } else if (j == 2) { + WorldGenMineshaftPieces.b(structurepiece, list, random, this.l.d - 3, this.l.b - 1 + random.nextInt(3), this.l.c - 1, EnumDirection.NORTH, i); + } else { + WorldGenMineshaftPieces.b(structurepiece, list, random, this.l.d - 3, this.l.b - 1 + random.nextInt(3), this.l.f + 1, EnumDirection.SOUTH, i); + } + } + } + + if (i < 8) { + int k; + int l; + + if (this.m != EnumDirection.NORTH && this.m != EnumDirection.SOUTH) { + for (k = this.l.a + 3; k + 3 <= this.l.d; k += 5) { + l = random.nextInt(5); + if (l == 0) { + WorldGenMineshaftPieces.b(structurepiece, list, random, k, this.l.b, this.l.c - 1, EnumDirection.NORTH, i + 1); + } else if (l == 1) { + WorldGenMineshaftPieces.b(structurepiece, list, random, k, this.l.b, this.l.f + 1, EnumDirection.SOUTH, i + 1); + } + } + } else { + for (k = this.l.c + 3; k + 3 <= this.l.f; k += 5) { + l = random.nextInt(5); + if (l == 0) { + WorldGenMineshaftPieces.b(structurepiece, list, random, this.l.a - 1, this.l.b, k, EnumDirection.WEST, i + 1); + } else if (l == 1) { + WorldGenMineshaftPieces.b(structurepiece, list, random, this.l.d + 1, this.l.b, k, EnumDirection.EAST, i + 1); + } + } + } + } + + } + + protected boolean a(World world, StructureBoundingBox structureboundingbox, Random random, int i, int j, int k, List list, int l) { + BlockPosition blockposition = new BlockPosition(this.a(i, k), this.d(j), this.b(i, k)); + + if (structureboundingbox.b((BaseBlockPosition) blockposition) && world.getType(blockposition).getBlock().getMaterial() == Material.AIR) { + int i1 = random.nextBoolean() ? 1 : 0; + + world.setTypeAndData(blockposition, Blocks.RAIL.fromLegacyData(this.a(Blocks.RAIL, i1)), 2); + EntityMinecartChest entityminecartchest = new EntityMinecartChest(world, (double) ((float) blockposition.getX() + 0.5F), (double) ((float) blockposition.getY() + 0.5F), (double) ((float) blockposition.getZ() + 0.5F)); + + StructurePieceTreasure.a(random, list, (IInventory) entityminecartchest, l); + world.addEntity(entityminecartchest); + return true; + } else { + return false; + } + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + if (this.a(world, structureboundingbox)) { + return false; + } else { + boolean flag = false; + boolean flag1 = true; + boolean flag2 = false; + boolean flag3 = true; + int i = this.d * 5 - 1; + + this.a(world, structureboundingbox, 0, 0, 0, 2, 1, i, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + this.a(world, structureboundingbox, random, 0.8F, 0, 2, 0, 2, 2, i, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + if (this.b) { + this.a(world, structureboundingbox, random, 0.6F, 0, 0, 0, 2, 1, i, Blocks.WEB.getBlockData(), Blocks.AIR.getBlockData(), false); + } + + int j; + int k; + + for (j = 0; j < this.d; ++j) { + k = 2 + j * 5; + this.a(world, structureboundingbox, 0, 0, k, 0, 1, k, Blocks.FENCE.getBlockData(), Blocks.AIR.getBlockData(), false); + this.a(world, structureboundingbox, 2, 0, k, 2, 1, k, Blocks.FENCE.getBlockData(), Blocks.AIR.getBlockData(), false); + if (random.nextInt(4) == 0) { + this.a(world, structureboundingbox, 0, 2, k, 0, 2, k, Blocks.PLANKS.getBlockData(), Blocks.AIR.getBlockData(), false); + this.a(world, structureboundingbox, 2, 2, k, 2, 2, k, Blocks.PLANKS.getBlockData(), Blocks.AIR.getBlockData(), false); + } else { + this.a(world, structureboundingbox, 0, 2, k, 2, 2, k, Blocks.PLANKS.getBlockData(), Blocks.AIR.getBlockData(), false); + } + + this.a(world, structureboundingbox, random, 0.1F, 0, 2, k - 1, Blocks.WEB.getBlockData()); + this.a(world, structureboundingbox, random, 0.1F, 2, 2, k - 1, Blocks.WEB.getBlockData()); + this.a(world, structureboundingbox, random, 0.1F, 0, 2, k + 1, Blocks.WEB.getBlockData()); + this.a(world, structureboundingbox, random, 0.1F, 2, 2, k + 1, Blocks.WEB.getBlockData()); + this.a(world, structureboundingbox, random, 0.05F, 0, 2, k - 2, Blocks.WEB.getBlockData()); + this.a(world, structureboundingbox, random, 0.05F, 2, 2, k - 2, Blocks.WEB.getBlockData()); + this.a(world, structureboundingbox, random, 0.05F, 0, 2, k + 2, Blocks.WEB.getBlockData()); + this.a(world, structureboundingbox, random, 0.05F, 2, 2, k + 2, Blocks.WEB.getBlockData()); + this.a(world, structureboundingbox, random, 0.05F, 1, 2, k - 1, Blocks.TORCH.fromLegacyData(EnumDirection.UP.a())); + this.a(world, structureboundingbox, random, 0.05F, 1, 2, k + 1, Blocks.TORCH.fromLegacyData(EnumDirection.UP.a())); + if (random.nextInt(100) == 0) { + this.a(world, structureboundingbox, random, 2, 0, k - 1, StructurePieceTreasure.a(WorldGenMineshaftPieces.a, new StructurePieceTreasure[] { Items.ENCHANTED_BOOK.b(random)}), 3 + random.nextInt(4)); + } + + if (random.nextInt(100) == 0) { + this.a(world, structureboundingbox, random, 0, 0, k + 1, StructurePieceTreasure.a(WorldGenMineshaftPieces.a, new StructurePieceTreasure[] { Items.ENCHANTED_BOOK.b(random)}), 3 + random.nextInt(4)); + } + + if (this.b && !this.c) { + int l = this.d(0); + int i1 = k - 1 + random.nextInt(3); + int j1 = this.a(1, i1); + + i1 = this.b(1, i1); + BlockPosition blockposition = new BlockPosition(j1, l, i1); + + if (structureboundingbox.b((BaseBlockPosition) blockposition)) { + this.c = true; + world.setTypeAndData(blockposition, Blocks.MOB_SPAWNER.getBlockData(), 2); + TileEntity tileentity = world.getTileEntity(blockposition); + + if (tileentity instanceof TileEntityMobSpawner) { + ((TileEntityMobSpawner) tileentity).getSpawner().setMobName("CaveSpider"); + } + } + } + } + + for (j = 0; j <= 2; ++j) { + for (k = 0; k <= i; ++k) { + byte b0 = -1; + IBlockData iblockdata = this.a(world, j, b0, k, structureboundingbox); + + if (iblockdata.getBlock().getMaterial() == Material.AIR) { + byte b1 = -1; + + this.a(world, Blocks.PLANKS.getBlockData(), j, b1, k, structureboundingbox); + } + } + } + + if (this.a) { + for (j = 0; j <= i; ++j) { + IBlockData iblockdata1 = this.a(world, 1, -1, j, structureboundingbox); + + if (iblockdata1.getBlock().getMaterial() != Material.AIR && iblockdata1.getBlock().o()) { + this.a(world, structureboundingbox, random, 0.7F, 1, 0, j, Blocks.RAIL.fromLegacyData(this.a(Blocks.RAIL, 0))); + } + } + } + + return true; + } + } + } + + public static class WorldGenMineshaftRoom extends StructurePiece { + + private List a = Lists.newLinkedList(); + + public WorldGenMineshaftRoom() {} + + public WorldGenMineshaftRoom(int i, Random random, int j, int k) { + super(i); + this.l = new StructureBoundingBox(j, 50, k, j + 7 + random.nextInt(6), 54 + random.nextInt(6), k + 7 + random.nextInt(6)); + } + + public void a(StructurePiece structurepiece, List list, Random random) { + int i = this.d(); + int j = this.l.d() - 3 - 1; + + if (j <= 0) { + j = 1; + } + + int k; + StructurePiece structurepiece1; + StructureBoundingBox structureboundingbox; + + for (k = 0; k < this.l.c(); k += 4) { + k += random.nextInt(this.l.c()); + if (k + 3 > this.l.c()) { + break; + } + + structurepiece1 = WorldGenMineshaftPieces.b(structurepiece, list, random, this.l.a + k, this.l.b + random.nextInt(j) + 1, this.l.c - 1, EnumDirection.NORTH, i); + if (structurepiece1 != null) { + structureboundingbox = structurepiece1.c(); + this.a.add(new StructureBoundingBox(structureboundingbox.a, structureboundingbox.b, this.l.c, structureboundingbox.d, structureboundingbox.e, this.l.c + 1)); + } + } + + for (k = 0; k < this.l.c(); k += 4) { + k += random.nextInt(this.l.c()); + if (k + 3 > this.l.c()) { + break; + } + + structurepiece1 = WorldGenMineshaftPieces.b(structurepiece, list, random, this.l.a + k, this.l.b + random.nextInt(j) + 1, this.l.f + 1, EnumDirection.SOUTH, i); + if (structurepiece1 != null) { + structureboundingbox = structurepiece1.c(); + this.a.add(new StructureBoundingBox(structureboundingbox.a, structureboundingbox.b, this.l.f - 1, structureboundingbox.d, structureboundingbox.e, this.l.f)); + } + } + + for (k = 0; k < this.l.e(); k += 4) { + k += random.nextInt(this.l.e()); + if (k + 3 > this.l.e()) { + break; + } + + structurepiece1 = WorldGenMineshaftPieces.b(structurepiece, list, random, this.l.a - 1, this.l.b + random.nextInt(j) + 1, this.l.c + k, EnumDirection.WEST, i); + if (structurepiece1 != null) { + structureboundingbox = structurepiece1.c(); + this.a.add(new StructureBoundingBox(this.l.a, structureboundingbox.b, structureboundingbox.c, this.l.a + 1, structureboundingbox.e, structureboundingbox.f)); + } + } + + for (k = 0; k < this.l.e(); k += 4) { + k += random.nextInt(this.l.e()); + if (k + 3 > this.l.e()) { + break; + } + + structurepiece1 = WorldGenMineshaftPieces.b(structurepiece, list, random, this.l.d + 1, this.l.b + random.nextInt(j) + 1, this.l.c + k, EnumDirection.EAST, i); + if (structurepiece1 != null) { + structureboundingbox = structurepiece1.c(); + this.a.add(new StructureBoundingBox(this.l.d - 1, structureboundingbox.b, structureboundingbox.c, this.l.d, structureboundingbox.e, structureboundingbox.f)); + } + } + + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + if (this.a(world, structureboundingbox)) { + return false; + } else { + this.a(world, structureboundingbox, this.l.a, this.l.b, this.l.c, this.l.d, this.l.b, this.l.f, Blocks.DIRT.getBlockData(), Blocks.AIR.getBlockData(), true); + this.a(world, structureboundingbox, this.l.a, this.l.b + 1, this.l.c, this.l.d, Math.min(this.l.b + 3, this.l.e), this.l.f, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + Iterator iterator = this.a.iterator(); + + while (iterator.hasNext()) { + StructureBoundingBox structureboundingbox1 = (StructureBoundingBox) iterator.next(); + + this.a(world, structureboundingbox, structureboundingbox1.a, structureboundingbox1.e - 2, structureboundingbox1.c, structureboundingbox1.d, structureboundingbox1.e, structureboundingbox1.f, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + } + + this.a(world, structureboundingbox, this.l.a, this.l.b + 4, this.l.c, this.l.d, this.l.e, this.l.f, Blocks.AIR.getBlockData(), false); + return true; + } + } + + public void a(int i, int j, int k) { + super.a(i, j, k); + Iterator iterator = this.a.iterator(); + + while (iterator.hasNext()) { + StructureBoundingBox structureboundingbox = (StructureBoundingBox) iterator.next(); + + structureboundingbox.a(i, j, k); + } + + } + + protected void a(NBTTagCompound nbttagcompound) { + NBTTagList nbttaglist = new NBTTagList(); + Iterator iterator = this.a.iterator(); + + while (iterator.hasNext()) { + StructureBoundingBox structureboundingbox = (StructureBoundingBox) iterator.next(); + + nbttaglist.add(structureboundingbox.g()); + } + + nbttagcompound.set("Entrances", nbttaglist); + } + + protected void b(NBTTagCompound nbttagcompound) { + NBTTagList nbttaglist = nbttagcompound.getList("Entrances", 11); + + for (int i = 0; i < nbttaglist.size(); ++i) { + this.a.add(new StructureBoundingBox(nbttaglist.c(i))); + } + + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenMineshaftStart.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenMineshaftStart.java new file mode 100644 index 0000000..795921c --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenMineshaftStart.java @@ -0,0 +1,19 @@ +package net.minecraft.server; + +import java.util.List; +import java.util.Random; + +public class WorldGenMineshaftStart extends StructureStart { + + public WorldGenMineshaftStart() {} + + public WorldGenMineshaftStart(World world, Random random, int i, int j) { + super(i, j); + WorldGenMineshaftPieces.WorldGenMineshaftRoom worldgenmineshaftpieces_worldgenmineshaftroom = new WorldGenMineshaftPieces.WorldGenMineshaftRoom(0, random, (i << 4) + 2, (j << 4) + 2); + + this.a.add(worldgenmineshaftpieces_worldgenmineshaftroom); + worldgenmineshaftpieces_worldgenmineshaftroom.a((StructurePiece) worldgenmineshaftpieces_worldgenmineshaftroom, (List) this.a, random); + this.c(); + this.a(world, random, 10); + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenMonument.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenMonument.java new file mode 100644 index 0000000..7f2738c --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenMonument.java @@ -0,0 +1,170 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.Set; +import java.util.Map.Entry; + +public class WorldGenMonument extends StructureGenerator { + + private int f; + private int g; + public static final List d = Arrays.asList(new BiomeBase[] { BiomeBase.OCEAN, BiomeBase.DEEP_OCEAN, BiomeBase.RIVER, BiomeBase.FROZEN_OCEAN, BiomeBase.FROZEN_RIVER}); + private static final List h = Lists.newArrayList(); + + public WorldGenMonument() { + this.f = 32; + this.g = 5; + } + + public WorldGenMonument(Map map) { + this(); + Iterator iterator = map.entrySet().iterator(); + + while (iterator.hasNext()) { + Entry entry = (Entry) iterator.next(); + + if (((String) entry.getKey()).equals("spacing")) { + this.f = MathHelper.a((String) entry.getValue(), this.f, 1); + } else if (((String) entry.getKey()).equals("separation")) { + this.g = MathHelper.a((String) entry.getValue(), this.g, 1); + } + } + + } + + public String a() { + return "Monument"; + } + + protected boolean a(int i, int j) { + int k = i; + int l = j; + + if (i < 0) { + i -= this.f - 1; + } + + if (j < 0) { + j -= this.f - 1; + } + + int i1 = i / this.f; + int j1 = j / this.f; + Random random = this.c.a(i1, j1, 10387313); + + i1 *= this.f; + j1 *= this.f; + i1 += (random.nextInt(this.f - this.g) + random.nextInt(this.f - this.g)) / 2; + j1 += (random.nextInt(this.f - this.g) + random.nextInt(this.f - this.g)) / 2; + if (k == i1 && l == j1) { + if (this.c.getWorldChunkManager().getBiome(new BlockPosition(k * 16 + 8, 64, l * 16 + 8), (BiomeBase) null) != BiomeBase.DEEP_OCEAN) { + return false; + } + + boolean flag = this.c.getWorldChunkManager().a(k * 16 + 8, l * 16 + 8, 29, WorldGenMonument.d); + + if (flag) { + return true; + } + } + + return false; + } + + protected StructureStart b(int i, int j) { + return new WorldGenMonument.WorldGenMonumentStart(this.c, this.b, i, j); + } + + public List b() { + return WorldGenMonument.h; + } + + static { + WorldGenMonument.h.add(new BiomeBase.BiomeMeta(EntityGuardian.class, 1, 2, 4)); + } + + public static class WorldGenMonumentStart extends StructureStart { + + private Set c = Sets.newHashSet(); + private boolean d; + + public WorldGenMonumentStart() {} + + public WorldGenMonumentStart(World world, Random random, int i, int j) { + super(i, j); + this.b(world, random, i, j); + } + + private void b(World world, Random random, int i, int j) { + random.setSeed(world.getSeed()); + long k = random.nextLong(); + long l = random.nextLong(); + long i1 = (long) i * k; + long j1 = (long) j * l; + + random.setSeed(i1 ^ j1 ^ world.getSeed()); + int k1 = i * 16 + 8 - 29; + int l1 = j * 16 + 8 - 29; + EnumDirection enumdirection = EnumDirection.EnumDirectionLimit.HORIZONTAL.a(random); + + this.a.add(new WorldGenMonumentPieces.WorldGenMonumentPiece1(random, k1, l1, enumdirection)); + this.c(); + this.d = true; + } + + public void a(World world, Random random, StructureBoundingBox structureboundingbox) { + if (!this.d) { + this.a.clear(); + this.b(world, random, this.e(), this.f()); + } + + super.a(world, random, structureboundingbox); + } + + public boolean a(ChunkCoordIntPair chunkcoordintpair) { + return this.c.contains(chunkcoordintpair) ? false : super.a(chunkcoordintpair); + } + + public void b(ChunkCoordIntPair chunkcoordintpair) { + super.b(chunkcoordintpair); + this.c.add(chunkcoordintpair); + } + + public void a(NBTTagCompound nbttagcompound) { + super.a(nbttagcompound); + NBTTagList nbttaglist = new NBTTagList(); + Iterator iterator = this.c.iterator(); + + while (iterator.hasNext()) { + ChunkCoordIntPair chunkcoordintpair = (ChunkCoordIntPair) iterator.next(); + NBTTagCompound nbttagcompound1 = new NBTTagCompound(); + + nbttagcompound1.setInt("X", chunkcoordintpair.x); + nbttagcompound1.setInt("Z", chunkcoordintpair.z); + nbttaglist.add(nbttagcompound1); + } + + nbttagcompound.set("Processed", nbttaglist); + } + + public void b(NBTTagCompound nbttagcompound) { + super.b(nbttagcompound); + if (nbttagcompound.hasKeyOfType("Processed", 9)) { + NBTTagList nbttaglist = nbttagcompound.getList("Processed", 10); + + for (int i = 0; i < nbttaglist.size(); ++i) { + NBTTagCompound nbttagcompound1 = nbttaglist.get(i); + + this.c.add(new ChunkCoordIntPair(nbttagcompound1.getInt("X"), nbttagcompound1.getInt("Z"))); + } + } + + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenMonumentPieces.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenMonumentPieces.java new file mode 100644 index 0000000..c3eb386 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenMonumentPieces.java @@ -0,0 +1,1993 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.Random; + +public class WorldGenMonumentPieces { + + public static void a() { + WorldGenFactory.a(WorldGenMonumentPieces.WorldGenMonumentPiece1.class, "OMB"); + WorldGenFactory.a(WorldGenMonumentPieces.WorldGenMonumentPiece2.class, "OMCR"); + WorldGenFactory.a(WorldGenMonumentPieces.WorldGenMonumentPiece3.class, "OMDXR"); + WorldGenFactory.a(WorldGenMonumentPieces.WorldGenMonumentPiece4.class, "OMDXYR"); + WorldGenFactory.a(WorldGenMonumentPieces.WorldGenMonumentPiece5.class, "OMDYR"); + WorldGenFactory.a(WorldGenMonumentPieces.WorldGenMonumentPiece6.class, "OMDYZR"); + WorldGenFactory.a(WorldGenMonumentPieces.WorldGenMonumentPiece7.class, "OMDZR"); + WorldGenFactory.a(WorldGenMonumentPieces.WorldGenMonumentPieceEntry.class, "OMEntry"); + WorldGenFactory.a(WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.class, "OMPenthouse"); + WorldGenFactory.a(WorldGenMonumentPieces.WorldGenMonumentPieceSimple.class, "OMSimple"); + WorldGenFactory.a(WorldGenMonumentPieces.WorldGenMonumentPieceSimpleT.class, "OMSimpleT"); + } + + static class SyntheticClass_1 { + + static final int[] a = new int[EnumDirection.values().length]; + + static { + try { + WorldGenMonumentPieces.SyntheticClass_1.a[EnumDirection.NORTH.ordinal()] = 1; + } catch (NoSuchFieldError nosuchfielderror) { + ; + } + + try { + WorldGenMonumentPieces.SyntheticClass_1.a[EnumDirection.SOUTH.ordinal()] = 2; + } catch (NoSuchFieldError nosuchfielderror1) { + ; + } + + try { + WorldGenMonumentPieces.SyntheticClass_1.a[EnumDirection.WEST.ordinal()] = 3; + } catch (NoSuchFieldError nosuchfielderror2) { + ; + } + + } + } + + static class WorldGenMonumentPieceSelector4 implements WorldGenMonumentPieces.IWorldGenMonumentPieceSelector { + + private WorldGenMonumentPieceSelector4() {} + + public boolean a(WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker) { + if (worldgenmonumentpieces_worldgenmonumentstatetracker.c[EnumDirection.NORTH.a()] && !worldgenmonumentpieces_worldgenmonumentstatetracker.b[EnumDirection.NORTH.a()].d && worldgenmonumentpieces_worldgenmonumentstatetracker.c[EnumDirection.UP.a()] && !worldgenmonumentpieces_worldgenmonumentstatetracker.b[EnumDirection.UP.a()].d) { + WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker1 = worldgenmonumentpieces_worldgenmonumentstatetracker.b[EnumDirection.NORTH.a()]; + + return worldgenmonumentpieces_worldgenmonumentstatetracker1.c[EnumDirection.UP.a()] && !worldgenmonumentpieces_worldgenmonumentstatetracker1.b[EnumDirection.UP.a()].d; + } else { + return false; + } + } + + public WorldGenMonumentPieces.WorldGenMonumentPiece a(EnumDirection enumdirection, WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker, Random random) { + worldgenmonumentpieces_worldgenmonumentstatetracker.d = true; + worldgenmonumentpieces_worldgenmonumentstatetracker.b[EnumDirection.NORTH.a()].d = true; + worldgenmonumentpieces_worldgenmonumentstatetracker.b[EnumDirection.UP.a()].d = true; + worldgenmonumentpieces_worldgenmonumentstatetracker.b[EnumDirection.NORTH.a()].b[EnumDirection.UP.a()].d = true; + return new WorldGenMonumentPieces.WorldGenMonumentPiece6(enumdirection, worldgenmonumentpieces_worldgenmonumentstatetracker, random); + } + + WorldGenMonumentPieceSelector4(WorldGenMonumentPieces.SyntheticClass_1 worldgenmonumentpieces_syntheticclass_1) { + this(); + } + } + + static class WorldGenMonumentPieceSelector6 implements WorldGenMonumentPieces.IWorldGenMonumentPieceSelector { + + private WorldGenMonumentPieceSelector6() {} + + public boolean a(WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker) { + if (worldgenmonumentpieces_worldgenmonumentstatetracker.c[EnumDirection.EAST.a()] && !worldgenmonumentpieces_worldgenmonumentstatetracker.b[EnumDirection.EAST.a()].d && worldgenmonumentpieces_worldgenmonumentstatetracker.c[EnumDirection.UP.a()] && !worldgenmonumentpieces_worldgenmonumentstatetracker.b[EnumDirection.UP.a()].d) { + WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker1 = worldgenmonumentpieces_worldgenmonumentstatetracker.b[EnumDirection.EAST.a()]; + + return worldgenmonumentpieces_worldgenmonumentstatetracker1.c[EnumDirection.UP.a()] && !worldgenmonumentpieces_worldgenmonumentstatetracker1.b[EnumDirection.UP.a()].d; + } else { + return false; + } + } + + public WorldGenMonumentPieces.WorldGenMonumentPiece a(EnumDirection enumdirection, WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker, Random random) { + worldgenmonumentpieces_worldgenmonumentstatetracker.d = true; + worldgenmonumentpieces_worldgenmonumentstatetracker.b[EnumDirection.EAST.a()].d = true; + worldgenmonumentpieces_worldgenmonumentstatetracker.b[EnumDirection.UP.a()].d = true; + worldgenmonumentpieces_worldgenmonumentstatetracker.b[EnumDirection.EAST.a()].b[EnumDirection.UP.a()].d = true; + return new WorldGenMonumentPieces.WorldGenMonumentPiece4(enumdirection, worldgenmonumentpieces_worldgenmonumentstatetracker, random); + } + + WorldGenMonumentPieceSelector6(WorldGenMonumentPieces.SyntheticClass_1 worldgenmonumentpieces_syntheticclass_1) { + this(); + } + } + + static class WorldGenMonumentPieceSelector3 implements WorldGenMonumentPieces.IWorldGenMonumentPieceSelector { + + private WorldGenMonumentPieceSelector3() {} + + public boolean a(WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker) { + return worldgenmonumentpieces_worldgenmonumentstatetracker.c[EnumDirection.NORTH.a()] && !worldgenmonumentpieces_worldgenmonumentstatetracker.b[EnumDirection.NORTH.a()].d; + } + + public WorldGenMonumentPieces.WorldGenMonumentPiece a(EnumDirection enumdirection, WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker, Random random) { + WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker1 = worldgenmonumentpieces_worldgenmonumentstatetracker; + + if (!worldgenmonumentpieces_worldgenmonumentstatetracker.c[EnumDirection.NORTH.a()] || worldgenmonumentpieces_worldgenmonumentstatetracker.b[EnumDirection.NORTH.a()].d) { + worldgenmonumentpieces_worldgenmonumentstatetracker1 = worldgenmonumentpieces_worldgenmonumentstatetracker.b[EnumDirection.SOUTH.a()]; + } + + worldgenmonumentpieces_worldgenmonumentstatetracker1.d = true; + worldgenmonumentpieces_worldgenmonumentstatetracker1.b[EnumDirection.NORTH.a()].d = true; + return new WorldGenMonumentPieces.WorldGenMonumentPiece7(enumdirection, worldgenmonumentpieces_worldgenmonumentstatetracker1, random); + } + + WorldGenMonumentPieceSelector3(WorldGenMonumentPieces.SyntheticClass_1 worldgenmonumentpieces_syntheticclass_1) { + this(); + } + } + + static class WorldGenMonumentPieceSelector7 implements WorldGenMonumentPieces.IWorldGenMonumentPieceSelector { + + private WorldGenMonumentPieceSelector7() {} + + public boolean a(WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker) { + return worldgenmonumentpieces_worldgenmonumentstatetracker.c[EnumDirection.EAST.a()] && !worldgenmonumentpieces_worldgenmonumentstatetracker.b[EnumDirection.EAST.a()].d; + } + + public WorldGenMonumentPieces.WorldGenMonumentPiece a(EnumDirection enumdirection, WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker, Random random) { + worldgenmonumentpieces_worldgenmonumentstatetracker.d = true; + worldgenmonumentpieces_worldgenmonumentstatetracker.b[EnumDirection.EAST.a()].d = true; + return new WorldGenMonumentPieces.WorldGenMonumentPiece3(enumdirection, worldgenmonumentpieces_worldgenmonumentstatetracker, random); + } + + WorldGenMonumentPieceSelector7(WorldGenMonumentPieces.SyntheticClass_1 worldgenmonumentpieces_syntheticclass_1) { + this(); + } + } + + static class WorldGenMonumentPieceSelector5 implements WorldGenMonumentPieces.IWorldGenMonumentPieceSelector { + + private WorldGenMonumentPieceSelector5() {} + + public boolean a(WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker) { + return worldgenmonumentpieces_worldgenmonumentstatetracker.c[EnumDirection.UP.a()] && !worldgenmonumentpieces_worldgenmonumentstatetracker.b[EnumDirection.UP.a()].d; + } + + public WorldGenMonumentPieces.WorldGenMonumentPiece a(EnumDirection enumdirection, WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker, Random random) { + worldgenmonumentpieces_worldgenmonumentstatetracker.d = true; + worldgenmonumentpieces_worldgenmonumentstatetracker.b[EnumDirection.UP.a()].d = true; + return new WorldGenMonumentPieces.WorldGenMonumentPiece5(enumdirection, worldgenmonumentpieces_worldgenmonumentstatetracker, random); + } + + WorldGenMonumentPieceSelector5(WorldGenMonumentPieces.SyntheticClass_1 worldgenmonumentpieces_syntheticclass_1) { + this(); + } + } + + static class WorldGenMonumentPieceSelector1 implements WorldGenMonumentPieces.IWorldGenMonumentPieceSelector { + + private WorldGenMonumentPieceSelector1() {} + + public boolean a(WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker) { + return !worldgenmonumentpieces_worldgenmonumentstatetracker.c[EnumDirection.WEST.a()] && !worldgenmonumentpieces_worldgenmonumentstatetracker.c[EnumDirection.EAST.a()] && !worldgenmonumentpieces_worldgenmonumentstatetracker.c[EnumDirection.NORTH.a()] && !worldgenmonumentpieces_worldgenmonumentstatetracker.c[EnumDirection.SOUTH.a()] && !worldgenmonumentpieces_worldgenmonumentstatetracker.c[EnumDirection.UP.a()]; + } + + public WorldGenMonumentPieces.WorldGenMonumentPiece a(EnumDirection enumdirection, WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker, Random random) { + worldgenmonumentpieces_worldgenmonumentstatetracker.d = true; + return new WorldGenMonumentPieces.WorldGenMonumentPieceSimpleT(enumdirection, worldgenmonumentpieces_worldgenmonumentstatetracker, random); + } + + WorldGenMonumentPieceSelector1(WorldGenMonumentPieces.SyntheticClass_1 worldgenmonumentpieces_syntheticclass_1) { + this(); + } + } + + static class WorldGenMonumentPieceSelector2 implements WorldGenMonumentPieces.IWorldGenMonumentPieceSelector { + + private WorldGenMonumentPieceSelector2() {} + + public boolean a(WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker) { + return true; + } + + public WorldGenMonumentPieces.WorldGenMonumentPiece a(EnumDirection enumdirection, WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker, Random random) { + worldgenmonumentpieces_worldgenmonumentstatetracker.d = true; + return new WorldGenMonumentPieces.WorldGenMonumentPieceSimple(enumdirection, worldgenmonumentpieces_worldgenmonumentstatetracker, random); + } + + WorldGenMonumentPieceSelector2(WorldGenMonumentPieces.SyntheticClass_1 worldgenmonumentpieces_syntheticclass_1) { + this(); + } + } + + interface IWorldGenMonumentPieceSelector { + + boolean a(WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker); + + WorldGenMonumentPieces.WorldGenMonumentPiece a(EnumDirection enumdirection, WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker, Random random); + } + + static class WorldGenMonumentStateTracker { + + int a; + WorldGenMonumentPieces.WorldGenMonumentStateTracker[] b = new WorldGenMonumentPieces.WorldGenMonumentStateTracker[6]; + boolean[] c = new boolean[6]; + boolean d; + boolean e; + int f; + + public WorldGenMonumentStateTracker(int i) { + this.a = i; + } + + public void a(EnumDirection enumdirection, WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker) { + this.b[enumdirection.a()] = worldgenmonumentpieces_worldgenmonumentstatetracker; + worldgenmonumentpieces_worldgenmonumentstatetracker.b[enumdirection.opposite().a()] = this; + } + + public void a() { + for (int i = 0; i < 6; ++i) { + this.c[i] = this.b[i] != null; + } + + } + + public boolean a(int i) { + if (this.e) { + return true; + } else { + this.f = i; + + for (int j = 0; j < 6; ++j) { + if (this.b[j] != null && this.c[j] && this.b[j].f != i && this.b[j].a(i)) { + return true; + } + } + + return false; + } + } + + public boolean b() { + return this.a >= 75; + } + + public int c() { + int i = 0; + + for (int j = 0; j < 6; ++j) { + if (this.c[j]) { + ++i; + } + } + + return i; + } + } + + public static class WorldGenMonumentPiecePenthouse extends WorldGenMonumentPieces.WorldGenMonumentPiece { + + public WorldGenMonumentPiecePenthouse() {} + + public WorldGenMonumentPiecePenthouse(EnumDirection enumdirection, StructureBoundingBox structureboundingbox) { + super(enumdirection, structureboundingbox); + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + this.a(world, structureboundingbox, 2, -1, 2, 11, -1, 11, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.b, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.b, false); + this.a(world, structureboundingbox, 0, -1, 0, 1, -1, 11, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.a, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.a, false); + this.a(world, structureboundingbox, 12, -1, 0, 13, -1, 11, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.a, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.a, false); + this.a(world, structureboundingbox, 2, -1, 0, 11, -1, 1, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.a, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.a, false); + this.a(world, structureboundingbox, 2, -1, 12, 11, -1, 13, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.a, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.a, false); + this.a(world, structureboundingbox, 0, 0, 0, 0, 0, 13, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.b, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.b, false); + this.a(world, structureboundingbox, 13, 0, 0, 13, 0, 13, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.b, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.b, false); + this.a(world, structureboundingbox, 1, 0, 0, 12, 0, 0, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.b, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.b, false); + this.a(world, structureboundingbox, 1, 0, 13, 12, 0, 13, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.b, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.b, false); + + for (int i = 2; i <= 11; i += 3) { + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.e, 0, 0, i, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.e, 13, 0, i, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.e, i, 0, 0, structureboundingbox); + } + + this.a(world, structureboundingbox, 2, 0, 3, 4, 0, 9, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.b, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.b, false); + this.a(world, structureboundingbox, 9, 0, 3, 11, 0, 9, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.b, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.b, false); + this.a(world, structureboundingbox, 4, 0, 9, 9, 0, 11, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.b, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.b, false); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.b, 5, 0, 8, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.b, 8, 0, 8, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.b, 10, 0, 10, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.b, 3, 0, 10, structureboundingbox); + this.a(world, structureboundingbox, 3, 0, 3, 3, 0, 7, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.c, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.c, false); + this.a(world, structureboundingbox, 10, 0, 3, 10, 0, 7, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.c, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.c, false); + this.a(world, structureboundingbox, 6, 0, 10, 7, 0, 10, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.c, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.c, false); + byte b0 = 3; + + for (int j = 0; j < 2; ++j) { + for (int k = 2; k <= 8; k += 3) { + this.a(world, structureboundingbox, b0, 0, k, b0, 2, k, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.b, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.b, false); + } + + b0 = 10; + } + + this.a(world, structureboundingbox, 5, 0, 10, 5, 2, 10, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.b, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.b, false); + this.a(world, structureboundingbox, 8, 0, 10, 8, 2, 10, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.b, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.b, false); + this.a(world, structureboundingbox, 6, -1, 7, 7, -1, 8, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.c, WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse.c, false); + this.a(world, structureboundingbox, 6, -1, 3, 7, -1, 4, false); + this.a(world, structureboundingbox, 6, 1, 6); + return true; + } + } + + public static class WorldGenMonumentPiece8 extends WorldGenMonumentPieces.WorldGenMonumentPiece { + + private int o; + + public WorldGenMonumentPiece8() {} + + public WorldGenMonumentPiece8(EnumDirection enumdirection, StructureBoundingBox structureboundingbox, int i) { + super(enumdirection, structureboundingbox); + this.o = i & 1; + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + if (this.o == 0) { + int i; + + for (i = 0; i < 4; ++i) { + this.a(world, structureboundingbox, 10 - i, 3 - i, 20 - i, 12 + i, 3 - i, 20, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, false); + } + + this.a(world, structureboundingbox, 7, 0, 6, 15, 0, 16, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, false); + this.a(world, structureboundingbox, 6, 0, 6, 6, 3, 20, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, false); + this.a(world, structureboundingbox, 16, 0, 6, 16, 3, 20, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, false); + this.a(world, structureboundingbox, 7, 1, 7, 7, 1, 20, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, false); + this.a(world, structureboundingbox, 15, 1, 7, 15, 1, 20, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, false); + this.a(world, structureboundingbox, 7, 1, 6, 9, 3, 6, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, false); + this.a(world, structureboundingbox, 13, 1, 6, 15, 3, 6, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, false); + this.a(world, structureboundingbox, 8, 1, 7, 9, 1, 7, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, false); + this.a(world, structureboundingbox, 13, 1, 7, 14, 1, 7, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, false); + this.a(world, structureboundingbox, 9, 0, 5, 13, 0, 5, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, false); + this.a(world, structureboundingbox, 10, 0, 7, 12, 0, 7, WorldGenMonumentPieces.WorldGenMonumentPiece8.c, WorldGenMonumentPieces.WorldGenMonumentPiece8.c, false); + this.a(world, structureboundingbox, 8, 0, 10, 8, 0, 12, WorldGenMonumentPieces.WorldGenMonumentPiece8.c, WorldGenMonumentPieces.WorldGenMonumentPiece8.c, false); + this.a(world, structureboundingbox, 14, 0, 10, 14, 0, 12, WorldGenMonumentPieces.WorldGenMonumentPiece8.c, WorldGenMonumentPieces.WorldGenMonumentPiece8.c, false); + + for (i = 18; i >= 7; i -= 3) { + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece8.e, 6, 3, i, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece8.e, 16, 3, i, structureboundingbox); + } + + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece8.e, 10, 0, 10, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece8.e, 12, 0, 10, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece8.e, 10, 0, 12, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece8.e, 12, 0, 12, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece8.e, 8, 3, 6, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece8.e, 14, 3, 6, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, 4, 2, 4, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece8.e, 4, 1, 4, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, 4, 0, 4, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, 18, 2, 4, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece8.e, 18, 1, 4, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, 18, 0, 4, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, 4, 2, 18, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece8.e, 4, 1, 18, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, 4, 0, 18, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, 18, 2, 18, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece8.e, 18, 1, 18, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, 18, 0, 18, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, 9, 7, 20, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, 13, 7, 20, structureboundingbox); + this.a(world, structureboundingbox, 6, 0, 21, 7, 4, 21, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, false); + this.a(world, structureboundingbox, 15, 0, 21, 16, 4, 21, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, false); + this.a(world, structureboundingbox, 11, 2, 16); + } else if (this.o == 1) { + this.a(world, structureboundingbox, 9, 3, 18, 13, 3, 20, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, false); + this.a(world, structureboundingbox, 9, 0, 18, 9, 2, 18, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, false); + this.a(world, structureboundingbox, 13, 0, 18, 13, 2, 18, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, false); + byte b0 = 9; + byte b1 = 20; + byte b2 = 5; + + int j; + + for (j = 0; j < 2; ++j) { + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, b0, b2 + 1, b1, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece8.e, b0, b2, b1, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, b0, b2 - 1, b1, structureboundingbox); + b0 = 13; + } + + this.a(world, structureboundingbox, 7, 3, 7, 15, 3, 14, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, false); + b0 = 10; + + for (j = 0; j < 2; ++j) { + this.a(world, structureboundingbox, b0, 0, 10, b0, 6, 10, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, false); + this.a(world, structureboundingbox, b0, 0, 12, b0, 6, 12, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, false); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece8.e, b0, 0, 10, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece8.e, b0, 0, 12, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece8.e, b0, 4, 10, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece8.e, b0, 4, 12, structureboundingbox); + b0 = 12; + } + + b0 = 8; + + for (j = 0; j < 2; ++j) { + this.a(world, structureboundingbox, b0, 0, 7, b0, 2, 7, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, false); + this.a(world, structureboundingbox, b0, 0, 14, b0, 2, 14, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, WorldGenMonumentPieces.WorldGenMonumentPiece8.b, false); + b0 = 14; + } + + this.a(world, structureboundingbox, 8, 3, 8, 8, 3, 13, WorldGenMonumentPieces.WorldGenMonumentPiece8.c, WorldGenMonumentPieces.WorldGenMonumentPiece8.c, false); + this.a(world, structureboundingbox, 14, 3, 8, 14, 3, 13, WorldGenMonumentPieces.WorldGenMonumentPiece8.c, WorldGenMonumentPieces.WorldGenMonumentPiece8.c, false); + this.a(world, structureboundingbox, 11, 5, 13); + } + + return true; + } + } + + public static class WorldGenMonumentPiece2 extends WorldGenMonumentPieces.WorldGenMonumentPiece { + + public WorldGenMonumentPiece2() {} + + public WorldGenMonumentPiece2(EnumDirection enumdirection, WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker, Random random) { + super(1, enumdirection, worldgenmonumentpieces_worldgenmonumentstatetracker, 2, 2, 2); + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + this.a(world, structureboundingbox, 1, 8, 0, 14, 8, 14, WorldGenMonumentPieces.WorldGenMonumentPiece2.a); + byte b0 = 7; + IBlockData iblockdata = WorldGenMonumentPieces.WorldGenMonumentPiece2.b; + + this.a(world, structureboundingbox, 0, b0, 0, 0, b0, 15, iblockdata, iblockdata, false); + this.a(world, structureboundingbox, 15, b0, 0, 15, b0, 15, iblockdata, iblockdata, false); + this.a(world, structureboundingbox, 1, b0, 0, 15, b0, 0, iblockdata, iblockdata, false); + this.a(world, structureboundingbox, 1, b0, 15, 14, b0, 15, iblockdata, iblockdata, false); + + int i; + + for (i = 1; i <= 6; ++i) { + iblockdata = WorldGenMonumentPieces.WorldGenMonumentPiece2.b; + if (i == 2 || i == 6) { + iblockdata = WorldGenMonumentPieces.WorldGenMonumentPiece2.a; + } + + for (int j = 0; j <= 15; j += 15) { + this.a(world, structureboundingbox, j, i, 0, j, i, 1, iblockdata, iblockdata, false); + this.a(world, structureboundingbox, j, i, 6, j, i, 9, iblockdata, iblockdata, false); + this.a(world, structureboundingbox, j, i, 14, j, i, 15, iblockdata, iblockdata, false); + } + + this.a(world, structureboundingbox, 1, i, 0, 1, i, 0, iblockdata, iblockdata, false); + this.a(world, structureboundingbox, 6, i, 0, 9, i, 0, iblockdata, iblockdata, false); + this.a(world, structureboundingbox, 14, i, 0, 14, i, 0, iblockdata, iblockdata, false); + this.a(world, structureboundingbox, 1, i, 15, 14, i, 15, iblockdata, iblockdata, false); + } + + this.a(world, structureboundingbox, 6, 3, 6, 9, 6, 9, WorldGenMonumentPieces.WorldGenMonumentPiece2.c, WorldGenMonumentPieces.WorldGenMonumentPiece2.c, false); + this.a(world, structureboundingbox, 7, 4, 7, 8, 5, 8, Blocks.GOLD_BLOCK.getBlockData(), Blocks.GOLD_BLOCK.getBlockData(), false); + + for (i = 3; i <= 6; i += 3) { + for (int k = 6; k <= 9; k += 3) { + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece2.e, k, i, 6, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece2.e, k, i, 9, structureboundingbox); + } + } + + this.a(world, structureboundingbox, 5, 1, 6, 5, 2, 6, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, false); + this.a(world, structureboundingbox, 5, 1, 9, 5, 2, 9, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, false); + this.a(world, structureboundingbox, 10, 1, 6, 10, 2, 6, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, false); + this.a(world, structureboundingbox, 10, 1, 9, 10, 2, 9, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, false); + this.a(world, structureboundingbox, 6, 1, 5, 6, 2, 5, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, false); + this.a(world, structureboundingbox, 9, 1, 5, 9, 2, 5, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, false); + this.a(world, structureboundingbox, 6, 1, 10, 6, 2, 10, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, false); + this.a(world, structureboundingbox, 9, 1, 10, 9, 2, 10, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, false); + this.a(world, structureboundingbox, 5, 2, 5, 5, 6, 5, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, false); + this.a(world, structureboundingbox, 5, 2, 10, 5, 6, 10, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, false); + this.a(world, structureboundingbox, 10, 2, 5, 10, 6, 5, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, false); + this.a(world, structureboundingbox, 10, 2, 10, 10, 6, 10, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, false); + this.a(world, structureboundingbox, 5, 7, 1, 5, 7, 6, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, false); + this.a(world, structureboundingbox, 10, 7, 1, 10, 7, 6, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, false); + this.a(world, structureboundingbox, 5, 7, 9, 5, 7, 14, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, false); + this.a(world, structureboundingbox, 10, 7, 9, 10, 7, 14, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, false); + this.a(world, structureboundingbox, 1, 7, 5, 6, 7, 5, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, false); + this.a(world, structureboundingbox, 1, 7, 10, 6, 7, 10, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, false); + this.a(world, structureboundingbox, 9, 7, 5, 14, 7, 5, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, false); + this.a(world, structureboundingbox, 9, 7, 10, 14, 7, 10, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, false); + this.a(world, structureboundingbox, 2, 1, 2, 2, 1, 3, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, false); + this.a(world, structureboundingbox, 3, 1, 2, 3, 1, 2, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, false); + this.a(world, structureboundingbox, 13, 1, 2, 13, 1, 3, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, false); + this.a(world, structureboundingbox, 12, 1, 2, 12, 1, 2, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, false); + this.a(world, structureboundingbox, 2, 1, 12, 2, 1, 13, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, false); + this.a(world, structureboundingbox, 3, 1, 13, 3, 1, 13, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, false); + this.a(world, structureboundingbox, 13, 1, 12, 13, 1, 13, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, false); + this.a(world, structureboundingbox, 12, 1, 13, 12, 1, 13, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, WorldGenMonumentPieces.WorldGenMonumentPiece2.b, false); + return true; + } + } + + public static class WorldGenMonumentPiece6 extends WorldGenMonumentPieces.WorldGenMonumentPiece { + + public WorldGenMonumentPiece6() {} + + public WorldGenMonumentPiece6(EnumDirection enumdirection, WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker, Random random) { + super(1, enumdirection, worldgenmonumentpieces_worldgenmonumentstatetracker, 1, 2, 2); + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker = this.k.b[EnumDirection.NORTH.a()]; + WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker1 = this.k; + WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker2 = worldgenmonumentpieces_worldgenmonumentstatetracker.b[EnumDirection.UP.a()]; + WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker3 = worldgenmonumentpieces_worldgenmonumentstatetracker1.b[EnumDirection.UP.a()]; + + if (this.k.a / 25 > 0) { + this.a(world, structureboundingbox, 0, 8, worldgenmonumentpieces_worldgenmonumentstatetracker.c[EnumDirection.DOWN.a()]); + this.a(world, structureboundingbox, 0, 0, worldgenmonumentpieces_worldgenmonumentstatetracker1.c[EnumDirection.DOWN.a()]); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker3.b[EnumDirection.UP.a()] == null) { + this.a(world, structureboundingbox, 1, 8, 1, 6, 8, 7, WorldGenMonumentPieces.WorldGenMonumentPiece6.a); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker2.b[EnumDirection.UP.a()] == null) { + this.a(world, structureboundingbox, 1, 8, 8, 6, 8, 14, WorldGenMonumentPieces.WorldGenMonumentPiece6.a); + } + + int i; + IBlockData iblockdata; + + for (i = 1; i <= 7; ++i) { + iblockdata = WorldGenMonumentPieces.WorldGenMonumentPiece6.b; + if (i == 2 || i == 6) { + iblockdata = WorldGenMonumentPieces.WorldGenMonumentPiece6.a; + } + + this.a(world, structureboundingbox, 0, i, 0, 0, i, 15, iblockdata, iblockdata, false); + this.a(world, structureboundingbox, 7, i, 0, 7, i, 15, iblockdata, iblockdata, false); + this.a(world, structureboundingbox, 1, i, 0, 6, i, 0, iblockdata, iblockdata, false); + this.a(world, structureboundingbox, 1, i, 15, 6, i, 15, iblockdata, iblockdata, false); + } + + for (i = 1; i <= 7; ++i) { + iblockdata = WorldGenMonumentPieces.WorldGenMonumentPiece6.c; + if (i == 2 || i == 6) { + iblockdata = WorldGenMonumentPieces.WorldGenMonumentPiece6.e; + } + + this.a(world, structureboundingbox, 3, i, 7, 4, i, 8, iblockdata, iblockdata, false); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker1.c[EnumDirection.SOUTH.a()]) { + this.a(world, structureboundingbox, 3, 1, 0, 4, 2, 0, false); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker1.c[EnumDirection.EAST.a()]) { + this.a(world, structureboundingbox, 7, 1, 3, 7, 2, 4, false); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker1.c[EnumDirection.WEST.a()]) { + this.a(world, structureboundingbox, 0, 1, 3, 0, 2, 4, false); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker.c[EnumDirection.NORTH.a()]) { + this.a(world, structureboundingbox, 3, 1, 15, 4, 2, 15, false); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker.c[EnumDirection.WEST.a()]) { + this.a(world, structureboundingbox, 0, 1, 11, 0, 2, 12, false); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker.c[EnumDirection.EAST.a()]) { + this.a(world, structureboundingbox, 7, 1, 11, 7, 2, 12, false); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker3.c[EnumDirection.SOUTH.a()]) { + this.a(world, structureboundingbox, 3, 5, 0, 4, 6, 0, false); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker3.c[EnumDirection.EAST.a()]) { + this.a(world, structureboundingbox, 7, 5, 3, 7, 6, 4, false); + this.a(world, structureboundingbox, 5, 4, 2, 6, 4, 5, WorldGenMonumentPieces.WorldGenMonumentPiece6.b, WorldGenMonumentPieces.WorldGenMonumentPiece6.b, false); + this.a(world, structureboundingbox, 6, 1, 2, 6, 3, 2, WorldGenMonumentPieces.WorldGenMonumentPiece6.b, WorldGenMonumentPieces.WorldGenMonumentPiece6.b, false); + this.a(world, structureboundingbox, 6, 1, 5, 6, 3, 5, WorldGenMonumentPieces.WorldGenMonumentPiece6.b, WorldGenMonumentPieces.WorldGenMonumentPiece6.b, false); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker3.c[EnumDirection.WEST.a()]) { + this.a(world, structureboundingbox, 0, 5, 3, 0, 6, 4, false); + this.a(world, structureboundingbox, 1, 4, 2, 2, 4, 5, WorldGenMonumentPieces.WorldGenMonumentPiece6.b, WorldGenMonumentPieces.WorldGenMonumentPiece6.b, false); + this.a(world, structureboundingbox, 1, 1, 2, 1, 3, 2, WorldGenMonumentPieces.WorldGenMonumentPiece6.b, WorldGenMonumentPieces.WorldGenMonumentPiece6.b, false); + this.a(world, structureboundingbox, 1, 1, 5, 1, 3, 5, WorldGenMonumentPieces.WorldGenMonumentPiece6.b, WorldGenMonumentPieces.WorldGenMonumentPiece6.b, false); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker2.c[EnumDirection.NORTH.a()]) { + this.a(world, structureboundingbox, 3, 5, 15, 4, 6, 15, false); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker2.c[EnumDirection.WEST.a()]) { + this.a(world, structureboundingbox, 0, 5, 11, 0, 6, 12, false); + this.a(world, structureboundingbox, 1, 4, 10, 2, 4, 13, WorldGenMonumentPieces.WorldGenMonumentPiece6.b, WorldGenMonumentPieces.WorldGenMonumentPiece6.b, false); + this.a(world, structureboundingbox, 1, 1, 10, 1, 3, 10, WorldGenMonumentPieces.WorldGenMonumentPiece6.b, WorldGenMonumentPieces.WorldGenMonumentPiece6.b, false); + this.a(world, structureboundingbox, 1, 1, 13, 1, 3, 13, WorldGenMonumentPieces.WorldGenMonumentPiece6.b, WorldGenMonumentPieces.WorldGenMonumentPiece6.b, false); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker2.c[EnumDirection.EAST.a()]) { + this.a(world, structureboundingbox, 7, 5, 11, 7, 6, 12, false); + this.a(world, structureboundingbox, 5, 4, 10, 6, 4, 13, WorldGenMonumentPieces.WorldGenMonumentPiece6.b, WorldGenMonumentPieces.WorldGenMonumentPiece6.b, false); + this.a(world, structureboundingbox, 6, 1, 10, 6, 3, 10, WorldGenMonumentPieces.WorldGenMonumentPiece6.b, WorldGenMonumentPieces.WorldGenMonumentPiece6.b, false); + this.a(world, structureboundingbox, 6, 1, 13, 6, 3, 13, WorldGenMonumentPieces.WorldGenMonumentPiece6.b, WorldGenMonumentPieces.WorldGenMonumentPiece6.b, false); + } + + return true; + } + } + + public static class WorldGenMonumentPiece4 extends WorldGenMonumentPieces.WorldGenMonumentPiece { + + public WorldGenMonumentPiece4() {} + + public WorldGenMonumentPiece4(EnumDirection enumdirection, WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker, Random random) { + super(1, enumdirection, worldgenmonumentpieces_worldgenmonumentstatetracker, 2, 2, 1); + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker = this.k.b[EnumDirection.EAST.a()]; + WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker1 = this.k; + WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker2 = worldgenmonumentpieces_worldgenmonumentstatetracker1.b[EnumDirection.UP.a()]; + WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker3 = worldgenmonumentpieces_worldgenmonumentstatetracker.b[EnumDirection.UP.a()]; + + if (this.k.a / 25 > 0) { + this.a(world, structureboundingbox, 8, 0, worldgenmonumentpieces_worldgenmonumentstatetracker.c[EnumDirection.DOWN.a()]); + this.a(world, structureboundingbox, 0, 0, worldgenmonumentpieces_worldgenmonumentstatetracker1.c[EnumDirection.DOWN.a()]); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker2.b[EnumDirection.UP.a()] == null) { + this.a(world, structureboundingbox, 1, 8, 1, 7, 8, 6, WorldGenMonumentPieces.WorldGenMonumentPiece4.a); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker3.b[EnumDirection.UP.a()] == null) { + this.a(world, structureboundingbox, 8, 8, 1, 14, 8, 6, WorldGenMonumentPieces.WorldGenMonumentPiece4.a); + } + + for (int i = 1; i <= 7; ++i) { + IBlockData iblockdata = WorldGenMonumentPieces.WorldGenMonumentPiece4.b; + + if (i == 2 || i == 6) { + iblockdata = WorldGenMonumentPieces.WorldGenMonumentPiece4.a; + } + + this.a(world, structureboundingbox, 0, i, 0, 0, i, 7, iblockdata, iblockdata, false); + this.a(world, structureboundingbox, 15, i, 0, 15, i, 7, iblockdata, iblockdata, false); + this.a(world, structureboundingbox, 1, i, 0, 15, i, 0, iblockdata, iblockdata, false); + this.a(world, structureboundingbox, 1, i, 7, 14, i, 7, iblockdata, iblockdata, false); + } + + this.a(world, structureboundingbox, 2, 1, 3, 2, 7, 4, WorldGenMonumentPieces.WorldGenMonumentPiece4.b, WorldGenMonumentPieces.WorldGenMonumentPiece4.b, false); + this.a(world, structureboundingbox, 3, 1, 2, 4, 7, 2, WorldGenMonumentPieces.WorldGenMonumentPiece4.b, WorldGenMonumentPieces.WorldGenMonumentPiece4.b, false); + this.a(world, structureboundingbox, 3, 1, 5, 4, 7, 5, WorldGenMonumentPieces.WorldGenMonumentPiece4.b, WorldGenMonumentPieces.WorldGenMonumentPiece4.b, false); + this.a(world, structureboundingbox, 13, 1, 3, 13, 7, 4, WorldGenMonumentPieces.WorldGenMonumentPiece4.b, WorldGenMonumentPieces.WorldGenMonumentPiece4.b, false); + this.a(world, structureboundingbox, 11, 1, 2, 12, 7, 2, WorldGenMonumentPieces.WorldGenMonumentPiece4.b, WorldGenMonumentPieces.WorldGenMonumentPiece4.b, false); + this.a(world, structureboundingbox, 11, 1, 5, 12, 7, 5, WorldGenMonumentPieces.WorldGenMonumentPiece4.b, WorldGenMonumentPieces.WorldGenMonumentPiece4.b, false); + this.a(world, structureboundingbox, 5, 1, 3, 5, 3, 4, WorldGenMonumentPieces.WorldGenMonumentPiece4.b, WorldGenMonumentPieces.WorldGenMonumentPiece4.b, false); + this.a(world, structureboundingbox, 10, 1, 3, 10, 3, 4, WorldGenMonumentPieces.WorldGenMonumentPiece4.b, WorldGenMonumentPieces.WorldGenMonumentPiece4.b, false); + this.a(world, structureboundingbox, 5, 7, 2, 10, 7, 5, WorldGenMonumentPieces.WorldGenMonumentPiece4.b, WorldGenMonumentPieces.WorldGenMonumentPiece4.b, false); + this.a(world, structureboundingbox, 5, 5, 2, 5, 7, 2, WorldGenMonumentPieces.WorldGenMonumentPiece4.b, WorldGenMonumentPieces.WorldGenMonumentPiece4.b, false); + this.a(world, structureboundingbox, 10, 5, 2, 10, 7, 2, WorldGenMonumentPieces.WorldGenMonumentPiece4.b, WorldGenMonumentPieces.WorldGenMonumentPiece4.b, false); + this.a(world, structureboundingbox, 5, 5, 5, 5, 7, 5, WorldGenMonumentPieces.WorldGenMonumentPiece4.b, WorldGenMonumentPieces.WorldGenMonumentPiece4.b, false); + this.a(world, structureboundingbox, 10, 5, 5, 10, 7, 5, WorldGenMonumentPieces.WorldGenMonumentPiece4.b, WorldGenMonumentPieces.WorldGenMonumentPiece4.b, false); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece4.b, 6, 6, 2, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece4.b, 9, 6, 2, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece4.b, 6, 6, 5, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece4.b, 9, 6, 5, structureboundingbox); + this.a(world, structureboundingbox, 5, 4, 3, 6, 4, 4, WorldGenMonumentPieces.WorldGenMonumentPiece4.b, WorldGenMonumentPieces.WorldGenMonumentPiece4.b, false); + this.a(world, structureboundingbox, 9, 4, 3, 10, 4, 4, WorldGenMonumentPieces.WorldGenMonumentPiece4.b, WorldGenMonumentPieces.WorldGenMonumentPiece4.b, false); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece4.e, 5, 4, 2, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece4.e, 5, 4, 5, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece4.e, 10, 4, 2, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece4.e, 10, 4, 5, structureboundingbox); + if (worldgenmonumentpieces_worldgenmonumentstatetracker1.c[EnumDirection.SOUTH.a()]) { + this.a(world, structureboundingbox, 3, 1, 0, 4, 2, 0, false); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker1.c[EnumDirection.NORTH.a()]) { + this.a(world, structureboundingbox, 3, 1, 7, 4, 2, 7, false); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker1.c[EnumDirection.WEST.a()]) { + this.a(world, structureboundingbox, 0, 1, 3, 0, 2, 4, false); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker.c[EnumDirection.SOUTH.a()]) { + this.a(world, structureboundingbox, 11, 1, 0, 12, 2, 0, false); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker.c[EnumDirection.NORTH.a()]) { + this.a(world, structureboundingbox, 11, 1, 7, 12, 2, 7, false); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker.c[EnumDirection.EAST.a()]) { + this.a(world, structureboundingbox, 15, 1, 3, 15, 2, 4, false); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker2.c[EnumDirection.SOUTH.a()]) { + this.a(world, structureboundingbox, 3, 5, 0, 4, 6, 0, false); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker2.c[EnumDirection.NORTH.a()]) { + this.a(world, structureboundingbox, 3, 5, 7, 4, 6, 7, false); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker2.c[EnumDirection.WEST.a()]) { + this.a(world, structureboundingbox, 0, 5, 3, 0, 6, 4, false); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker3.c[EnumDirection.SOUTH.a()]) { + this.a(world, structureboundingbox, 11, 5, 0, 12, 6, 0, false); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker3.c[EnumDirection.NORTH.a()]) { + this.a(world, structureboundingbox, 11, 5, 7, 12, 6, 7, false); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker3.c[EnumDirection.EAST.a()]) { + this.a(world, structureboundingbox, 15, 5, 3, 15, 6, 4, false); + } + + return true; + } + } + + public static class WorldGenMonumentPiece7 extends WorldGenMonumentPieces.WorldGenMonumentPiece { + + public WorldGenMonumentPiece7() {} + + public WorldGenMonumentPiece7(EnumDirection enumdirection, WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker, Random random) { + super(1, enumdirection, worldgenmonumentpieces_worldgenmonumentstatetracker, 1, 1, 2); + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker = this.k.b[EnumDirection.NORTH.a()]; + WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker1 = this.k; + + if (this.k.a / 25 > 0) { + this.a(world, structureboundingbox, 0, 8, worldgenmonumentpieces_worldgenmonumentstatetracker.c[EnumDirection.DOWN.a()]); + this.a(world, structureboundingbox, 0, 0, worldgenmonumentpieces_worldgenmonumentstatetracker1.c[EnumDirection.DOWN.a()]); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker1.b[EnumDirection.UP.a()] == null) { + this.a(world, structureboundingbox, 1, 4, 1, 6, 4, 7, WorldGenMonumentPieces.WorldGenMonumentPiece7.a); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker.b[EnumDirection.UP.a()] == null) { + this.a(world, structureboundingbox, 1, 4, 8, 6, 4, 14, WorldGenMonumentPieces.WorldGenMonumentPiece7.a); + } + + this.a(world, structureboundingbox, 0, 3, 0, 0, 3, 15, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, false); + this.a(world, structureboundingbox, 7, 3, 0, 7, 3, 15, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, false); + this.a(world, structureboundingbox, 1, 3, 0, 7, 3, 0, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, false); + this.a(world, structureboundingbox, 1, 3, 15, 6, 3, 15, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, false); + this.a(world, structureboundingbox, 0, 2, 0, 0, 2, 15, WorldGenMonumentPieces.WorldGenMonumentPiece7.a, WorldGenMonumentPieces.WorldGenMonumentPiece7.a, false); + this.a(world, structureboundingbox, 7, 2, 0, 7, 2, 15, WorldGenMonumentPieces.WorldGenMonumentPiece7.a, WorldGenMonumentPieces.WorldGenMonumentPiece7.a, false); + this.a(world, structureboundingbox, 1, 2, 0, 7, 2, 0, WorldGenMonumentPieces.WorldGenMonumentPiece7.a, WorldGenMonumentPieces.WorldGenMonumentPiece7.a, false); + this.a(world, structureboundingbox, 1, 2, 15, 6, 2, 15, WorldGenMonumentPieces.WorldGenMonumentPiece7.a, WorldGenMonumentPieces.WorldGenMonumentPiece7.a, false); + this.a(world, structureboundingbox, 0, 1, 0, 0, 1, 15, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, false); + this.a(world, structureboundingbox, 7, 1, 0, 7, 1, 15, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, false); + this.a(world, structureboundingbox, 1, 1, 0, 7, 1, 0, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, false); + this.a(world, structureboundingbox, 1, 1, 15, 6, 1, 15, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, false); + this.a(world, structureboundingbox, 1, 1, 1, 1, 1, 2, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, false); + this.a(world, structureboundingbox, 6, 1, 1, 6, 1, 2, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, false); + this.a(world, structureboundingbox, 1, 3, 1, 1, 3, 2, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, false); + this.a(world, structureboundingbox, 6, 3, 1, 6, 3, 2, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, false); + this.a(world, structureboundingbox, 1, 1, 13, 1, 1, 14, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, false); + this.a(world, structureboundingbox, 6, 1, 13, 6, 1, 14, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, false); + this.a(world, structureboundingbox, 1, 3, 13, 1, 3, 14, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, false); + this.a(world, structureboundingbox, 6, 3, 13, 6, 3, 14, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, false); + this.a(world, structureboundingbox, 2, 1, 6, 2, 3, 6, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, false); + this.a(world, structureboundingbox, 5, 1, 6, 5, 3, 6, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, false); + this.a(world, structureboundingbox, 2, 1, 9, 2, 3, 9, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, false); + this.a(world, structureboundingbox, 5, 1, 9, 5, 3, 9, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, false); + this.a(world, structureboundingbox, 3, 2, 6, 4, 2, 6, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, false); + this.a(world, structureboundingbox, 3, 2, 9, 4, 2, 9, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, false); + this.a(world, structureboundingbox, 2, 2, 7, 2, 2, 8, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, false); + this.a(world, structureboundingbox, 5, 2, 7, 5, 2, 8, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, false); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece7.e, 2, 2, 5, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece7.e, 5, 2, 5, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece7.e, 2, 2, 10, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece7.e, 5, 2, 10, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, 2, 3, 5, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, 5, 3, 5, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, 2, 3, 10, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece7.b, 5, 3, 10, structureboundingbox); + if (worldgenmonumentpieces_worldgenmonumentstatetracker1.c[EnumDirection.SOUTH.a()]) { + this.a(world, structureboundingbox, 3, 1, 0, 4, 2, 0, false); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker1.c[EnumDirection.EAST.a()]) { + this.a(world, structureboundingbox, 7, 1, 3, 7, 2, 4, false); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker1.c[EnumDirection.WEST.a()]) { + this.a(world, structureboundingbox, 0, 1, 3, 0, 2, 4, false); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker.c[EnumDirection.NORTH.a()]) { + this.a(world, structureboundingbox, 3, 1, 15, 4, 2, 15, false); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker.c[EnumDirection.WEST.a()]) { + this.a(world, structureboundingbox, 0, 1, 11, 0, 2, 12, false); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker.c[EnumDirection.EAST.a()]) { + this.a(world, structureboundingbox, 7, 1, 11, 7, 2, 12, false); + } + + return true; + } + } + + public static class WorldGenMonumentPiece3 extends WorldGenMonumentPieces.WorldGenMonumentPiece { + + public WorldGenMonumentPiece3() {} + + public WorldGenMonumentPiece3(EnumDirection enumdirection, WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker, Random random) { + super(1, enumdirection, worldgenmonumentpieces_worldgenmonumentstatetracker, 2, 1, 1); + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker = this.k.b[EnumDirection.EAST.a()]; + WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker1 = this.k; + + if (this.k.a / 25 > 0) { + this.a(world, structureboundingbox, 8, 0, worldgenmonumentpieces_worldgenmonumentstatetracker.c[EnumDirection.DOWN.a()]); + this.a(world, structureboundingbox, 0, 0, worldgenmonumentpieces_worldgenmonumentstatetracker1.c[EnumDirection.DOWN.a()]); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker1.b[EnumDirection.UP.a()] == null) { + this.a(world, structureboundingbox, 1, 4, 1, 7, 4, 6, WorldGenMonumentPieces.WorldGenMonumentPiece3.a); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker.b[EnumDirection.UP.a()] == null) { + this.a(world, structureboundingbox, 8, 4, 1, 14, 4, 6, WorldGenMonumentPieces.WorldGenMonumentPiece3.a); + } + + this.a(world, structureboundingbox, 0, 3, 0, 0, 3, 7, WorldGenMonumentPieces.WorldGenMonumentPiece3.b, WorldGenMonumentPieces.WorldGenMonumentPiece3.b, false); + this.a(world, structureboundingbox, 15, 3, 0, 15, 3, 7, WorldGenMonumentPieces.WorldGenMonumentPiece3.b, WorldGenMonumentPieces.WorldGenMonumentPiece3.b, false); + this.a(world, structureboundingbox, 1, 3, 0, 15, 3, 0, WorldGenMonumentPieces.WorldGenMonumentPiece3.b, WorldGenMonumentPieces.WorldGenMonumentPiece3.b, false); + this.a(world, structureboundingbox, 1, 3, 7, 14, 3, 7, WorldGenMonumentPieces.WorldGenMonumentPiece3.b, WorldGenMonumentPieces.WorldGenMonumentPiece3.b, false); + this.a(world, structureboundingbox, 0, 2, 0, 0, 2, 7, WorldGenMonumentPieces.WorldGenMonumentPiece3.a, WorldGenMonumentPieces.WorldGenMonumentPiece3.a, false); + this.a(world, structureboundingbox, 15, 2, 0, 15, 2, 7, WorldGenMonumentPieces.WorldGenMonumentPiece3.a, WorldGenMonumentPieces.WorldGenMonumentPiece3.a, false); + this.a(world, structureboundingbox, 1, 2, 0, 15, 2, 0, WorldGenMonumentPieces.WorldGenMonumentPiece3.a, WorldGenMonumentPieces.WorldGenMonumentPiece3.a, false); + this.a(world, structureboundingbox, 1, 2, 7, 14, 2, 7, WorldGenMonumentPieces.WorldGenMonumentPiece3.a, WorldGenMonumentPieces.WorldGenMonumentPiece3.a, false); + this.a(world, structureboundingbox, 0, 1, 0, 0, 1, 7, WorldGenMonumentPieces.WorldGenMonumentPiece3.b, WorldGenMonumentPieces.WorldGenMonumentPiece3.b, false); + this.a(world, structureboundingbox, 15, 1, 0, 15, 1, 7, WorldGenMonumentPieces.WorldGenMonumentPiece3.b, WorldGenMonumentPieces.WorldGenMonumentPiece3.b, false); + this.a(world, structureboundingbox, 1, 1, 0, 15, 1, 0, WorldGenMonumentPieces.WorldGenMonumentPiece3.b, WorldGenMonumentPieces.WorldGenMonumentPiece3.b, false); + this.a(world, structureboundingbox, 1, 1, 7, 14, 1, 7, WorldGenMonumentPieces.WorldGenMonumentPiece3.b, WorldGenMonumentPieces.WorldGenMonumentPiece3.b, false); + this.a(world, structureboundingbox, 5, 1, 0, 10, 1, 4, WorldGenMonumentPieces.WorldGenMonumentPiece3.b, WorldGenMonumentPieces.WorldGenMonumentPiece3.b, false); + this.a(world, structureboundingbox, 6, 2, 0, 9, 2, 3, WorldGenMonumentPieces.WorldGenMonumentPiece3.a, WorldGenMonumentPieces.WorldGenMonumentPiece3.a, false); + this.a(world, structureboundingbox, 5, 3, 0, 10, 3, 4, WorldGenMonumentPieces.WorldGenMonumentPiece3.b, WorldGenMonumentPieces.WorldGenMonumentPiece3.b, false); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece3.e, 6, 2, 3, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece3.e, 9, 2, 3, structureboundingbox); + if (worldgenmonumentpieces_worldgenmonumentstatetracker1.c[EnumDirection.SOUTH.a()]) { + this.a(world, structureboundingbox, 3, 1, 0, 4, 2, 0, false); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker1.c[EnumDirection.NORTH.a()]) { + this.a(world, structureboundingbox, 3, 1, 7, 4, 2, 7, false); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker1.c[EnumDirection.WEST.a()]) { + this.a(world, structureboundingbox, 0, 1, 3, 0, 2, 4, false); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker.c[EnumDirection.SOUTH.a()]) { + this.a(world, structureboundingbox, 11, 1, 0, 12, 2, 0, false); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker.c[EnumDirection.NORTH.a()]) { + this.a(world, structureboundingbox, 11, 1, 7, 12, 2, 7, false); + } + + if (worldgenmonumentpieces_worldgenmonumentstatetracker.c[EnumDirection.EAST.a()]) { + this.a(world, structureboundingbox, 15, 1, 3, 15, 2, 4, false); + } + + return true; + } + } + + public static class WorldGenMonumentPiece5 extends WorldGenMonumentPieces.WorldGenMonumentPiece { + + public WorldGenMonumentPiece5() {} + + public WorldGenMonumentPiece5(EnumDirection enumdirection, WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker, Random random) { + super(1, enumdirection, worldgenmonumentpieces_worldgenmonumentstatetracker, 1, 2, 1); + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + if (this.k.a / 25 > 0) { + this.a(world, structureboundingbox, 0, 0, this.k.c[EnumDirection.DOWN.a()]); + } + + WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker = this.k.b[EnumDirection.UP.a()]; + + if (worldgenmonumentpieces_worldgenmonumentstatetracker.b[EnumDirection.UP.a()] == null) { + this.a(world, structureboundingbox, 1, 8, 1, 6, 8, 6, WorldGenMonumentPieces.WorldGenMonumentPiece5.a); + } + + this.a(world, structureboundingbox, 0, 4, 0, 0, 4, 7, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, false); + this.a(world, structureboundingbox, 7, 4, 0, 7, 4, 7, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, false); + this.a(world, structureboundingbox, 1, 4, 0, 6, 4, 0, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, false); + this.a(world, structureboundingbox, 1, 4, 7, 6, 4, 7, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, false); + this.a(world, structureboundingbox, 2, 4, 1, 2, 4, 2, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, false); + this.a(world, structureboundingbox, 1, 4, 2, 1, 4, 2, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, false); + this.a(world, structureboundingbox, 5, 4, 1, 5, 4, 2, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, false); + this.a(world, structureboundingbox, 6, 4, 2, 6, 4, 2, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, false); + this.a(world, structureboundingbox, 2, 4, 5, 2, 4, 6, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, false); + this.a(world, structureboundingbox, 1, 4, 5, 1, 4, 5, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, false); + this.a(world, structureboundingbox, 5, 4, 5, 5, 4, 6, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, false); + this.a(world, structureboundingbox, 6, 4, 5, 6, 4, 5, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, false); + WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker1 = this.k; + + for (int i = 1; i <= 5; i += 4) { + byte b0 = 0; + + if (worldgenmonumentpieces_worldgenmonumentstatetracker1.c[EnumDirection.SOUTH.a()]) { + this.a(world, structureboundingbox, 2, i, b0, 2, i + 2, b0, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, false); + this.a(world, structureboundingbox, 5, i, b0, 5, i + 2, b0, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, false); + this.a(world, structureboundingbox, 3, i + 2, b0, 4, i + 2, b0, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, false); + } else { + this.a(world, structureboundingbox, 0, i, b0, 7, i + 2, b0, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, false); + this.a(world, structureboundingbox, 0, i + 1, b0, 7, i + 1, b0, WorldGenMonumentPieces.WorldGenMonumentPiece5.a, WorldGenMonumentPieces.WorldGenMonumentPiece5.a, false); + } + + b0 = 7; + if (worldgenmonumentpieces_worldgenmonumentstatetracker1.c[EnumDirection.NORTH.a()]) { + this.a(world, structureboundingbox, 2, i, b0, 2, i + 2, b0, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, false); + this.a(world, structureboundingbox, 5, i, b0, 5, i + 2, b0, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, false); + this.a(world, structureboundingbox, 3, i + 2, b0, 4, i + 2, b0, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, false); + } else { + this.a(world, structureboundingbox, 0, i, b0, 7, i + 2, b0, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, false); + this.a(world, structureboundingbox, 0, i + 1, b0, 7, i + 1, b0, WorldGenMonumentPieces.WorldGenMonumentPiece5.a, WorldGenMonumentPieces.WorldGenMonumentPiece5.a, false); + } + + byte b1 = 0; + + if (worldgenmonumentpieces_worldgenmonumentstatetracker1.c[EnumDirection.WEST.a()]) { + this.a(world, structureboundingbox, b1, i, 2, b1, i + 2, 2, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, false); + this.a(world, structureboundingbox, b1, i, 5, b1, i + 2, 5, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, false); + this.a(world, structureboundingbox, b1, i + 2, 3, b1, i + 2, 4, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, false); + } else { + this.a(world, structureboundingbox, b1, i, 0, b1, i + 2, 7, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, false); + this.a(world, structureboundingbox, b1, i + 1, 0, b1, i + 1, 7, WorldGenMonumentPieces.WorldGenMonumentPiece5.a, WorldGenMonumentPieces.WorldGenMonumentPiece5.a, false); + } + + b1 = 7; + if (worldgenmonumentpieces_worldgenmonumentstatetracker1.c[EnumDirection.EAST.a()]) { + this.a(world, structureboundingbox, b1, i, 2, b1, i + 2, 2, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, false); + this.a(world, structureboundingbox, b1, i, 5, b1, i + 2, 5, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, false); + this.a(world, structureboundingbox, b1, i + 2, 3, b1, i + 2, 4, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, false); + } else { + this.a(world, structureboundingbox, b1, i, 0, b1, i + 2, 7, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, WorldGenMonumentPieces.WorldGenMonumentPiece5.b, false); + this.a(world, structureboundingbox, b1, i + 1, 0, b1, i + 1, 7, WorldGenMonumentPieces.WorldGenMonumentPiece5.a, WorldGenMonumentPieces.WorldGenMonumentPiece5.a, false); + } + + worldgenmonumentpieces_worldgenmonumentstatetracker1 = worldgenmonumentpieces_worldgenmonumentstatetracker; + } + + return true; + } + } + + public static class WorldGenMonumentPieceSimpleT extends WorldGenMonumentPieces.WorldGenMonumentPiece { + + public WorldGenMonumentPieceSimpleT() {} + + public WorldGenMonumentPieceSimpleT(EnumDirection enumdirection, WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker, Random random) { + super(1, enumdirection, worldgenmonumentpieces_worldgenmonumentstatetracker, 1, 1, 1); + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + if (this.k.a / 25 > 0) { + this.a(world, structureboundingbox, 0, 0, this.k.c[EnumDirection.DOWN.a()]); + } + + if (this.k.b[EnumDirection.UP.a()] == null) { + this.a(world, structureboundingbox, 1, 4, 1, 6, 4, 6, WorldGenMonumentPieces.WorldGenMonumentPieceSimpleT.a); + } + + for (int i = 1; i <= 6; ++i) { + for (int j = 1; j <= 6; ++j) { + if (random.nextInt(3) != 0) { + int k = 2 + (random.nextInt(4) == 0 ? 0 : 1); + + this.a(world, structureboundingbox, i, k, j, i, 3, j, Blocks.SPONGE.fromLegacyData(1), Blocks.SPONGE.fromLegacyData(1), false); + } + } + } + + this.a(world, structureboundingbox, 0, 1, 0, 0, 1, 7, WorldGenMonumentPieces.WorldGenMonumentPieceSimpleT.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimpleT.b, false); + this.a(world, structureboundingbox, 7, 1, 0, 7, 1, 7, WorldGenMonumentPieces.WorldGenMonumentPieceSimpleT.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimpleT.b, false); + this.a(world, structureboundingbox, 1, 1, 0, 6, 1, 0, WorldGenMonumentPieces.WorldGenMonumentPieceSimpleT.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimpleT.b, false); + this.a(world, structureboundingbox, 1, 1, 7, 6, 1, 7, WorldGenMonumentPieces.WorldGenMonumentPieceSimpleT.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimpleT.b, false); + this.a(world, structureboundingbox, 0, 2, 0, 0, 2, 7, WorldGenMonumentPieces.WorldGenMonumentPieceSimpleT.c, WorldGenMonumentPieces.WorldGenMonumentPieceSimpleT.c, false); + this.a(world, structureboundingbox, 7, 2, 0, 7, 2, 7, WorldGenMonumentPieces.WorldGenMonumentPieceSimpleT.c, WorldGenMonumentPieces.WorldGenMonumentPieceSimpleT.c, false); + this.a(world, structureboundingbox, 1, 2, 0, 6, 2, 0, WorldGenMonumentPieces.WorldGenMonumentPieceSimpleT.c, WorldGenMonumentPieces.WorldGenMonumentPieceSimpleT.c, false); + this.a(world, structureboundingbox, 1, 2, 7, 6, 2, 7, WorldGenMonumentPieces.WorldGenMonumentPieceSimpleT.c, WorldGenMonumentPieces.WorldGenMonumentPieceSimpleT.c, false); + this.a(world, structureboundingbox, 0, 3, 0, 0, 3, 7, WorldGenMonumentPieces.WorldGenMonumentPieceSimpleT.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimpleT.b, false); + this.a(world, structureboundingbox, 7, 3, 0, 7, 3, 7, WorldGenMonumentPieces.WorldGenMonumentPieceSimpleT.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimpleT.b, false); + this.a(world, structureboundingbox, 1, 3, 0, 6, 3, 0, WorldGenMonumentPieces.WorldGenMonumentPieceSimpleT.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimpleT.b, false); + this.a(world, structureboundingbox, 1, 3, 7, 6, 3, 7, WorldGenMonumentPieces.WorldGenMonumentPieceSimpleT.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimpleT.b, false); + this.a(world, structureboundingbox, 0, 1, 3, 0, 2, 4, WorldGenMonumentPieces.WorldGenMonumentPieceSimpleT.c, WorldGenMonumentPieces.WorldGenMonumentPieceSimpleT.c, false); + this.a(world, structureboundingbox, 7, 1, 3, 7, 2, 4, WorldGenMonumentPieces.WorldGenMonumentPieceSimpleT.c, WorldGenMonumentPieces.WorldGenMonumentPieceSimpleT.c, false); + this.a(world, structureboundingbox, 3, 1, 0, 4, 2, 0, WorldGenMonumentPieces.WorldGenMonumentPieceSimpleT.c, WorldGenMonumentPieces.WorldGenMonumentPieceSimpleT.c, false); + this.a(world, structureboundingbox, 3, 1, 7, 4, 2, 7, WorldGenMonumentPieces.WorldGenMonumentPieceSimpleT.c, WorldGenMonumentPieces.WorldGenMonumentPieceSimpleT.c, false); + if (this.k.c[EnumDirection.SOUTH.a()]) { + this.a(world, structureboundingbox, 3, 1, 0, 4, 2, 0, false); + } + + return true; + } + } + + public static class WorldGenMonumentPieceSimple extends WorldGenMonumentPieces.WorldGenMonumentPiece { + + private int o; + + public WorldGenMonumentPieceSimple() {} + + public WorldGenMonumentPieceSimple(EnumDirection enumdirection, WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker, Random random) { + super(1, enumdirection, worldgenmonumentpieces_worldgenmonumentstatetracker, 1, 1, 1); + this.o = random.nextInt(3); + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + if (this.k.a / 25 > 0) { + this.a(world, structureboundingbox, 0, 0, this.k.c[EnumDirection.DOWN.a()]); + } + + if (this.k.b[EnumDirection.UP.a()] == null) { + this.a(world, structureboundingbox, 1, 4, 1, 6, 4, 6, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a); + } + + boolean flag = this.o != 0 && random.nextBoolean() && !this.k.c[EnumDirection.DOWN.a()] && !this.k.c[EnumDirection.UP.a()] && this.k.c() > 1; + + if (this.o == 0) { + this.a(world, structureboundingbox, 0, 1, 0, 2, 1, 2, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + this.a(world, structureboundingbox, 0, 3, 0, 2, 3, 2, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + this.a(world, structureboundingbox, 0, 2, 0, 0, 2, 2, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, false); + this.a(world, structureboundingbox, 1, 2, 0, 2, 2, 0, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, false); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.e, 1, 2, 1, structureboundingbox); + this.a(world, structureboundingbox, 5, 1, 0, 7, 1, 2, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + this.a(world, structureboundingbox, 5, 3, 0, 7, 3, 2, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + this.a(world, structureboundingbox, 7, 2, 0, 7, 2, 2, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, false); + this.a(world, structureboundingbox, 5, 2, 0, 6, 2, 0, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, false); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.e, 6, 2, 1, structureboundingbox); + this.a(world, structureboundingbox, 0, 1, 5, 2, 1, 7, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + this.a(world, structureboundingbox, 0, 3, 5, 2, 3, 7, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + this.a(world, structureboundingbox, 0, 2, 5, 0, 2, 7, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, false); + this.a(world, structureboundingbox, 1, 2, 7, 2, 2, 7, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, false); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.e, 1, 2, 6, structureboundingbox); + this.a(world, structureboundingbox, 5, 1, 5, 7, 1, 7, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + this.a(world, structureboundingbox, 5, 3, 5, 7, 3, 7, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + this.a(world, structureboundingbox, 7, 2, 5, 7, 2, 7, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, false); + this.a(world, structureboundingbox, 5, 2, 7, 6, 2, 7, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, false); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.e, 6, 2, 6, structureboundingbox); + if (this.k.c[EnumDirection.SOUTH.a()]) { + this.a(world, structureboundingbox, 3, 3, 0, 4, 3, 0, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + } else { + this.a(world, structureboundingbox, 3, 3, 0, 4, 3, 1, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + this.a(world, structureboundingbox, 3, 2, 0, 4, 2, 0, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, false); + this.a(world, structureboundingbox, 3, 1, 0, 4, 1, 1, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + } + + if (this.k.c[EnumDirection.NORTH.a()]) { + this.a(world, structureboundingbox, 3, 3, 7, 4, 3, 7, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + } else { + this.a(world, structureboundingbox, 3, 3, 6, 4, 3, 7, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + this.a(world, structureboundingbox, 3, 2, 7, 4, 2, 7, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, false); + this.a(world, structureboundingbox, 3, 1, 6, 4, 1, 7, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + } + + if (this.k.c[EnumDirection.WEST.a()]) { + this.a(world, structureboundingbox, 0, 3, 3, 0, 3, 4, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + } else { + this.a(world, structureboundingbox, 0, 3, 3, 1, 3, 4, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + this.a(world, structureboundingbox, 0, 2, 3, 0, 2, 4, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, false); + this.a(world, structureboundingbox, 0, 1, 3, 1, 1, 4, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + } + + if (this.k.c[EnumDirection.EAST.a()]) { + this.a(world, structureboundingbox, 7, 3, 3, 7, 3, 4, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + } else { + this.a(world, structureboundingbox, 6, 3, 3, 7, 3, 4, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + this.a(world, structureboundingbox, 7, 2, 3, 7, 2, 4, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, false); + this.a(world, structureboundingbox, 6, 1, 3, 7, 1, 4, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + } + } else if (this.o == 1) { + this.a(world, structureboundingbox, 2, 1, 2, 2, 3, 2, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + this.a(world, structureboundingbox, 2, 1, 5, 2, 3, 5, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + this.a(world, structureboundingbox, 5, 1, 5, 5, 3, 5, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + this.a(world, structureboundingbox, 5, 1, 2, 5, 3, 2, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.e, 2, 2, 2, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.e, 2, 2, 5, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.e, 5, 2, 5, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.e, 5, 2, 2, structureboundingbox); + this.a(world, structureboundingbox, 0, 1, 0, 1, 3, 0, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + this.a(world, structureboundingbox, 0, 1, 1, 0, 3, 1, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + this.a(world, structureboundingbox, 0, 1, 7, 1, 3, 7, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + this.a(world, structureboundingbox, 0, 1, 6, 0, 3, 6, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + this.a(world, structureboundingbox, 6, 1, 7, 7, 3, 7, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + this.a(world, structureboundingbox, 7, 1, 6, 7, 3, 6, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + this.a(world, structureboundingbox, 6, 1, 0, 7, 3, 0, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + this.a(world, structureboundingbox, 7, 1, 1, 7, 3, 1, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, 1, 2, 0, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, 0, 2, 1, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, 1, 2, 7, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, 0, 2, 6, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, 6, 2, 7, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, 7, 2, 6, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, 6, 2, 0, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, 7, 2, 1, structureboundingbox); + if (!this.k.c[EnumDirection.SOUTH.a()]) { + this.a(world, structureboundingbox, 1, 3, 0, 6, 3, 0, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + this.a(world, structureboundingbox, 1, 2, 0, 6, 2, 0, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, false); + this.a(world, structureboundingbox, 1, 1, 0, 6, 1, 0, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + } + + if (!this.k.c[EnumDirection.NORTH.a()]) { + this.a(world, structureboundingbox, 1, 3, 7, 6, 3, 7, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + this.a(world, structureboundingbox, 1, 2, 7, 6, 2, 7, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, false); + this.a(world, structureboundingbox, 1, 1, 7, 6, 1, 7, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + } + + if (!this.k.c[EnumDirection.WEST.a()]) { + this.a(world, structureboundingbox, 0, 3, 1, 0, 3, 6, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + this.a(world, structureboundingbox, 0, 2, 1, 0, 2, 6, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, false); + this.a(world, structureboundingbox, 0, 1, 1, 0, 1, 6, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + } + + if (!this.k.c[EnumDirection.EAST.a()]) { + this.a(world, structureboundingbox, 7, 3, 1, 7, 3, 6, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + this.a(world, structureboundingbox, 7, 2, 1, 7, 2, 6, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, false); + this.a(world, structureboundingbox, 7, 1, 1, 7, 1, 6, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + } + } else if (this.o == 2) { + this.a(world, structureboundingbox, 0, 1, 0, 0, 1, 7, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + this.a(world, structureboundingbox, 7, 1, 0, 7, 1, 7, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + this.a(world, structureboundingbox, 1, 1, 0, 6, 1, 0, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + this.a(world, structureboundingbox, 1, 1, 7, 6, 1, 7, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + this.a(world, structureboundingbox, 0, 2, 0, 0, 2, 7, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.c, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.c, false); + this.a(world, structureboundingbox, 7, 2, 0, 7, 2, 7, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.c, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.c, false); + this.a(world, structureboundingbox, 1, 2, 0, 6, 2, 0, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.c, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.c, false); + this.a(world, structureboundingbox, 1, 2, 7, 6, 2, 7, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.c, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.c, false); + this.a(world, structureboundingbox, 0, 3, 0, 0, 3, 7, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + this.a(world, structureboundingbox, 7, 3, 0, 7, 3, 7, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + this.a(world, structureboundingbox, 1, 3, 0, 6, 3, 0, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + this.a(world, structureboundingbox, 1, 3, 7, 6, 3, 7, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + this.a(world, structureboundingbox, 0, 1, 3, 0, 2, 4, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.c, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.c, false); + this.a(world, structureboundingbox, 7, 1, 3, 7, 2, 4, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.c, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.c, false); + this.a(world, structureboundingbox, 3, 1, 0, 4, 2, 0, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.c, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.c, false); + this.a(world, structureboundingbox, 3, 1, 7, 4, 2, 7, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.c, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.c, false); + if (this.k.c[EnumDirection.SOUTH.a()]) { + this.a(world, structureboundingbox, 3, 1, 0, 4, 2, 0, false); + } + + if (this.k.c[EnumDirection.NORTH.a()]) { + this.a(world, structureboundingbox, 3, 1, 7, 4, 2, 7, false); + } + + if (this.k.c[EnumDirection.WEST.a()]) { + this.a(world, structureboundingbox, 0, 1, 3, 0, 2, 4, false); + } + + if (this.k.c[EnumDirection.EAST.a()]) { + this.a(world, structureboundingbox, 7, 1, 3, 7, 2, 4, false); + } + } + + if (flag) { + this.a(world, structureboundingbox, 3, 1, 3, 4, 1, 4, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + this.a(world, structureboundingbox, 3, 2, 3, 4, 2, 4, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.a, false); + this.a(world, structureboundingbox, 3, 3, 3, 4, 3, 4, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, WorldGenMonumentPieces.WorldGenMonumentPieceSimple.b, false); + } + + return true; + } + } + + public static class WorldGenMonumentPieceEntry extends WorldGenMonumentPieces.WorldGenMonumentPiece { + + public WorldGenMonumentPieceEntry() {} + + public WorldGenMonumentPieceEntry(EnumDirection enumdirection, WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker) { + super(1, enumdirection, worldgenmonumentpieces_worldgenmonumentstatetracker, 1, 1, 1); + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + this.a(world, structureboundingbox, 0, 3, 0, 2, 3, 7, WorldGenMonumentPieces.WorldGenMonumentPieceEntry.b, WorldGenMonumentPieces.WorldGenMonumentPieceEntry.b, false); + this.a(world, structureboundingbox, 5, 3, 0, 7, 3, 7, WorldGenMonumentPieces.WorldGenMonumentPieceEntry.b, WorldGenMonumentPieces.WorldGenMonumentPieceEntry.b, false); + this.a(world, structureboundingbox, 0, 2, 0, 1, 2, 7, WorldGenMonumentPieces.WorldGenMonumentPieceEntry.b, WorldGenMonumentPieces.WorldGenMonumentPieceEntry.b, false); + this.a(world, structureboundingbox, 6, 2, 0, 7, 2, 7, WorldGenMonumentPieces.WorldGenMonumentPieceEntry.b, WorldGenMonumentPieces.WorldGenMonumentPieceEntry.b, false); + this.a(world, structureboundingbox, 0, 1, 0, 0, 1, 7, WorldGenMonumentPieces.WorldGenMonumentPieceEntry.b, WorldGenMonumentPieces.WorldGenMonumentPieceEntry.b, false); + this.a(world, structureboundingbox, 7, 1, 0, 7, 1, 7, WorldGenMonumentPieces.WorldGenMonumentPieceEntry.b, WorldGenMonumentPieces.WorldGenMonumentPieceEntry.b, false); + this.a(world, structureboundingbox, 0, 1, 7, 7, 3, 7, WorldGenMonumentPieces.WorldGenMonumentPieceEntry.b, WorldGenMonumentPieces.WorldGenMonumentPieceEntry.b, false); + this.a(world, structureboundingbox, 1, 1, 0, 2, 3, 0, WorldGenMonumentPieces.WorldGenMonumentPieceEntry.b, WorldGenMonumentPieces.WorldGenMonumentPieceEntry.b, false); + this.a(world, structureboundingbox, 5, 1, 0, 6, 3, 0, WorldGenMonumentPieces.WorldGenMonumentPieceEntry.b, WorldGenMonumentPieces.WorldGenMonumentPieceEntry.b, false); + if (this.k.c[EnumDirection.NORTH.a()]) { + this.a(world, structureboundingbox, 3, 1, 7, 4, 2, 7, false); + } + + if (this.k.c[EnumDirection.WEST.a()]) { + this.a(world, structureboundingbox, 0, 1, 3, 1, 2, 4, false); + } + + if (this.k.c[EnumDirection.EAST.a()]) { + this.a(world, structureboundingbox, 6, 1, 3, 7, 2, 4, false); + } + + return true; + } + } + + public static class WorldGenMonumentPiece1 extends WorldGenMonumentPieces.WorldGenMonumentPiece { + + private WorldGenMonumentPieces.WorldGenMonumentStateTracker o; + private WorldGenMonumentPieces.WorldGenMonumentStateTracker p; + private List q = Lists.newArrayList(); + + public WorldGenMonumentPiece1() {} + + public WorldGenMonumentPiece1(Random random, int i, int j, EnumDirection enumdirection) { + super(0); + this.m = enumdirection; + switch (WorldGenMonumentPieces.SyntheticClass_1.a[this.m.ordinal()]) { + case 1: + case 2: + this.l = new StructureBoundingBox(i, 39, j, i + 58 - 1, 61, j + 58 - 1); + break; + + default: + this.l = new StructureBoundingBox(i, 39, j, i + 58 - 1, 61, j + 58 - 1); + } + + List list = this.a(random); + + this.o.d = true; + this.q.add(new WorldGenMonumentPieces.WorldGenMonumentPieceEntry(this.m, this.o)); + this.q.add(new WorldGenMonumentPieces.WorldGenMonumentPiece2(this.m, this.p, random)); + ArrayList arraylist = Lists.newArrayList(); + + arraylist.add(new WorldGenMonumentPieces.WorldGenMonumentPieceSelector6((WorldGenMonumentPieces.SyntheticClass_1) null)); + arraylist.add(new WorldGenMonumentPieces.WorldGenMonumentPieceSelector4((WorldGenMonumentPieces.SyntheticClass_1) null)); + arraylist.add(new WorldGenMonumentPieces.WorldGenMonumentPieceSelector3((WorldGenMonumentPieces.SyntheticClass_1) null)); + arraylist.add(new WorldGenMonumentPieces.WorldGenMonumentPieceSelector7((WorldGenMonumentPieces.SyntheticClass_1) null)); + arraylist.add(new WorldGenMonumentPieces.WorldGenMonumentPieceSelector5((WorldGenMonumentPieces.SyntheticClass_1) null)); + arraylist.add(new WorldGenMonumentPieces.WorldGenMonumentPieceSelector1((WorldGenMonumentPieces.SyntheticClass_1) null)); + arraylist.add(new WorldGenMonumentPieces.WorldGenMonumentPieceSelector2((WorldGenMonumentPieces.SyntheticClass_1) null)); + Iterator iterator = list.iterator(); + + while (iterator.hasNext()) { + WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker = (WorldGenMonumentPieces.WorldGenMonumentStateTracker) iterator.next(); + + if (!worldgenmonumentpieces_worldgenmonumentstatetracker.d && !worldgenmonumentpieces_worldgenmonumentstatetracker.b()) { + Iterator iterator1 = arraylist.iterator(); + + while (iterator1.hasNext()) { + WorldGenMonumentPieces.IWorldGenMonumentPieceSelector worldgenmonumentpieces_iworldgenmonumentpieceselector = (WorldGenMonumentPieces.IWorldGenMonumentPieceSelector) iterator1.next(); + + if (worldgenmonumentpieces_iworldgenmonumentpieceselector.a(worldgenmonumentpieces_worldgenmonumentstatetracker)) { + this.q.add(worldgenmonumentpieces_iworldgenmonumentpieceselector.a(this.m, worldgenmonumentpieces_worldgenmonumentstatetracker, random)); + break; + } + } + } + } + + int k = this.l.b; + int l = this.a(9, 22); + int i1 = this.b(9, 22); + Iterator iterator2 = this.q.iterator(); + + while (iterator2.hasNext()) { + WorldGenMonumentPieces.WorldGenMonumentPiece worldgenmonumentpieces_worldgenmonumentpiece = (WorldGenMonumentPieces.WorldGenMonumentPiece) iterator2.next(); + + worldgenmonumentpieces_worldgenmonumentpiece.c().a(l, k, i1); + } + + StructureBoundingBox structureboundingbox = StructureBoundingBox.a(this.a(1, 1), this.d(1), this.b(1, 1), this.a(23, 21), this.d(8), this.b(23, 21)); + StructureBoundingBox structureboundingbox1 = StructureBoundingBox.a(this.a(34, 1), this.d(1), this.b(34, 1), this.a(56, 21), this.d(8), this.b(56, 21)); + StructureBoundingBox structureboundingbox2 = StructureBoundingBox.a(this.a(22, 22), this.d(13), this.b(22, 22), this.a(35, 35), this.d(17), this.b(35, 35)); + int j1 = random.nextInt(); + + this.q.add(new WorldGenMonumentPieces.WorldGenMonumentPiece8(this.m, structureboundingbox, j1++)); + this.q.add(new WorldGenMonumentPieces.WorldGenMonumentPiece8(this.m, structureboundingbox1, j1++)); + this.q.add(new WorldGenMonumentPieces.WorldGenMonumentPiecePenthouse(this.m, structureboundingbox2)); + } + + private List a(Random random) { + WorldGenMonumentPieces.WorldGenMonumentStateTracker[] aworldgenmonumentpieces_worldgenmonumentstatetracker = new WorldGenMonumentPieces.WorldGenMonumentStateTracker[75]; + + int i; + int j; + byte b0; + int k; + + for (i = 0; i < 5; ++i) { + for (j = 0; j < 4; ++j) { + b0 = 0; + k = b(i, b0, j); + aworldgenmonumentpieces_worldgenmonumentstatetracker[k] = new WorldGenMonumentPieces.WorldGenMonumentStateTracker(k); + } + } + + for (i = 0; i < 5; ++i) { + for (j = 0; j < 4; ++j) { + b0 = 1; + k = b(i, b0, j); + aworldgenmonumentpieces_worldgenmonumentstatetracker[k] = new WorldGenMonumentPieces.WorldGenMonumentStateTracker(k); + } + } + + for (i = 1; i < 4; ++i) { + for (j = 0; j < 2; ++j) { + b0 = 2; + k = b(i, b0, j); + aworldgenmonumentpieces_worldgenmonumentstatetracker[k] = new WorldGenMonumentPieces.WorldGenMonumentStateTracker(k); + } + } + + this.o = aworldgenmonumentpieces_worldgenmonumentstatetracker[WorldGenMonumentPieces.WorldGenMonumentPiece1.g]; + + int l; + int i1; + int j1; + int k1; + int l1; + + for (i = 0; i < 5; ++i) { + for (j = 0; j < 5; ++j) { + for (int i2 = 0; i2 < 3; ++i2) { + k = b(i, i2, j); + if (aworldgenmonumentpieces_worldgenmonumentstatetracker[k] != null) { + EnumDirection[] aenumdirection = EnumDirection.values(); + + l = aenumdirection.length; + + for (i1 = 0; i1 < l; ++i1) { + EnumDirection enumdirection = aenumdirection[i1]; + + j1 = i + enumdirection.getAdjacentX(); + k1 = i2 + enumdirection.getAdjacentY(); + l1 = j + enumdirection.getAdjacentZ(); + if (j1 >= 0 && j1 < 5 && l1 >= 0 && l1 < 5 && k1 >= 0 && k1 < 3) { + int j2 = b(j1, k1, l1); + + if (aworldgenmonumentpieces_worldgenmonumentstatetracker[j2] != null) { + if (l1 != j) { + aworldgenmonumentpieces_worldgenmonumentstatetracker[k].a(enumdirection.opposite(), aworldgenmonumentpieces_worldgenmonumentstatetracker[j2]); + } else { + aworldgenmonumentpieces_worldgenmonumentstatetracker[k].a(enumdirection, aworldgenmonumentpieces_worldgenmonumentstatetracker[j2]); + } + } + } + } + } + } + } + } + + WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker; + WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker1; + WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker2; + + aworldgenmonumentpieces_worldgenmonumentstatetracker[WorldGenMonumentPieces.WorldGenMonumentPiece1.h].a(EnumDirection.UP, worldgenmonumentpieces_worldgenmonumentstatetracker = new WorldGenMonumentPieces.WorldGenMonumentStateTracker(1003)); + aworldgenmonumentpieces_worldgenmonumentstatetracker[WorldGenMonumentPieces.WorldGenMonumentPiece1.i].a(EnumDirection.SOUTH, worldgenmonumentpieces_worldgenmonumentstatetracker1 = new WorldGenMonumentPieces.WorldGenMonumentStateTracker(1001)); + aworldgenmonumentpieces_worldgenmonumentstatetracker[WorldGenMonumentPieces.WorldGenMonumentPiece1.j].a(EnumDirection.SOUTH, worldgenmonumentpieces_worldgenmonumentstatetracker2 = new WorldGenMonumentPieces.WorldGenMonumentStateTracker(1002)); + worldgenmonumentpieces_worldgenmonumentstatetracker.d = true; + worldgenmonumentpieces_worldgenmonumentstatetracker1.d = true; + worldgenmonumentpieces_worldgenmonumentstatetracker2.d = true; + this.o.e = true; + this.p = aworldgenmonumentpieces_worldgenmonumentstatetracker[b(random.nextInt(4), 0, 2)]; + this.p.d = true; + this.p.b[EnumDirection.EAST.a()].d = true; + this.p.b[EnumDirection.NORTH.a()].d = true; + this.p.b[EnumDirection.EAST.a()].b[EnumDirection.NORTH.a()].d = true; + this.p.b[EnumDirection.UP.a()].d = true; + this.p.b[EnumDirection.EAST.a()].b[EnumDirection.UP.a()].d = true; + this.p.b[EnumDirection.NORTH.a()].b[EnumDirection.UP.a()].d = true; + this.p.b[EnumDirection.EAST.a()].b[EnumDirection.NORTH.a()].b[EnumDirection.UP.a()].d = true; + ArrayList arraylist = Lists.newArrayList(); + WorldGenMonumentPieces.WorldGenMonumentStateTracker[] aworldgenmonumentpieces_worldgenmonumentstatetracker1 = aworldgenmonumentpieces_worldgenmonumentstatetracker; + + l = aworldgenmonumentpieces_worldgenmonumentstatetracker.length; + + for (i1 = 0; i1 < l; ++i1) { + WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker3 = aworldgenmonumentpieces_worldgenmonumentstatetracker1[i1]; + + if (worldgenmonumentpieces_worldgenmonumentstatetracker3 != null) { + worldgenmonumentpieces_worldgenmonumentstatetracker3.a(); + arraylist.add(worldgenmonumentpieces_worldgenmonumentstatetracker3); + } + } + + worldgenmonumentpieces_worldgenmonumentstatetracker.a(); + Collections.shuffle(arraylist, random); + int k2 = 1; + Iterator iterator = arraylist.iterator(); + + while (iterator.hasNext()) { + WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker4 = (WorldGenMonumentPieces.WorldGenMonumentStateTracker) iterator.next(); + int l2 = 0; + + j1 = 0; + + while (l2 < 2 && j1 < 5) { + ++j1; + k1 = random.nextInt(6); + if (worldgenmonumentpieces_worldgenmonumentstatetracker4.c[k1]) { + l1 = EnumDirection.fromType1(k1).opposite().a(); + worldgenmonumentpieces_worldgenmonumentstatetracker4.c[k1] = false; + worldgenmonumentpieces_worldgenmonumentstatetracker4.b[k1].c[l1] = false; + if (worldgenmonumentpieces_worldgenmonumentstatetracker4.a(k2++) && worldgenmonumentpieces_worldgenmonumentstatetracker4.b[k1].a(k2++)) { + ++l2; + } else { + worldgenmonumentpieces_worldgenmonumentstatetracker4.c[k1] = true; + worldgenmonumentpieces_worldgenmonumentstatetracker4.b[k1].c[l1] = true; + } + } + } + } + + arraylist.add(worldgenmonumentpieces_worldgenmonumentstatetracker); + arraylist.add(worldgenmonumentpieces_worldgenmonumentstatetracker1); + arraylist.add(worldgenmonumentpieces_worldgenmonumentstatetracker2); + return arraylist; + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + int i = Math.max(world.F(), 64) - this.l.b; + + this.a(world, structureboundingbox, 0, 0, 0, 58, i, 58, false); + this.a(false, 0, world, random, structureboundingbox); + this.a(true, 33, world, random, structureboundingbox); + this.b(world, random, structureboundingbox); + this.c(world, random, structureboundingbox); + this.d(world, random, structureboundingbox); + this.e(world, random, structureboundingbox); + this.f(world, random, structureboundingbox); + this.g(world, random, structureboundingbox); + + int j; + + for (j = 0; j < 7; ++j) { + int k = 0; + + while (k < 7) { + if (k == 0 && j == 3) { + k = 6; + } + + int l = j * 9; + int i1 = k * 9; + + for (int j1 = 0; j1 < 4; ++j1) { + for (int k1 = 0; k1 < 4; ++k1) { + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, l + j1, 0, i1 + k1, structureboundingbox); + this.b(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, l + j1, -1, i1 + k1, structureboundingbox); + } + } + + if (j != 0 && j != 6) { + k += 6; + } else { + ++k; + } + } + } + + for (j = 0; j < 5; ++j) { + this.a(world, structureboundingbox, -1 - j, 0 + j * 2, -1 - j, -1 - j, 23, 58 + j, false); + this.a(world, structureboundingbox, 58 + j, 0 + j * 2, -1 - j, 58 + j, 23, 58 + j, false); + this.a(world, structureboundingbox, 0 - j, 0 + j * 2, -1 - j, 57 + j, 23, -1 - j, false); + this.a(world, structureboundingbox, 0 - j, 0 + j * 2, 58 + j, 57 + j, 23, 58 + j, false); + } + + Iterator iterator = this.q.iterator(); + + while (iterator.hasNext()) { + WorldGenMonumentPieces.WorldGenMonumentPiece worldgenmonumentpieces_worldgenmonumentpiece = (WorldGenMonumentPieces.WorldGenMonumentPiece) iterator.next(); + + if (worldgenmonumentpieces_worldgenmonumentpiece.c().a(structureboundingbox)) { + worldgenmonumentpieces_worldgenmonumentpiece.a(world, random, structureboundingbox); + } + } + + return true; + } + + private void a(boolean flag, int i, World world, Random random, StructureBoundingBox structureboundingbox) { + boolean flag1 = true; + + if (this.a(structureboundingbox, i, 0, i + 23, 20)) { + this.a(world, structureboundingbox, i + 0, 0, 0, i + 24, 0, 20, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + this.a(world, structureboundingbox, i + 0, 1, 0, i + 24, 10, 20, false); + + int j; + + for (j = 0; j < 4; ++j) { + this.a(world, structureboundingbox, i + j, j + 1, j, i + j, j + 1, 20, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, false); + this.a(world, structureboundingbox, i + j + 7, j + 5, j + 7, i + j + 7, j + 5, 20, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, false); + this.a(world, structureboundingbox, i + 17 - j, j + 5, j + 7, i + 17 - j, j + 5, 20, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, false); + this.a(world, structureboundingbox, i + 24 - j, j + 1, j, i + 24 - j, j + 1, 20, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, false); + this.a(world, structureboundingbox, i + j + 1, j + 1, j, i + 23 - j, j + 1, j, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, false); + this.a(world, structureboundingbox, i + j + 8, j + 5, j + 7, i + 16 - j, j + 5, j + 7, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, false); + } + + this.a(world, structureboundingbox, i + 4, 4, 4, i + 6, 4, 20, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + this.a(world, structureboundingbox, i + 7, 4, 4, i + 17, 4, 6, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + this.a(world, structureboundingbox, i + 18, 4, 4, i + 20, 4, 20, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + this.a(world, structureboundingbox, i + 11, 8, 11, i + 13, 8, 20, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.d, i + 12, 9, 12, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.d, i + 12, 9, 15, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.d, i + 12, 9, 18, structureboundingbox); + j = flag ? i + 19 : i + 5; + int k = flag ? i + 5 : i + 19; + + int l; + + for (l = 20; l >= 5; l -= 3) { + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.d, j, 5, l, structureboundingbox); + } + + for (l = 19; l >= 7; l -= 3) { + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.d, k, 5, l, structureboundingbox); + } + + for (l = 0; l < 4; ++l) { + int i1 = flag ? i + (24 - (17 - l * 3)) : i + 17 - l * 3; + + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.d, i1, 5, 5, structureboundingbox); + } + + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.d, k, 5, 5, structureboundingbox); + this.a(world, structureboundingbox, i + 11, 1, 12, i + 13, 7, 12, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + this.a(world, structureboundingbox, i + 12, 1, 11, i + 12, 7, 13, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + } + + } + + private void b(World world, Random random, StructureBoundingBox structureboundingbox) { + if (this.a(structureboundingbox, 22, 5, 35, 17)) { + this.a(world, structureboundingbox, 25, 0, 0, 32, 8, 20, false); + + for (int i = 0; i < 4; ++i) { + this.a(world, structureboundingbox, 24, 2, 5 + i * 4, 24, 4, 5 + i * 4, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, false); + this.a(world, structureboundingbox, 22, 4, 5 + i * 4, 23, 4, 5 + i * 4, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, false); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, 25, 5, 5 + i * 4, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, 26, 6, 5 + i * 4, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.e, 26, 5, 5 + i * 4, structureboundingbox); + this.a(world, structureboundingbox, 33, 2, 5 + i * 4, 33, 4, 5 + i * 4, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, false); + this.a(world, structureboundingbox, 34, 4, 5 + i * 4, 35, 4, 5 + i * 4, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, false); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, 32, 5, 5 + i * 4, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, 31, 6, 5 + i * 4, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.e, 31, 5, 5 + i * 4, structureboundingbox); + this.a(world, structureboundingbox, 27, 6, 5 + i * 4, 30, 6, 5 + i * 4, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + } + } + + } + + private void c(World world, Random random, StructureBoundingBox structureboundingbox) { + if (this.a(structureboundingbox, 15, 20, 42, 21)) { + this.a(world, structureboundingbox, 15, 0, 21, 42, 0, 21, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + this.a(world, structureboundingbox, 26, 1, 21, 31, 3, 21, false); + this.a(world, structureboundingbox, 21, 12, 21, 36, 12, 21, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + this.a(world, structureboundingbox, 17, 11, 21, 40, 11, 21, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + this.a(world, structureboundingbox, 16, 10, 21, 41, 10, 21, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + this.a(world, structureboundingbox, 15, 7, 21, 42, 9, 21, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + this.a(world, structureboundingbox, 16, 6, 21, 41, 6, 21, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + this.a(world, structureboundingbox, 17, 5, 21, 40, 5, 21, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + this.a(world, structureboundingbox, 21, 4, 21, 36, 4, 21, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + this.a(world, structureboundingbox, 22, 3, 21, 26, 3, 21, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + this.a(world, structureboundingbox, 31, 3, 21, 35, 3, 21, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + this.a(world, structureboundingbox, 23, 2, 21, 25, 2, 21, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + this.a(world, structureboundingbox, 32, 2, 21, 34, 2, 21, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + this.a(world, structureboundingbox, 28, 4, 20, 29, 4, 21, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, false); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, 27, 3, 21, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, 30, 3, 21, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, 26, 2, 21, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, 31, 2, 21, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, 25, 1, 21, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, 32, 1, 21, structureboundingbox); + + int i; + + for (i = 0; i < 7; ++i) { + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.c, 28 - i, 6 + i, 21, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.c, 29 + i, 6 + i, 21, structureboundingbox); + } + + for (i = 0; i < 4; ++i) { + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.c, 28 - i, 9 + i, 21, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.c, 29 + i, 9 + i, 21, structureboundingbox); + } + + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.c, 28, 12, 21, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.c, 29, 12, 21, structureboundingbox); + + for (i = 0; i < 3; ++i) { + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.c, 22 - i * 2, 8, 21, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.c, 22 - i * 2, 9, 21, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.c, 35 + i * 2, 8, 21, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.c, 35 + i * 2, 9, 21, structureboundingbox); + } + + this.a(world, structureboundingbox, 15, 13, 21, 42, 15, 21, false); + this.a(world, structureboundingbox, 15, 1, 21, 15, 6, 21, false); + this.a(world, structureboundingbox, 16, 1, 21, 16, 5, 21, false); + this.a(world, structureboundingbox, 17, 1, 21, 20, 4, 21, false); + this.a(world, structureboundingbox, 21, 1, 21, 21, 3, 21, false); + this.a(world, structureboundingbox, 22, 1, 21, 22, 2, 21, false); + this.a(world, structureboundingbox, 23, 1, 21, 24, 1, 21, false); + this.a(world, structureboundingbox, 42, 1, 21, 42, 6, 21, false); + this.a(world, structureboundingbox, 41, 1, 21, 41, 5, 21, false); + this.a(world, structureboundingbox, 37, 1, 21, 40, 4, 21, false); + this.a(world, structureboundingbox, 36, 1, 21, 36, 3, 21, false); + this.a(world, structureboundingbox, 33, 1, 21, 34, 1, 21, false); + this.a(world, structureboundingbox, 35, 1, 21, 35, 2, 21, false); + } + + } + + private void d(World world, Random random, StructureBoundingBox structureboundingbox) { + if (this.a(structureboundingbox, 21, 21, 36, 36)) { + this.a(world, structureboundingbox, 21, 0, 22, 36, 0, 36, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + this.a(world, structureboundingbox, 21, 1, 22, 36, 23, 36, false); + + for (int i = 0; i < 4; ++i) { + this.a(world, structureboundingbox, 21 + i, 13 + i, 21 + i, 36 - i, 13 + i, 21 + i, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, false); + this.a(world, structureboundingbox, 21 + i, 13 + i, 36 - i, 36 - i, 13 + i, 36 - i, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, false); + this.a(world, structureboundingbox, 21 + i, 13 + i, 22 + i, 21 + i, 13 + i, 35 - i, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, false); + this.a(world, structureboundingbox, 36 - i, 13 + i, 22 + i, 36 - i, 13 + i, 35 - i, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, false); + } + + this.a(world, structureboundingbox, 25, 16, 25, 32, 16, 32, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + this.a(world, structureboundingbox, 25, 17, 25, 25, 19, 25, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, false); + this.a(world, structureboundingbox, 32, 17, 25, 32, 19, 25, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, false); + this.a(world, structureboundingbox, 25, 17, 32, 25, 19, 32, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, false); + this.a(world, structureboundingbox, 32, 17, 32, 32, 19, 32, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, false); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, 26, 20, 26, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, 27, 21, 27, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.e, 27, 20, 27, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, 26, 20, 31, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, 27, 21, 30, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.e, 27, 20, 30, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, 31, 20, 31, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, 30, 21, 30, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.e, 30, 20, 30, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, 31, 20, 26, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, 30, 21, 27, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.e, 30, 20, 27, structureboundingbox); + this.a(world, structureboundingbox, 28, 21, 27, 29, 21, 27, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + this.a(world, structureboundingbox, 27, 21, 28, 27, 21, 29, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + this.a(world, structureboundingbox, 28, 21, 30, 29, 21, 30, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + this.a(world, structureboundingbox, 30, 21, 28, 30, 21, 29, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + } + + } + + private void e(World world, Random random, StructureBoundingBox structureboundingbox) { + int i; + + if (this.a(structureboundingbox, 0, 21, 6, 58)) { + this.a(world, structureboundingbox, 0, 0, 21, 6, 0, 57, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + this.a(world, structureboundingbox, 0, 1, 21, 6, 7, 57, false); + this.a(world, structureboundingbox, 4, 4, 21, 6, 4, 53, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + + for (i = 0; i < 4; ++i) { + this.a(world, structureboundingbox, i, i + 1, 21, i, i + 1, 57 - i, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, false); + } + + for (i = 23; i < 53; i += 3) { + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.d, 5, 5, i, structureboundingbox); + } + + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.d, 5, 5, 52, structureboundingbox); + + for (i = 0; i < 4; ++i) { + this.a(world, structureboundingbox, i, i + 1, 21, i, i + 1, 57 - i, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, false); + } + + this.a(world, structureboundingbox, 4, 1, 52, 6, 3, 52, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + this.a(world, structureboundingbox, 5, 1, 51, 5, 3, 53, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + } + + if (this.a(structureboundingbox, 51, 21, 58, 58)) { + this.a(world, structureboundingbox, 51, 0, 21, 57, 0, 57, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + this.a(world, structureboundingbox, 51, 1, 21, 57, 7, 57, false); + this.a(world, structureboundingbox, 51, 4, 21, 53, 4, 53, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + + for (i = 0; i < 4; ++i) { + this.a(world, structureboundingbox, 57 - i, i + 1, 21, 57 - i, i + 1, 57 - i, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, false); + } + + for (i = 23; i < 53; i += 3) { + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.d, 52, 5, i, structureboundingbox); + } + + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.d, 52, 5, 52, structureboundingbox); + this.a(world, structureboundingbox, 51, 1, 52, 53, 3, 52, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + this.a(world, structureboundingbox, 52, 1, 51, 52, 3, 53, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + } + + if (this.a(structureboundingbox, 0, 51, 57, 57)) { + this.a(world, structureboundingbox, 7, 0, 51, 50, 0, 57, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + this.a(world, structureboundingbox, 7, 1, 51, 50, 10, 57, false); + + for (i = 0; i < 4; ++i) { + this.a(world, structureboundingbox, i + 1, i + 1, 57 - i, 56 - i, i + 1, 57 - i, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, false); + } + } + + } + + private void f(World world, Random random, StructureBoundingBox structureboundingbox) { + int i; + + if (this.a(structureboundingbox, 7, 21, 13, 50)) { + this.a(world, structureboundingbox, 7, 0, 21, 13, 0, 50, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + this.a(world, structureboundingbox, 7, 1, 21, 13, 10, 50, false); + this.a(world, structureboundingbox, 11, 8, 21, 13, 8, 53, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + + for (i = 0; i < 4; ++i) { + this.a(world, structureboundingbox, i + 7, i + 5, 21, i + 7, i + 5, 54, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, false); + } + + for (i = 21; i <= 45; i += 3) { + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.d, 12, 9, i, structureboundingbox); + } + } + + if (this.a(structureboundingbox, 44, 21, 50, 54)) { + this.a(world, structureboundingbox, 44, 0, 21, 50, 0, 50, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + this.a(world, structureboundingbox, 44, 1, 21, 50, 10, 50, false); + this.a(world, structureboundingbox, 44, 8, 21, 46, 8, 53, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + + for (i = 0; i < 4; ++i) { + this.a(world, structureboundingbox, 50 - i, i + 5, 21, 50 - i, i + 5, 54, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, false); + } + + for (i = 21; i <= 45; i += 3) { + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.d, 45, 9, i, structureboundingbox); + } + } + + if (this.a(structureboundingbox, 8, 44, 49, 54)) { + this.a(world, structureboundingbox, 14, 0, 44, 43, 0, 50, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + this.a(world, structureboundingbox, 14, 1, 44, 43, 10, 50, false); + + for (i = 12; i <= 45; i += 3) { + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.d, i, 9, 45, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.d, i, 9, 52, structureboundingbox); + if (i == 12 || i == 18 || i == 24 || i == 33 || i == 39 || i == 45) { + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.d, i, 9, 47, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.d, i, 9, 50, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.d, i, 10, 45, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.d, i, 10, 46, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.d, i, 10, 51, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.d, i, 10, 52, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.d, i, 11, 47, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.d, i, 11, 50, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.d, i, 12, 48, structureboundingbox); + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.d, i, 12, 49, structureboundingbox); + } + } + + for (i = 0; i < 3; ++i) { + this.a(world, structureboundingbox, 8 + i, 5 + i, 54, 49 - i, 5 + i, 54, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + } + + this.a(world, structureboundingbox, 11, 8, 54, 46, 8, 54, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, false); + this.a(world, structureboundingbox, 14, 8, 44, 43, 8, 53, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + } + + } + + private void g(World world, Random random, StructureBoundingBox structureboundingbox) { + int i; + + if (this.a(structureboundingbox, 14, 21, 20, 43)) { + this.a(world, structureboundingbox, 14, 0, 21, 20, 0, 43, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + this.a(world, structureboundingbox, 14, 1, 22, 20, 14, 43, false); + this.a(world, structureboundingbox, 18, 12, 22, 20, 12, 39, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + this.a(world, structureboundingbox, 18, 12, 21, 20, 12, 21, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, false); + + for (i = 0; i < 4; ++i) { + this.a(world, structureboundingbox, i + 14, i + 9, 21, i + 14, i + 9, 43 - i, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, false); + } + + for (i = 23; i <= 39; i += 3) { + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.d, 19, 13, i, structureboundingbox); + } + } + + if (this.a(structureboundingbox, 37, 21, 43, 43)) { + this.a(world, structureboundingbox, 37, 0, 21, 43, 0, 43, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + this.a(world, structureboundingbox, 37, 1, 22, 43, 14, 43, false); + this.a(world, structureboundingbox, 37, 12, 22, 39, 12, 39, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + this.a(world, structureboundingbox, 37, 12, 21, 39, 12, 21, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, false); + + for (i = 0; i < 4; ++i) { + this.a(world, structureboundingbox, 43 - i, i + 9, 21, 43 - i, i + 9, 43 - i, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, false); + } + + for (i = 23; i <= 39; i += 3) { + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.d, 38, 13, i, structureboundingbox); + } + } + + if (this.a(structureboundingbox, 15, 37, 42, 43)) { + this.a(world, structureboundingbox, 21, 0, 37, 36, 0, 43, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + this.a(world, structureboundingbox, 21, 1, 37, 36, 14, 43, false); + this.a(world, structureboundingbox, 21, 12, 37, 36, 12, 39, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, WorldGenMonumentPieces.WorldGenMonumentPiece1.a, false); + + for (i = 0; i < 4; ++i) { + this.a(world, structureboundingbox, 15 + i, i + 9, 43 - i, 42 - i, i + 9, 43 - i, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, WorldGenMonumentPieces.WorldGenMonumentPiece1.b, false); + } + + for (i = 21; i <= 36; i += 3) { + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece1.d, i, 13, 38, structureboundingbox); + } + } + + } + } + + public abstract static class WorldGenMonumentPiece extends StructurePiece { + + protected static final IBlockData a = Blocks.PRISMARINE.fromLegacyData(BlockPrismarine.b); + protected static final IBlockData b = Blocks.PRISMARINE.fromLegacyData(BlockPrismarine.N); + protected static final IBlockData c = Blocks.PRISMARINE.fromLegacyData(BlockPrismarine.O); + protected static final IBlockData d = WorldGenMonumentPieces.WorldGenMonumentPiece.b; + protected static final IBlockData e = Blocks.SEA_LANTERN.getBlockData(); + protected static final IBlockData f = Blocks.WATER.getBlockData(); + protected static final int g = b(2, 0, 0); + protected static final int h = b(2, 2, 0); + protected static final int i = b(0, 1, 0); + protected static final int j = b(4, 1, 0); + protected WorldGenMonumentPieces.WorldGenMonumentStateTracker k; + + protected static final int b(int i, int j, int k) { + return j * 25 + k * 5 + i; + } + + public WorldGenMonumentPiece() { + super(0); + } + + public WorldGenMonumentPiece(int i) { + super(i); + } + + public WorldGenMonumentPiece(EnumDirection enumdirection, StructureBoundingBox structureboundingbox) { + super(1); + this.m = enumdirection; + this.l = structureboundingbox; + } + + protected WorldGenMonumentPiece(int i, EnumDirection enumdirection, WorldGenMonumentPieces.WorldGenMonumentStateTracker worldgenmonumentpieces_worldgenmonumentstatetracker, int j, int k, int l) { + super(i); + this.m = enumdirection; + this.k = worldgenmonumentpieces_worldgenmonumentstatetracker; + int i1 = worldgenmonumentpieces_worldgenmonumentstatetracker.a; + int j1 = i1 % 5; + int k1 = i1 / 5 % 5; + int l1 = i1 / 25; + + if (enumdirection != EnumDirection.NORTH && enumdirection != EnumDirection.SOUTH) { + this.l = new StructureBoundingBox(0, 0, 0, l * 8 - 1, k * 4 - 1, j * 8 - 1); + } else { + this.l = new StructureBoundingBox(0, 0, 0, j * 8 - 1, k * 4 - 1, l * 8 - 1); + } + + switch (WorldGenMonumentPieces.SyntheticClass_1.a[enumdirection.ordinal()]) { + case 1: + this.l.a(j1 * 8, l1 * 4, -(k1 + l) * 8 + 1); + break; + + case 2: + this.l.a(j1 * 8, l1 * 4, k1 * 8); + break; + + case 3: + this.l.a(-(k1 + l) * 8 + 1, l1 * 4, j1 * 8); + break; + + default: + this.l.a(k1 * 8, l1 * 4, j1 * 8); + } + + } + + protected void a(NBTTagCompound nbttagcompound) {} + + protected void b(NBTTagCompound nbttagcompound) {} + + protected void a(World world, StructureBoundingBox structureboundingbox, int i, int j, int k, int l, int i1, int j1, boolean flag) { + for (int k1 = j; k1 <= i1; ++k1) { + for (int l1 = i; l1 <= l; ++l1) { + for (int i2 = k; i2 <= j1; ++i2) { + if (!flag || this.a(world, l1, k1, i2, structureboundingbox).getBlock().getMaterial() != Material.AIR) { + if (this.d(k1) >= world.F()) { + this.a(world, Blocks.AIR.getBlockData(), l1, k1, i2, structureboundingbox); + } else { + this.a(world, WorldGenMonumentPieces.WorldGenMonumentPiece.f, l1, k1, i2, structureboundingbox); + } + } + } + } + } + + } + + protected void a(World world, StructureBoundingBox structureboundingbox, int i, int j, boolean flag) { + if (flag) { + this.a(world, structureboundingbox, i + 0, 0, j + 0, i + 2, 0, j + 8 - 1, WorldGenMonumentPieces.WorldGenMonumentPiece.a, WorldGenMonumentPieces.WorldGenMonumentPiece.a, false); + this.a(world, structureboundingbox, i + 5, 0, j + 0, i + 8 - 1, 0, j + 8 - 1, WorldGenMonumentPieces.WorldGenMonumentPiece.a, WorldGenMonumentPieces.WorldGenMonumentPiece.a, false); + this.a(world, structureboundingbox, i + 3, 0, j + 0, i + 4, 0, j + 2, WorldGenMonumentPieces.WorldGenMonumentPiece.a, WorldGenMonumentPieces.WorldGenMonumentPiece.a, false); + this.a(world, structureboundingbox, i + 3, 0, j + 5, i + 4, 0, j + 8 - 1, WorldGenMonumentPieces.WorldGenMonumentPiece.a, WorldGenMonumentPieces.WorldGenMonumentPiece.a, false); + this.a(world, structureboundingbox, i + 3, 0, j + 2, i + 4, 0, j + 2, WorldGenMonumentPieces.WorldGenMonumentPiece.b, WorldGenMonumentPieces.WorldGenMonumentPiece.b, false); + this.a(world, structureboundingbox, i + 3, 0, j + 5, i + 4, 0, j + 5, WorldGenMonumentPieces.WorldGenMonumentPiece.b, WorldGenMonumentPieces.WorldGenMonumentPiece.b, false); + this.a(world, structureboundingbox, i + 2, 0, j + 3, i + 2, 0, j + 4, WorldGenMonumentPieces.WorldGenMonumentPiece.b, WorldGenMonumentPieces.WorldGenMonumentPiece.b, false); + this.a(world, structureboundingbox, i + 5, 0, j + 3, i + 5, 0, j + 4, WorldGenMonumentPieces.WorldGenMonumentPiece.b, WorldGenMonumentPieces.WorldGenMonumentPiece.b, false); + } else { + this.a(world, structureboundingbox, i + 0, 0, j + 0, i + 8 - 1, 0, j + 8 - 1, WorldGenMonumentPieces.WorldGenMonumentPiece.a, WorldGenMonumentPieces.WorldGenMonumentPiece.a, false); + } + + } + + protected void a(World world, StructureBoundingBox structureboundingbox, int i, int j, int k, int l, int i1, int j1, IBlockData iblockdata) { + for (int k1 = j; k1 <= i1; ++k1) { + for (int l1 = i; l1 <= l; ++l1) { + for (int i2 = k; i2 <= j1; ++i2) { + if (this.a(world, l1, k1, i2, structureboundingbox) == WorldGenMonumentPieces.WorldGenMonumentPiece.f) { + this.a(world, iblockdata, l1, k1, i2, structureboundingbox); + } + } + } + } + + } + + protected boolean a(StructureBoundingBox structureboundingbox, int i, int j, int k, int l) { + int i1 = this.a(i, j); + int j1 = this.b(i, j); + int k1 = this.a(k, l); + int l1 = this.b(k, l); + + return structureboundingbox.a(Math.min(i1, k1), Math.min(j1, l1), Math.max(i1, k1), Math.max(j1, l1)); + } + + protected boolean a(World world, StructureBoundingBox structureboundingbox, int i, int j, int k) { + int l = this.a(i, k); + int i1 = this.d(j); + int j1 = this.b(i, k); + + if (structureboundingbox.b((BaseBlockPosition) (new BlockPosition(l, i1, j1)))) { + EntityGuardian entityguardian = new EntityGuardian(world); + + entityguardian.setElder(true); + entityguardian.heal(entityguardian.getMaxHealth()); + entityguardian.setPositionRotation((double) l + 0.5D, (double) i1, (double) j1 + 0.5D, 0.0F, 0.0F); + entityguardian.prepare(world.E(new BlockPosition(entityguardian)), (GroupDataEntity) null); + world.addEntity(entityguardian); + return true; + } else { + return false; + } + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenMushrooms.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenMushrooms.java new file mode 100644 index 0000000..d9d03c7 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenMushrooms.java @@ -0,0 +1,24 @@ +package net.minecraft.server; + +import java.util.Random; + +public class WorldGenMushrooms extends WorldGenerator { + + private BlockPlant a; + + public WorldGenMushrooms(BlockPlant blockplant) { + this.a = blockplant; + } + + public boolean generate(World world, Random random, BlockPosition blockposition) { + for (int i = 0; i < 64; ++i) { + BlockPosition blockposition1 = blockposition.a(random.nextInt(8) - random.nextInt(8), random.nextInt(4) - random.nextInt(4), random.nextInt(8) - random.nextInt(8)); + + if (world.isEmpty(blockposition1) && (!world.worldProvider.o() || blockposition1.getY() < 255) && this.a.f(world, blockposition1, this.a.getBlockData())) { + world.setTypeAndData(blockposition1, this.a.getBlockData(), 2); + } + } + + return true; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenNether.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenNether.java new file mode 100644 index 0000000..374cb3f --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenNether.java @@ -0,0 +1,62 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import java.util.List; +import java.util.Random; + +public class WorldGenNether extends StructureGenerator { + + private List d = Lists.newArrayList(); + + public WorldGenNether() { + this.d.add(new BiomeBase.BiomeMeta(EntityBlaze.class, 10, 2, 3)); + this.d.add(new BiomeBase.BiomeMeta(EntityPigZombie.class, 5, 4, 4)); + this.d.add(new BiomeBase.BiomeMeta(EntitySkeleton.class, 10, 4, 4)); + this.d.add(new BiomeBase.BiomeMeta(EntityMagmaCube.class, 3, 4, 4)); + } + + public String a() { + return "Fortress"; + } + + public List b() { + return this.d; + } + + protected boolean a(int i, int j) { + int k = i >> 4; + int l = j >> 4; + + this.b.setSeed((long) (k ^ l << 4) ^ this.c.getSeed()); + this.b.nextInt(); + return this.b.nextInt(3) != 0 ? false : (i != (k << 4) + 4 + this.b.nextInt(8) ? false : j == (l << 4) + 4 + this.b.nextInt(8)); + } + + protected StructureStart b(int i, int j) { + return new WorldGenNether.WorldGenNetherStart(this.c, this.b, i, j); + } + + public static class WorldGenNetherStart extends StructureStart { + + public WorldGenNetherStart() {} + + public WorldGenNetherStart(World world, Random random, int i, int j) { + super(i, j); + WorldGenNetherPieces.WorldGenNetherPiece15 worldgennetherpieces_worldgennetherpiece15 = new WorldGenNetherPieces.WorldGenNetherPiece15(random, (i << 4) + 2, (j << 4) + 2); + + this.a.add(worldgennetherpieces_worldgennetherpiece15); + worldgennetherpieces_worldgennetherpiece15.a((StructurePiece) worldgennetherpieces_worldgennetherpiece15, (List) this.a, random); + List list = worldgennetherpieces_worldgennetherpiece15.e; + + while (!list.isEmpty()) { + int k = random.nextInt(list.size()); + StructurePiece structurepiece = (StructurePiece) list.remove(k); + + structurepiece.a((StructurePiece) worldgennetherpieces_worldgennetherpiece15, (List) this.a, random); + } + + this.c(); + this.a(world, random, 48, 70); + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenNetherPieces.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenNetherPieces.java new file mode 100644 index 0000000..95d84fe --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenNetherPieces.java @@ -0,0 +1,1241 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import java.util.Iterator; +import java.util.List; +import java.util.Random; + +public class WorldGenNetherPieces { + + private static final WorldGenNetherPieces.WorldGenNetherPieceWeight[] a = new WorldGenNetherPieces.WorldGenNetherPieceWeight[] { new WorldGenNetherPieces.WorldGenNetherPieceWeight(WorldGenNetherPieces.WorldGenNetherPiece3.class, 30, 0, true), new WorldGenNetherPieces.WorldGenNetherPieceWeight(WorldGenNetherPieces.WorldGenNetherPiece1.class, 10, 4), new WorldGenNetherPieces.WorldGenNetherPieceWeight(WorldGenNetherPieces.WorldGenNetherPiece13.class, 10, 4), new WorldGenNetherPieces.WorldGenNetherPieceWeight(WorldGenNetherPieces.WorldGenNetherPiece14.class, 10, 3), new WorldGenNetherPieces.WorldGenNetherPieceWeight(WorldGenNetherPieces.WorldGenNetherPiece12.class, 5, 2), new WorldGenNetherPieces.WorldGenNetherPieceWeight(WorldGenNetherPieces.WorldGenNetherPiece6.class, 5, 1)}; + private static final WorldGenNetherPieces.WorldGenNetherPieceWeight[] b = new WorldGenNetherPieces.WorldGenNetherPieceWeight[] { new WorldGenNetherPieces.WorldGenNetherPieceWeight(WorldGenNetherPieces.WorldGenNetherPiece9.class, 25, 0, true), new WorldGenNetherPieces.WorldGenNetherPieceWeight(WorldGenNetherPieces.WorldGenNetherPiece7.class, 15, 5), new WorldGenNetherPieces.WorldGenNetherPieceWeight(WorldGenNetherPieces.WorldGenNetherPiece10.class, 5, 10), new WorldGenNetherPieces.WorldGenNetherPieceWeight(WorldGenNetherPieces.WorldGenNetherPiece8.class, 5, 10), new WorldGenNetherPieces.WorldGenNetherPieceWeight(WorldGenNetherPieces.WorldGenNetherPiece4.class, 10, 3, true), new WorldGenNetherPieces.WorldGenNetherPieceWeight(WorldGenNetherPieces.WorldGenNetherPiece5.class, 7, 2), new WorldGenNetherPieces.WorldGenNetherPieceWeight(WorldGenNetherPieces.WorldGenNetherPiece11.class, 5, 2)}; + + public static void a() { + WorldGenFactory.a(WorldGenNetherPieces.WorldGenNetherPiece1.class, "NeBCr"); + WorldGenFactory.a(WorldGenNetherPieces.WorldGenNetherPiece2.class, "NeBEF"); + WorldGenFactory.a(WorldGenNetherPieces.WorldGenNetherPiece3.class, "NeBS"); + WorldGenFactory.a(WorldGenNetherPieces.WorldGenNetherPiece4.class, "NeCCS"); + WorldGenFactory.a(WorldGenNetherPieces.WorldGenNetherPiece5.class, "NeCTB"); + WorldGenFactory.a(WorldGenNetherPieces.WorldGenNetherPiece6.class, "NeCE"); + WorldGenFactory.a(WorldGenNetherPieces.WorldGenNetherPiece7.class, "NeSCSC"); + WorldGenFactory.a(WorldGenNetherPieces.WorldGenNetherPiece8.class, "NeSCLT"); + WorldGenFactory.a(WorldGenNetherPieces.WorldGenNetherPiece9.class, "NeSC"); + WorldGenFactory.a(WorldGenNetherPieces.WorldGenNetherPiece10.class, "NeSCRT"); + WorldGenFactory.a(WorldGenNetherPieces.WorldGenNetherPiece11.class, "NeCSR"); + WorldGenFactory.a(WorldGenNetherPieces.WorldGenNetherPiece12.class, "NeMT"); + WorldGenFactory.a(WorldGenNetherPieces.WorldGenNetherPiece13.class, "NeRC"); + WorldGenFactory.a(WorldGenNetherPieces.WorldGenNetherPiece14.class, "NeSR"); + WorldGenFactory.a(WorldGenNetherPieces.WorldGenNetherPiece15.class, "NeStart"); + } + + private static WorldGenNetherPieces.WorldGenNetherPiece b(WorldGenNetherPieces.WorldGenNetherPieceWeight worldgennetherpieces_worldgennetherpieceweight, List list, Random random, int i, int j, int k, EnumDirection enumdirection, int l) { + Class oclass = worldgennetherpieces_worldgennetherpieceweight.a; + Object object = null; + + if (oclass == WorldGenNetherPieces.WorldGenNetherPiece3.class) { + object = WorldGenNetherPieces.WorldGenNetherPiece3.a(list, random, i, j, k, enumdirection, l); + } else if (oclass == WorldGenNetherPieces.WorldGenNetherPiece1.class) { + object = WorldGenNetherPieces.WorldGenNetherPiece1.a(list, random, i, j, k, enumdirection, l); + } else if (oclass == WorldGenNetherPieces.WorldGenNetherPiece13.class) { + object = WorldGenNetherPieces.WorldGenNetherPiece13.a(list, random, i, j, k, enumdirection, l); + } else if (oclass == WorldGenNetherPieces.WorldGenNetherPiece14.class) { + object = WorldGenNetherPieces.WorldGenNetherPiece14.a(list, random, i, j, k, l, enumdirection); + } else if (oclass == WorldGenNetherPieces.WorldGenNetherPiece12.class) { + object = WorldGenNetherPieces.WorldGenNetherPiece12.a(list, random, i, j, k, l, enumdirection); + } else if (oclass == WorldGenNetherPieces.WorldGenNetherPiece6.class) { + object = WorldGenNetherPieces.WorldGenNetherPiece6.a(list, random, i, j, k, enumdirection, l); + } else if (oclass == WorldGenNetherPieces.WorldGenNetherPiece9.class) { + object = WorldGenNetherPieces.WorldGenNetherPiece9.a(list, random, i, j, k, enumdirection, l); + } else if (oclass == WorldGenNetherPieces.WorldGenNetherPiece10.class) { + object = WorldGenNetherPieces.WorldGenNetherPiece10.a(list, random, i, j, k, enumdirection, l); + } else if (oclass == WorldGenNetherPieces.WorldGenNetherPiece8.class) { + object = WorldGenNetherPieces.WorldGenNetherPiece8.a(list, random, i, j, k, enumdirection, l); + } else if (oclass == WorldGenNetherPieces.WorldGenNetherPiece4.class) { + object = WorldGenNetherPieces.WorldGenNetherPiece4.a(list, random, i, j, k, enumdirection, l); + } else if (oclass == WorldGenNetherPieces.WorldGenNetherPiece5.class) { + object = WorldGenNetherPieces.WorldGenNetherPiece5.a(list, random, i, j, k, enumdirection, l); + } else if (oclass == WorldGenNetherPieces.WorldGenNetherPiece7.class) { + object = WorldGenNetherPieces.WorldGenNetherPiece7.a(list, random, i, j, k, enumdirection, l); + } else if (oclass == WorldGenNetherPieces.WorldGenNetherPiece11.class) { + object = WorldGenNetherPieces.WorldGenNetherPiece11.a(list, random, i, j, k, enumdirection, l); + } + + return (WorldGenNetherPieces.WorldGenNetherPiece) object; + } + + static class SyntheticClass_1 { + + static final int[] a = new int[EnumDirection.values().length]; + + static { + try { + WorldGenNetherPieces.SyntheticClass_1.a[EnumDirection.NORTH.ordinal()] = 1; + } catch (NoSuchFieldError nosuchfielderror) { + ; + } + + try { + WorldGenNetherPieces.SyntheticClass_1.a[EnumDirection.SOUTH.ordinal()] = 2; + } catch (NoSuchFieldError nosuchfielderror1) { + ; + } + + try { + WorldGenNetherPieces.SyntheticClass_1.a[EnumDirection.WEST.ordinal()] = 3; + } catch (NoSuchFieldError nosuchfielderror2) { + ; + } + + try { + WorldGenNetherPieces.SyntheticClass_1.a[EnumDirection.EAST.ordinal()] = 4; + } catch (NoSuchFieldError nosuchfielderror3) { + ; + } + + } + } + + public static class WorldGenNetherPiece5 extends WorldGenNetherPieces.WorldGenNetherPiece { + + public WorldGenNetherPiece5() {} + + public WorldGenNetherPiece5(int i, Random random, StructureBoundingBox structureboundingbox, EnumDirection enumdirection) { + super(i); + this.m = enumdirection; + this.l = structureboundingbox; + } + + public void a(StructurePiece structurepiece, List list, Random random) { + byte b0 = 1; + + if (this.m == EnumDirection.WEST || this.m == EnumDirection.NORTH) { + b0 = 5; + } + + this.b((WorldGenNetherPieces.WorldGenNetherPiece15) structurepiece, list, random, 0, b0, random.nextInt(8) > 0); + this.c((WorldGenNetherPieces.WorldGenNetherPiece15) structurepiece, list, random, 0, b0, random.nextInt(8) > 0); + } + + public static WorldGenNetherPieces.WorldGenNetherPiece5 a(List list, Random random, int i, int j, int k, EnumDirection enumdirection, int l) { + StructureBoundingBox structureboundingbox = StructureBoundingBox.a(i, j, k, -3, 0, 0, 9, 7, 9, enumdirection); + + return a(structureboundingbox) && StructurePiece.a(list, structureboundingbox) == null ? new WorldGenNetherPieces.WorldGenNetherPiece5(l, random, structureboundingbox, enumdirection) : null; + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + this.a(world, structureboundingbox, 0, 0, 0, 8, 1, 8, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 0, 2, 0, 8, 5, 8, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + this.a(world, structureboundingbox, 0, 6, 0, 8, 6, 5, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 0, 2, 0, 2, 5, 0, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 6, 2, 0, 8, 5, 0, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 1, 3, 0, 1, 4, 0, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 7, 3, 0, 7, 4, 0, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 0, 2, 4, 8, 2, 8, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 1, 1, 4, 2, 2, 4, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + this.a(world, structureboundingbox, 6, 1, 4, 7, 2, 4, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + this.a(world, structureboundingbox, 0, 3, 8, 8, 3, 8, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 0, 3, 6, 0, 3, 7, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 8, 3, 6, 8, 3, 7, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 0, 3, 4, 0, 5, 5, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 8, 3, 4, 8, 5, 5, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 1, 3, 5, 2, 5, 5, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 6, 3, 5, 7, 5, 5, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 1, 4, 5, 1, 5, 5, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 7, 4, 5, 7, 5, 5, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + + for (int i = 0; i <= 5; ++i) { + for (int j = 0; j <= 8; ++j) { + this.b(world, Blocks.NETHER_BRICK.getBlockData(), j, -1, i, structureboundingbox); + } + } + + return true; + } + } + + public static class WorldGenNetherPiece4 extends WorldGenNetherPieces.WorldGenNetherPiece { + + public WorldGenNetherPiece4() {} + + public WorldGenNetherPiece4(int i, Random random, StructureBoundingBox structureboundingbox, EnumDirection enumdirection) { + super(i); + this.m = enumdirection; + this.l = structureboundingbox; + } + + public void a(StructurePiece structurepiece, List list, Random random) { + this.a((WorldGenNetherPieces.WorldGenNetherPiece15) structurepiece, list, random, 1, 0, true); + } + + public static WorldGenNetherPieces.WorldGenNetherPiece4 a(List list, Random random, int i, int j, int k, EnumDirection enumdirection, int l) { + StructureBoundingBox structureboundingbox = StructureBoundingBox.a(i, j, k, -1, -7, 0, 5, 14, 10, enumdirection); + + return a(structureboundingbox) && StructurePiece.a(list, structureboundingbox) == null ? new WorldGenNetherPieces.WorldGenNetherPiece4(l, random, structureboundingbox, enumdirection) : null; + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + int i = this.a(Blocks.NETHER_BRICK_STAIRS, 2); + + for (int j = 0; j <= 9; ++j) { + int k = Math.max(1, 7 - j); + int l = Math.min(Math.max(k + 5, 14 - j), 13); + int i1 = j; + + this.a(world, structureboundingbox, 0, 0, j, 4, k, j, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 1, k + 1, j, 3, l - 1, j, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + if (j <= 6) { + this.a(world, Blocks.NETHER_BRICK_STAIRS.fromLegacyData(i), 1, k + 1, j, structureboundingbox); + this.a(world, Blocks.NETHER_BRICK_STAIRS.fromLegacyData(i), 2, k + 1, j, structureboundingbox); + this.a(world, Blocks.NETHER_BRICK_STAIRS.fromLegacyData(i), 3, k + 1, j, structureboundingbox); + } + + this.a(world, structureboundingbox, 0, l, j, 4, l, j, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 0, k + 1, j, 0, l - 1, j, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 4, k + 1, j, 4, l - 1, j, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + if ((j & 1) == 0) { + this.a(world, structureboundingbox, 0, k + 2, j, 0, k + 3, j, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 4, k + 2, j, 4, k + 3, j, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + } + + for (int j1 = 0; j1 <= 4; ++j1) { + this.b(world, Blocks.NETHER_BRICK.getBlockData(), j1, -1, i1, structureboundingbox); + } + } + + return true; + } + } + + public static class WorldGenNetherPiece8 extends WorldGenNetherPieces.WorldGenNetherPiece { + + private boolean b; + + public WorldGenNetherPiece8() {} + + public WorldGenNetherPiece8(int i, Random random, StructureBoundingBox structureboundingbox, EnumDirection enumdirection) { + super(i); + this.m = enumdirection; + this.l = structureboundingbox; + this.b = random.nextInt(3) == 0; + } + + protected void b(NBTTagCompound nbttagcompound) { + super.b(nbttagcompound); + this.b = nbttagcompound.getBoolean("Chest"); + } + + protected void a(NBTTagCompound nbttagcompound) { + super.a(nbttagcompound); + nbttagcompound.setBoolean("Chest", this.b); + } + + public void a(StructurePiece structurepiece, List list, Random random) { + this.b((WorldGenNetherPieces.WorldGenNetherPiece15) structurepiece, list, random, 0, 1, true); + } + + public static WorldGenNetherPieces.WorldGenNetherPiece8 a(List list, Random random, int i, int j, int k, EnumDirection enumdirection, int l) { + StructureBoundingBox structureboundingbox = StructureBoundingBox.a(i, j, k, -1, 0, 0, 5, 7, 5, enumdirection); + + return a(structureboundingbox) && StructurePiece.a(list, structureboundingbox) == null ? new WorldGenNetherPieces.WorldGenNetherPiece8(l, random, structureboundingbox, enumdirection) : null; + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + this.a(world, structureboundingbox, 0, 0, 0, 4, 1, 4, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 0, 2, 0, 4, 5, 4, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + this.a(world, structureboundingbox, 4, 2, 0, 4, 5, 4, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 4, 3, 1, 4, 4, 1, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 4, 3, 3, 4, 4, 3, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 0, 2, 0, 0, 5, 0, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 0, 2, 4, 3, 5, 4, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 1, 3, 4, 1, 4, 4, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 3, 3, 4, 3, 4, 4, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + if (this.b && structureboundingbox.b((BaseBlockPosition) (new BlockPosition(this.a(3, 3), this.d(2), this.b(3, 3))))) { + this.b = false; + this.a(world, structureboundingbox, random, 3, 2, 3, WorldGenNetherPieces.WorldGenNetherPiece8.a, 2 + random.nextInt(4)); + } + + this.a(world, structureboundingbox, 0, 6, 0, 4, 6, 4, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + + for (int i = 0; i <= 4; ++i) { + for (int j = 0; j <= 4; ++j) { + this.b(world, Blocks.NETHER_BRICK.getBlockData(), i, -1, j, structureboundingbox); + } + } + + return true; + } + } + + public static class WorldGenNetherPiece10 extends WorldGenNetherPieces.WorldGenNetherPiece { + + private boolean b; + + public WorldGenNetherPiece10() {} + + public WorldGenNetherPiece10(int i, Random random, StructureBoundingBox structureboundingbox, EnumDirection enumdirection) { + super(i); + this.m = enumdirection; + this.l = structureboundingbox; + this.b = random.nextInt(3) == 0; + } + + protected void b(NBTTagCompound nbttagcompound) { + super.b(nbttagcompound); + this.b = nbttagcompound.getBoolean("Chest"); + } + + protected void a(NBTTagCompound nbttagcompound) { + super.a(nbttagcompound); + nbttagcompound.setBoolean("Chest", this.b); + } + + public void a(StructurePiece structurepiece, List list, Random random) { + this.c((WorldGenNetherPieces.WorldGenNetherPiece15) structurepiece, list, random, 0, 1, true); + } + + public static WorldGenNetherPieces.WorldGenNetherPiece10 a(List list, Random random, int i, int j, int k, EnumDirection enumdirection, int l) { + StructureBoundingBox structureboundingbox = StructureBoundingBox.a(i, j, k, -1, 0, 0, 5, 7, 5, enumdirection); + + return a(structureboundingbox) && StructurePiece.a(list, structureboundingbox) == null ? new WorldGenNetherPieces.WorldGenNetherPiece10(l, random, structureboundingbox, enumdirection) : null; + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + this.a(world, structureboundingbox, 0, 0, 0, 4, 1, 4, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 0, 2, 0, 4, 5, 4, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + this.a(world, structureboundingbox, 0, 2, 0, 0, 5, 4, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 0, 3, 1, 0, 4, 1, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 0, 3, 3, 0, 4, 3, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 4, 2, 0, 4, 5, 0, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 1, 2, 4, 4, 5, 4, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 1, 3, 4, 1, 4, 4, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 3, 3, 4, 3, 4, 4, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + if (this.b && structureboundingbox.b((BaseBlockPosition) (new BlockPosition(this.a(1, 3), this.d(2), this.b(1, 3))))) { + this.b = false; + this.a(world, structureboundingbox, random, 1, 2, 3, WorldGenNetherPieces.WorldGenNetherPiece10.a, 2 + random.nextInt(4)); + } + + this.a(world, structureboundingbox, 0, 6, 0, 4, 6, 4, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + + for (int i = 0; i <= 4; ++i) { + for (int j = 0; j <= 4; ++j) { + this.b(world, Blocks.NETHER_BRICK.getBlockData(), i, -1, j, structureboundingbox); + } + } + + return true; + } + } + + public static class WorldGenNetherPiece7 extends WorldGenNetherPieces.WorldGenNetherPiece { + + public WorldGenNetherPiece7() {} + + public WorldGenNetherPiece7(int i, Random random, StructureBoundingBox structureboundingbox, EnumDirection enumdirection) { + super(i); + this.m = enumdirection; + this.l = structureboundingbox; + } + + public void a(StructurePiece structurepiece, List list, Random random) { + this.a((WorldGenNetherPieces.WorldGenNetherPiece15) structurepiece, list, random, 1, 0, true); + this.b((WorldGenNetherPieces.WorldGenNetherPiece15) structurepiece, list, random, 0, 1, true); + this.c((WorldGenNetherPieces.WorldGenNetherPiece15) structurepiece, list, random, 0, 1, true); + } + + public static WorldGenNetherPieces.WorldGenNetherPiece7 a(List list, Random random, int i, int j, int k, EnumDirection enumdirection, int l) { + StructureBoundingBox structureboundingbox = StructureBoundingBox.a(i, j, k, -1, 0, 0, 5, 7, 5, enumdirection); + + return a(structureboundingbox) && StructurePiece.a(list, structureboundingbox) == null ? new WorldGenNetherPieces.WorldGenNetherPiece7(l, random, structureboundingbox, enumdirection) : null; + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + this.a(world, structureboundingbox, 0, 0, 0, 4, 1, 4, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 0, 2, 0, 4, 5, 4, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + this.a(world, structureboundingbox, 0, 2, 0, 0, 5, 0, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 4, 2, 0, 4, 5, 0, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 0, 2, 4, 0, 5, 4, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 4, 2, 4, 4, 5, 4, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 0, 6, 0, 4, 6, 4, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + + for (int i = 0; i <= 4; ++i) { + for (int j = 0; j <= 4; ++j) { + this.b(world, Blocks.NETHER_BRICK.getBlockData(), i, -1, j, structureboundingbox); + } + } + + return true; + } + } + + public static class WorldGenNetherPiece9 extends WorldGenNetherPieces.WorldGenNetherPiece { + + public WorldGenNetherPiece9() {} + + public WorldGenNetherPiece9(int i, Random random, StructureBoundingBox structureboundingbox, EnumDirection enumdirection) { + super(i); + this.m = enumdirection; + this.l = structureboundingbox; + } + + public void a(StructurePiece structurepiece, List list, Random random) { + this.a((WorldGenNetherPieces.WorldGenNetherPiece15) structurepiece, list, random, 1, 0, true); + } + + public static WorldGenNetherPieces.WorldGenNetherPiece9 a(List list, Random random, int i, int j, int k, EnumDirection enumdirection, int l) { + StructureBoundingBox structureboundingbox = StructureBoundingBox.a(i, j, k, -1, 0, 0, 5, 7, 5, enumdirection); + + return a(structureboundingbox) && StructurePiece.a(list, structureboundingbox) == null ? new WorldGenNetherPieces.WorldGenNetherPiece9(l, random, structureboundingbox, enumdirection) : null; + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + this.a(world, structureboundingbox, 0, 0, 0, 4, 1, 4, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 0, 2, 0, 4, 5, 4, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + this.a(world, structureboundingbox, 0, 2, 0, 0, 5, 4, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 4, 2, 0, 4, 5, 4, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 0, 3, 1, 0, 4, 1, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 0, 3, 3, 0, 4, 3, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 4, 3, 1, 4, 4, 1, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 4, 3, 3, 4, 4, 3, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 0, 6, 0, 4, 6, 4, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + + for (int i = 0; i <= 4; ++i) { + for (int j = 0; j <= 4; ++j) { + this.b(world, Blocks.NETHER_BRICK.getBlockData(), i, -1, j, structureboundingbox); + } + } + + return true; + } + } + + public static class WorldGenNetherPiece11 extends WorldGenNetherPieces.WorldGenNetherPiece { + + public WorldGenNetherPiece11() {} + + public WorldGenNetherPiece11(int i, Random random, StructureBoundingBox structureboundingbox, EnumDirection enumdirection) { + super(i); + this.m = enumdirection; + this.l = structureboundingbox; + } + + public void a(StructurePiece structurepiece, List list, Random random) { + this.a((WorldGenNetherPieces.WorldGenNetherPiece15) structurepiece, list, random, 5, 3, true); + this.a((WorldGenNetherPieces.WorldGenNetherPiece15) structurepiece, list, random, 5, 11, true); + } + + public static WorldGenNetherPieces.WorldGenNetherPiece11 a(List list, Random random, int i, int j, int k, EnumDirection enumdirection, int l) { + StructureBoundingBox structureboundingbox = StructureBoundingBox.a(i, j, k, -5, -3, 0, 13, 14, 13, enumdirection); + + return a(structureboundingbox) && StructurePiece.a(list, structureboundingbox) == null ? new WorldGenNetherPieces.WorldGenNetherPiece11(l, random, structureboundingbox, enumdirection) : null; + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + this.a(world, structureboundingbox, 0, 3, 0, 12, 4, 12, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 0, 5, 0, 12, 13, 12, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + this.a(world, structureboundingbox, 0, 5, 0, 1, 12, 12, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 11, 5, 0, 12, 12, 12, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 2, 5, 11, 4, 12, 12, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 8, 5, 11, 10, 12, 12, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 5, 9, 11, 7, 12, 12, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 2, 5, 0, 4, 12, 1, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 8, 5, 0, 10, 12, 1, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 5, 9, 0, 7, 12, 1, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 2, 11, 2, 10, 12, 10, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + + int i; + + for (i = 1; i <= 11; i += 2) { + this.a(world, structureboundingbox, i, 10, 0, i, 11, 0, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, i, 10, 12, i, 11, 12, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 0, 10, i, 0, 11, i, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 12, 10, i, 12, 11, i, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, Blocks.NETHER_BRICK.getBlockData(), i, 13, 0, structureboundingbox); + this.a(world, Blocks.NETHER_BRICK.getBlockData(), i, 13, 12, structureboundingbox); + this.a(world, Blocks.NETHER_BRICK.getBlockData(), 0, 13, i, structureboundingbox); + this.a(world, Blocks.NETHER_BRICK.getBlockData(), 12, 13, i, structureboundingbox); + this.a(world, Blocks.NETHER_BRICK_FENCE.getBlockData(), i + 1, 13, 0, structureboundingbox); + this.a(world, Blocks.NETHER_BRICK_FENCE.getBlockData(), i + 1, 13, 12, structureboundingbox); + this.a(world, Blocks.NETHER_BRICK_FENCE.getBlockData(), 0, 13, i + 1, structureboundingbox); + this.a(world, Blocks.NETHER_BRICK_FENCE.getBlockData(), 12, 13, i + 1, structureboundingbox); + } + + this.a(world, Blocks.NETHER_BRICK_FENCE.getBlockData(), 0, 13, 0, structureboundingbox); + this.a(world, Blocks.NETHER_BRICK_FENCE.getBlockData(), 0, 13, 12, structureboundingbox); + this.a(world, Blocks.NETHER_BRICK_FENCE.getBlockData(), 0, 13, 0, structureboundingbox); + this.a(world, Blocks.NETHER_BRICK_FENCE.getBlockData(), 12, 13, 0, structureboundingbox); + + for (i = 3; i <= 9; i += 2) { + this.a(world, structureboundingbox, 1, 7, i, 1, 8, i, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 11, 7, i, 11, 8, i, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + } + + i = this.a(Blocks.NETHER_BRICK_STAIRS, 3); + + int j; + int k; + int l; + + for (j = 0; j <= 6; ++j) { + k = j + 4; + + for (l = 5; l <= 7; ++l) { + this.a(world, Blocks.NETHER_BRICK_STAIRS.fromLegacyData(i), l, 5 + j, k, structureboundingbox); + } + + if (k >= 5 && k <= 8) { + this.a(world, structureboundingbox, 5, 5, k, 7, j + 4, k, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + } else if (k >= 9 && k <= 10) { + this.a(world, structureboundingbox, 5, 8, k, 7, j + 4, k, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + } + + if (j >= 1) { + this.a(world, structureboundingbox, 5, 6 + j, k, 7, 9 + j, k, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + } + } + + for (j = 5; j <= 7; ++j) { + this.a(world, Blocks.NETHER_BRICK_STAIRS.fromLegacyData(i), j, 12, 11, structureboundingbox); + } + + this.a(world, structureboundingbox, 5, 6, 7, 5, 7, 7, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 7, 6, 7, 7, 7, 7, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 5, 13, 12, 7, 13, 12, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + this.a(world, structureboundingbox, 2, 5, 2, 3, 5, 3, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 2, 5, 9, 3, 5, 10, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 2, 5, 4, 2, 5, 8, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 9, 5, 2, 10, 5, 3, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 9, 5, 9, 10, 5, 10, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 10, 5, 4, 10, 5, 8, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + j = this.a(Blocks.NETHER_BRICK_STAIRS, 0); + k = this.a(Blocks.NETHER_BRICK_STAIRS, 1); + this.a(world, Blocks.NETHER_BRICK_STAIRS.fromLegacyData(k), 4, 5, 2, structureboundingbox); + this.a(world, Blocks.NETHER_BRICK_STAIRS.fromLegacyData(k), 4, 5, 3, structureboundingbox); + this.a(world, Blocks.NETHER_BRICK_STAIRS.fromLegacyData(k), 4, 5, 9, structureboundingbox); + this.a(world, Blocks.NETHER_BRICK_STAIRS.fromLegacyData(k), 4, 5, 10, structureboundingbox); + this.a(world, Blocks.NETHER_BRICK_STAIRS.fromLegacyData(j), 8, 5, 2, structureboundingbox); + this.a(world, Blocks.NETHER_BRICK_STAIRS.fromLegacyData(j), 8, 5, 3, structureboundingbox); + this.a(world, Blocks.NETHER_BRICK_STAIRS.fromLegacyData(j), 8, 5, 9, structureboundingbox); + this.a(world, Blocks.NETHER_BRICK_STAIRS.fromLegacyData(j), 8, 5, 10, structureboundingbox); + this.a(world, structureboundingbox, 3, 4, 4, 4, 4, 8, Blocks.SOUL_SAND.getBlockData(), Blocks.SOUL_SAND.getBlockData(), false); + this.a(world, structureboundingbox, 8, 4, 4, 9, 4, 8, Blocks.SOUL_SAND.getBlockData(), Blocks.SOUL_SAND.getBlockData(), false); + this.a(world, structureboundingbox, 3, 5, 4, 4, 5, 8, Blocks.NETHER_WART.getBlockData(), Blocks.NETHER_WART.getBlockData(), false); + this.a(world, structureboundingbox, 8, 5, 4, 9, 5, 8, Blocks.NETHER_WART.getBlockData(), Blocks.NETHER_WART.getBlockData(), false); + this.a(world, structureboundingbox, 4, 2, 0, 8, 2, 12, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 0, 2, 4, 12, 2, 8, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 4, 0, 0, 8, 1, 3, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 4, 0, 9, 8, 1, 12, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 0, 0, 4, 3, 1, 8, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 9, 0, 4, 12, 1, 8, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + + int i1; + + for (l = 4; l <= 8; ++l) { + for (i1 = 0; i1 <= 2; ++i1) { + this.b(world, Blocks.NETHER_BRICK.getBlockData(), l, -1, i1, structureboundingbox); + this.b(world, Blocks.NETHER_BRICK.getBlockData(), l, -1, 12 - i1, structureboundingbox); + } + } + + for (l = 0; l <= 2; ++l) { + for (i1 = 4; i1 <= 8; ++i1) { + this.b(world, Blocks.NETHER_BRICK.getBlockData(), l, -1, i1, structureboundingbox); + this.b(world, Blocks.NETHER_BRICK.getBlockData(), 12 - l, -1, i1, structureboundingbox); + } + } + + return true; + } + } + + public static class WorldGenNetherPiece6 extends WorldGenNetherPieces.WorldGenNetherPiece { + + public WorldGenNetherPiece6() {} + + public WorldGenNetherPiece6(int i, Random random, StructureBoundingBox structureboundingbox, EnumDirection enumdirection) { + super(i); + this.m = enumdirection; + this.l = structureboundingbox; + } + + public void a(StructurePiece structurepiece, List list, Random random) { + this.a((WorldGenNetherPieces.WorldGenNetherPiece15) structurepiece, list, random, 5, 3, true); + } + + public static WorldGenNetherPieces.WorldGenNetherPiece6 a(List list, Random random, int i, int j, int k, EnumDirection enumdirection, int l) { + StructureBoundingBox structureboundingbox = StructureBoundingBox.a(i, j, k, -5, -3, 0, 13, 14, 13, enumdirection); + + return a(structureboundingbox) && StructurePiece.a(list, structureboundingbox) == null ? new WorldGenNetherPieces.WorldGenNetherPiece6(l, random, structureboundingbox, enumdirection) : null; + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + this.a(world, structureboundingbox, 0, 3, 0, 12, 4, 12, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 0, 5, 0, 12, 13, 12, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + this.a(world, structureboundingbox, 0, 5, 0, 1, 12, 12, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 11, 5, 0, 12, 12, 12, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 2, 5, 11, 4, 12, 12, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 8, 5, 11, 10, 12, 12, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 5, 9, 11, 7, 12, 12, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 2, 5, 0, 4, 12, 1, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 8, 5, 0, 10, 12, 1, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 5, 9, 0, 7, 12, 1, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 2, 11, 2, 10, 12, 10, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 5, 8, 0, 7, 8, 0, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + + int i; + + for (i = 1; i <= 11; i += 2) { + this.a(world, structureboundingbox, i, 10, 0, i, 11, 0, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, i, 10, 12, i, 11, 12, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 0, 10, i, 0, 11, i, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 12, 10, i, 12, 11, i, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, Blocks.NETHER_BRICK.getBlockData(), i, 13, 0, structureboundingbox); + this.a(world, Blocks.NETHER_BRICK.getBlockData(), i, 13, 12, structureboundingbox); + this.a(world, Blocks.NETHER_BRICK.getBlockData(), 0, 13, i, structureboundingbox); + this.a(world, Blocks.NETHER_BRICK.getBlockData(), 12, 13, i, structureboundingbox); + this.a(world, Blocks.NETHER_BRICK_FENCE.getBlockData(), i + 1, 13, 0, structureboundingbox); + this.a(world, Blocks.NETHER_BRICK_FENCE.getBlockData(), i + 1, 13, 12, structureboundingbox); + this.a(world, Blocks.NETHER_BRICK_FENCE.getBlockData(), 0, 13, i + 1, structureboundingbox); + this.a(world, Blocks.NETHER_BRICK_FENCE.getBlockData(), 12, 13, i + 1, structureboundingbox); + } + + this.a(world, Blocks.NETHER_BRICK_FENCE.getBlockData(), 0, 13, 0, structureboundingbox); + this.a(world, Blocks.NETHER_BRICK_FENCE.getBlockData(), 0, 13, 12, structureboundingbox); + this.a(world, Blocks.NETHER_BRICK_FENCE.getBlockData(), 0, 13, 0, structureboundingbox); + this.a(world, Blocks.NETHER_BRICK_FENCE.getBlockData(), 12, 13, 0, structureboundingbox); + + for (i = 3; i <= 9; i += 2) { + this.a(world, structureboundingbox, 1, 7, i, 1, 8, i, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 11, 7, i, 11, 8, i, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + } + + this.a(world, structureboundingbox, 4, 2, 0, 8, 2, 12, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 0, 2, 4, 12, 2, 8, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 4, 0, 0, 8, 1, 3, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 4, 0, 9, 8, 1, 12, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 0, 0, 4, 3, 1, 8, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 9, 0, 4, 12, 1, 8, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + + int j; + + for (i = 4; i <= 8; ++i) { + for (j = 0; j <= 2; ++j) { + this.b(world, Blocks.NETHER_BRICK.getBlockData(), i, -1, j, structureboundingbox); + this.b(world, Blocks.NETHER_BRICK.getBlockData(), i, -1, 12 - j, structureboundingbox); + } + } + + for (i = 0; i <= 2; ++i) { + for (j = 4; j <= 8; ++j) { + this.b(world, Blocks.NETHER_BRICK.getBlockData(), i, -1, j, structureboundingbox); + this.b(world, Blocks.NETHER_BRICK.getBlockData(), 12 - i, -1, j, structureboundingbox); + } + } + + this.a(world, structureboundingbox, 5, 5, 5, 7, 5, 7, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 6, 1, 6, 6, 4, 6, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + this.a(world, Blocks.NETHER_BRICK.getBlockData(), 6, 0, 6, structureboundingbox); + this.a(world, Blocks.FLOWING_LAVA.getBlockData(), 6, 5, 6, structureboundingbox); + BlockPosition blockposition = new BlockPosition(this.a(6, 6), this.d(5), this.b(6, 6)); + + if (structureboundingbox.b((BaseBlockPosition) blockposition)) { + world.a((Block) Blocks.FLOWING_LAVA, blockposition, random); + } + + return true; + } + } + + public static class WorldGenNetherPiece12 extends WorldGenNetherPieces.WorldGenNetherPiece { + + private boolean b; + + public WorldGenNetherPiece12() {} + + public WorldGenNetherPiece12(int i, Random random, StructureBoundingBox structureboundingbox, EnumDirection enumdirection) { + super(i); + this.m = enumdirection; + this.l = structureboundingbox; + } + + protected void b(NBTTagCompound nbttagcompound) { + super.b(nbttagcompound); + this.b = nbttagcompound.getBoolean("Mob"); + } + + protected void a(NBTTagCompound nbttagcompound) { + super.a(nbttagcompound); + nbttagcompound.setBoolean("Mob", this.b); + } + + public static WorldGenNetherPieces.WorldGenNetherPiece12 a(List list, Random random, int i, int j, int k, int l, EnumDirection enumdirection) { + StructureBoundingBox structureboundingbox = StructureBoundingBox.a(i, j, k, -2, 0, 0, 7, 8, 9, enumdirection); + + return a(structureboundingbox) && StructurePiece.a(list, structureboundingbox) == null ? new WorldGenNetherPieces.WorldGenNetherPiece12(l, random, structureboundingbox, enumdirection) : null; + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + this.a(world, structureboundingbox, 0, 2, 0, 6, 7, 7, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + this.a(world, structureboundingbox, 1, 0, 0, 5, 1, 7, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 1, 2, 1, 5, 2, 7, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 1, 3, 2, 5, 3, 7, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 1, 4, 3, 5, 4, 7, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 1, 2, 0, 1, 4, 2, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 5, 2, 0, 5, 4, 2, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 1, 5, 2, 1, 5, 3, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 5, 5, 2, 5, 5, 3, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 0, 5, 3, 0, 5, 8, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 6, 5, 3, 6, 5, 8, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 1, 5, 8, 5, 5, 8, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, Blocks.NETHER_BRICK_FENCE.getBlockData(), 1, 6, 3, structureboundingbox); + this.a(world, Blocks.NETHER_BRICK_FENCE.getBlockData(), 5, 6, 3, structureboundingbox); + this.a(world, structureboundingbox, 0, 6, 3, 0, 6, 8, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 6, 6, 3, 6, 6, 8, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 1, 6, 8, 5, 7, 8, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 2, 8, 8, 4, 8, 8, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + if (!this.b) { + BlockPosition blockposition = new BlockPosition(this.a(3, 5), this.d(5), this.b(3, 5)); + + if (structureboundingbox.b((BaseBlockPosition) blockposition)) { + this.b = true; + world.setTypeAndData(blockposition, Blocks.MOB_SPAWNER.getBlockData(), 2); + TileEntity tileentity = world.getTileEntity(blockposition); + + if (tileentity instanceof TileEntityMobSpawner) { + ((TileEntityMobSpawner) tileentity).getSpawner().setMobName("Blaze"); + } + } + } + + for (int i = 0; i <= 6; ++i) { + for (int j = 0; j <= 6; ++j) { + this.b(world, Blocks.NETHER_BRICK.getBlockData(), i, -1, j, structureboundingbox); + } + } + + return true; + } + } + + public static class WorldGenNetherPiece14 extends WorldGenNetherPieces.WorldGenNetherPiece { + + public WorldGenNetherPiece14() {} + + public WorldGenNetherPiece14(int i, Random random, StructureBoundingBox structureboundingbox, EnumDirection enumdirection) { + super(i); + this.m = enumdirection; + this.l = structureboundingbox; + } + + public void a(StructurePiece structurepiece, List list, Random random) { + this.c((WorldGenNetherPieces.WorldGenNetherPiece15) structurepiece, list, random, 6, 2, false); + } + + public static WorldGenNetherPieces.WorldGenNetherPiece14 a(List list, Random random, int i, int j, int k, int l, EnumDirection enumdirection) { + StructureBoundingBox structureboundingbox = StructureBoundingBox.a(i, j, k, -2, 0, 0, 7, 11, 7, enumdirection); + + return a(structureboundingbox) && StructurePiece.a(list, structureboundingbox) == null ? new WorldGenNetherPieces.WorldGenNetherPiece14(l, random, structureboundingbox, enumdirection) : null; + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + this.a(world, structureboundingbox, 0, 0, 0, 6, 1, 6, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 0, 2, 0, 6, 10, 6, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + this.a(world, structureboundingbox, 0, 2, 0, 1, 8, 0, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 5, 2, 0, 6, 8, 0, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 0, 2, 1, 0, 8, 6, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 6, 2, 1, 6, 8, 6, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 1, 2, 6, 5, 8, 6, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 0, 3, 2, 0, 5, 4, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 6, 3, 2, 6, 5, 2, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 6, 3, 4, 6, 5, 4, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, Blocks.NETHER_BRICK.getBlockData(), 5, 2, 5, structureboundingbox); + this.a(world, structureboundingbox, 4, 2, 5, 4, 3, 5, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 3, 2, 5, 3, 4, 5, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 2, 2, 5, 2, 5, 5, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 1, 2, 5, 1, 6, 5, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 1, 7, 1, 5, 7, 4, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 6, 8, 2, 6, 8, 4, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + this.a(world, structureboundingbox, 2, 6, 0, 4, 8, 0, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 2, 5, 0, 4, 5, 0, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + + for (int i = 0; i <= 6; ++i) { + for (int j = 0; j <= 6; ++j) { + this.b(world, Blocks.NETHER_BRICK.getBlockData(), i, -1, j, structureboundingbox); + } + } + + return true; + } + } + + public static class WorldGenNetherPiece13 extends WorldGenNetherPieces.WorldGenNetherPiece { + + public WorldGenNetherPiece13() {} + + public WorldGenNetherPiece13(int i, Random random, StructureBoundingBox structureboundingbox, EnumDirection enumdirection) { + super(i); + this.m = enumdirection; + this.l = structureboundingbox; + } + + public void a(StructurePiece structurepiece, List list, Random random) { + this.a((WorldGenNetherPieces.WorldGenNetherPiece15) structurepiece, list, random, 2, 0, false); + this.b((WorldGenNetherPieces.WorldGenNetherPiece15) structurepiece, list, random, 0, 2, false); + this.c((WorldGenNetherPieces.WorldGenNetherPiece15) structurepiece, list, random, 0, 2, false); + } + + public static WorldGenNetherPieces.WorldGenNetherPiece13 a(List list, Random random, int i, int j, int k, EnumDirection enumdirection, int l) { + StructureBoundingBox structureboundingbox = StructureBoundingBox.a(i, j, k, -2, 0, 0, 7, 9, 7, enumdirection); + + return a(structureboundingbox) && StructurePiece.a(list, structureboundingbox) == null ? new WorldGenNetherPieces.WorldGenNetherPiece13(l, random, structureboundingbox, enumdirection) : null; + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + this.a(world, structureboundingbox, 0, 0, 0, 6, 1, 6, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 0, 2, 0, 6, 7, 6, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + this.a(world, structureboundingbox, 0, 2, 0, 1, 6, 0, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 0, 2, 6, 1, 6, 6, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 5, 2, 0, 6, 6, 0, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 5, 2, 6, 6, 6, 6, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 0, 2, 0, 0, 6, 1, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 0, 2, 5, 0, 6, 6, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 6, 2, 0, 6, 6, 1, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 6, 2, 5, 6, 6, 6, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 2, 6, 0, 4, 6, 0, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 2, 5, 0, 4, 5, 0, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 2, 6, 6, 4, 6, 6, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 2, 5, 6, 4, 5, 6, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 0, 6, 2, 0, 6, 4, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 0, 5, 2, 0, 5, 4, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 6, 6, 2, 6, 6, 4, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 6, 5, 2, 6, 5, 4, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + + for (int i = 0; i <= 6; ++i) { + for (int j = 0; j <= 6; ++j) { + this.b(world, Blocks.NETHER_BRICK.getBlockData(), i, -1, j, structureboundingbox); + } + } + + return true; + } + } + + public static class WorldGenNetherPiece1 extends WorldGenNetherPieces.WorldGenNetherPiece { + + public WorldGenNetherPiece1() {} + + public WorldGenNetherPiece1(int i, Random random, StructureBoundingBox structureboundingbox, EnumDirection enumdirection) { + super(i); + this.m = enumdirection; + this.l = structureboundingbox; + } + + protected WorldGenNetherPiece1(Random random, int i, int j) { + super(0); + this.m = EnumDirection.EnumDirectionLimit.HORIZONTAL.a(random); + switch (WorldGenNetherPieces.SyntheticClass_1.a[this.m.ordinal()]) { + case 1: + case 2: + this.l = new StructureBoundingBox(i, 64, j, i + 19 - 1, 73, j + 19 - 1); + break; + + default: + this.l = new StructureBoundingBox(i, 64, j, i + 19 - 1, 73, j + 19 - 1); + } + + } + + public void a(StructurePiece structurepiece, List list, Random random) { + this.a((WorldGenNetherPieces.WorldGenNetherPiece15) structurepiece, list, random, 8, 3, false); + this.b((WorldGenNetherPieces.WorldGenNetherPiece15) structurepiece, list, random, 3, 8, false); + this.c((WorldGenNetherPieces.WorldGenNetherPiece15) structurepiece, list, random, 3, 8, false); + } + + public static WorldGenNetherPieces.WorldGenNetherPiece1 a(List list, Random random, int i, int j, int k, EnumDirection enumdirection, int l) { + StructureBoundingBox structureboundingbox = StructureBoundingBox.a(i, j, k, -8, -3, 0, 19, 10, 19, enumdirection); + + return a(structureboundingbox) && StructurePiece.a(list, structureboundingbox) == null ? new WorldGenNetherPieces.WorldGenNetherPiece1(l, random, structureboundingbox, enumdirection) : null; + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + this.a(world, structureboundingbox, 7, 3, 0, 11, 4, 18, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 0, 3, 7, 18, 4, 11, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 8, 5, 0, 10, 7, 18, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + this.a(world, structureboundingbox, 0, 5, 8, 18, 7, 10, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + this.a(world, structureboundingbox, 7, 5, 0, 7, 5, 7, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 7, 5, 11, 7, 5, 18, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 11, 5, 0, 11, 5, 7, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 11, 5, 11, 11, 5, 18, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 0, 5, 7, 7, 5, 7, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 11, 5, 7, 18, 5, 7, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 0, 5, 11, 7, 5, 11, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 11, 5, 11, 18, 5, 11, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 7, 2, 0, 11, 2, 5, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 7, 2, 13, 11, 2, 18, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 7, 0, 0, 11, 1, 3, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 7, 0, 15, 11, 1, 18, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + + int i; + int j; + + for (i = 7; i <= 11; ++i) { + for (j = 0; j <= 2; ++j) { + this.b(world, Blocks.NETHER_BRICK.getBlockData(), i, -1, j, structureboundingbox); + this.b(world, Blocks.NETHER_BRICK.getBlockData(), i, -1, 18 - j, structureboundingbox); + } + } + + this.a(world, structureboundingbox, 0, 2, 7, 5, 2, 11, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 13, 2, 7, 18, 2, 11, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 0, 0, 7, 3, 1, 11, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 15, 0, 7, 18, 1, 11, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + + for (i = 0; i <= 2; ++i) { + for (j = 7; j <= 11; ++j) { + this.b(world, Blocks.NETHER_BRICK.getBlockData(), i, -1, j, structureboundingbox); + this.b(world, Blocks.NETHER_BRICK.getBlockData(), 18 - i, -1, j, structureboundingbox); + } + } + + return true; + } + } + + public static class WorldGenNetherPiece2 extends WorldGenNetherPieces.WorldGenNetherPiece { + + private int b; + + public WorldGenNetherPiece2() {} + + public WorldGenNetherPiece2(int i, Random random, StructureBoundingBox structureboundingbox, EnumDirection enumdirection) { + super(i); + this.m = enumdirection; + this.l = structureboundingbox; + this.b = random.nextInt(); + } + + public static WorldGenNetherPieces.WorldGenNetherPiece2 a(List list, Random random, int i, int j, int k, EnumDirection enumdirection, int l) { + StructureBoundingBox structureboundingbox = StructureBoundingBox.a(i, j, k, -1, -3, 0, 5, 10, 8, enumdirection); + + return a(structureboundingbox) && StructurePiece.a(list, structureboundingbox) == null ? new WorldGenNetherPieces.WorldGenNetherPiece2(l, random, structureboundingbox, enumdirection) : null; + } + + protected void b(NBTTagCompound nbttagcompound) { + super.b(nbttagcompound); + this.b = nbttagcompound.getInt("Seed"); + } + + protected void a(NBTTagCompound nbttagcompound) { + super.a(nbttagcompound); + nbttagcompound.setInt("Seed", this.b); + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + Random random1 = new Random((long) this.b); + + int i; + int j; + int k; + + for (i = 0; i <= 4; ++i) { + for (j = 3; j <= 4; ++j) { + k = random1.nextInt(8); + this.a(world, structureboundingbox, i, j, 0, i, j, k, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + } + } + + i = random1.nextInt(8); + this.a(world, structureboundingbox, 0, 5, 0, 0, 5, i, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + i = random1.nextInt(8); + this.a(world, structureboundingbox, 4, 5, 0, 4, 5, i, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + + for (i = 0; i <= 4; ++i) { + j = random1.nextInt(5); + this.a(world, structureboundingbox, i, 2, 0, i, 2, j, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + } + + for (i = 0; i <= 4; ++i) { + for (j = 0; j <= 1; ++j) { + k = random1.nextInt(3); + this.a(world, structureboundingbox, i, j, 0, i, j, k, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + } + } + + return true; + } + } + + public static class WorldGenNetherPiece3 extends WorldGenNetherPieces.WorldGenNetherPiece { + + public WorldGenNetherPiece3() {} + + public WorldGenNetherPiece3(int i, Random random, StructureBoundingBox structureboundingbox, EnumDirection enumdirection) { + super(i); + this.m = enumdirection; + this.l = structureboundingbox; + } + + public void a(StructurePiece structurepiece, List list, Random random) { + this.a((WorldGenNetherPieces.WorldGenNetherPiece15) structurepiece, list, random, 1, 3, false); + } + + public static WorldGenNetherPieces.WorldGenNetherPiece3 a(List list, Random random, int i, int j, int k, EnumDirection enumdirection, int l) { + StructureBoundingBox structureboundingbox = StructureBoundingBox.a(i, j, k, -1, -3, 0, 5, 10, 19, enumdirection); + + return a(structureboundingbox) && StructurePiece.a(list, structureboundingbox) == null ? new WorldGenNetherPieces.WorldGenNetherPiece3(l, random, structureboundingbox, enumdirection) : null; + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + this.a(world, structureboundingbox, 0, 3, 0, 4, 4, 18, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 1, 5, 0, 3, 7, 18, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + this.a(world, structureboundingbox, 0, 5, 0, 0, 5, 18, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 4, 5, 0, 4, 5, 18, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 0, 2, 0, 4, 2, 5, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 0, 2, 13, 4, 2, 18, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 0, 0, 0, 4, 1, 3, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + this.a(world, structureboundingbox, 0, 0, 15, 4, 1, 18, Blocks.NETHER_BRICK.getBlockData(), Blocks.NETHER_BRICK.getBlockData(), false); + + for (int i = 0; i <= 4; ++i) { + for (int j = 0; j <= 2; ++j) { + this.b(world, Blocks.NETHER_BRICK.getBlockData(), i, -1, j, structureboundingbox); + this.b(world, Blocks.NETHER_BRICK.getBlockData(), i, -1, 18 - j, structureboundingbox); + } + } + + this.a(world, structureboundingbox, 0, 1, 1, 0, 4, 1, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 0, 3, 4, 0, 4, 4, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 0, 3, 14, 0, 4, 14, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 0, 1, 17, 0, 4, 17, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 4, 1, 1, 4, 4, 1, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 4, 3, 4, 4, 4, 4, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 4, 3, 14, 4, 4, 14, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 4, 1, 17, 4, 4, 17, Blocks.NETHER_BRICK_FENCE.getBlockData(), Blocks.NETHER_BRICK_FENCE.getBlockData(), false); + return true; + } + } + + public static class WorldGenNetherPiece15 extends WorldGenNetherPieces.WorldGenNetherPiece1 { + + public WorldGenNetherPieces.WorldGenNetherPieceWeight b; + public List c; + public List d; + public List e = Lists.newArrayList(); + + public WorldGenNetherPiece15() {} + + public WorldGenNetherPiece15(Random random, int i, int j) { + super(random, i, j); + this.c = Lists.newArrayList(); + WorldGenNetherPieces.WorldGenNetherPieceWeight[] aworldgennetherpieces_worldgennetherpieceweight = WorldGenNetherPieces.a; + int k = aworldgennetherpieces_worldgennetherpieceweight.length; + + int l; + WorldGenNetherPieces.WorldGenNetherPieceWeight worldgennetherpieces_worldgennetherpieceweight; + + for (l = 0; l < k; ++l) { + worldgennetherpieces_worldgennetherpieceweight = aworldgennetherpieces_worldgennetherpieceweight[l]; + worldgennetherpieces_worldgennetherpieceweight.c = 0; + this.c.add(worldgennetherpieces_worldgennetherpieceweight); + } + + this.d = Lists.newArrayList(); + aworldgennetherpieces_worldgennetherpieceweight = WorldGenNetherPieces.b; + k = aworldgennetherpieces_worldgennetherpieceweight.length; + + for (l = 0; l < k; ++l) { + worldgennetherpieces_worldgennetherpieceweight = aworldgennetherpieces_worldgennetherpieceweight[l]; + worldgennetherpieces_worldgennetherpieceweight.c = 0; + this.d.add(worldgennetherpieces_worldgennetherpieceweight); + } + + } + + protected void b(NBTTagCompound nbttagcompound) { + super.b(nbttagcompound); + } + + protected void a(NBTTagCompound nbttagcompound) { + super.a(nbttagcompound); + } + } + + abstract static class WorldGenNetherPiece extends StructurePiece { + + protected static final List a = Lists.newArrayList(new StructurePieceTreasure[] { new StructurePieceTreasure(Items.DIAMOND, 0, 1, 3, 5), new StructurePieceTreasure(Items.IRON_INGOT, 0, 1, 5, 5), new StructurePieceTreasure(Items.GOLD_INGOT, 0, 1, 3, 15), new StructurePieceTreasure(Items.GOLDEN_SWORD, 0, 1, 1, 5), new StructurePieceTreasure(Items.GOLDEN_CHESTPLATE, 0, 1, 1, 5), new StructurePieceTreasure(Items.FLINT_AND_STEEL, 0, 1, 1, 5), new StructurePieceTreasure(Items.NETHER_WART, 0, 3, 7, 5), new StructurePieceTreasure(Items.SADDLE, 0, 1, 1, 10), new StructurePieceTreasure(Items.GOLDEN_HORSE_ARMOR, 0, 1, 1, 8), new StructurePieceTreasure(Items.IRON_HORSE_ARMOR, 0, 1, 1, 5), new StructurePieceTreasure(Items.DIAMOND_HORSE_ARMOR, 0, 1, 1, 3), new StructurePieceTreasure(Item.getItemOf(Blocks.OBSIDIAN), 0, 2, 4, 2)}); + + public WorldGenNetherPiece() {} + + protected WorldGenNetherPiece(int i) { + super(i); + } + + protected void b(NBTTagCompound nbttagcompound) {} + + protected void a(NBTTagCompound nbttagcompound) {} + + private int a(List list) { + boolean flag = false; + int i = 0; + + WorldGenNetherPieces.WorldGenNetherPieceWeight worldgennetherpieces_worldgennetherpieceweight; + + for (Iterator iterator = list.iterator(); iterator.hasNext(); i += worldgennetherpieces_worldgennetherpieceweight.b) { + worldgennetherpieces_worldgennetherpieceweight = (WorldGenNetherPieces.WorldGenNetherPieceWeight) iterator.next(); + if (worldgennetherpieces_worldgennetherpieceweight.d > 0 && worldgennetherpieces_worldgennetherpieceweight.c < worldgennetherpieces_worldgennetherpieceweight.d) { + flag = true; + } + } + + return flag ? i : -1; + } + + private WorldGenNetherPieces.WorldGenNetherPiece a(WorldGenNetherPieces.WorldGenNetherPiece15 worldgennetherpieces_worldgennetherpiece15, List list, List list1, Random random, int i, int j, int k, EnumDirection enumdirection, int l) { + int i1 = this.a(list); + boolean flag = i1 > 0 && l <= 30; + int j1 = 0; + + while (j1 < 5 && flag) { + ++j1; + int k1 = random.nextInt(i1); + Iterator iterator = list.iterator(); + + while (iterator.hasNext()) { + WorldGenNetherPieces.WorldGenNetherPieceWeight worldgennetherpieces_worldgennetherpieceweight = (WorldGenNetherPieces.WorldGenNetherPieceWeight) iterator.next(); + + k1 -= worldgennetherpieces_worldgennetherpieceweight.b; + if (k1 < 0) { + if (!worldgennetherpieces_worldgennetherpieceweight.a(l) || worldgennetherpieces_worldgennetherpieceweight == worldgennetherpieces_worldgennetherpiece15.b && !worldgennetherpieces_worldgennetherpieceweight.e) { + break; + } + + WorldGenNetherPieces.WorldGenNetherPiece worldgennetherpieces_worldgennetherpiece = WorldGenNetherPieces.b(worldgennetherpieces_worldgennetherpieceweight, list1, random, i, j, k, enumdirection, l); + + if (worldgennetherpieces_worldgennetherpiece != null) { + ++worldgennetherpieces_worldgennetherpieceweight.c; + worldgennetherpieces_worldgennetherpiece15.b = worldgennetherpieces_worldgennetherpieceweight; + if (!worldgennetherpieces_worldgennetherpieceweight.a()) { + list.remove(worldgennetherpieces_worldgennetherpieceweight); + } + + return worldgennetherpieces_worldgennetherpiece; + } + } + } + } + + return WorldGenNetherPieces.WorldGenNetherPiece2.a(list1, random, i, j, k, enumdirection, l); + } + + private StructurePiece a(WorldGenNetherPieces.WorldGenNetherPiece15 worldgennetherpieces_worldgennetherpiece15, List list, Random random, int i, int j, int k, EnumDirection enumdirection, int l, boolean flag) { + if (Math.abs(i - worldgennetherpieces_worldgennetherpiece15.c().a) <= 112 && Math.abs(k - worldgennetherpieces_worldgennetherpiece15.c().c) <= 112) { + List list1 = worldgennetherpieces_worldgennetherpiece15.c; + + if (flag) { + list1 = worldgennetherpieces_worldgennetherpiece15.d; + } + + WorldGenNetherPieces.WorldGenNetherPiece worldgennetherpieces_worldgennetherpiece = this.a(worldgennetherpieces_worldgennetherpiece15, list1, list, random, i, j, k, enumdirection, l + 1); + + if (worldgennetherpieces_worldgennetherpiece != null) { + list.add(worldgennetherpieces_worldgennetherpiece); + worldgennetherpieces_worldgennetherpiece15.e.add(worldgennetherpieces_worldgennetherpiece); + } + + return worldgennetherpieces_worldgennetherpiece; + } else { + return WorldGenNetherPieces.WorldGenNetherPiece2.a(list, random, i, j, k, enumdirection, l); + } + } + + protected StructurePiece a(WorldGenNetherPieces.WorldGenNetherPiece15 worldgennetherpieces_worldgennetherpiece15, List list, Random random, int i, int j, boolean flag) { + if (this.m != null) { + switch (WorldGenNetherPieces.SyntheticClass_1.a[this.m.ordinal()]) { + case 1: + return this.a(worldgennetherpieces_worldgennetherpiece15, list, random, this.l.a + i, this.l.b + j, this.l.c - 1, this.m, this.d(), flag); + + case 2: + return this.a(worldgennetherpieces_worldgennetherpiece15, list, random, this.l.a + i, this.l.b + j, this.l.f + 1, this.m, this.d(), flag); + + case 3: + return this.a(worldgennetherpieces_worldgennetherpiece15, list, random, this.l.a - 1, this.l.b + j, this.l.c + i, this.m, this.d(), flag); + + case 4: + return this.a(worldgennetherpieces_worldgennetherpiece15, list, random, this.l.d + 1, this.l.b + j, this.l.c + i, this.m, this.d(), flag); + } + } + + return null; + } + + protected StructurePiece b(WorldGenNetherPieces.WorldGenNetherPiece15 worldgennetherpieces_worldgennetherpiece15, List list, Random random, int i, int j, boolean flag) { + if (this.m != null) { + switch (WorldGenNetherPieces.SyntheticClass_1.a[this.m.ordinal()]) { + case 1: + return this.a(worldgennetherpieces_worldgennetherpiece15, list, random, this.l.a - 1, this.l.b + i, this.l.c + j, EnumDirection.WEST, this.d(), flag); + + case 2: + return this.a(worldgennetherpieces_worldgennetherpiece15, list, random, this.l.a - 1, this.l.b + i, this.l.c + j, EnumDirection.WEST, this.d(), flag); + + case 3: + return this.a(worldgennetherpieces_worldgennetherpiece15, list, random, this.l.a + j, this.l.b + i, this.l.c - 1, EnumDirection.NORTH, this.d(), flag); + + case 4: + return this.a(worldgennetherpieces_worldgennetherpiece15, list, random, this.l.a + j, this.l.b + i, this.l.c - 1, EnumDirection.NORTH, this.d(), flag); + } + } + + return null; + } + + protected StructurePiece c(WorldGenNetherPieces.WorldGenNetherPiece15 worldgennetherpieces_worldgennetherpiece15, List list, Random random, int i, int j, boolean flag) { + if (this.m != null) { + switch (WorldGenNetherPieces.SyntheticClass_1.a[this.m.ordinal()]) { + case 1: + return this.a(worldgennetherpieces_worldgennetherpiece15, list, random, this.l.d + 1, this.l.b + i, this.l.c + j, EnumDirection.EAST, this.d(), flag); + + case 2: + return this.a(worldgennetherpieces_worldgennetherpiece15, list, random, this.l.d + 1, this.l.b + i, this.l.c + j, EnumDirection.EAST, this.d(), flag); + + case 3: + return this.a(worldgennetherpieces_worldgennetherpiece15, list, random, this.l.a + j, this.l.b + i, this.l.f + 1, EnumDirection.SOUTH, this.d(), flag); + + case 4: + return this.a(worldgennetherpieces_worldgennetherpiece15, list, random, this.l.a + j, this.l.b + i, this.l.f + 1, EnumDirection.SOUTH, this.d(), flag); + } + } + + return null; + } + + protected static boolean a(StructureBoundingBox structureboundingbox) { + return structureboundingbox != null && structureboundingbox.b > 10; + } + } + + static class WorldGenNetherPieceWeight { + + public Class a; + public final int b; + public int c; + public int d; + public boolean e; + + public WorldGenNetherPieceWeight(Class oclass, int i, int j, boolean flag) { + this.a = oclass; + this.b = i; + this.d = j; + this.e = flag; + } + + public WorldGenNetherPieceWeight(Class oclass, int i, int j) { + this(oclass, i, j, false); + } + + public boolean a(int i) { + return this.d == 0 || this.c < this.d; + } + + public boolean a() { + return this.d == 0 || this.c < this.d; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenPackedIce1.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenPackedIce1.java new file mode 100644 index 0000000..7d517f2 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenPackedIce1.java @@ -0,0 +1,47 @@ +package net.minecraft.server; + +import java.util.Random; + +public class WorldGenPackedIce1 extends WorldGenerator { + + private Block a; + private int b; + + public WorldGenPackedIce1(int i) { + this.a = Blocks.PACKED_ICE; + this.b = i; + } + + public boolean generate(World world, Random random, BlockPosition blockposition) { + while (world.isEmpty(blockposition) && blockposition.getY() > 2) { + blockposition = blockposition.down(); + } + + if (world.getType(blockposition).getBlock() != Blocks.SNOW) { + return false; + } else { + int i = random.nextInt(this.b - 2) + 2; + byte b0 = 1; + + for (int j = blockposition.getX() - i; j <= blockposition.getX() + i; ++j) { + for (int k = blockposition.getZ() - i; k <= blockposition.getZ() + i; ++k) { + int l = j - blockposition.getX(); + int i1 = k - blockposition.getZ(); + + if (l * l + i1 * i1 <= i * i) { + for (int j1 = blockposition.getY() - b0; j1 <= blockposition.getY() + b0; ++j1) { + BlockPosition blockposition1 = new BlockPosition(j, j1, k); + Block block = world.getType(blockposition1).getBlock(); + + if (block == Blocks.DIRT || block == Blocks.SNOW || block == Blocks.ICE) { + world.setTypeAndData(blockposition1, this.a.getBlockData(), 2); + } + } + } + } + } + + return true; + } + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/WorldGenPackedIce2.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenPackedIce2.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/WorldGenPackedIce2.java rename to eSpigot-Server/src/main/java/net/minecraft/server/WorldGenPackedIce2.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenPumpkin.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenPumpkin.java new file mode 100644 index 0000000..4e85318 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenPumpkin.java @@ -0,0 +1,20 @@ +package net.minecraft.server; + +import java.util.Random; + +public class WorldGenPumpkin extends WorldGenerator { + + public WorldGenPumpkin() {} + + public boolean generate(World world, Random random, BlockPosition blockposition) { + for (int i = 0; i < 64; ++i) { + BlockPosition blockposition1 = blockposition.a(random.nextInt(8) - random.nextInt(8), random.nextInt(4) - random.nextInt(4), random.nextInt(8) - random.nextInt(8)); + + if (world.isEmpty(blockposition1) && world.getType(blockposition1.down()).getBlock() == Blocks.GRASS && Blocks.PUMPKIN.canPlace(world, blockposition1)) { + world.setTypeAndData(blockposition1, Blocks.PUMPKIN.getBlockData().set(BlockPumpkin.FACING, EnumDirection.EnumDirectionLimit.HORIZONTAL.a(random)), 2); + } + } + + return true; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenReed.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenReed.java new file mode 100644 index 0000000..f53ff2b --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenReed.java @@ -0,0 +1,30 @@ +package net.minecraft.server; + +import java.util.Random; + +public class WorldGenReed extends WorldGenerator { + + public WorldGenReed() {} + + public boolean generate(World world, Random random, BlockPosition blockposition) { + for (int i = 0; i < 20; ++i) { + BlockPosition blockposition1 = blockposition.a(random.nextInt(4) - random.nextInt(4), 0, random.nextInt(4) - random.nextInt(4)); + + if (world.isEmpty(blockposition1)) { + BlockPosition blockposition2 = blockposition1.down(); + + if (world.getType(blockposition2.west()).getBlock().getMaterial() == Material.WATER || world.getType(blockposition2.east()).getBlock().getMaterial() == Material.WATER || world.getType(blockposition2.north()).getBlock().getMaterial() == Material.WATER || world.getType(blockposition2.south()).getBlock().getMaterial() == Material.WATER) { + int j = 2 + random.nextInt(random.nextInt(3) + 1); + + for (int k = 0; k < j; ++k) { + if (Blocks.REEDS.e(world, blockposition1)) { + world.setTypeAndData(blockposition1.up(k), Blocks.REEDS.getBlockData(), 2); + } + } + } + } + } + + return true; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/WorldGenRegistration.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenRegistration.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/WorldGenRegistration.java rename to eSpigot-Server/src/main/java/net/minecraft/server/WorldGenRegistration.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenSand.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenSand.java new file mode 100644 index 0000000..4c4fe31 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenSand.java @@ -0,0 +1,43 @@ +package net.minecraft.server; + +import java.util.Random; + +public class WorldGenSand extends WorldGenerator { + + private Block a; + private int b; + + public WorldGenSand(Block block, int i) { + this.a = block; + this.b = i; + } + + public boolean generate(World world, Random random, BlockPosition blockposition) { + if (world.getType(blockposition).getBlock().getMaterial() != Material.WATER) { + return false; + } else { + int i = random.nextInt(this.b - 2) + 2; + byte b0 = 2; + + for (int j = blockposition.getX() - i; j <= blockposition.getX() + i; ++j) { + for (int k = blockposition.getZ() - i; k <= blockposition.getZ() + i; ++k) { + int l = j - blockposition.getX(); + int i1 = k - blockposition.getZ(); + + if (l * l + i1 * i1 <= i * i) { + for (int j1 = blockposition.getY() - b0; j1 <= blockposition.getY() + b0; ++j1) { + BlockPosition blockposition1 = new BlockPosition(j, j1, k); + Block block = world.getType(blockposition1).getBlock(); + + if (block == Blocks.DIRT || block == Blocks.GRASS) { + world.setTypeAndData(blockposition1, this.a.getBlockData(), 2); + } + } + } + } + } + + return true; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenStronghold.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenStronghold.java new file mode 100644 index 0000000..6b663ce --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenStronghold.java @@ -0,0 +1,153 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.Map.Entry; + +public class WorldGenStronghold extends StructureGenerator { + + private List d; + private boolean f; + private ChunkCoordIntPair[] g; + private double h; + private int i; + + public WorldGenStronghold() { + this.g = new ChunkCoordIntPair[3]; + this.h = 32.0D; + this.i = 3; + this.d = Lists.newArrayList(); + BiomeBase[] abiomebase = BiomeBase.getBiomes(); + int i = abiomebase.length; + + for (int j = 0; j < i; ++j) { + BiomeBase biomebase = abiomebase[j]; + + if (biomebase != null && biomebase.an > 0.0F) { + this.d.add(biomebase); + } + } + + } + + public WorldGenStronghold(Map map) { + this(); + Iterator iterator = map.entrySet().iterator(); + + while (iterator.hasNext()) { + Entry entry = (Entry) iterator.next(); + + if (((String) entry.getKey()).equals("distance")) { + this.h = MathHelper.a((String) entry.getValue(), this.h, 1.0D); + } else if (((String) entry.getKey()).equals("count")) { + this.g = new ChunkCoordIntPair[MathHelper.a((String) entry.getValue(), this.g.length, 1)]; + } else if (((String) entry.getKey()).equals("spread")) { + this.i = MathHelper.a((String) entry.getValue(), this.i, 1); + } + } + + } + + public String a() { + return "Stronghold"; + } + + protected boolean a(int i, int j) { + if (!this.f) { + Random random = new Random(); + + random.setSeed(this.c.getSeed()); + double d0 = random.nextDouble() * 3.141592653589793D * 2.0D; + int k = 1; + + for (int l = 0; l < this.g.length; ++l) { + double d1 = (1.25D * (double) k + random.nextDouble()) * this.h * (double) k; + int i1 = (int) Math.round(Math.cos(d0) * d1); + int j1 = (int) Math.round(Math.sin(d0) * d1); + BlockPosition blockposition = this.c.getWorldChunkManager().a((i1 << 4) + 8, (j1 << 4) + 8, 112, this.d, random); + + if (blockposition != null) { + i1 = blockposition.getX() >> 4; + j1 = blockposition.getZ() >> 4; + } + + this.g[l] = new ChunkCoordIntPair(i1, j1); + d0 += 6.283185307179586D * (double) k / (double) this.i; + if (l == this.i) { + k += 2 + random.nextInt(5); + this.i += 1 + random.nextInt(2); + } + } + + this.f = true; + } + + ChunkCoordIntPair[] achunkcoordintpair = this.g; + int k1 = achunkcoordintpair.length; + + for (int l1 = 0; l1 < k1; ++l1) { + ChunkCoordIntPair chunkcoordintpair = achunkcoordintpair[l1]; + + if (i == chunkcoordintpair.x && j == chunkcoordintpair.z) { + return true; + } + } + + return false; + } + + protected List z_() { + ArrayList arraylist = Lists.newArrayList(); + ChunkCoordIntPair[] achunkcoordintpair = this.g; + int i = achunkcoordintpair.length; + + for (int j = 0; j < i; ++j) { + ChunkCoordIntPair chunkcoordintpair = achunkcoordintpair[j]; + + if (chunkcoordintpair != null) { + arraylist.add(chunkcoordintpair.a(64)); + } + } + + return arraylist; + } + + protected StructureStart b(int i, int j) { + WorldGenStronghold.WorldGenStronghold2Start worldgenstronghold_worldgenstronghold2start; + + for (worldgenstronghold_worldgenstronghold2start = new WorldGenStronghold.WorldGenStronghold2Start(this.c, this.b, i, j); worldgenstronghold_worldgenstronghold2start.b().isEmpty() || ((WorldGenStrongholdPieces.WorldGenStrongholdStart) worldgenstronghold_worldgenstronghold2start.b().get(0)).b == null; worldgenstronghold_worldgenstronghold2start = new WorldGenStronghold.WorldGenStronghold2Start(this.c, this.b, i, j)) { + ; + } + + return worldgenstronghold_worldgenstronghold2start; + } + + public static class WorldGenStronghold2Start extends StructureStart { + + public WorldGenStronghold2Start() {} + + public WorldGenStronghold2Start(World world, Random random, int i, int j) { + super(i, j); + WorldGenStrongholdPieces.b(); + WorldGenStrongholdPieces.WorldGenStrongholdStart worldgenstrongholdpieces_worldgenstrongholdstart = new WorldGenStrongholdPieces.WorldGenStrongholdStart(0, random, (i << 4) + 2, (j << 4) + 2); + + this.a.add(worldgenstrongholdpieces_worldgenstrongholdstart); + worldgenstrongholdpieces_worldgenstrongholdstart.a((StructurePiece) worldgenstrongholdpieces_worldgenstrongholdstart, (List) this.a, random); + List list = worldgenstrongholdpieces_worldgenstrongholdstart.c; + + while (!list.isEmpty()) { + int k = random.nextInt(list.size()); + StructurePiece structurepiece = (StructurePiece) list.remove(k); + + structurepiece.a((StructurePiece) worldgenstrongholdpieces_worldgenstrongholdstart, (List) this.a, random); + } + + this.c(); + this.a(world, random, 10); + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenStrongholdPieces.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenStrongholdPieces.java new file mode 100644 index 0000000..5c2112f --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenStrongholdPieces.java @@ -0,0 +1,1430 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import java.util.Iterator; +import java.util.List; +import java.util.Random; + +public class WorldGenStrongholdPieces { + + private static final WorldGenStrongholdPieces.WorldGenStrongholdPieceWeight[] b = new WorldGenStrongholdPieces.WorldGenStrongholdPieceWeight[] { new WorldGenStrongholdPieces.WorldGenStrongholdPieceWeight(WorldGenStrongholdPieces.WorldGenStrongholdStairs.class, 40, 0), new WorldGenStrongholdPieces.WorldGenStrongholdPieceWeight(WorldGenStrongholdPieces.WorldGenStrongholdPrison.class, 5, 5), new WorldGenStrongholdPieces.WorldGenStrongholdPieceWeight(WorldGenStrongholdPieces.WorldGenStrongholdLeftTurn.class, 20, 0), new WorldGenStrongholdPieces.WorldGenStrongholdPieceWeight(WorldGenStrongholdPieces.WorldGenStrongholdRightTurn.class, 20, 0), new WorldGenStrongholdPieces.WorldGenStrongholdPieceWeight(WorldGenStrongholdPieces.WorldGenStrongholdRoomCrossing.class, 10, 6), new WorldGenStrongholdPieces.WorldGenStrongholdPieceWeight(WorldGenStrongholdPieces.WorldGenStrongholdStairsStraight.class, 5, 5), new WorldGenStrongholdPieces.WorldGenStrongholdPieceWeight(WorldGenStrongholdPieces.WorldGenStrongholdStairs2.class, 5, 5), new WorldGenStrongholdPieces.WorldGenStrongholdPieceWeight(WorldGenStrongholdPieces.WorldGenStrongholdCrossing.class, 5, 4), new WorldGenStrongholdPieces.WorldGenStrongholdPieceWeight(WorldGenStrongholdPieces.WorldGenStrongholdChestCorridor.class, 5, 4), new WorldGenStrongholdPieces.WorldGenStrongholdPieceWeight(WorldGenStrongholdPieces.WorldGenStrongholdLibrary.class, 10, 2) { + public boolean a(int i) { + return super.a(i) && i > 4; + } + }, new WorldGenStrongholdPieces.WorldGenStrongholdPieceWeight(WorldGenStrongholdPieces.WorldGenStrongholdPortalRoom.class, 20, 1) { + public boolean a(int i) { + return super.a(i) && i > 5; + } + }}; + private static List c; + private static Class d; + static int a; + private static final WorldGenStrongholdPieces.WorldGenStrongholdStones e = new WorldGenStrongholdPieces.WorldGenStrongholdStones(null); + + public static void a() { + WorldGenFactory.a(WorldGenStrongholdPieces.WorldGenStrongholdChestCorridor.class, "SHCC"); + WorldGenFactory.a(WorldGenStrongholdPieces.WorldGenStrongholdCorridor.class, "SHFC"); + WorldGenFactory.a(WorldGenStrongholdPieces.WorldGenStrongholdCrossing.class, "SH5C"); + WorldGenFactory.a(WorldGenStrongholdPieces.WorldGenStrongholdLeftTurn.class, "SHLT"); + WorldGenFactory.a(WorldGenStrongholdPieces.WorldGenStrongholdLibrary.class, "SHLi"); + WorldGenFactory.a(WorldGenStrongholdPieces.WorldGenStrongholdPortalRoom.class, "SHPR"); + WorldGenFactory.a(WorldGenStrongholdPieces.WorldGenStrongholdPrison.class, "SHPH"); + WorldGenFactory.a(WorldGenStrongholdPieces.WorldGenStrongholdRightTurn.class, "SHRT"); + WorldGenFactory.a(WorldGenStrongholdPieces.WorldGenStrongholdRoomCrossing.class, "SHRC"); + WorldGenFactory.a(WorldGenStrongholdPieces.WorldGenStrongholdStairs2.class, "SHSD"); + WorldGenFactory.a(WorldGenStrongholdPieces.WorldGenStrongholdStart.class, "SHStart"); + WorldGenFactory.a(WorldGenStrongholdPieces.WorldGenStrongholdStairs.class, "SHS"); + WorldGenFactory.a(WorldGenStrongholdPieces.WorldGenStrongholdStairsStraight.class, "SHSSD"); + } + + public static void b() { + WorldGenStrongholdPieces.c = Lists.newArrayList(); + WorldGenStrongholdPieces.WorldGenStrongholdPieceWeight[] aworldgenstrongholdpieces_worldgenstrongholdpieceweight = WorldGenStrongholdPieces.b; + int i = aworldgenstrongholdpieces_worldgenstrongholdpieceweight.length; + + for (int j = 0; j < i; ++j) { + WorldGenStrongholdPieces.WorldGenStrongholdPieceWeight worldgenstrongholdpieces_worldgenstrongholdpieceweight = aworldgenstrongholdpieces_worldgenstrongholdpieceweight[j]; + + worldgenstrongholdpieces_worldgenstrongholdpieceweight.c = 0; + WorldGenStrongholdPieces.c.add(worldgenstrongholdpieces_worldgenstrongholdpieceweight); + } + + WorldGenStrongholdPieces.d = null; + } + + private static boolean d() { + boolean flag = false; + + WorldGenStrongholdPieces.a = 0; + + WorldGenStrongholdPieces.WorldGenStrongholdPieceWeight worldgenstrongholdpieces_worldgenstrongholdpieceweight; + + for (Iterator iterator = WorldGenStrongholdPieces.c.iterator(); iterator.hasNext(); WorldGenStrongholdPieces.a += worldgenstrongholdpieces_worldgenstrongholdpieceweight.b) { + worldgenstrongholdpieces_worldgenstrongholdpieceweight = (WorldGenStrongholdPieces.WorldGenStrongholdPieceWeight) iterator.next(); + if (worldgenstrongholdpieces_worldgenstrongholdpieceweight.d > 0 && worldgenstrongholdpieces_worldgenstrongholdpieceweight.c < worldgenstrongholdpieces_worldgenstrongholdpieceweight.d) { + flag = true; + } + } + + return flag; + } + + private static WorldGenStrongholdPieces.WorldGenStrongholdPiece a(Class oclass, List list, Random random, int i, int j, int k, EnumDirection enumdirection, int l) { + Object object = null; + + if (oclass == WorldGenStrongholdPieces.WorldGenStrongholdStairs.class) { + object = WorldGenStrongholdPieces.WorldGenStrongholdStairs.a(list, random, i, j, k, enumdirection, l); + } else if (oclass == WorldGenStrongholdPieces.WorldGenStrongholdPrison.class) { + object = WorldGenStrongholdPieces.WorldGenStrongholdPrison.a(list, random, i, j, k, enumdirection, l); + } else if (oclass == WorldGenStrongholdPieces.WorldGenStrongholdLeftTurn.class) { + object = WorldGenStrongholdPieces.WorldGenStrongholdLeftTurn.a(list, random, i, j, k, enumdirection, l); + } else if (oclass == WorldGenStrongholdPieces.WorldGenStrongholdRightTurn.class) { + object = WorldGenStrongholdPieces.WorldGenStrongholdRightTurn.a(list, random, i, j, k, enumdirection, l); + } else if (oclass == WorldGenStrongholdPieces.WorldGenStrongholdRoomCrossing.class) { + object = WorldGenStrongholdPieces.WorldGenStrongholdRoomCrossing.a(list, random, i, j, k, enumdirection, l); + } else if (oclass == WorldGenStrongholdPieces.WorldGenStrongholdStairsStraight.class) { + object = WorldGenStrongholdPieces.WorldGenStrongholdStairsStraight.a(list, random, i, j, k, enumdirection, l); + } else if (oclass == WorldGenStrongholdPieces.WorldGenStrongholdStairs2.class) { + object = WorldGenStrongholdPieces.WorldGenStrongholdStairs2.a(list, random, i, j, k, enumdirection, l); + } else if (oclass == WorldGenStrongholdPieces.WorldGenStrongholdCrossing.class) { + object = WorldGenStrongholdPieces.WorldGenStrongholdCrossing.a(list, random, i, j, k, enumdirection, l); + } else if (oclass == WorldGenStrongholdPieces.WorldGenStrongholdChestCorridor.class) { + object = WorldGenStrongholdPieces.WorldGenStrongholdChestCorridor.a(list, random, i, j, k, enumdirection, l); + } else if (oclass == WorldGenStrongholdPieces.WorldGenStrongholdLibrary.class) { + object = WorldGenStrongholdPieces.WorldGenStrongholdLibrary.a(list, random, i, j, k, enumdirection, l); + } else if (oclass == WorldGenStrongholdPieces.WorldGenStrongholdPortalRoom.class) { + object = WorldGenStrongholdPieces.WorldGenStrongholdPortalRoom.a(list, random, i, j, k, enumdirection, l); + } + + return (WorldGenStrongholdPieces.WorldGenStrongholdPiece) object; + } + + private static WorldGenStrongholdPieces.WorldGenStrongholdPiece b(WorldGenStrongholdPieces.WorldGenStrongholdStart worldgenstrongholdpieces_worldgenstrongholdstart, List list, Random random, int i, int j, int k, EnumDirection enumdirection, int l) { + if (!d()) { + return null; + } else { + if (WorldGenStrongholdPieces.d != null) { + WorldGenStrongholdPieces.WorldGenStrongholdPiece worldgenstrongholdpieces_worldgenstrongholdpiece = a(WorldGenStrongholdPieces.d, list, random, i, j, k, enumdirection, l); + + WorldGenStrongholdPieces.d = null; + if (worldgenstrongholdpieces_worldgenstrongholdpiece != null) { + return worldgenstrongholdpieces_worldgenstrongholdpiece; + } + } + + int i1 = 0; + + while (i1 < 5) { + ++i1; + int j1 = random.nextInt(WorldGenStrongholdPieces.a); + Iterator iterator = WorldGenStrongholdPieces.c.iterator(); + + while (iterator.hasNext()) { + WorldGenStrongholdPieces.WorldGenStrongholdPieceWeight worldgenstrongholdpieces_worldgenstrongholdpieceweight = (WorldGenStrongholdPieces.WorldGenStrongholdPieceWeight) iterator.next(); + + j1 -= worldgenstrongholdpieces_worldgenstrongholdpieceweight.b; + if (j1 < 0) { + if (!worldgenstrongholdpieces_worldgenstrongholdpieceweight.a(l) || worldgenstrongholdpieces_worldgenstrongholdpieceweight == worldgenstrongholdpieces_worldgenstrongholdstart.a) { + break; + } + + WorldGenStrongholdPieces.WorldGenStrongholdPiece worldgenstrongholdpieces_worldgenstrongholdpiece1 = a(worldgenstrongholdpieces_worldgenstrongholdpieceweight.a, list, random, i, j, k, enumdirection, l); + + if (worldgenstrongholdpieces_worldgenstrongholdpiece1 != null) { + ++worldgenstrongholdpieces_worldgenstrongholdpieceweight.c; + worldgenstrongholdpieces_worldgenstrongholdstart.a = worldgenstrongholdpieces_worldgenstrongholdpieceweight; + if (!worldgenstrongholdpieces_worldgenstrongholdpieceweight.a()) { + WorldGenStrongholdPieces.c.remove(worldgenstrongholdpieces_worldgenstrongholdpieceweight); + } + + return worldgenstrongholdpieces_worldgenstrongholdpiece1; + } + } + } + } + + StructureBoundingBox structureboundingbox = WorldGenStrongholdPieces.WorldGenStrongholdCorridor.a(list, random, i, j, k, enumdirection); + + if (structureboundingbox != null && structureboundingbox.b > 1) { + return new WorldGenStrongholdPieces.WorldGenStrongholdCorridor(l, random, structureboundingbox, enumdirection); + } else { + return null; + } + } + } + + private static StructurePiece c(WorldGenStrongholdPieces.WorldGenStrongholdStart worldgenstrongholdpieces_worldgenstrongholdstart, List list, Random random, int i, int j, int k, EnumDirection enumdirection, int l) { + if (l > 50) { + return null; + } else if (Math.abs(i - worldgenstrongholdpieces_worldgenstrongholdstart.c().a) <= 112 && Math.abs(k - worldgenstrongholdpieces_worldgenstrongholdstart.c().c) <= 112) { + WorldGenStrongholdPieces.WorldGenStrongholdPiece worldgenstrongholdpieces_worldgenstrongholdpiece = b(worldgenstrongholdpieces_worldgenstrongholdstart, list, random, i, j, k, enumdirection, l + 1); + + if (worldgenstrongholdpieces_worldgenstrongholdpiece != null) { + list.add(worldgenstrongholdpieces_worldgenstrongholdpiece); + worldgenstrongholdpieces_worldgenstrongholdstart.c.add(worldgenstrongholdpieces_worldgenstrongholdpiece); + } + + return worldgenstrongholdpieces_worldgenstrongholdpiece; + } else { + return null; + } + } + + static class SyntheticClass_1 { + + static final int[] a; + static final int[] b = new int[EnumDirection.values().length]; + + static { + try { + WorldGenStrongholdPieces.SyntheticClass_1.b[EnumDirection.NORTH.ordinal()] = 1; + } catch (NoSuchFieldError nosuchfielderror) { + ; + } + + try { + WorldGenStrongholdPieces.SyntheticClass_1.b[EnumDirection.SOUTH.ordinal()] = 2; + } catch (NoSuchFieldError nosuchfielderror1) { + ; + } + + try { + WorldGenStrongholdPieces.SyntheticClass_1.b[EnumDirection.WEST.ordinal()] = 3; + } catch (NoSuchFieldError nosuchfielderror2) { + ; + } + + try { + WorldGenStrongholdPieces.SyntheticClass_1.b[EnumDirection.EAST.ordinal()] = 4; + } catch (NoSuchFieldError nosuchfielderror3) { + ; + } + + a = new int[WorldGenStrongholdPieces.WorldGenStrongholdPiece.WorldGenStrongholdDoorType.values().length]; + + try { + WorldGenStrongholdPieces.SyntheticClass_1.a[WorldGenStrongholdPieces.WorldGenStrongholdPiece.WorldGenStrongholdDoorType.OPENING.ordinal()] = 1; + } catch (NoSuchFieldError nosuchfielderror4) { + ; + } + + try { + WorldGenStrongholdPieces.SyntheticClass_1.a[WorldGenStrongholdPieces.WorldGenStrongholdPiece.WorldGenStrongholdDoorType.WOOD_DOOR.ordinal()] = 2; + } catch (NoSuchFieldError nosuchfielderror5) { + ; + } + + try { + WorldGenStrongholdPieces.SyntheticClass_1.a[WorldGenStrongholdPieces.WorldGenStrongholdPiece.WorldGenStrongholdDoorType.GRATES.ordinal()] = 3; + } catch (NoSuchFieldError nosuchfielderror6) { + ; + } + + try { + WorldGenStrongholdPieces.SyntheticClass_1.a[WorldGenStrongholdPieces.WorldGenStrongholdPiece.WorldGenStrongholdDoorType.IRON_DOOR.ordinal()] = 4; + } catch (NoSuchFieldError nosuchfielderror7) { + ; + } + + } + } + + static class WorldGenStrongholdStones extends StructurePiece.StructurePieceBlockSelector { + + private WorldGenStrongholdStones() {} + + public void a(Random random, int i, int j, int k, boolean flag) { + if (flag) { + float f = random.nextFloat(); + + if (f < 0.2F) { + this.a = Blocks.STONEBRICK.fromLegacyData(BlockSmoothBrick.O); + } else if (f < 0.5F) { + this.a = Blocks.STONEBRICK.fromLegacyData(BlockSmoothBrick.N); + } else if (f < 0.55F) { + this.a = Blocks.MONSTER_EGG.fromLegacyData(BlockMonsterEggs.EnumMonsterEggVarient.STONEBRICK.a()); + } else { + this.a = Blocks.STONEBRICK.getBlockData(); + } + } else { + this.a = Blocks.AIR.getBlockData(); + } + + } + + WorldGenStrongholdStones(Object object) { + this(); + } + } + + public static class WorldGenStrongholdPortalRoom extends WorldGenStrongholdPieces.WorldGenStrongholdPiece { + + private boolean a; + + public WorldGenStrongholdPortalRoom() {} + + public WorldGenStrongholdPortalRoom(int i, Random random, StructureBoundingBox structureboundingbox, EnumDirection enumdirection) { + super(i); + this.m = enumdirection; + this.l = structureboundingbox; + } + + protected void a(NBTTagCompound nbttagcompound) { + super.a(nbttagcompound); + nbttagcompound.setBoolean("Mob", this.a); + } + + protected void b(NBTTagCompound nbttagcompound) { + super.b(nbttagcompound); + this.a = nbttagcompound.getBoolean("Mob"); + } + + public void a(StructurePiece structurepiece, List list, Random random) { + if (structurepiece != null) { + ((WorldGenStrongholdPieces.WorldGenStrongholdStart) structurepiece).b = this; + } + + } + + public static WorldGenStrongholdPieces.WorldGenStrongholdPortalRoom a(List list, Random random, int i, int j, int k, EnumDirection enumdirection, int l) { + StructureBoundingBox structureboundingbox = StructureBoundingBox.a(i, j, k, -4, -1, 0, 11, 8, 16, enumdirection); + + return a(structureboundingbox) && StructurePiece.a(list, structureboundingbox) == null ? new WorldGenStrongholdPieces.WorldGenStrongholdPortalRoom(l, random, structureboundingbox, enumdirection) : null; + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + this.a(world, structureboundingbox, 0, 0, 0, 10, 7, 15, false, random, WorldGenStrongholdPieces.e); + this.a(world, random, structureboundingbox, WorldGenStrongholdPieces.WorldGenStrongholdPiece.WorldGenStrongholdDoorType.GRATES, 4, 1, 0); + byte b0 = 6; + + this.a(world, structureboundingbox, 1, b0, 1, 1, b0, 14, false, random, WorldGenStrongholdPieces.e); + this.a(world, structureboundingbox, 9, b0, 1, 9, b0, 14, false, random, WorldGenStrongholdPieces.e); + this.a(world, structureboundingbox, 2, b0, 1, 8, b0, 2, false, random, WorldGenStrongholdPieces.e); + this.a(world, structureboundingbox, 2, b0, 14, 8, b0, 14, false, random, WorldGenStrongholdPieces.e); + this.a(world, structureboundingbox, 1, 1, 1, 2, 1, 4, false, random, WorldGenStrongholdPieces.e); + this.a(world, structureboundingbox, 8, 1, 1, 9, 1, 4, false, random, WorldGenStrongholdPieces.e); + this.a(world, structureboundingbox, 1, 1, 1, 1, 1, 3, Blocks.FLOWING_LAVA.getBlockData(), Blocks.FLOWING_LAVA.getBlockData(), false); + this.a(world, structureboundingbox, 9, 1, 1, 9, 1, 3, Blocks.FLOWING_LAVA.getBlockData(), Blocks.FLOWING_LAVA.getBlockData(), false); + this.a(world, structureboundingbox, 3, 1, 8, 7, 1, 12, false, random, WorldGenStrongholdPieces.e); + this.a(world, structureboundingbox, 4, 1, 9, 6, 1, 11, Blocks.FLOWING_LAVA.getBlockData(), Blocks.FLOWING_LAVA.getBlockData(), false); + + int i; + + for (i = 3; i < 14; i += 2) { + this.a(world, structureboundingbox, 0, 3, i, 0, 4, i, Blocks.IRON_BARS.getBlockData(), Blocks.IRON_BARS.getBlockData(), false); + this.a(world, structureboundingbox, 10, 3, i, 10, 4, i, Blocks.IRON_BARS.getBlockData(), Blocks.IRON_BARS.getBlockData(), false); + } + + for (i = 2; i < 9; i += 2) { + this.a(world, structureboundingbox, i, 3, 15, i, 4, 15, Blocks.IRON_BARS.getBlockData(), Blocks.IRON_BARS.getBlockData(), false); + } + + i = this.a(Blocks.STONE_BRICK_STAIRS, 3); + this.a(world, structureboundingbox, 4, 1, 5, 6, 1, 7, false, random, WorldGenStrongholdPieces.e); + this.a(world, structureboundingbox, 4, 2, 6, 6, 2, 7, false, random, WorldGenStrongholdPieces.e); + this.a(world, structureboundingbox, 4, 3, 7, 6, 3, 7, false, random, WorldGenStrongholdPieces.e); + + int j; + + for (j = 4; j <= 6; ++j) { + this.a(world, Blocks.STONE_BRICK_STAIRS.fromLegacyData(i), j, 1, 4, structureboundingbox); + this.a(world, Blocks.STONE_BRICK_STAIRS.fromLegacyData(i), j, 2, 5, structureboundingbox); + this.a(world, Blocks.STONE_BRICK_STAIRS.fromLegacyData(i), j, 3, 6, structureboundingbox); + } + + j = EnumDirection.NORTH.b(); + int k = EnumDirection.SOUTH.b(); + int l = EnumDirection.EAST.b(); + int i1 = EnumDirection.WEST.b(); + + if (this.m != null) { + switch (WorldGenStrongholdPieces.SyntheticClass_1.b[this.m.ordinal()]) { + case 2: + j = EnumDirection.SOUTH.b(); + k = EnumDirection.NORTH.b(); + break; + + case 3: + j = EnumDirection.WEST.b(); + k = EnumDirection.EAST.b(); + l = EnumDirection.SOUTH.b(); + i1 = EnumDirection.NORTH.b(); + break; + + case 4: + j = EnumDirection.EAST.b(); + k = EnumDirection.WEST.b(); + l = EnumDirection.SOUTH.b(); + i1 = EnumDirection.NORTH.b(); + } + } + + this.a(world, Blocks.END_PORTAL_FRAME.fromLegacyData(j).set(BlockEnderPortalFrame.EYE, Boolean.valueOf(random.nextFloat() > 0.9F)), 4, 3, 8, structureboundingbox); + this.a(world, Blocks.END_PORTAL_FRAME.fromLegacyData(j).set(BlockEnderPortalFrame.EYE, Boolean.valueOf(random.nextFloat() > 0.9F)), 5, 3, 8, structureboundingbox); + this.a(world, Blocks.END_PORTAL_FRAME.fromLegacyData(j).set(BlockEnderPortalFrame.EYE, Boolean.valueOf(random.nextFloat() > 0.9F)), 6, 3, 8, structureboundingbox); + this.a(world, Blocks.END_PORTAL_FRAME.fromLegacyData(k).set(BlockEnderPortalFrame.EYE, Boolean.valueOf(random.nextFloat() > 0.9F)), 4, 3, 12, structureboundingbox); + this.a(world, Blocks.END_PORTAL_FRAME.fromLegacyData(k).set(BlockEnderPortalFrame.EYE, Boolean.valueOf(random.nextFloat() > 0.9F)), 5, 3, 12, structureboundingbox); + this.a(world, Blocks.END_PORTAL_FRAME.fromLegacyData(k).set(BlockEnderPortalFrame.EYE, Boolean.valueOf(random.nextFloat() > 0.9F)), 6, 3, 12, structureboundingbox); + this.a(world, Blocks.END_PORTAL_FRAME.fromLegacyData(l).set(BlockEnderPortalFrame.EYE, Boolean.valueOf(random.nextFloat() > 0.9F)), 3, 3, 9, structureboundingbox); + this.a(world, Blocks.END_PORTAL_FRAME.fromLegacyData(l).set(BlockEnderPortalFrame.EYE, Boolean.valueOf(random.nextFloat() > 0.9F)), 3, 3, 10, structureboundingbox); + this.a(world, Blocks.END_PORTAL_FRAME.fromLegacyData(l).set(BlockEnderPortalFrame.EYE, Boolean.valueOf(random.nextFloat() > 0.9F)), 3, 3, 11, structureboundingbox); + this.a(world, Blocks.END_PORTAL_FRAME.fromLegacyData(i1).set(BlockEnderPortalFrame.EYE, Boolean.valueOf(random.nextFloat() > 0.9F)), 7, 3, 9, structureboundingbox); + this.a(world, Blocks.END_PORTAL_FRAME.fromLegacyData(i1).set(BlockEnderPortalFrame.EYE, Boolean.valueOf(random.nextFloat() > 0.9F)), 7, 3, 10, structureboundingbox); + this.a(world, Blocks.END_PORTAL_FRAME.fromLegacyData(i1).set(BlockEnderPortalFrame.EYE, Boolean.valueOf(random.nextFloat() > 0.9F)), 7, 3, 11, structureboundingbox); + if (!this.a) { + int j1 = this.d(3); + BlockPosition blockposition = new BlockPosition(this.a(5, 6), j1, this.b(5, 6)); + + if (structureboundingbox.b((BaseBlockPosition) blockposition)) { + this.a = true; + world.setTypeAndData(blockposition, Blocks.MOB_SPAWNER.getBlockData(), 2); + TileEntity tileentity = world.getTileEntity(blockposition); + + if (tileentity instanceof TileEntityMobSpawner) { + ((TileEntityMobSpawner) tileentity).getSpawner().setMobName("Silverfish"); + } + } + } + + return true; + } + } + + public static class WorldGenStrongholdCrossing extends WorldGenStrongholdPieces.WorldGenStrongholdPiece { + + private boolean a; + private boolean b; + private boolean c; + private boolean e; + + public WorldGenStrongholdCrossing() {} + + public WorldGenStrongholdCrossing(int i, Random random, StructureBoundingBox structureboundingbox, EnumDirection enumdirection) { + super(i); + this.m = enumdirection; + this.d = this.a(random); + this.l = structureboundingbox; + this.a = random.nextBoolean(); + this.b = random.nextBoolean(); + this.c = random.nextBoolean(); + this.e = random.nextInt(3) > 0; + } + + protected void a(NBTTagCompound nbttagcompound) { + super.a(nbttagcompound); + nbttagcompound.setBoolean("leftLow", this.a); + nbttagcompound.setBoolean("leftHigh", this.b); + nbttagcompound.setBoolean("rightLow", this.c); + nbttagcompound.setBoolean("rightHigh", this.e); + } + + protected void b(NBTTagCompound nbttagcompound) { + super.b(nbttagcompound); + this.a = nbttagcompound.getBoolean("leftLow"); + this.b = nbttagcompound.getBoolean("leftHigh"); + this.c = nbttagcompound.getBoolean("rightLow"); + this.e = nbttagcompound.getBoolean("rightHigh"); + } + + public void a(StructurePiece structurepiece, List list, Random random) { + int i = 3; + int j = 5; + + if (this.m == EnumDirection.WEST || this.m == EnumDirection.NORTH) { + i = 8 - i; + j = 8 - j; + } + + this.a((WorldGenStrongholdPieces.WorldGenStrongholdStart) structurepiece, list, random, 5, 1); + if (this.a) { + this.b((WorldGenStrongholdPieces.WorldGenStrongholdStart) structurepiece, list, random, i, 1); + } + + if (this.b) { + this.b((WorldGenStrongholdPieces.WorldGenStrongholdStart) structurepiece, list, random, j, 7); + } + + if (this.c) { + this.c((WorldGenStrongholdPieces.WorldGenStrongholdStart) structurepiece, list, random, i, 1); + } + + if (this.e) { + this.c((WorldGenStrongholdPieces.WorldGenStrongholdStart) structurepiece, list, random, j, 7); + } + + } + + public static WorldGenStrongholdPieces.WorldGenStrongholdCrossing a(List list, Random random, int i, int j, int k, EnumDirection enumdirection, int l) { + StructureBoundingBox structureboundingbox = StructureBoundingBox.a(i, j, k, -4, -3, 0, 10, 9, 11, enumdirection); + + return a(structureboundingbox) && StructurePiece.a(list, structureboundingbox) == null ? new WorldGenStrongholdPieces.WorldGenStrongholdCrossing(l, random, structureboundingbox, enumdirection) : null; + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + if (this.a(world, structureboundingbox)) { + return false; + } else { + this.a(world, structureboundingbox, 0, 0, 0, 9, 8, 10, true, random, WorldGenStrongholdPieces.e); + this.a(world, random, structureboundingbox, this.d, 4, 3, 0); + if (this.a) { + this.a(world, structureboundingbox, 0, 3, 1, 0, 5, 3, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + } + + if (this.c) { + this.a(world, structureboundingbox, 9, 3, 1, 9, 5, 3, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + } + + if (this.b) { + this.a(world, structureboundingbox, 0, 5, 7, 0, 7, 9, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + } + + if (this.e) { + this.a(world, structureboundingbox, 9, 5, 7, 9, 7, 9, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + } + + this.a(world, structureboundingbox, 5, 1, 10, 7, 3, 10, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + this.a(world, structureboundingbox, 1, 2, 1, 8, 2, 6, false, random, WorldGenStrongholdPieces.e); + this.a(world, structureboundingbox, 4, 1, 5, 4, 4, 9, false, random, WorldGenStrongholdPieces.e); + this.a(world, structureboundingbox, 8, 1, 5, 8, 4, 9, false, random, WorldGenStrongholdPieces.e); + this.a(world, structureboundingbox, 1, 4, 7, 3, 4, 9, false, random, WorldGenStrongholdPieces.e); + this.a(world, structureboundingbox, 1, 3, 5, 3, 3, 6, false, random, WorldGenStrongholdPieces.e); + this.a(world, structureboundingbox, 1, 3, 4, 3, 3, 4, Blocks.STONE_SLAB.getBlockData(), Blocks.STONE_SLAB.getBlockData(), false); + this.a(world, structureboundingbox, 1, 4, 6, 3, 4, 6, Blocks.STONE_SLAB.getBlockData(), Blocks.STONE_SLAB.getBlockData(), false); + this.a(world, structureboundingbox, 5, 1, 7, 7, 1, 8, false, random, WorldGenStrongholdPieces.e); + this.a(world, structureboundingbox, 5, 1, 9, 7, 1, 9, Blocks.STONE_SLAB.getBlockData(), Blocks.STONE_SLAB.getBlockData(), false); + this.a(world, structureboundingbox, 5, 2, 7, 7, 2, 7, Blocks.STONE_SLAB.getBlockData(), Blocks.STONE_SLAB.getBlockData(), false); + this.a(world, structureboundingbox, 4, 5, 7, 4, 5, 9, Blocks.STONE_SLAB.getBlockData(), Blocks.STONE_SLAB.getBlockData(), false); + this.a(world, structureboundingbox, 8, 5, 7, 8, 5, 9, Blocks.STONE_SLAB.getBlockData(), Blocks.STONE_SLAB.getBlockData(), false); + this.a(world, structureboundingbox, 5, 5, 7, 7, 5, 9, Blocks.DOUBLE_STONE_SLAB.getBlockData(), Blocks.DOUBLE_STONE_SLAB.getBlockData(), false); + this.a(world, Blocks.TORCH.getBlockData(), 6, 5, 6, structureboundingbox); + return true; + } + } + } + + public static class WorldGenStrongholdLibrary extends WorldGenStrongholdPieces.WorldGenStrongholdPiece { + + private static final List a = Lists.newArrayList(new StructurePieceTreasure[] { new StructurePieceTreasure(Items.BOOK, 0, 1, 3, 20), new StructurePieceTreasure(Items.PAPER, 0, 2, 7, 20), new StructurePieceTreasure(Items.MAP, 0, 1, 1, 1), new StructurePieceTreasure(Items.COMPASS, 0, 1, 1, 1)}); + private boolean b; + + public WorldGenStrongholdLibrary() {} + + public WorldGenStrongholdLibrary(int i, Random random, StructureBoundingBox structureboundingbox, EnumDirection enumdirection) { + super(i); + this.m = enumdirection; + this.d = this.a(random); + this.l = structureboundingbox; + this.b = structureboundingbox.d() > 6; + } + + protected void a(NBTTagCompound nbttagcompound) { + super.a(nbttagcompound); + nbttagcompound.setBoolean("Tall", this.b); + } + + protected void b(NBTTagCompound nbttagcompound) { + super.b(nbttagcompound); + this.b = nbttagcompound.getBoolean("Tall"); + } + + public static WorldGenStrongholdPieces.WorldGenStrongholdLibrary a(List list, Random random, int i, int j, int k, EnumDirection enumdirection, int l) { + StructureBoundingBox structureboundingbox = StructureBoundingBox.a(i, j, k, -4, -1, 0, 14, 11, 15, enumdirection); + + if (!a(structureboundingbox) || StructurePiece.a(list, structureboundingbox) != null) { + structureboundingbox = StructureBoundingBox.a(i, j, k, -4, -1, 0, 14, 6, 15, enumdirection); + if (!a(structureboundingbox) || StructurePiece.a(list, structureboundingbox) != null) { + return null; + } + } + + return new WorldGenStrongholdPieces.WorldGenStrongholdLibrary(l, random, structureboundingbox, enumdirection); + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + if (this.a(world, structureboundingbox)) { + return false; + } else { + byte b0 = 11; + + if (!this.b) { + b0 = 6; + } + + this.a(world, structureboundingbox, 0, 0, 0, 13, b0 - 1, 14, true, random, WorldGenStrongholdPieces.e); + this.a(world, random, structureboundingbox, this.d, 4, 1, 0); + this.a(world, structureboundingbox, random, 0.07F, 2, 1, 1, 11, 4, 13, Blocks.WEB.getBlockData(), Blocks.WEB.getBlockData(), false); + boolean flag = true; + boolean flag1 = true; + + int i; + + for (i = 1; i <= 13; ++i) { + if ((i - 1) % 4 == 0) { + this.a(world, structureboundingbox, 1, 1, i, 1, 4, i, Blocks.PLANKS.getBlockData(), Blocks.PLANKS.getBlockData(), false); + this.a(world, structureboundingbox, 12, 1, i, 12, 4, i, Blocks.PLANKS.getBlockData(), Blocks.PLANKS.getBlockData(), false); + this.a(world, Blocks.TORCH.getBlockData(), 2, 3, i, structureboundingbox); + this.a(world, Blocks.TORCH.getBlockData(), 11, 3, i, structureboundingbox); + if (this.b) { + this.a(world, structureboundingbox, 1, 6, i, 1, 9, i, Blocks.PLANKS.getBlockData(), Blocks.PLANKS.getBlockData(), false); + this.a(world, structureboundingbox, 12, 6, i, 12, 9, i, Blocks.PLANKS.getBlockData(), Blocks.PLANKS.getBlockData(), false); + } + } else { + this.a(world, structureboundingbox, 1, 1, i, 1, 4, i, Blocks.BOOKSHELF.getBlockData(), Blocks.BOOKSHELF.getBlockData(), false); + this.a(world, structureboundingbox, 12, 1, i, 12, 4, i, Blocks.BOOKSHELF.getBlockData(), Blocks.BOOKSHELF.getBlockData(), false); + if (this.b) { + this.a(world, structureboundingbox, 1, 6, i, 1, 9, i, Blocks.BOOKSHELF.getBlockData(), Blocks.BOOKSHELF.getBlockData(), false); + this.a(world, structureboundingbox, 12, 6, i, 12, 9, i, Blocks.BOOKSHELF.getBlockData(), Blocks.BOOKSHELF.getBlockData(), false); + } + } + } + + for (i = 3; i < 12; i += 2) { + this.a(world, structureboundingbox, 3, 1, i, 4, 3, i, Blocks.BOOKSHELF.getBlockData(), Blocks.BOOKSHELF.getBlockData(), false); + this.a(world, structureboundingbox, 6, 1, i, 7, 3, i, Blocks.BOOKSHELF.getBlockData(), Blocks.BOOKSHELF.getBlockData(), false); + this.a(world, structureboundingbox, 9, 1, i, 10, 3, i, Blocks.BOOKSHELF.getBlockData(), Blocks.BOOKSHELF.getBlockData(), false); + } + + if (this.b) { + this.a(world, structureboundingbox, 1, 5, 1, 3, 5, 13, Blocks.PLANKS.getBlockData(), Blocks.PLANKS.getBlockData(), false); + this.a(world, structureboundingbox, 10, 5, 1, 12, 5, 13, Blocks.PLANKS.getBlockData(), Blocks.PLANKS.getBlockData(), false); + this.a(world, structureboundingbox, 4, 5, 1, 9, 5, 2, Blocks.PLANKS.getBlockData(), Blocks.PLANKS.getBlockData(), false); + this.a(world, structureboundingbox, 4, 5, 12, 9, 5, 13, Blocks.PLANKS.getBlockData(), Blocks.PLANKS.getBlockData(), false); + this.a(world, Blocks.PLANKS.getBlockData(), 9, 5, 11, structureboundingbox); + this.a(world, Blocks.PLANKS.getBlockData(), 8, 5, 11, structureboundingbox); + this.a(world, Blocks.PLANKS.getBlockData(), 9, 5, 10, structureboundingbox); + this.a(world, structureboundingbox, 3, 6, 2, 3, 6, 12, Blocks.FENCE.getBlockData(), Blocks.FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 10, 6, 2, 10, 6, 10, Blocks.FENCE.getBlockData(), Blocks.FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 4, 6, 2, 9, 6, 2, Blocks.FENCE.getBlockData(), Blocks.FENCE.getBlockData(), false); + this.a(world, structureboundingbox, 4, 6, 12, 8, 6, 12, Blocks.FENCE.getBlockData(), Blocks.FENCE.getBlockData(), false); + this.a(world, Blocks.FENCE.getBlockData(), 9, 6, 11, structureboundingbox); + this.a(world, Blocks.FENCE.getBlockData(), 8, 6, 11, structureboundingbox); + this.a(world, Blocks.FENCE.getBlockData(), 9, 6, 10, structureboundingbox); + i = this.a(Blocks.LADDER, 3); + this.a(world, Blocks.LADDER.fromLegacyData(i), 10, 1, 13, structureboundingbox); + this.a(world, Blocks.LADDER.fromLegacyData(i), 10, 2, 13, structureboundingbox); + this.a(world, Blocks.LADDER.fromLegacyData(i), 10, 3, 13, structureboundingbox); + this.a(world, Blocks.LADDER.fromLegacyData(i), 10, 4, 13, structureboundingbox); + this.a(world, Blocks.LADDER.fromLegacyData(i), 10, 5, 13, structureboundingbox); + this.a(world, Blocks.LADDER.fromLegacyData(i), 10, 6, 13, structureboundingbox); + this.a(world, Blocks.LADDER.fromLegacyData(i), 10, 7, 13, structureboundingbox); + byte b1 = 7; + byte b2 = 7; + + this.a(world, Blocks.FENCE.getBlockData(), b1 - 1, 9, b2, structureboundingbox); + this.a(world, Blocks.FENCE.getBlockData(), b1, 9, b2, structureboundingbox); + this.a(world, Blocks.FENCE.getBlockData(), b1 - 1, 8, b2, structureboundingbox); + this.a(world, Blocks.FENCE.getBlockData(), b1, 8, b2, structureboundingbox); + this.a(world, Blocks.FENCE.getBlockData(), b1 - 1, 7, b2, structureboundingbox); + this.a(world, Blocks.FENCE.getBlockData(), b1, 7, b2, structureboundingbox); + this.a(world, Blocks.FENCE.getBlockData(), b1 - 2, 7, b2, structureboundingbox); + this.a(world, Blocks.FENCE.getBlockData(), b1 + 1, 7, b2, structureboundingbox); + this.a(world, Blocks.FENCE.getBlockData(), b1 - 1, 7, b2 - 1, structureboundingbox); + this.a(world, Blocks.FENCE.getBlockData(), b1 - 1, 7, b2 + 1, structureboundingbox); + this.a(world, Blocks.FENCE.getBlockData(), b1, 7, b2 - 1, structureboundingbox); + this.a(world, Blocks.FENCE.getBlockData(), b1, 7, b2 + 1, structureboundingbox); + this.a(world, Blocks.TORCH.getBlockData(), b1 - 2, 8, b2, structureboundingbox); + this.a(world, Blocks.TORCH.getBlockData(), b1 + 1, 8, b2, structureboundingbox); + this.a(world, Blocks.TORCH.getBlockData(), b1 - 1, 8, b2 - 1, structureboundingbox); + this.a(world, Blocks.TORCH.getBlockData(), b1 - 1, 8, b2 + 1, structureboundingbox); + this.a(world, Blocks.TORCH.getBlockData(), b1, 8, b2 - 1, structureboundingbox); + this.a(world, Blocks.TORCH.getBlockData(), b1, 8, b2 + 1, structureboundingbox); + } + + this.a(world, structureboundingbox, random, 3, 3, 5, StructurePieceTreasure.a(WorldGenStrongholdPieces.WorldGenStrongholdLibrary.a, new StructurePieceTreasure[] { Items.ENCHANTED_BOOK.a(random, 1, 5, 2)}), 1 + random.nextInt(4)); + if (this.b) { + this.a(world, Blocks.AIR.getBlockData(), 12, 9, 1, structureboundingbox); + this.a(world, structureboundingbox, random, 12, 8, 1, StructurePieceTreasure.a(WorldGenStrongholdPieces.WorldGenStrongholdLibrary.a, new StructurePieceTreasure[] { Items.ENCHANTED_BOOK.a(random, 1, 5, 2)}), 1 + random.nextInt(4)); + } + + return true; + } + } + } + + public static class WorldGenStrongholdPrison extends WorldGenStrongholdPieces.WorldGenStrongholdPiece { + + public WorldGenStrongholdPrison() {} + + public WorldGenStrongholdPrison(int i, Random random, StructureBoundingBox structureboundingbox, EnumDirection enumdirection) { + super(i); + this.m = enumdirection; + this.d = this.a(random); + this.l = structureboundingbox; + } + + public void a(StructurePiece structurepiece, List list, Random random) { + this.a((WorldGenStrongholdPieces.WorldGenStrongholdStart) structurepiece, list, random, 1, 1); + } + + public static WorldGenStrongholdPieces.WorldGenStrongholdPrison a(List list, Random random, int i, int j, int k, EnumDirection enumdirection, int l) { + StructureBoundingBox structureboundingbox = StructureBoundingBox.a(i, j, k, -1, -1, 0, 9, 5, 11, enumdirection); + + return a(structureboundingbox) && StructurePiece.a(list, structureboundingbox) == null ? new WorldGenStrongholdPieces.WorldGenStrongholdPrison(l, random, structureboundingbox, enumdirection) : null; + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + if (this.a(world, structureboundingbox)) { + return false; + } else { + this.a(world, structureboundingbox, 0, 0, 0, 8, 4, 10, true, random, WorldGenStrongholdPieces.e); + this.a(world, random, structureboundingbox, this.d, 1, 1, 0); + this.a(world, structureboundingbox, 1, 1, 10, 3, 3, 10, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + this.a(world, structureboundingbox, 4, 1, 1, 4, 3, 1, false, random, WorldGenStrongholdPieces.e); + this.a(world, structureboundingbox, 4, 1, 3, 4, 3, 3, false, random, WorldGenStrongholdPieces.e); + this.a(world, structureboundingbox, 4, 1, 7, 4, 3, 7, false, random, WorldGenStrongholdPieces.e); + this.a(world, structureboundingbox, 4, 1, 9, 4, 3, 9, false, random, WorldGenStrongholdPieces.e); + this.a(world, structureboundingbox, 4, 1, 4, 4, 3, 6, Blocks.IRON_BARS.getBlockData(), Blocks.IRON_BARS.getBlockData(), false); + this.a(world, structureboundingbox, 5, 1, 5, 7, 3, 5, Blocks.IRON_BARS.getBlockData(), Blocks.IRON_BARS.getBlockData(), false); + this.a(world, Blocks.IRON_BARS.getBlockData(), 4, 3, 2, structureboundingbox); + this.a(world, Blocks.IRON_BARS.getBlockData(), 4, 3, 8, structureboundingbox); + this.a(world, Blocks.IRON_DOOR.fromLegacyData(this.a(Blocks.IRON_DOOR, 3)), 4, 1, 2, structureboundingbox); + this.a(world, Blocks.IRON_DOOR.fromLegacyData(this.a(Blocks.IRON_DOOR, 3) + 8), 4, 2, 2, structureboundingbox); + this.a(world, Blocks.IRON_DOOR.fromLegacyData(this.a(Blocks.IRON_DOOR, 3)), 4, 1, 8, structureboundingbox); + this.a(world, Blocks.IRON_DOOR.fromLegacyData(this.a(Blocks.IRON_DOOR, 3) + 8), 4, 2, 8, structureboundingbox); + return true; + } + } + } + + public static class WorldGenStrongholdRoomCrossing extends WorldGenStrongholdPieces.WorldGenStrongholdPiece { + + private static final List b = Lists.newArrayList(new StructurePieceTreasure[] { new StructurePieceTreasure(Items.IRON_INGOT, 0, 1, 5, 10), new StructurePieceTreasure(Items.GOLD_INGOT, 0, 1, 3, 5), new StructurePieceTreasure(Items.REDSTONE, 0, 4, 9, 5), new StructurePieceTreasure(Items.COAL, 0, 3, 8, 10), new StructurePieceTreasure(Items.BREAD, 0, 1, 3, 15), new StructurePieceTreasure(Items.APPLE, 0, 1, 3, 15), new StructurePieceTreasure(Items.IRON_PICKAXE, 0, 1, 1, 1)}); + protected int a; + + public WorldGenStrongholdRoomCrossing() {} + + public WorldGenStrongholdRoomCrossing(int i, Random random, StructureBoundingBox structureboundingbox, EnumDirection enumdirection) { + super(i); + this.m = enumdirection; + this.d = this.a(random); + this.l = structureboundingbox; + this.a = random.nextInt(5); + } + + protected void a(NBTTagCompound nbttagcompound) { + super.a(nbttagcompound); + nbttagcompound.setInt("Type", this.a); + } + + protected void b(NBTTagCompound nbttagcompound) { + super.b(nbttagcompound); + this.a = nbttagcompound.getInt("Type"); + } + + public void a(StructurePiece structurepiece, List list, Random random) { + this.a((WorldGenStrongholdPieces.WorldGenStrongholdStart) structurepiece, list, random, 4, 1); + this.b((WorldGenStrongholdPieces.WorldGenStrongholdStart) structurepiece, list, random, 1, 4); + this.c((WorldGenStrongholdPieces.WorldGenStrongholdStart) structurepiece, list, random, 1, 4); + } + + public static WorldGenStrongholdPieces.WorldGenStrongholdRoomCrossing a(List list, Random random, int i, int j, int k, EnumDirection enumdirection, int l) { + StructureBoundingBox structureboundingbox = StructureBoundingBox.a(i, j, k, -4, -1, 0, 11, 7, 11, enumdirection); + + return a(structureboundingbox) && StructurePiece.a(list, structureboundingbox) == null ? new WorldGenStrongholdPieces.WorldGenStrongholdRoomCrossing(l, random, structureboundingbox, enumdirection) : null; + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + if (this.a(world, structureboundingbox)) { + return false; + } else { + this.a(world, structureboundingbox, 0, 0, 0, 10, 6, 10, true, random, WorldGenStrongholdPieces.e); + this.a(world, random, structureboundingbox, this.d, 4, 1, 0); + this.a(world, structureboundingbox, 4, 1, 10, 6, 3, 10, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + this.a(world, structureboundingbox, 0, 1, 4, 0, 3, 6, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + this.a(world, structureboundingbox, 10, 1, 4, 10, 3, 6, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + int i; + + switch (this.a) { + case 0: + this.a(world, Blocks.STONEBRICK.getBlockData(), 5, 1, 5, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), 5, 2, 5, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), 5, 3, 5, structureboundingbox); + this.a(world, Blocks.TORCH.getBlockData(), 4, 3, 5, structureboundingbox); + this.a(world, Blocks.TORCH.getBlockData(), 6, 3, 5, structureboundingbox); + this.a(world, Blocks.TORCH.getBlockData(), 5, 3, 4, structureboundingbox); + this.a(world, Blocks.TORCH.getBlockData(), 5, 3, 6, structureboundingbox); + this.a(world, Blocks.STONE_SLAB.getBlockData(), 4, 1, 4, structureboundingbox); + this.a(world, Blocks.STONE_SLAB.getBlockData(), 4, 1, 5, structureboundingbox); + this.a(world, Blocks.STONE_SLAB.getBlockData(), 4, 1, 6, structureboundingbox); + this.a(world, Blocks.STONE_SLAB.getBlockData(), 6, 1, 4, structureboundingbox); + this.a(world, Blocks.STONE_SLAB.getBlockData(), 6, 1, 5, structureboundingbox); + this.a(world, Blocks.STONE_SLAB.getBlockData(), 6, 1, 6, structureboundingbox); + this.a(world, Blocks.STONE_SLAB.getBlockData(), 5, 1, 4, structureboundingbox); + this.a(world, Blocks.STONE_SLAB.getBlockData(), 5, 1, 6, structureboundingbox); + break; + + case 1: + for (i = 0; i < 5; ++i) { + this.a(world, Blocks.STONEBRICK.getBlockData(), 3, 1, 3 + i, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), 7, 1, 3 + i, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), 3 + i, 1, 3, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), 3 + i, 1, 7, structureboundingbox); + } + + this.a(world, Blocks.STONEBRICK.getBlockData(), 5, 1, 5, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), 5, 2, 5, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), 5, 3, 5, structureboundingbox); + this.a(world, Blocks.FLOWING_WATER.getBlockData(), 5, 4, 5, structureboundingbox); + break; + + case 2: + for (i = 1; i <= 9; ++i) { + this.a(world, Blocks.COBBLESTONE.getBlockData(), 1, 3, i, structureboundingbox); + this.a(world, Blocks.COBBLESTONE.getBlockData(), 9, 3, i, structureboundingbox); + } + + for (i = 1; i <= 9; ++i) { + this.a(world, Blocks.COBBLESTONE.getBlockData(), i, 3, 1, structureboundingbox); + this.a(world, Blocks.COBBLESTONE.getBlockData(), i, 3, 9, structureboundingbox); + } + + this.a(world, Blocks.COBBLESTONE.getBlockData(), 5, 1, 4, structureboundingbox); + this.a(world, Blocks.COBBLESTONE.getBlockData(), 5, 1, 6, structureboundingbox); + this.a(world, Blocks.COBBLESTONE.getBlockData(), 5, 3, 4, structureboundingbox); + this.a(world, Blocks.COBBLESTONE.getBlockData(), 5, 3, 6, structureboundingbox); + this.a(world, Blocks.COBBLESTONE.getBlockData(), 4, 1, 5, structureboundingbox); + this.a(world, Blocks.COBBLESTONE.getBlockData(), 6, 1, 5, structureboundingbox); + this.a(world, Blocks.COBBLESTONE.getBlockData(), 4, 3, 5, structureboundingbox); + this.a(world, Blocks.COBBLESTONE.getBlockData(), 6, 3, 5, structureboundingbox); + + for (i = 1; i <= 3; ++i) { + this.a(world, Blocks.COBBLESTONE.getBlockData(), 4, i, 4, structureboundingbox); + this.a(world, Blocks.COBBLESTONE.getBlockData(), 6, i, 4, structureboundingbox); + this.a(world, Blocks.COBBLESTONE.getBlockData(), 4, i, 6, structureboundingbox); + this.a(world, Blocks.COBBLESTONE.getBlockData(), 6, i, 6, structureboundingbox); + } + + this.a(world, Blocks.TORCH.getBlockData(), 5, 3, 5, structureboundingbox); + + for (i = 2; i <= 8; ++i) { + this.a(world, Blocks.PLANKS.getBlockData(), 2, 3, i, structureboundingbox); + this.a(world, Blocks.PLANKS.getBlockData(), 3, 3, i, structureboundingbox); + if (i <= 3 || i >= 7) { + this.a(world, Blocks.PLANKS.getBlockData(), 4, 3, i, structureboundingbox); + this.a(world, Blocks.PLANKS.getBlockData(), 5, 3, i, structureboundingbox); + this.a(world, Blocks.PLANKS.getBlockData(), 6, 3, i, structureboundingbox); + } + + this.a(world, Blocks.PLANKS.getBlockData(), 7, 3, i, structureboundingbox); + this.a(world, Blocks.PLANKS.getBlockData(), 8, 3, i, structureboundingbox); + } + + this.a(world, Blocks.LADDER.fromLegacyData(this.a(Blocks.LADDER, EnumDirection.WEST.a())), 9, 1, 3, structureboundingbox); + this.a(world, Blocks.LADDER.fromLegacyData(this.a(Blocks.LADDER, EnumDirection.WEST.a())), 9, 2, 3, structureboundingbox); + this.a(world, Blocks.LADDER.fromLegacyData(this.a(Blocks.LADDER, EnumDirection.WEST.a())), 9, 3, 3, structureboundingbox); + this.a(world, structureboundingbox, random, 3, 4, 8, StructurePieceTreasure.a(WorldGenStrongholdPieces.WorldGenStrongholdRoomCrossing.b, new StructurePieceTreasure[] { Items.ENCHANTED_BOOK.b(random)}), 1 + random.nextInt(4)); + } + + return true; + } + } + } + + public static class WorldGenStrongholdRightTurn extends WorldGenStrongholdPieces.WorldGenStrongholdLeftTurn { + + public WorldGenStrongholdRightTurn() {} + + public void a(StructurePiece structurepiece, List list, Random random) { + if (this.m != EnumDirection.NORTH && this.m != EnumDirection.EAST) { + this.b((WorldGenStrongholdPieces.WorldGenStrongholdStart) structurepiece, list, random, 1, 1); + } else { + this.c((WorldGenStrongholdPieces.WorldGenStrongholdStart) structurepiece, list, random, 1, 1); + } + + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + if (this.a(world, structureboundingbox)) { + return false; + } else { + this.a(world, structureboundingbox, 0, 0, 0, 4, 4, 4, true, random, WorldGenStrongholdPieces.e); + this.a(world, random, structureboundingbox, this.d, 1, 1, 0); + if (this.m != EnumDirection.NORTH && this.m != EnumDirection.EAST) { + this.a(world, structureboundingbox, 0, 1, 1, 0, 3, 3, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + } else { + this.a(world, structureboundingbox, 4, 1, 1, 4, 3, 3, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + } + + return true; + } + } + } + + public static class WorldGenStrongholdLeftTurn extends WorldGenStrongholdPieces.WorldGenStrongholdPiece { + + public WorldGenStrongholdLeftTurn() {} + + public WorldGenStrongholdLeftTurn(int i, Random random, StructureBoundingBox structureboundingbox, EnumDirection enumdirection) { + super(i); + this.m = enumdirection; + this.d = this.a(random); + this.l = structureboundingbox; + } + + public void a(StructurePiece structurepiece, List list, Random random) { + if (this.m != EnumDirection.NORTH && this.m != EnumDirection.EAST) { + this.c((WorldGenStrongholdPieces.WorldGenStrongholdStart) structurepiece, list, random, 1, 1); + } else { + this.b((WorldGenStrongholdPieces.WorldGenStrongholdStart) structurepiece, list, random, 1, 1); + } + + } + + public static WorldGenStrongholdPieces.WorldGenStrongholdLeftTurn a(List list, Random random, int i, int j, int k, EnumDirection enumdirection, int l) { + StructureBoundingBox structureboundingbox = StructureBoundingBox.a(i, j, k, -1, -1, 0, 5, 5, 5, enumdirection); + + return a(structureboundingbox) && StructurePiece.a(list, structureboundingbox) == null ? new WorldGenStrongholdPieces.WorldGenStrongholdLeftTurn(l, random, structureboundingbox, enumdirection) : null; + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + if (this.a(world, structureboundingbox)) { + return false; + } else { + this.a(world, structureboundingbox, 0, 0, 0, 4, 4, 4, true, random, WorldGenStrongholdPieces.e); + this.a(world, random, structureboundingbox, this.d, 1, 1, 0); + if (this.m != EnumDirection.NORTH && this.m != EnumDirection.EAST) { + this.a(world, structureboundingbox, 4, 1, 1, 4, 3, 3, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + } else { + this.a(world, structureboundingbox, 0, 1, 1, 0, 3, 3, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + } + + return true; + } + } + } + + public static class WorldGenStrongholdStairsStraight extends WorldGenStrongholdPieces.WorldGenStrongholdPiece { + + public WorldGenStrongholdStairsStraight() {} + + public WorldGenStrongholdStairsStraight(int i, Random random, StructureBoundingBox structureboundingbox, EnumDirection enumdirection) { + super(i); + this.m = enumdirection; + this.d = this.a(random); + this.l = structureboundingbox; + } + + public void a(StructurePiece structurepiece, List list, Random random) { + this.a((WorldGenStrongholdPieces.WorldGenStrongholdStart) structurepiece, list, random, 1, 1); + } + + public static WorldGenStrongholdPieces.WorldGenStrongholdStairsStraight a(List list, Random random, int i, int j, int k, EnumDirection enumdirection, int l) { + StructureBoundingBox structureboundingbox = StructureBoundingBox.a(i, j, k, -1, -7, 0, 5, 11, 8, enumdirection); + + return a(structureboundingbox) && StructurePiece.a(list, structureboundingbox) == null ? new WorldGenStrongholdPieces.WorldGenStrongholdStairsStraight(l, random, structureboundingbox, enumdirection) : null; + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + if (this.a(world, structureboundingbox)) { + return false; + } else { + this.a(world, structureboundingbox, 0, 0, 0, 4, 10, 7, true, random, WorldGenStrongholdPieces.e); + this.a(world, random, structureboundingbox, this.d, 1, 7, 0); + this.a(world, random, structureboundingbox, WorldGenStrongholdPieces.WorldGenStrongholdPiece.WorldGenStrongholdDoorType.OPENING, 1, 1, 7); + int i = this.a(Blocks.STONE_STAIRS, 2); + + for (int j = 0; j < 6; ++j) { + this.a(world, Blocks.STONE_STAIRS.fromLegacyData(i), 1, 6 - j, 1 + j, structureboundingbox); + this.a(world, Blocks.STONE_STAIRS.fromLegacyData(i), 2, 6 - j, 1 + j, structureboundingbox); + this.a(world, Blocks.STONE_STAIRS.fromLegacyData(i), 3, 6 - j, 1 + j, structureboundingbox); + if (j < 5) { + this.a(world, Blocks.STONEBRICK.getBlockData(), 1, 5 - j, 1 + j, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), 2, 5 - j, 1 + j, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), 3, 5 - j, 1 + j, structureboundingbox); + } + } + + return true; + } + } + } + + public static class WorldGenStrongholdChestCorridor extends WorldGenStrongholdPieces.WorldGenStrongholdPiece { + + private static final List a = Lists.newArrayList(new StructurePieceTreasure[] { new StructurePieceTreasure(Items.ENDER_PEARL, 0, 1, 1, 10), new StructurePieceTreasure(Items.DIAMOND, 0, 1, 3, 3), new StructurePieceTreasure(Items.IRON_INGOT, 0, 1, 5, 10), new StructurePieceTreasure(Items.GOLD_INGOT, 0, 1, 3, 5), new StructurePieceTreasure(Items.REDSTONE, 0, 4, 9, 5), new StructurePieceTreasure(Items.BREAD, 0, 1, 3, 15), new StructurePieceTreasure(Items.APPLE, 0, 1, 3, 15), new StructurePieceTreasure(Items.IRON_PICKAXE, 0, 1, 1, 5), new StructurePieceTreasure(Items.IRON_SWORD, 0, 1, 1, 5), new StructurePieceTreasure(Items.IRON_CHESTPLATE, 0, 1, 1, 5), new StructurePieceTreasure(Items.IRON_HELMET, 0, 1, 1, 5), new StructurePieceTreasure(Items.IRON_LEGGINGS, 0, 1, 1, 5), new StructurePieceTreasure(Items.IRON_BOOTS, 0, 1, 1, 5), new StructurePieceTreasure(Items.GOLDEN_APPLE, 0, 1, 1, 1), new StructurePieceTreasure(Items.SADDLE, 0, 1, 1, 1), new StructurePieceTreasure(Items.IRON_HORSE_ARMOR, 0, 1, 1, 1), new StructurePieceTreasure(Items.GOLDEN_HORSE_ARMOR, 0, 1, 1, 1), new StructurePieceTreasure(Items.DIAMOND_HORSE_ARMOR, 0, 1, 1, 1)}); + private boolean b; + + public WorldGenStrongholdChestCorridor() {} + + public WorldGenStrongholdChestCorridor(int i, Random random, StructureBoundingBox structureboundingbox, EnumDirection enumdirection) { + super(i); + this.m = enumdirection; + this.d = this.a(random); + this.l = structureboundingbox; + } + + protected void a(NBTTagCompound nbttagcompound) { + super.a(nbttagcompound); + nbttagcompound.setBoolean("Chest", this.b); + } + + protected void b(NBTTagCompound nbttagcompound) { + super.b(nbttagcompound); + this.b = nbttagcompound.getBoolean("Chest"); + } + + public void a(StructurePiece structurepiece, List list, Random random) { + this.a((WorldGenStrongholdPieces.WorldGenStrongholdStart) structurepiece, list, random, 1, 1); + } + + public static WorldGenStrongholdPieces.WorldGenStrongholdChestCorridor a(List list, Random random, int i, int j, int k, EnumDirection enumdirection, int l) { + StructureBoundingBox structureboundingbox = StructureBoundingBox.a(i, j, k, -1, -1, 0, 5, 5, 7, enumdirection); + + return a(structureboundingbox) && StructurePiece.a(list, structureboundingbox) == null ? new WorldGenStrongholdPieces.WorldGenStrongholdChestCorridor(l, random, structureboundingbox, enumdirection) : null; + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + if (this.a(world, structureboundingbox)) { + return false; + } else { + this.a(world, structureboundingbox, 0, 0, 0, 4, 4, 6, true, random, WorldGenStrongholdPieces.e); + this.a(world, random, structureboundingbox, this.d, 1, 1, 0); + this.a(world, random, structureboundingbox, WorldGenStrongholdPieces.WorldGenStrongholdPiece.WorldGenStrongholdDoorType.OPENING, 1, 1, 6); + this.a(world, structureboundingbox, 3, 1, 2, 3, 1, 4, Blocks.STONEBRICK.getBlockData(), Blocks.STONEBRICK.getBlockData(), false); + this.a(world, Blocks.STONE_SLAB.fromLegacyData(BlockDoubleStepAbstract.EnumStoneSlabVariant.SMOOTHBRICK.a()), 3, 1, 1, structureboundingbox); + this.a(world, Blocks.STONE_SLAB.fromLegacyData(BlockDoubleStepAbstract.EnumStoneSlabVariant.SMOOTHBRICK.a()), 3, 1, 5, structureboundingbox); + this.a(world, Blocks.STONE_SLAB.fromLegacyData(BlockDoubleStepAbstract.EnumStoneSlabVariant.SMOOTHBRICK.a()), 3, 2, 2, structureboundingbox); + this.a(world, Blocks.STONE_SLAB.fromLegacyData(BlockDoubleStepAbstract.EnumStoneSlabVariant.SMOOTHBRICK.a()), 3, 2, 4, structureboundingbox); + + for (int i = 2; i <= 4; ++i) { + this.a(world, Blocks.STONE_SLAB.fromLegacyData(BlockDoubleStepAbstract.EnumStoneSlabVariant.SMOOTHBRICK.a()), 2, 1, i, structureboundingbox); + } + + if (!this.b && structureboundingbox.b((BaseBlockPosition) (new BlockPosition(this.a(3, 3), this.d(2), this.b(3, 3))))) { + this.b = true; + this.a(world, structureboundingbox, random, 3, 2, 3, StructurePieceTreasure.a(WorldGenStrongholdPieces.WorldGenStrongholdChestCorridor.a, new StructurePieceTreasure[] { Items.ENCHANTED_BOOK.b(random)}), 2 + random.nextInt(2)); + } + + return true; + } + } + } + + public static class WorldGenStrongholdStairs extends WorldGenStrongholdPieces.WorldGenStrongholdPiece { + + private boolean a; + private boolean b; + + public WorldGenStrongholdStairs() {} + + public WorldGenStrongholdStairs(int i, Random random, StructureBoundingBox structureboundingbox, EnumDirection enumdirection) { + super(i); + this.m = enumdirection; + this.d = this.a(random); + this.l = structureboundingbox; + this.a = random.nextInt(2) == 0; + this.b = random.nextInt(2) == 0; + } + + protected void a(NBTTagCompound nbttagcompound) { + super.a(nbttagcompound); + nbttagcompound.setBoolean("Left", this.a); + nbttagcompound.setBoolean("Right", this.b); + } + + protected void b(NBTTagCompound nbttagcompound) { + super.b(nbttagcompound); + this.a = nbttagcompound.getBoolean("Left"); + this.b = nbttagcompound.getBoolean("Right"); + } + + public void a(StructurePiece structurepiece, List list, Random random) { + this.a((WorldGenStrongholdPieces.WorldGenStrongholdStart) structurepiece, list, random, 1, 1); + if (this.a) { + this.b((WorldGenStrongholdPieces.WorldGenStrongholdStart) structurepiece, list, random, 1, 2); + } + + if (this.b) { + this.c((WorldGenStrongholdPieces.WorldGenStrongholdStart) structurepiece, list, random, 1, 2); + } + + } + + public static WorldGenStrongholdPieces.WorldGenStrongholdStairs a(List list, Random random, int i, int j, int k, EnumDirection enumdirection, int l) { + StructureBoundingBox structureboundingbox = StructureBoundingBox.a(i, j, k, -1, -1, 0, 5, 5, 7, enumdirection); + + return a(structureboundingbox) && StructurePiece.a(list, structureboundingbox) == null ? new WorldGenStrongholdPieces.WorldGenStrongholdStairs(l, random, structureboundingbox, enumdirection) : null; + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + if (this.a(world, structureboundingbox)) { + return false; + } else { + this.a(world, structureboundingbox, 0, 0, 0, 4, 4, 6, true, random, WorldGenStrongholdPieces.e); + this.a(world, random, structureboundingbox, this.d, 1, 1, 0); + this.a(world, random, structureboundingbox, WorldGenStrongholdPieces.WorldGenStrongholdPiece.WorldGenStrongholdDoorType.OPENING, 1, 1, 6); + this.a(world, structureboundingbox, random, 0.1F, 1, 2, 1, Blocks.TORCH.getBlockData()); + this.a(world, structureboundingbox, random, 0.1F, 3, 2, 1, Blocks.TORCH.getBlockData()); + this.a(world, structureboundingbox, random, 0.1F, 1, 2, 5, Blocks.TORCH.getBlockData()); + this.a(world, structureboundingbox, random, 0.1F, 3, 2, 5, Blocks.TORCH.getBlockData()); + if (this.a) { + this.a(world, structureboundingbox, 0, 1, 2, 0, 3, 4, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + } + + if (this.b) { + this.a(world, structureboundingbox, 4, 1, 2, 4, 3, 4, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + } + + return true; + } + } + } + + public static class WorldGenStrongholdStart extends WorldGenStrongholdPieces.WorldGenStrongholdStairs2 { + + public WorldGenStrongholdPieces.WorldGenStrongholdPieceWeight a; + public WorldGenStrongholdPieces.WorldGenStrongholdPortalRoom b; + public List c = Lists.newArrayList(); + + public WorldGenStrongholdStart() {} + + public WorldGenStrongholdStart(int i, Random random, int j, int k) { + super(0, random, j, k); + } + + public BlockPosition a() { + return this.b != null ? this.b.a() : super.a(); + } + } + + public static class WorldGenStrongholdStairs2 extends WorldGenStrongholdPieces.WorldGenStrongholdPiece { + + private boolean a; + + public WorldGenStrongholdStairs2() {} + + public WorldGenStrongholdStairs2(int i, Random random, int j, int k) { + super(i); + this.a = true; + this.m = EnumDirection.EnumDirectionLimit.HORIZONTAL.a(random); + this.d = WorldGenStrongholdPieces.WorldGenStrongholdPiece.WorldGenStrongholdDoorType.OPENING; + switch (WorldGenStrongholdPieces.SyntheticClass_1.b[this.m.ordinal()]) { + case 1: + case 2: + this.l = new StructureBoundingBox(j, 64, k, j + 5 - 1, 74, k + 5 - 1); + break; + + default: + this.l = new StructureBoundingBox(j, 64, k, j + 5 - 1, 74, k + 5 - 1); + } + + } + + public WorldGenStrongholdStairs2(int i, Random random, StructureBoundingBox structureboundingbox, EnumDirection enumdirection) { + super(i); + this.a = false; + this.m = enumdirection; + this.d = this.a(random); + this.l = structureboundingbox; + } + + protected void a(NBTTagCompound nbttagcompound) { + super.a(nbttagcompound); + nbttagcompound.setBoolean("Source", this.a); + } + + protected void b(NBTTagCompound nbttagcompound) { + super.b(nbttagcompound); + this.a = nbttagcompound.getBoolean("Source"); + } + + public void a(StructurePiece structurepiece, List list, Random random) { + if (this.a) { + WorldGenStrongholdPieces.d = WorldGenStrongholdPieces.WorldGenStrongholdCrossing.class; + } + + this.a((WorldGenStrongholdPieces.WorldGenStrongholdStart) structurepiece, list, random, 1, 1); + } + + public static WorldGenStrongholdPieces.WorldGenStrongholdStairs2 a(List list, Random random, int i, int j, int k, EnumDirection enumdirection, int l) { + StructureBoundingBox structureboundingbox = StructureBoundingBox.a(i, j, k, -1, -7, 0, 5, 11, 5, enumdirection); + + return a(structureboundingbox) && StructurePiece.a(list, structureboundingbox) == null ? new WorldGenStrongholdPieces.WorldGenStrongholdStairs2(l, random, structureboundingbox, enumdirection) : null; + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + if (this.a(world, structureboundingbox)) { + return false; + } else { + this.a(world, structureboundingbox, 0, 0, 0, 4, 10, 4, true, random, WorldGenStrongholdPieces.e); + this.a(world, random, structureboundingbox, this.d, 1, 7, 0); + this.a(world, random, structureboundingbox, WorldGenStrongholdPieces.WorldGenStrongholdPiece.WorldGenStrongholdDoorType.OPENING, 1, 1, 4); + this.a(world, Blocks.STONEBRICK.getBlockData(), 2, 6, 1, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), 1, 5, 1, structureboundingbox); + this.a(world, Blocks.STONE_SLAB.fromLegacyData(BlockDoubleStepAbstract.EnumStoneSlabVariant.STONE.a()), 1, 6, 1, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), 1, 5, 2, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), 1, 4, 3, structureboundingbox); + this.a(world, Blocks.STONE_SLAB.fromLegacyData(BlockDoubleStepAbstract.EnumStoneSlabVariant.STONE.a()), 1, 5, 3, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), 2, 4, 3, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), 3, 3, 3, structureboundingbox); + this.a(world, Blocks.STONE_SLAB.fromLegacyData(BlockDoubleStepAbstract.EnumStoneSlabVariant.STONE.a()), 3, 4, 3, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), 3, 3, 2, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), 3, 2, 1, structureboundingbox); + this.a(world, Blocks.STONE_SLAB.fromLegacyData(BlockDoubleStepAbstract.EnumStoneSlabVariant.STONE.a()), 3, 3, 1, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), 2, 2, 1, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), 1, 1, 1, structureboundingbox); + this.a(world, Blocks.STONE_SLAB.fromLegacyData(BlockDoubleStepAbstract.EnumStoneSlabVariant.STONE.a()), 1, 2, 1, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), 1, 1, 2, structureboundingbox); + this.a(world, Blocks.STONE_SLAB.fromLegacyData(BlockDoubleStepAbstract.EnumStoneSlabVariant.STONE.a()), 1, 1, 3, structureboundingbox); + return true; + } + } + } + + public static class WorldGenStrongholdCorridor extends WorldGenStrongholdPieces.WorldGenStrongholdPiece { + + private int a; + + public WorldGenStrongholdCorridor() {} + + public WorldGenStrongholdCorridor(int i, Random random, StructureBoundingBox structureboundingbox, EnumDirection enumdirection) { + super(i); + this.m = enumdirection; + this.l = structureboundingbox; + this.a = enumdirection != EnumDirection.NORTH && enumdirection != EnumDirection.SOUTH ? structureboundingbox.c() : structureboundingbox.e(); + } + + protected void a(NBTTagCompound nbttagcompound) { + super.a(nbttagcompound); + nbttagcompound.setInt("Steps", this.a); + } + + protected void b(NBTTagCompound nbttagcompound) { + super.b(nbttagcompound); + this.a = nbttagcompound.getInt("Steps"); + } + + public static StructureBoundingBox a(List list, Random random, int i, int j, int k, EnumDirection enumdirection) { + boolean flag = true; + StructureBoundingBox structureboundingbox = StructureBoundingBox.a(i, j, k, -1, -1, 0, 5, 5, 4, enumdirection); + StructurePiece structurepiece = StructurePiece.a(list, structureboundingbox); + + if (structurepiece == null) { + return null; + } else { + if (structurepiece.c().b == structureboundingbox.b) { + for (int l = 3; l >= 1; --l) { + structureboundingbox = StructureBoundingBox.a(i, j, k, -1, -1, 0, 5, 5, l - 1, enumdirection); + if (!structurepiece.c().a(structureboundingbox)) { + return StructureBoundingBox.a(i, j, k, -1, -1, 0, 5, 5, l, enumdirection); + } + } + } + + return null; + } + } + + public boolean a(World world, Random random, StructureBoundingBox structureboundingbox) { + if (this.a(world, structureboundingbox)) { + return false; + } else { + for (int i = 0; i < this.a; ++i) { + this.a(world, Blocks.STONEBRICK.getBlockData(), 0, 0, i, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), 1, 0, i, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), 2, 0, i, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), 3, 0, i, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), 4, 0, i, structureboundingbox); + + for (int j = 1; j <= 3; ++j) { + this.a(world, Blocks.STONEBRICK.getBlockData(), 0, j, i, structureboundingbox); + this.a(world, Blocks.AIR.getBlockData(), 1, j, i, structureboundingbox); + this.a(world, Blocks.AIR.getBlockData(), 2, j, i, structureboundingbox); + this.a(world, Blocks.AIR.getBlockData(), 3, j, i, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), 4, j, i, structureboundingbox); + } + + this.a(world, Blocks.STONEBRICK.getBlockData(), 0, 4, i, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), 1, 4, i, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), 2, 4, i, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), 3, 4, i, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), 4, 4, i, structureboundingbox); + } + + return true; + } + } + } + + abstract static class WorldGenStrongholdPiece extends StructurePiece { + + protected WorldGenStrongholdPieces.WorldGenStrongholdPiece.WorldGenStrongholdDoorType d; + + public WorldGenStrongholdPiece() { + this.d = WorldGenStrongholdPieces.WorldGenStrongholdPiece.WorldGenStrongholdDoorType.OPENING; + } + + protected WorldGenStrongholdPiece(int i) { + super(i); + this.d = WorldGenStrongholdPieces.WorldGenStrongholdPiece.WorldGenStrongholdDoorType.OPENING; + } + + protected void a(NBTTagCompound nbttagcompound) { + nbttagcompound.setString("EntryDoor", this.d.name()); + } + + protected void b(NBTTagCompound nbttagcompound) { + this.d = WorldGenStrongholdPieces.WorldGenStrongholdPiece.WorldGenStrongholdDoorType.valueOf(nbttagcompound.getString("EntryDoor")); + } + + protected void a(World world, Random random, StructureBoundingBox structureboundingbox, WorldGenStrongholdPieces.WorldGenStrongholdPiece.WorldGenStrongholdDoorType worldgenstrongholdpieces_worldgenstrongholdpiece_worldgenstrongholddoortype, int i, int j, int k) { + switch (WorldGenStrongholdPieces.SyntheticClass_1.a[worldgenstrongholdpieces_worldgenstrongholdpiece_worldgenstrongholddoortype.ordinal()]) { + case 1: + default: + this.a(world, structureboundingbox, i, j, k, i + 3 - 1, j + 3 - 1, k, Blocks.AIR.getBlockData(), Blocks.AIR.getBlockData(), false); + break; + + case 2: + this.a(world, Blocks.STONEBRICK.getBlockData(), i, j, k, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), i, j + 1, k, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), i, j + 2, k, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), i + 1, j + 2, k, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), i + 2, j + 2, k, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), i + 2, j + 1, k, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), i + 2, j, k, structureboundingbox); + this.a(world, Blocks.WOODEN_DOOR.getBlockData(), i + 1, j, k, structureboundingbox); + this.a(world, Blocks.WOODEN_DOOR.fromLegacyData(8), i + 1, j + 1, k, structureboundingbox); + break; + + case 3: + this.a(world, Blocks.AIR.getBlockData(), i + 1, j, k, structureboundingbox); + this.a(world, Blocks.AIR.getBlockData(), i + 1, j + 1, k, structureboundingbox); + this.a(world, Blocks.IRON_BARS.getBlockData(), i, j, k, structureboundingbox); + this.a(world, Blocks.IRON_BARS.getBlockData(), i, j + 1, k, structureboundingbox); + this.a(world, Blocks.IRON_BARS.getBlockData(), i, j + 2, k, structureboundingbox); + this.a(world, Blocks.IRON_BARS.getBlockData(), i + 1, j + 2, k, structureboundingbox); + this.a(world, Blocks.IRON_BARS.getBlockData(), i + 2, j + 2, k, structureboundingbox); + this.a(world, Blocks.IRON_BARS.getBlockData(), i + 2, j + 1, k, structureboundingbox); + this.a(world, Blocks.IRON_BARS.getBlockData(), i + 2, j, k, structureboundingbox); + break; + + case 4: + this.a(world, Blocks.STONEBRICK.getBlockData(), i, j, k, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), i, j + 1, k, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), i, j + 2, k, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), i + 1, j + 2, k, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), i + 2, j + 2, k, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), i + 2, j + 1, k, structureboundingbox); + this.a(world, Blocks.STONEBRICK.getBlockData(), i + 2, j, k, structureboundingbox); + this.a(world, Blocks.IRON_DOOR.getBlockData(), i + 1, j, k, structureboundingbox); + this.a(world, Blocks.IRON_DOOR.fromLegacyData(8), i + 1, j + 1, k, structureboundingbox); + this.a(world, Blocks.STONE_BUTTON.fromLegacyData(this.a(Blocks.STONE_BUTTON, 4)), i + 2, j + 1, k + 1, structureboundingbox); + this.a(world, Blocks.STONE_BUTTON.fromLegacyData(this.a(Blocks.STONE_BUTTON, 3)), i + 2, j + 1, k - 1, structureboundingbox); + } + + } + + protected WorldGenStrongholdPieces.WorldGenStrongholdPiece.WorldGenStrongholdDoorType a(Random random) { + int i = random.nextInt(5); + + switch (i) { + case 0: + case 1: + default: + return WorldGenStrongholdPieces.WorldGenStrongholdPiece.WorldGenStrongholdDoorType.OPENING; + + case 2: + return WorldGenStrongholdPieces.WorldGenStrongholdPiece.WorldGenStrongholdDoorType.WOOD_DOOR; + + case 3: + return WorldGenStrongholdPieces.WorldGenStrongholdPiece.WorldGenStrongholdDoorType.GRATES; + + case 4: + return WorldGenStrongholdPieces.WorldGenStrongholdPiece.WorldGenStrongholdDoorType.IRON_DOOR; + } + } + + protected StructurePiece a(WorldGenStrongholdPieces.WorldGenStrongholdStart worldgenstrongholdpieces_worldgenstrongholdstart, List list, Random random, int i, int j) { + if (this.m != null) { + switch (WorldGenStrongholdPieces.SyntheticClass_1.b[this.m.ordinal()]) { + case 1: + return WorldGenStrongholdPieces.c(worldgenstrongholdpieces_worldgenstrongholdstart, list, random, this.l.a + i, this.l.b + j, this.l.c - 1, this.m, this.d()); + + case 2: + return WorldGenStrongholdPieces.c(worldgenstrongholdpieces_worldgenstrongholdstart, list, random, this.l.a + i, this.l.b + j, this.l.f + 1, this.m, this.d()); + + case 3: + return WorldGenStrongholdPieces.c(worldgenstrongholdpieces_worldgenstrongholdstart, list, random, this.l.a - 1, this.l.b + j, this.l.c + i, this.m, this.d()); + + case 4: + return WorldGenStrongholdPieces.c(worldgenstrongholdpieces_worldgenstrongholdstart, list, random, this.l.d + 1, this.l.b + j, this.l.c + i, this.m, this.d()); + } + } + + return null; + } + + protected StructurePiece b(WorldGenStrongholdPieces.WorldGenStrongholdStart worldgenstrongholdpieces_worldgenstrongholdstart, List list, Random random, int i, int j) { + if (this.m != null) { + switch (WorldGenStrongholdPieces.SyntheticClass_1.b[this.m.ordinal()]) { + case 1: + return WorldGenStrongholdPieces.c(worldgenstrongholdpieces_worldgenstrongholdstart, list, random, this.l.a - 1, this.l.b + i, this.l.c + j, EnumDirection.WEST, this.d()); + + case 2: + return WorldGenStrongholdPieces.c(worldgenstrongholdpieces_worldgenstrongholdstart, list, random, this.l.a - 1, this.l.b + i, this.l.c + j, EnumDirection.WEST, this.d()); + + case 3: + return WorldGenStrongholdPieces.c(worldgenstrongholdpieces_worldgenstrongholdstart, list, random, this.l.a + j, this.l.b + i, this.l.c - 1, EnumDirection.NORTH, this.d()); + + case 4: + return WorldGenStrongholdPieces.c(worldgenstrongholdpieces_worldgenstrongholdstart, list, random, this.l.a + j, this.l.b + i, this.l.c - 1, EnumDirection.NORTH, this.d()); + } + } + + return null; + } + + protected StructurePiece c(WorldGenStrongholdPieces.WorldGenStrongholdStart worldgenstrongholdpieces_worldgenstrongholdstart, List list, Random random, int i, int j) { + if (this.m != null) { + switch (WorldGenStrongholdPieces.SyntheticClass_1.b[this.m.ordinal()]) { + case 1: + return WorldGenStrongholdPieces.c(worldgenstrongholdpieces_worldgenstrongholdstart, list, random, this.l.d + 1, this.l.b + i, this.l.c + j, EnumDirection.EAST, this.d()); + + case 2: + return WorldGenStrongholdPieces.c(worldgenstrongholdpieces_worldgenstrongholdstart, list, random, this.l.d + 1, this.l.b + i, this.l.c + j, EnumDirection.EAST, this.d()); + + case 3: + return WorldGenStrongholdPieces.c(worldgenstrongholdpieces_worldgenstrongholdstart, list, random, this.l.a + j, this.l.b + i, this.l.f + 1, EnumDirection.SOUTH, this.d()); + + case 4: + return WorldGenStrongholdPieces.c(worldgenstrongholdpieces_worldgenstrongholdstart, list, random, this.l.a + j, this.l.b + i, this.l.f + 1, EnumDirection.SOUTH, this.d()); + } + } + + return null; + } + + protected static boolean a(StructureBoundingBox structureboundingbox) { + return structureboundingbox != null && structureboundingbox.b > 10; + } + + public static enum WorldGenStrongholdDoorType { + + OPENING, WOOD_DOOR, GRATES, IRON_DOOR; + + private WorldGenStrongholdDoorType() {} + } + } + + static class WorldGenStrongholdPieceWeight { + + public Class a; + public final int b; + public int c; + public int d; + + public WorldGenStrongholdPieceWeight(Class oclass, int i, int j) { + this.a = oclass; + this.b = i; + this.d = j; + } + + public boolean a(int i) { + return this.d == 0 || this.c < this.d; + } + + public boolean a() { + return this.d == 0 || this.c < this.d; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenSwampTree.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenSwampTree.java new file mode 100644 index 0000000..1522f82 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenSwampTree.java @@ -0,0 +1,158 @@ +package net.minecraft.server; + +import java.util.Random; + +public class WorldGenSwampTree extends WorldGenTreeAbstract { + + private static final IBlockData a = Blocks.LOG.getBlockData().set(BlockLog1.VARIANT, BlockWood.EnumLogVariant.OAK); + private static final IBlockData b = Blocks.LEAVES.getBlockData().set(BlockLeaves1.VARIANT, BlockWood.EnumLogVariant.OAK).set(BlockLeaves1.CHECK_DECAY, Boolean.valueOf(false)); + + public WorldGenSwampTree() { + super(false); + } + + public boolean generate(World world, Random random, BlockPosition blockposition) { + int i; + + for (i = random.nextInt(4) + 5; world.getType(blockposition.down()).getBlock().getMaterial() == Material.WATER; blockposition = blockposition.down()) { + ; + } + + boolean flag = true; + + if (blockposition.getY() >= 1 && blockposition.getY() + i + 1 <= 256) { + int j; + int k; + + for (int l = blockposition.getY(); l <= blockposition.getY() + 1 + i; ++l) { + byte b0 = 1; + + if (l == blockposition.getY()) { + b0 = 0; + } + + if (l >= blockposition.getY() + 1 + i - 2) { + b0 = 3; + } + + BlockPosition.MutableBlockPosition blockposition_mutableblockposition = new BlockPosition.MutableBlockPosition(); + + for (j = blockposition.getX() - b0; j <= blockposition.getX() + b0 && flag; ++j) { + for (k = blockposition.getZ() - b0; k <= blockposition.getZ() + b0 && flag; ++k) { + if (l >= 0 && l < 256) { + Block block = world.getType(blockposition_mutableblockposition.c(j, l, k)).getBlock(); + + if (block.getMaterial() != Material.AIR && block.getMaterial() != Material.LEAVES) { + if (block != Blocks.WATER && block != Blocks.FLOWING_WATER) { + flag = false; + } else if (l > blockposition.getY()) { + flag = false; + } + } + } else { + flag = false; + } + } + } + } + + if (!flag) { + return false; + } else { + Block block1 = world.getType(blockposition.down()).getBlock(); + + if ((block1 == Blocks.GRASS || block1 == Blocks.DIRT) && blockposition.getY() < 256 - i - 1) { + this.a(world, blockposition.down()); + + int i1; + BlockPosition blockposition1; + int j1; + int k1; + int l1; + + for (j1 = blockposition.getY() - 3 + i; j1 <= blockposition.getY() + i; ++j1) { + k1 = j1 - (blockposition.getY() + i); + j = 2 - k1 / 2; + + for (k = blockposition.getX() - j; k <= blockposition.getX() + j; ++k) { + l1 = k - blockposition.getX(); + + for (i1 = blockposition.getZ() - j; i1 <= blockposition.getZ() + j; ++i1) { + int i2 = i1 - blockposition.getZ(); + + if (Math.abs(l1) != j || Math.abs(i2) != j || random.nextInt(2) != 0 && k1 != 0) { + blockposition1 = new BlockPosition(k, j1, i1); + if (!world.getType(blockposition1).getBlock().o()) { + this.a(world, blockposition1, WorldGenSwampTree.b); + } + } + } + } + } + + for (j1 = 0; j1 < i; ++j1) { + Block block2 = world.getType(blockposition.up(j1)).getBlock(); + + if (block2.getMaterial() == Material.AIR || block2.getMaterial() == Material.LEAVES || block2 == Blocks.FLOWING_WATER || block2 == Blocks.WATER) { + this.a(world, blockposition.up(j1), WorldGenSwampTree.a); + } + } + + for (j1 = blockposition.getY() - 3 + i; j1 <= blockposition.getY() + i; ++j1) { + k1 = j1 - (blockposition.getY() + i); + j = 2 - k1 / 2; + BlockPosition.MutableBlockPosition blockposition_mutableblockposition1 = new BlockPosition.MutableBlockPosition(); + + for (l1 = blockposition.getX() - j; l1 <= blockposition.getX() + j; ++l1) { + for (i1 = blockposition.getZ() - j; i1 <= blockposition.getZ() + j; ++i1) { + blockposition_mutableblockposition1.c(l1, j1, i1); + if (world.getType(blockposition_mutableblockposition1).getBlock().getMaterial() == Material.LEAVES) { + BlockPosition blockposition2 = blockposition_mutableblockposition1.west(); + + blockposition1 = blockposition_mutableblockposition1.east(); + BlockPosition blockposition3 = blockposition_mutableblockposition1.north(); + BlockPosition blockposition4 = blockposition_mutableblockposition1.south(); + + if (random.nextInt(4) == 0 && world.getType(blockposition2).getBlock().getMaterial() == Material.AIR) { + this.a(world, blockposition2, BlockVine.EAST); + } + + if (random.nextInt(4) == 0 && world.getType(blockposition1).getBlock().getMaterial() == Material.AIR) { + this.a(world, blockposition1, BlockVine.WEST); + } + + if (random.nextInt(4) == 0 && world.getType(blockposition3).getBlock().getMaterial() == Material.AIR) { + this.a(world, blockposition3, BlockVine.SOUTH); + } + + if (random.nextInt(4) == 0 && world.getType(blockposition4).getBlock().getMaterial() == Material.AIR) { + this.a(world, blockposition4, BlockVine.NORTH); + } + } + } + } + } + + return true; + } else { + return false; + } + } + } else { + return false; + } + } + + private void a(World world, BlockPosition blockposition, BlockStateBoolean blockstateboolean) { + IBlockData iblockdata = Blocks.VINE.getBlockData().set(blockstateboolean, Boolean.valueOf(true)); + + this.a(world, blockposition, iblockdata); + int i = 4; + + for (blockposition = blockposition.down(); world.getType(blockposition).getBlock().getMaterial() == Material.AIR && i > 0; --i) { + this.a(world, blockposition, iblockdata); + blockposition = blockposition.down(); + } + + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenTaiga1.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenTaiga1.java new file mode 100644 index 0000000..1e1acbb --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenTaiga1.java @@ -0,0 +1,102 @@ +package net.minecraft.server; + +import java.util.Random; + +public class WorldGenTaiga1 extends WorldGenTreeAbstract { + + private static final IBlockData a = Blocks.LOG.getBlockData().set(BlockLog1.VARIANT, BlockWood.EnumLogVariant.SPRUCE); + private static final IBlockData b = Blocks.LEAVES.getBlockData().set(BlockLeaves1.VARIANT, BlockWood.EnumLogVariant.SPRUCE).set(BlockLeaves.CHECK_DECAY, Boolean.valueOf(false)); + + public WorldGenTaiga1() { + super(false); + } + + public boolean generate(World world, Random random, BlockPosition blockposition) { + int i = random.nextInt(5) + 7; + int j = i - random.nextInt(2) - 3; + int k = i - j; + int l = 1 + random.nextInt(k + 1); + boolean flag = true; + + if (blockposition.getY() >= 1 && blockposition.getY() + i + 1 <= 256) { + int i1; + int j1; + int k1; + + for (int l1 = blockposition.getY(); l1 <= blockposition.getY() + 1 + i && flag; ++l1) { + boolean flag1 = true; + + if (l1 - blockposition.getY() < j) { + k1 = 0; + } else { + k1 = l; + } + + BlockPosition.MutableBlockPosition blockposition_mutableblockposition = new BlockPosition.MutableBlockPosition(); + + for (i1 = blockposition.getX() - k1; i1 <= blockposition.getX() + k1 && flag; ++i1) { + for (j1 = blockposition.getZ() - k1; j1 <= blockposition.getZ() + k1 && flag; ++j1) { + if (l1 >= 0 && l1 < 256) { + if (!this.a(world.getType(blockposition_mutableblockposition.c(i1, l1, j1)).getBlock())) { + flag = false; + } + } else { + flag = false; + } + } + } + } + + if (!flag) { + return false; + } else { + Block block = world.getType(blockposition.down()).getBlock(); + + if ((block == Blocks.GRASS || block == Blocks.DIRT) && blockposition.getY() < 256 - i - 1) { + this.a(world, blockposition.down()); + k1 = 0; + + int i2; + + for (i2 = blockposition.getY() + i; i2 >= blockposition.getY() + j; --i2) { + for (i1 = blockposition.getX() - k1; i1 <= blockposition.getX() + k1; ++i1) { + j1 = i1 - blockposition.getX(); + + for (int j2 = blockposition.getZ() - k1; j2 <= blockposition.getZ() + k1; ++j2) { + int k2 = j2 - blockposition.getZ(); + + if (Math.abs(j1) != k1 || Math.abs(k2) != k1 || k1 <= 0) { + BlockPosition blockposition1 = new BlockPosition(i1, i2, j2); + + if (!world.getType(blockposition1).getBlock().o()) { + this.a(world, blockposition1, WorldGenTaiga1.b); + } + } + } + } + + if (k1 >= 1 && i2 == blockposition.getY() + j + 1) { + --k1; + } else if (k1 < l) { + ++k1; + } + } + + for (i2 = 0; i2 < i - 1; ++i2) { + Block block1 = world.getType(blockposition.up(i2)).getBlock(); + + if (block1.getMaterial() == Material.AIR || block1.getMaterial() == Material.LEAVES) { + this.a(world, blockposition.up(i2), WorldGenTaiga1.a); + } + } + + return true; + } else { + return false; + } + } + } else { + return false; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenTaiga2.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenTaiga2.java new file mode 100644 index 0000000..bfb7419 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenTaiga2.java @@ -0,0 +1,114 @@ +package net.minecraft.server; + +import java.util.Random; + +public class WorldGenTaiga2 extends WorldGenTreeAbstract { + + private static final IBlockData a = Blocks.LOG.getBlockData().set(BlockLog1.VARIANT, BlockWood.EnumLogVariant.SPRUCE); + private static final IBlockData b = Blocks.LEAVES.getBlockData().set(BlockLeaves1.VARIANT, BlockWood.EnumLogVariant.SPRUCE).set(BlockLeaves.CHECK_DECAY, Boolean.valueOf(false)); + + public WorldGenTaiga2(boolean flag) { + super(flag); + } + + public boolean generate(World world, Random random, BlockPosition blockposition) { + int i = random.nextInt(4) + 6; + int j = 1 + random.nextInt(2); + int k = i - j; + int l = 2 + random.nextInt(2); + boolean flag = true; + + if (blockposition.getY() >= 1 && blockposition.getY() + i + 1 <= 256) { + int i1; + int j1; + + for (int k1 = blockposition.getY(); k1 <= blockposition.getY() + 1 + i && flag; ++k1) { + boolean flag1 = true; + + if (k1 - blockposition.getY() < j) { + j1 = 0; + } else { + j1 = l; + } + + BlockPosition.MutableBlockPosition blockposition_mutableblockposition = new BlockPosition.MutableBlockPosition(); + + for (int l1 = blockposition.getX() - j1; l1 <= blockposition.getX() + j1 && flag; ++l1) { + for (i1 = blockposition.getZ() - j1; i1 <= blockposition.getZ() + j1 && flag; ++i1) { + if (k1 >= 0 && k1 < 256) { + Block block = world.getType(blockposition_mutableblockposition.c(l1, k1, i1)).getBlock(); + + if (block.getMaterial() != Material.AIR && block.getMaterial() != Material.LEAVES) { + flag = false; + } + } else { + flag = false; + } + } + } + } + + if (!flag) { + return false; + } else { + Block block1 = world.getType(blockposition.down()).getBlock(); + + if ((block1 == Blocks.GRASS || block1 == Blocks.DIRT || block1 == Blocks.FARMLAND) && blockposition.getY() < 256 - i - 1) { + this.a(world, blockposition.down()); + j1 = random.nextInt(2); + int i2 = 1; + byte b0 = 0; + + int j2; + + for (i1 = 0; i1 <= k; ++i1) { + j2 = blockposition.getY() + i - i1; + + for (int k2 = blockposition.getX() - j1; k2 <= blockposition.getX() + j1; ++k2) { + int l2 = k2 - blockposition.getX(); + + for (int i3 = blockposition.getZ() - j1; i3 <= blockposition.getZ() + j1; ++i3) { + int j3 = i3 - blockposition.getZ(); + + if (Math.abs(l2) != j1 || Math.abs(j3) != j1 || j1 <= 0) { + BlockPosition blockposition1 = new BlockPosition(k2, j2, i3); + + if (!world.getType(blockposition1).getBlock().o()) { + this.a(world, blockposition1, WorldGenTaiga2.b); + } + } + } + } + + if (j1 >= i2) { + j1 = b0; + b0 = 1; + ++i2; + if (i2 > l) { + i2 = l; + } + } else { + ++j1; + } + } + + i1 = random.nextInt(3); + + for (j2 = 0; j2 < i - i1; ++j2) { + Block block2 = world.getType(blockposition.up(j2)).getBlock(); + + if (block2.getMaterial() == Material.AIR || block2.getMaterial() == Material.LEAVES) { + this.a(world, blockposition.up(j2), WorldGenTaiga2.a); + } + } + + return true; + } else { + return false; + } + } + } else { + return false; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenTaigaStructure.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenTaigaStructure.java new file mode 100644 index 0000000..27cfd38 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenTaigaStructure.java @@ -0,0 +1,61 @@ +package net.minecraft.server; + +import java.util.Iterator; +import java.util.Random; + +public class WorldGenTaigaStructure extends WorldGenerator { + + private final Block a; + private final int b; + + public WorldGenTaigaStructure(Block block, int i) { + super(false); + this.a = block; + this.b = i; + } + + public boolean generate(World world, Random random, BlockPosition blockposition) { + while (true) { + if (blockposition.getY() > 3) { + label47: { + if (!world.isEmpty(blockposition.down())) { + Block block = world.getType(blockposition.down()).getBlock(); + + if (block == Blocks.GRASS || block == Blocks.DIRT || block == Blocks.STONE) { + break label47; + } + } + + blockposition = blockposition.down(); + continue; + } + } + + if (blockposition.getY() <= 3) { + return false; + } + + int i = this.b; + + for (int j = 0; i >= 0 && j < 3; ++j) { + int k = i + random.nextInt(2); + int l = i + random.nextInt(2); + int i1 = i + random.nextInt(2); + float f = (float) (k + l + i1) * 0.333F + 0.5F; + Iterator iterator = BlockPosition.a(blockposition.a(-k, -l, -i1), blockposition.a(k, l, i1)).iterator(); + + while (iterator.hasNext()) { + BlockPosition blockposition1 = (BlockPosition) iterator.next(); + + if (blockposition1.i(blockposition) <= (double) (f * f)) { + world.setTypeAndData(blockposition1, this.a.getBlockData(), 4); + } + } + + blockposition = blockposition.a(-(i + 1) + random.nextInt(2 + i * 2), 0 - random.nextInt(2), -(i + 1) + random.nextInt(2 + i * 2)); + } + + return true; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenTallPlant.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenTallPlant.java new file mode 100644 index 0000000..c0c61a1 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenTallPlant.java @@ -0,0 +1,29 @@ +package net.minecraft.server; + +import java.util.Random; + +public class WorldGenTallPlant extends WorldGenerator { + + private BlockTallPlant.EnumTallFlowerVariants a; + + public WorldGenTallPlant() {} + + public void a(BlockTallPlant.EnumTallFlowerVariants blocktallplant_enumtallflowervariants) { + this.a = blocktallplant_enumtallflowervariants; + } + + public boolean generate(World world, Random random, BlockPosition blockposition) { + boolean flag = false; + + for (int i = 0; i < 64; ++i) { + BlockPosition blockposition1 = blockposition.a(random.nextInt(8) - random.nextInt(8), random.nextInt(4) - random.nextInt(4), random.nextInt(8) - random.nextInt(8)); + + if (world.isEmpty(blockposition1) && (!world.worldProvider.o() || blockposition1.getY() < 254) && Blocks.DOUBLE_PLANT.canPlace(world, blockposition1)) { + Blocks.DOUBLE_PLANT.a(world, blockposition1, this.a, 2); + flag = true; + } + } + + return flag; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenTreeAbstract.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenTreeAbstract.java new file mode 100644 index 0000000..5f6aed4 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenTreeAbstract.java @@ -0,0 +1,25 @@ +package net.minecraft.server; + +import java.util.Random; + +public abstract class WorldGenTreeAbstract extends WorldGenerator { + + public WorldGenTreeAbstract(boolean flag) { + super(flag); + } + + protected boolean a(Block block) { + Material material = block.getMaterial(); + + return material == Material.AIR || material == Material.LEAVES || block == Blocks.GRASS || block == Blocks.DIRT || block == Blocks.LOG || block == Blocks.LOG2 || block == Blocks.SAPLING || block == Blocks.VINE; + } + + public void a(World world, Random random, BlockPosition blockposition) {} + + protected void a(World world, BlockPosition blockposition) { + if (world.getType(blockposition).getBlock() != Blocks.DIRT) { + this.a(world, blockposition, Blocks.DIRT.getBlockData()); + } + + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenTrees.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenTrees.java new file mode 100644 index 0000000..de3c036 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenTrees.java @@ -0,0 +1,204 @@ +package net.minecraft.server; + +import java.util.Iterator; +import java.util.Random; + +public class WorldGenTrees extends WorldGenTreeAbstract { + + private static final IBlockData a = Blocks.LOG.getBlockData().set(BlockLog1.VARIANT, BlockWood.EnumLogVariant.OAK); + private static final IBlockData b = Blocks.LEAVES.getBlockData().set(BlockLeaves1.VARIANT, BlockWood.EnumLogVariant.OAK).set(BlockLeaves.CHECK_DECAY, Boolean.valueOf(false)); + private final int c; + private final boolean d; + private final IBlockData e; + private final IBlockData f; + + public WorldGenTrees(boolean flag) { + this(flag, 4, WorldGenTrees.a, WorldGenTrees.b, false); + } + + public WorldGenTrees(boolean flag, int i, IBlockData iblockdata, IBlockData iblockdata1, boolean flag1) { + super(flag); + this.c = i; + this.e = iblockdata; + this.f = iblockdata1; + this.d = flag1; + } + + public boolean generate(World world, Random random, BlockPosition blockposition) { + int i = random.nextInt(3) + this.c; + boolean flag = true; + + if (blockposition.getY() >= 1 && blockposition.getY() + i + 1 <= 256) { + byte b0; + int j; + int k; + + for (int l = blockposition.getY(); l <= blockposition.getY() + 1 + i; ++l) { + b0 = 1; + if (l == blockposition.getY()) { + b0 = 0; + } + + if (l >= blockposition.getY() + 1 + i - 2) { + b0 = 2; + } + + BlockPosition.MutableBlockPosition blockposition_mutableblockposition = new BlockPosition.MutableBlockPosition(); + + for (j = blockposition.getX() - b0; j <= blockposition.getX() + b0 && flag; ++j) { + for (k = blockposition.getZ() - b0; k <= blockposition.getZ() + b0 && flag; ++k) { + if (l >= 0 && l < 256) { + if (!this.a(world.getType(blockposition_mutableblockposition.c(j, l, k)).getBlock())) { + flag = false; + } + } else { + flag = false; + } + } + } + } + + if (!flag) { + return false; + } else { + Block block = world.getType(blockposition.down()).getBlock(); + + if ((block == Blocks.GRASS || block == Blocks.DIRT || block == Blocks.FARMLAND) && blockposition.getY() < 256 - i - 1) { + this.a(world, blockposition.down()); + b0 = 3; + byte b1 = 0; + + int i1; + int j1; + int k1; + BlockPosition blockposition1; + + for (j = blockposition.getY() - b0 + i; j <= blockposition.getY() + i; ++j) { + k = j - (blockposition.getY() + i); + i1 = b1 + 1 - k / 2; + + for (int l1 = blockposition.getX() - i1; l1 <= blockposition.getX() + i1; ++l1) { + j1 = l1 - blockposition.getX(); + + for (k1 = blockposition.getZ() - i1; k1 <= blockposition.getZ() + i1; ++k1) { + int i2 = k1 - blockposition.getZ(); + + if (Math.abs(j1) != i1 || Math.abs(i2) != i1 || random.nextInt(2) != 0 && k != 0) { + blockposition1 = new BlockPosition(l1, j, k1); + Block block1 = world.getType(blockposition1).getBlock(); + + if (block1.getMaterial() == Material.AIR || block1.getMaterial() == Material.LEAVES || block1.getMaterial() == Material.REPLACEABLE_PLANT) { + this.a(world, blockposition1, this.f); + } + } + } + } + } + + for (j = 0; j < i; ++j) { + Block block2 = world.getType(blockposition.up(j)).getBlock(); + + if (block2.getMaterial() == Material.AIR || block2.getMaterial() == Material.LEAVES || block2.getMaterial() == Material.REPLACEABLE_PLANT) { + this.a(world, blockposition.up(j), this.e); + if (this.d && j > 0) { + if (random.nextInt(3) > 0 && world.isEmpty(blockposition.a(-1, j, 0))) { + this.a(world, blockposition.a(-1, j, 0), BlockVine.EAST); + } + + if (random.nextInt(3) > 0 && world.isEmpty(blockposition.a(1, j, 0))) { + this.a(world, blockposition.a(1, j, 0), BlockVine.WEST); + } + + if (random.nextInt(3) > 0 && world.isEmpty(blockposition.a(0, j, -1))) { + this.a(world, blockposition.a(0, j, -1), BlockVine.SOUTH); + } + + if (random.nextInt(3) > 0 && world.isEmpty(blockposition.a(0, j, 1))) { + this.a(world, blockposition.a(0, j, 1), BlockVine.NORTH); + } + } + } + } + + if (this.d) { + for (j = blockposition.getY() - 3 + i; j <= blockposition.getY() + i; ++j) { + k = j - (blockposition.getY() + i); + i1 = 2 - k / 2; + BlockPosition.MutableBlockPosition blockposition_mutableblockposition1 = new BlockPosition.MutableBlockPosition(); + + for (j1 = blockposition.getX() - i1; j1 <= blockposition.getX() + i1; ++j1) { + for (k1 = blockposition.getZ() - i1; k1 <= blockposition.getZ() + i1; ++k1) { + blockposition_mutableblockposition1.c(j1, j, k1); + if (world.getType(blockposition_mutableblockposition1).getBlock().getMaterial() == Material.LEAVES) { + BlockPosition blockposition2 = blockposition_mutableblockposition1.west(); + + blockposition1 = blockposition_mutableblockposition1.east(); + BlockPosition blockposition3 = blockposition_mutableblockposition1.north(); + BlockPosition blockposition4 = blockposition_mutableblockposition1.south(); + + if (random.nextInt(4) == 0 && world.getType(blockposition2).getBlock().getMaterial() == Material.AIR) { + this.b(world, blockposition2, BlockVine.EAST); + } + + if (random.nextInt(4) == 0 && world.getType(blockposition1).getBlock().getMaterial() == Material.AIR) { + this.b(world, blockposition1, BlockVine.WEST); + } + + if (random.nextInt(4) == 0 && world.getType(blockposition3).getBlock().getMaterial() == Material.AIR) { + this.b(world, blockposition3, BlockVine.SOUTH); + } + + if (random.nextInt(4) == 0 && world.getType(blockposition4).getBlock().getMaterial() == Material.AIR) { + this.b(world, blockposition4, BlockVine.NORTH); + } + } + } + } + } + + if (random.nextInt(5) == 0 && i > 5) { + for (j = 0; j < 2; ++j) { + Iterator iterator = EnumDirection.EnumDirectionLimit.HORIZONTAL.iterator(); + + while (iterator.hasNext()) { + EnumDirection enumdirection = (EnumDirection) iterator.next(); + + if (random.nextInt(4 - j) == 0) { + EnumDirection enumdirection1 = enumdirection.opposite(); + + this.a(world, random.nextInt(3), blockposition.a(enumdirection1.getAdjacentX(), i - 5 + j, enumdirection1.getAdjacentZ()), enumdirection); + } + } + } + } + } + + return true; + } else { + return false; + } + } + } else { + return false; + } + } + + private void a(World world, int i, BlockPosition blockposition, EnumDirection enumdirection) { + this.a(world, blockposition, Blocks.COCOA.getBlockData().set(BlockCocoa.AGE, Integer.valueOf(i)).set(BlockCocoa.FACING, enumdirection)); + } + + private void a(World world, BlockPosition blockposition, BlockStateBoolean blockstateboolean) { + this.a(world, blockposition, Blocks.VINE.getBlockData().set(blockstateboolean, Boolean.valueOf(true))); + } + + private void b(World world, BlockPosition blockposition, BlockStateBoolean blockstateboolean) { + this.a(world, blockposition, blockstateboolean); + int i = 4; + + for (blockposition = blockposition.down(); world.getType(blockposition).getBlock().getMaterial() == Material.AIR && i > 0; --i) { + this.a(world, blockposition, blockstateboolean); + blockposition = blockposition.down(); + } + + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/WorldGenVillage.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenVillage.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/WorldGenVillage.java rename to eSpigot-Server/src/main/java/net/minecraft/server/WorldGenVillage.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/WorldGenVillagePieces.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenVillagePieces.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/WorldGenVillagePieces.java rename to eSpigot-Server/src/main/java/net/minecraft/server/WorldGenVillagePieces.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenVines.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenVines.java new file mode 100644 index 0000000..392a690 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenVines.java @@ -0,0 +1,32 @@ +package net.minecraft.server; + +import java.util.Random; + +public class WorldGenVines extends WorldGenerator { + + public WorldGenVines() {} + + public boolean generate(World world, Random random, BlockPosition blockposition) { + for (; blockposition.getY() < 128; blockposition = blockposition.up()) { + if (world.isEmpty(blockposition)) { + EnumDirection[] aenumdirection = EnumDirection.EnumDirectionLimit.HORIZONTAL.a(); + int i = aenumdirection.length; + + for (int j = 0; j < i; ++j) { + EnumDirection enumdirection = aenumdirection[j]; + + if (Blocks.VINE.canPlace(world, blockposition, enumdirection)) { + IBlockData iblockdata = Blocks.VINE.getBlockData().set(BlockVine.NORTH, Boolean.valueOf(enumdirection == EnumDirection.NORTH)).set(BlockVine.EAST, Boolean.valueOf(enumdirection == EnumDirection.EAST)).set(BlockVine.SOUTH, Boolean.valueOf(enumdirection == EnumDirection.SOUTH)).set(BlockVine.WEST, Boolean.valueOf(enumdirection == EnumDirection.WEST)); + + world.setTypeAndData(blockposition, iblockdata, 2); + break; + } + } + } else { + blockposition = blockposition.a(random.nextInt(4) - random.nextInt(4), 0, random.nextInt(4) - random.nextInt(4)); + } + } + + return true; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenWaterLily.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenWaterLily.java new file mode 100644 index 0000000..0d875a3 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenWaterLily.java @@ -0,0 +1,22 @@ +package net.minecraft.server; + +import java.util.Random; + +public class WorldGenWaterLily extends WorldGenerator { + + public WorldGenWaterLily() {} + + public boolean generate(World world, Random random, BlockPosition blockposition) { + for (int i = 0; i < 10; ++i) { + int j = blockposition.getX() + random.nextInt(8) - random.nextInt(8); + int k = blockposition.getY() + random.nextInt(4) - random.nextInt(4); + int l = blockposition.getZ() + random.nextInt(8) - random.nextInt(8); + + if (world.isEmpty(new BlockPosition(j, k, l)) && Blocks.WATERLILY.canPlace(world, new BlockPosition(j, k, l))) { + world.setTypeAndData(new BlockPosition(j, k, l), Blocks.WATERLILY.getBlockData(), 2); + } + } + + return true; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenerator.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenerator.java new file mode 100644 index 0000000..b8b4e6f --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldGenerator.java @@ -0,0 +1,29 @@ +package net.minecraft.server; + +import java.util.Random; + +public abstract class WorldGenerator { + + private final boolean a; + + public WorldGenerator() { + this(false); + } + + public WorldGenerator(boolean flag) { + this.a = flag; + } + + public abstract boolean generate(World world, Random random, BlockPosition blockposition); + + public void e() {} + + protected void a(World world, BlockPosition blockposition, IBlockData iblockdata) { + if (this.a) { + world.setTypeAndData(blockposition, iblockdata, 3); + } else { + world.setTypeAndData(blockposition, iblockdata, 2); + } + + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldLoader.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldLoader.java new file mode 100644 index 0000000..b82108f --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldLoader.java @@ -0,0 +1,117 @@ +package net.minecraft.server; + +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class WorldLoader implements Convertable { + + private static final Logger b = LogManager.getLogger(); + protected final File a; + + public WorldLoader(File file) { + if (!file.exists()) { + file.mkdirs(); + } + + this.a = file; + } + + public void d() {} + + public WorldData c(String s) { + File file = new File(this.a, s); + + if (!file.exists()) { + return null; + } else { + File file1 = new File(file, "level.dat"); + NBTTagCompound nbttagcompound; + NBTTagCompound nbttagcompound1; + + if (file1.exists()) { + try { + nbttagcompound = NBTCompressedStreamTools.a((InputStream) (new FileInputStream(file1))); + nbttagcompound1 = nbttagcompound.getCompound("Data"); + return new WorldData(nbttagcompound1); + } catch (Exception exception) { + WorldLoader.b.error("Exception reading " + file1, exception); + } + } + + file1 = new File(file, "level.dat_old"); + if (file1.exists()) { + try { + nbttagcompound = NBTCompressedStreamTools.a((InputStream) (new FileInputStream(file1))); + nbttagcompound1 = nbttagcompound.getCompound("Data"); + return new WorldData(nbttagcompound1); + } catch (Exception exception1) { + WorldLoader.b.error("Exception reading " + file1, exception1); + } + } + + return null; + } + } + + public boolean e(String s) { + File file = new File(this.a, s); + + if (!file.exists()) { + return true; + } else { + WorldLoader.b.info("Deleting level " + s); + + for (int i = 1; i <= 5; ++i) { + WorldLoader.b.info("Attempt " + i + "..."); + if (a(file.listFiles())) { + break; + } + + WorldLoader.b.warn("Unsuccessful in deleting contents."); + if (i < 5) { + try { + Thread.sleep(500L); + } catch (InterruptedException interruptedexception) { + ; + } + } + } + + return file.delete(); + } + } + + protected static boolean a(File[] afile) { + for (int i = 0; i < afile.length; ++i) { + File file = afile[i]; + + WorldLoader.b.debug("Deleting " + file); + if (file.isDirectory() && !a(file.listFiles())) { + WorldLoader.b.warn("Couldn\'t delete directory " + file); + return false; + } + + if (!file.delete()) { + WorldLoader.b.warn("Couldn\'t delete file " + file); + return false; + } + } + + return true; + } + + public IDataManager a(String s, boolean flag) { + return new WorldNBTStorage(this.a, s, flag); + } + + public boolean isConvertable(String s) { + return false; + } + + public boolean convert(String s, IProgressUpdate iprogressupdate) { + return false; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldLoaderServer.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldLoaderServer.java new file mode 100644 index 0000000..6577590 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldLoaderServer.java @@ -0,0 +1,188 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import java.io.DataInputStream; +import java.io.DataOutput; +import java.io.DataOutputStream; +import java.io.File; +import java.io.FilenameFilter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Iterator; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class WorldLoaderServer extends WorldLoader { + + private static final Logger b = LogManager.getLogger(); + + public WorldLoaderServer(File file) { + super(file); + } + + protected int c() { + return 19133; + } + + public void d() { + RegionFileCache.a(); + } + + public IDataManager a(String s, boolean flag) { + return new ServerNBTManager(this.a, s, flag); + } + + public boolean isConvertable(String s) { + WorldData worlddata = this.c(s); + + return worlddata != null && worlddata.l() != this.c(); + } + + public boolean convert(String s, IProgressUpdate iprogressupdate) { + iprogressupdate.a(0); + ArrayList arraylist = Lists.newArrayList(); + ArrayList arraylist1 = Lists.newArrayList(); + ArrayList arraylist2 = Lists.newArrayList(); + File file = new File(this.a, s); + File file1 = new File(file, "DIM-1"); + File file2 = new File(file, "DIM1"); + + WorldLoaderServer.b.info("Scanning folders..."); + this.a(file, arraylist); + if (file1.exists()) { + this.a(file1, arraylist1); + } + + if (file2.exists()) { + this.a(file2, arraylist2); + } + + int i = arraylist.size() + arraylist1.size() + arraylist2.size(); + + WorldLoaderServer.b.info("Total conversion count is " + i); + WorldData worlddata = this.c(s); + Object object = null; + + if (worlddata.getType() == WorldType.FLAT) { + object = new WorldChunkManagerHell(BiomeBase.PLAINS, 0.5F); + } else { + object = new WorldChunkManager(worlddata.getSeed(), worlddata.getType(), worlddata.getGeneratorOptions()); + } + + this.a(new File(file, "region"), (Iterable) arraylist, (WorldChunkManager) object, 0, i, iprogressupdate); + this.a(new File(file1, "region"), (Iterable) arraylist1, new WorldChunkManagerHell(BiomeBase.HELL, 0.0F), arraylist.size(), i, iprogressupdate); + this.a(new File(file2, "region"), (Iterable) arraylist2, new WorldChunkManagerHell(BiomeBase.SKY, 0.0F), arraylist.size() + arraylist1.size(), i, iprogressupdate); + worlddata.e(19133); + if (worlddata.getType() == WorldType.NORMAL_1_1) { + worlddata.a(WorldType.NORMAL); + } + + this.g(s); + IDataManager idatamanager = this.a(s, false); + + idatamanager.saveWorldData(worlddata); + return true; + } + + private void g(String s) { + File file = new File(this.a, s); + + if (!file.exists()) { + WorldLoaderServer.b.warn("Unable to create level.dat_mcr backup"); + } else { + File file1 = new File(file, "level.dat"); + + if (!file1.exists()) { + WorldLoaderServer.b.warn("Unable to create level.dat_mcr backup"); + } else { + File file2 = new File(file, "level.dat_mcr"); + + if (!file1.renameTo(file2)) { + WorldLoaderServer.b.warn("Unable to create level.dat_mcr backup"); + } + + } + } + } + + private void a(File file, Iterable iterable, WorldChunkManager worldchunkmanager, int i, int j, IProgressUpdate iprogressupdate) { + Iterator iterator = iterable.iterator(); + + while (iterator.hasNext()) { + File file1 = (File) iterator.next(); + + this.a(file, file1, worldchunkmanager, i, j, iprogressupdate); + ++i; + int k = (int) Math.round(100.0D * (double) i / (double) j); + + iprogressupdate.a(k); + } + + } + + private void a(File file, File file1, WorldChunkManager worldchunkmanager, int i, int j, IProgressUpdate iprogressupdate) { + try { + String s = file1.getName(); + RegionFile regionfile = new RegionFile(file1); + RegionFile regionfile1 = new RegionFile(new File(file, s.substring(0, s.length() - ".mcr".length()) + ".mca")); + + for (int k = 0; k < 32; ++k) { + int l; + + for (l = 0; l < 32; ++l) { + if (regionfile.c(k, l) && !regionfile1.c(k, l)) { + DataInputStream datainputstream = regionfile.a(k, l); + + if (datainputstream == null) { + WorldLoaderServer.b.warn("Failed to fetch input stream"); + } else { + NBTTagCompound nbttagcompound = NBTCompressedStreamTools.a(datainputstream); + + datainputstream.close(); + NBTTagCompound nbttagcompound1 = nbttagcompound.getCompound("Level"); + OldChunkLoader.OldChunk oldchunkloader_oldchunk = OldChunkLoader.a(nbttagcompound1); + NBTTagCompound nbttagcompound2 = new NBTTagCompound(); + NBTTagCompound nbttagcompound3 = new NBTTagCompound(); + + nbttagcompound2.set("Level", nbttagcompound3); + OldChunkLoader.a(oldchunkloader_oldchunk, nbttagcompound3, worldchunkmanager); + DataOutputStream dataoutputstream = regionfile1.b(k, l); + + NBTCompressedStreamTools.a(nbttagcompound2, (DataOutput) dataoutputstream); + dataoutputstream.close(); + } + } + } + + l = (int) Math.round(100.0D * (double) (i * 1024) / (double) (j * 1024)); + int i1 = (int) Math.round(100.0D * (double) ((k + 1) * 32 + i * 1024) / (double) (j * 1024)); + + if (i1 > l) { + iprogressupdate.a(i1); + } + } + + regionfile.c(); + regionfile1.c(); + } catch (IOException ioexception) { + ioexception.printStackTrace(); + } + + } + + private void a(File file, Collection collection) { + File file1 = new File(file, "region"); + File[] afile = file1.listFiles(new FilenameFilter() { + public boolean accept(File file, String s) { + return s.endsWith(".mcr"); + } + }); + + if (afile != null) { + Collections.addAll(collection, afile); + } + + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/WorldManager.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldManager.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/WorldManager.java rename to eSpigot-Server/src/main/java/net/minecraft/server/WorldManager.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/WorldMap.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldMap.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/WorldMap.java rename to eSpigot-Server/src/main/java/net/minecraft/server/WorldMap.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/WorldNBTStorage.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldNBTStorage.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/WorldNBTStorage.java rename to eSpigot-Server/src/main/java/net/minecraft/server/WorldNBTStorage.java diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/WorldProvider.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldProvider.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/WorldProvider.java rename to eSpigot-Server/src/main/java/net/minecraft/server/WorldProvider.java diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldProviderHell.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldProviderHell.java new file mode 100644 index 0000000..1145ed2 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldProviderHell.java @@ -0,0 +1,64 @@ +package net.minecraft.server; + +public class WorldProviderHell extends WorldProvider { + + public WorldProviderHell() {} + + public void b() { + this.c = new WorldChunkManagerHell(BiomeBase.HELL, 0.0F); + this.d = true; + this.e = true; + this.dimension = -1; + } + + protected void a() { + float f = 0.1F; + + for (int i = 0; i <= 15; ++i) { + float f1 = 1.0F - (float) i / 15.0F; + + this.f[i] = (1.0F - f1) / (f1 * 3.0F + 1.0F) * (1.0F - f) + f; + } + + } + + public IChunkProvider getChunkProvider() { + return new ChunkProviderHell(this.b, this.b.getWorldData().shouldGenerateMapFeatures(), this.b.getSeed()); + } + + public boolean d() { + return false; + } + + public boolean canSpawn(int i, int j) { + return false; + } + + public float a(long i, float f) { + return 0.5F; + } + + public boolean e() { + return false; + } + + public String getName() { + return "Nether"; + } + + public String getSuffix() { + return "_nether"; + } + + public WorldBorder getWorldBorder() { + return new WorldBorder() { + public double getCenterX() { + return super.getCenterX() / 8.0D; + } + + public double getCenterZ() { + return super.getCenterZ() / 8.0D; + } + }; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldProviderNormal.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldProviderNormal.java new file mode 100644 index 0000000..2bf28f2 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldProviderNormal.java @@ -0,0 +1,14 @@ +package net.minecraft.server; + +public class WorldProviderNormal extends WorldProvider { + + public WorldProviderNormal() {} + + public String getName() { + return "Overworld"; + } + + public String getSuffix() { + return ""; + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldProviderTheEnd.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldProviderTheEnd.java new file mode 100644 index 0000000..17b3e13 --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldProviderTheEnd.java @@ -0,0 +1,48 @@ +package net.minecraft.server; + +public class WorldProviderTheEnd extends WorldProvider { + + public WorldProviderTheEnd() {} + + public void b() { + this.c = new WorldChunkManagerHell(BiomeBase.SKY, 0.0F); + this.dimension = 1; + this.e = true; + } + + public IChunkProvider getChunkProvider() { + return new ChunkProviderTheEnd(this.b, this.b.getSeed()); + } + + public float a(long i, float f) { + return 0.0F; + } + + public boolean e() { + return false; + } + + public boolean d() { + return false; + } + + public boolean canSpawn(int i, int j) { + return this.b.c(new BlockPosition(i, 0, j)).getMaterial().isSolid(); + } + + public BlockPosition h() { + return new BlockPosition(100, 50, 0); + } + + public int getSeaLevel() { + return 50; + } + + public String getName() { + return "The End"; + } + + public String getSuffix() { + return "_end"; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/minecraft/server/WorldServer.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldServer.java similarity index 99% rename from TacoSpigot-Server/src/main/java/net/minecraft/server/WorldServer.java rename to eSpigot-Server/src/main/java/net/minecraft/server/WorldServer.java index 294679c..360aa1c 100644 --- a/TacoSpigot-Server/src/main/java/net/minecraft/server/WorldServer.java +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldServer.java @@ -41,6 +41,7 @@ public class WorldServer extends World implements IAsyncTaskHandler { private int T; private static final List U = Lists.newArrayList(new StructurePieceTreasure[] { new StructurePieceTreasure(Items.STICK, 0, 1, 3, 10), new StructurePieceTreasure(Item.getItemOf(Blocks.PLANKS), 0, 1, 3, 10), new StructurePieceTreasure(Item.getItemOf(Blocks.LOG), 0, 1, 3, 10), new StructurePieceTreasure(Items.STONE_AXE, 0, 1, 1, 3), new StructurePieceTreasure(Items.WOODEN_AXE, 0, 1, 1, 5), new StructurePieceTreasure(Items.STONE_PICKAXE, 0, 1, 1, 3), new StructurePieceTreasure(Items.WOODEN_PICKAXE, 0, 1, 1, 5), new StructurePieceTreasure(Items.APPLE, 0, 2, 3, 5), new StructurePieceTreasure(Items.BREAD, 0, 2, 3, 3), new StructurePieceTreasure(Item.getItemOf(Blocks.LOG2), 0, 1, 3, 10)}); private List V = Lists.newArrayList(); + public boolean hasPhysicsEvent = true; // PandaSpigot // Migot start public void cancelHeavyCalculations(boolean cancel) { diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldSettings.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldSettings.java new file mode 100644 index 0000000..122780a --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldSettings.java @@ -0,0 +1,140 @@ +package net.minecraft.server; + +public final class WorldSettings { + + private final long a; + private final WorldSettings.EnumGamemode b; + private final boolean c; + private final boolean d; + private final WorldType e; + private boolean f; + private boolean g; + private String h; + + public WorldSettings(long i, WorldSettings.EnumGamemode worldsettings_enumgamemode, boolean flag, boolean flag1, WorldType worldtype) { + this.h = ""; + this.a = i; + this.b = worldsettings_enumgamemode; + this.c = flag; + this.d = flag1; + this.e = worldtype; + } + + public WorldSettings(WorldData worlddata) { + this(worlddata.getSeed(), worlddata.getGameType(), worlddata.shouldGenerateMapFeatures(), worlddata.isHardcore(), worlddata.getType()); + } + + public WorldSettings a() { + this.g = true; + return this; + } + + public WorldSettings setGeneratorSettings(String s) { + this.h = s; + return this; + } + + public boolean c() { + return this.g; + } + + public long d() { + return this.a; + } + + public WorldSettings.EnumGamemode e() { + return this.b; + } + + public boolean f() { + return this.d; + } + + public boolean g() { + return this.c; + } + + public WorldType h() { + return this.e; + } + + public boolean i() { + return this.f; + } + + public static WorldSettings.EnumGamemode a(int i) { + return WorldSettings.EnumGamemode.getById(i); + } + + public String j() { + return this.h; + } + + public static enum EnumGamemode { + + NOT_SET(-1, ""), SURVIVAL(0, "survival"), CREATIVE(1, "creative"), ADVENTURE(2, "adventure"), SPECTATOR(3, "spectator"); + + int f; + String g; + + private EnumGamemode(int i, String s) { + this.f = i; + this.g = s; + } + + public int getId() { + return this.f; + } + + public String b() { + return this.g; + } + + public void a(PlayerAbilities playerabilities) { + if (this == WorldSettings.EnumGamemode.CREATIVE) { + playerabilities.canFly = true; + playerabilities.canInstantlyBuild = true; + playerabilities.isInvulnerable = true; + } else if (this == WorldSettings.EnumGamemode.SPECTATOR) { + playerabilities.canFly = true; + playerabilities.canInstantlyBuild = false; + playerabilities.isInvulnerable = true; + playerabilities.isFlying = true; + } else { + playerabilities.canFly = false; + playerabilities.canInstantlyBuild = false; + playerabilities.isInvulnerable = false; + playerabilities.isFlying = false; + } + + playerabilities.mayBuild = !this.c(); + } + + public boolean c() { + return this == WorldSettings.EnumGamemode.ADVENTURE || this == WorldSettings.EnumGamemode.SPECTATOR; + } + + public boolean d() { + return this == WorldSettings.EnumGamemode.CREATIVE; + } + + public boolean e() { + return this == WorldSettings.EnumGamemode.SURVIVAL || this == WorldSettings.EnumGamemode.ADVENTURE; + } + + public static WorldSettings.EnumGamemode getById(int i) { + WorldSettings.EnumGamemode[] aworldsettings_enumgamemode = values(); + int j = aworldsettings_enumgamemode.length; + + for (int k = 0; k < j; ++k) { + WorldSettings.EnumGamemode worldsettings_enumgamemode = aworldsettings_enumgamemode[k]; + + if (worldsettings_enumgamemode.f == i) { + return worldsettings_enumgamemode; + } + } + + return WorldSettings.EnumGamemode.SURVIVAL; + } + } +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/WorldType.java b/eSpigot-Server/src/main/java/net/minecraft/server/WorldType.java new file mode 100644 index 0000000..188f27b --- /dev/null +++ b/eSpigot-Server/src/main/java/net/minecraft/server/WorldType.java @@ -0,0 +1,76 @@ +package net.minecraft.server; + +public class WorldType { + + public static final WorldType[] types = new WorldType[16]; + public static final WorldType NORMAL = (new WorldType(0, "default", 1)).i(); + public static final WorldType FLAT = new WorldType(1, "flat"); + public static final WorldType LARGE_BIOMES = new WorldType(2, "largeBiomes"); + public static final WorldType AMPLIFIED = (new WorldType(3, "amplified")).j(); + public static final WorldType CUSTOMIZED = new WorldType(4, "customized"); + public static final WorldType DEBUG_ALL_BLOCK_STATES = new WorldType(5, "debug_all_block_states"); + public static final WorldType NORMAL_1_1 = (new WorldType(8, "default_1_1", 0)).a(false); + private final int i; + private final String name; + private final int version; + private boolean l; + private boolean m; + private boolean n; + + private WorldType(int i, String s) { + this(i, s, 0); + } + + private WorldType(int i, String s, int j) { + this.name = s; + this.version = j; + this.l = true; + this.i = i; + WorldType.types[i] = this; + } + + public String name() { + return this.name; + } + + public int getVersion() { + return this.version; + } + + public WorldType a(int i) { + return this == WorldType.NORMAL && i == 0 ? WorldType.NORMAL_1_1 : this; + } + + private WorldType a(boolean flag) { + this.l = flag; + return this; + } + + private WorldType i() { + this.m = true; + return this; + } + + public boolean f() { + return this.m; + } + + public static WorldType getType(String s) { + for (int i = 0; i < WorldType.types.length; ++i) { + if (WorldType.types[i] != null && WorldType.types[i].name.equalsIgnoreCase(s)) { + return WorldType.types[i]; + } + } + + return null; + } + + public int g() { + return this.i; + } + + private WorldType j() { + this.n = true; + return this; + } +} diff --git a/TacoSpigot-Server/src/main/java/net/techcable/tacospigot/BlockStateRegistry.java b/eSpigot-Server/src/main/java/net/techcable/tacospigot/BlockStateRegistry.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/techcable/tacospigot/BlockStateRegistry.java rename to eSpigot-Server/src/main/java/net/techcable/tacospigot/BlockStateRegistry.java diff --git a/TacoSpigot-Server/src/main/java/net/techcable/tacospigot/CompatHacks.java b/eSpigot-Server/src/main/java/net/techcable/tacospigot/CompatHacks.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/techcable/tacospigot/CompatHacks.java rename to eSpigot-Server/src/main/java/net/techcable/tacospigot/CompatHacks.java diff --git a/TacoSpigot-Server/src/main/java/net/techcable/tacospigot/HopperHelper.java b/eSpigot-Server/src/main/java/net/techcable/tacospigot/HopperHelper.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/techcable/tacospigot/HopperHelper.java rename to eSpigot-Server/src/main/java/net/techcable/tacospigot/HopperHelper.java diff --git a/TacoSpigot-Server/src/main/java/net/techcable/tacospigot/HopperPusher.java b/eSpigot-Server/src/main/java/net/techcable/tacospigot/HopperPusher.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/techcable/tacospigot/HopperPusher.java rename to eSpigot-Server/src/main/java/net/techcable/tacospigot/HopperPusher.java diff --git a/TacoSpigot-Server/src/main/java/net/techcable/tacospigot/ImmutableArrayMap.java b/eSpigot-Server/src/main/java/net/techcable/tacospigot/ImmutableArrayMap.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/techcable/tacospigot/ImmutableArrayMap.java rename to eSpigot-Server/src/main/java/net/techcable/tacospigot/ImmutableArrayMap.java diff --git a/TacoSpigot-Server/src/main/java/net/techcable/tacospigot/ImmutableArrayTable.java b/eSpigot-Server/src/main/java/net/techcable/tacospigot/ImmutableArrayTable.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/techcable/tacospigot/ImmutableArrayTable.java rename to eSpigot-Server/src/main/java/net/techcable/tacospigot/ImmutableArrayTable.java diff --git a/TacoSpigot-Server/src/main/java/net/techcable/tacospigot/Indexer.java b/eSpigot-Server/src/main/java/net/techcable/tacospigot/Indexer.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/techcable/tacospigot/Indexer.java rename to eSpigot-Server/src/main/java/net/techcable/tacospigot/Indexer.java diff --git a/TacoSpigot-Server/src/main/java/net/techcable/tacospigot/TacoSpigotConfig.java b/eSpigot-Server/src/main/java/net/techcable/tacospigot/TacoSpigotConfig.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/techcable/tacospigot/TacoSpigotConfig.java rename to eSpigot-Server/src/main/java/net/techcable/tacospigot/TacoSpigotConfig.java diff --git a/TacoSpigot-Server/src/main/java/net/techcable/tacospigot/TacoSpigotWorldConfig.java b/eSpigot-Server/src/main/java/net/techcable/tacospigot/TacoSpigotWorldConfig.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/techcable/tacospigot/TacoSpigotWorldConfig.java rename to eSpigot-Server/src/main/java/net/techcable/tacospigot/TacoSpigotWorldConfig.java diff --git a/TacoSpigot-Server/src/main/java/net/techcable/tacospigot/function/ObjIntFunction.java b/eSpigot-Server/src/main/java/net/techcable/tacospigot/function/ObjIntFunction.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/techcable/tacospigot/function/ObjIntFunction.java rename to eSpigot-Server/src/main/java/net/techcable/tacospigot/function/ObjIntFunction.java diff --git a/TacoSpigot-Server/src/main/java/net/techcable/tacospigot/utils/BlockHelper.java b/eSpigot-Server/src/main/java/net/techcable/tacospigot/utils/BlockHelper.java similarity index 100% rename from TacoSpigot-Server/src/main/java/net/techcable/tacospigot/utils/BlockHelper.java rename to eSpigot-Server/src/main/java/net/techcable/tacospigot/utils/BlockHelper.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftArt.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftArt.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftArt.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftArt.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftChunk.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftChunk.java similarity index 97% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftChunk.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftChunk.java index f98f3da..5667c8b 100644 --- a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftChunk.java +++ b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftChunk.java @@ -113,15 +113,16 @@ public class CraftChunk implements Chunk { Entity[] entities = new Entity[count]; for (int i = 0; i < 16; i++) { - // Paper start - speed up (was with chunk.entitySlices[i].toArray() and cast - // checks which costs a lot of performance if called often) - for (Object entity : chunk.entitySlices[i]) { + + // PandaSpigot start - speed up (was with chunk.entitySlices[i].toArray() and cast checks which costs a lot of performance if called often) + for (net.minecraft.server.Entity entity : chunk.entitySlices[i]) { if (entity == null) { continue; } - entities[index++] = ((net.minecraft.server.Entity) entity).getBukkitEntity(); + + entities[index++] = entity.getBukkitEntity(); } - // Paper end + // PandaSpigot end } return entities; diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftChunkSnapshot.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftChunkSnapshot.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftChunkSnapshot.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftChunkSnapshot.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftCrashReport.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftCrashReport.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftCrashReport.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftCrashReport.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftEffect.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftEffect.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftEffect.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftEffect.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftEquipmentSlot.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftEquipmentSlot.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftEquipmentSlot.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftEquipmentSlot.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftIpBanEntry.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftIpBanEntry.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftIpBanEntry.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftIpBanEntry.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftIpBanList.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftIpBanList.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftIpBanList.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftIpBanList.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftProfileBanEntry.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftProfileBanEntry.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftProfileBanEntry.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftProfileBanEntry.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftProfileBanList.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftProfileBanList.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftProfileBanList.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftProfileBanList.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftServer.java similarity index 99% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftServer.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftServer.java index ac5e8b1..e502320 100644 --- a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -24,6 +24,8 @@ import java.util.regex.Pattern; import javax.imageio.ImageIO; import com.elevatemc.spigot.eSpigot; +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; import net.minecraft.server.*; import org.bukkit.BanList; @@ -103,17 +105,14 @@ import com.avaje.ebean.config.ServerConfig; import com.avaje.ebean.config.dbplatform.SQLitePlatform; import com.avaje.ebeaninternal.server.lib.sql.TransactionIsolation; import com.google.common.base.Charsets; -import com.google.common.base.Function; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; -import com.google.common.collect.MapMaker; import com.mojang.authlib.GameProfile; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufOutputStream; import io.netty.buffer.Unpooled; import io.netty.handler.codec.base64.Base64; -import jline.console.ConsoleReader; import net.md_5.bungee.api.chat.BaseComponent; import org.yaml.snakeyaml.representer.Representer; @@ -138,7 +137,7 @@ public final class CraftServer implements Server { private final LoaderOptions loaderOptions = new LoaderOptions(); private final Yaml yaml = new Yaml(new SafeConstructor(), new Representer(), new DumperOptions(), loaderOptions); // KigPaper end - private final Map offlinePlayers = new MapMaker().softValues().makeMap(); + private final Cache offlinePlayers = CacheBuilder.newBuilder().softValues().build(); private final EntityMetadataStore entityMetadata = new EntityMetadataStore(); private final PlayerMetadataStore playerMetadata = new PlayerMetadataStore(); private final WorldMetadataStore worldMetadata = new WorldMetadataStore(); @@ -191,7 +190,7 @@ public final class CraftServer implements Server { // Ugly hack :( if (!Main.useConsole) { - getLogger().info("Console input is disabled due to --noconsole command argument"); + getLogger().info("PandaConsole input is disabled due to --noconsole command argument"); } configuration = YamlConfiguration.loadConfiguration(getConfigFile()); @@ -1093,9 +1092,9 @@ public final class CraftServer implements Server { return logger; } - public ConsoleReader getReader() { + /*public ConsoleReader getReader() { return console.reader; - } + }*/ @Override public PluginCommand getPluginCommand(String name) { @@ -1376,7 +1375,7 @@ public final class CraftServer implements Server { result = getOfflinePlayer(profile); } } else { - offlinePlayers.remove(result.getUniqueId()); + offlinePlayers.invalidate(result.getUniqueId()); } return result; @@ -1388,13 +1387,13 @@ public final class CraftServer implements Server { OfflinePlayer result = getPlayer(id); if (result == null) { - result = offlinePlayers.get(id); + result = offlinePlayers.getIfPresent(id); if (result == null) { result = new CraftOfflinePlayer(this, new GameProfile(id, null)); offlinePlayers.put(id, result); } } else { - offlinePlayers.remove(id); + offlinePlayers.invalidate(id); } return result; diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftSound.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftSound.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftSound.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftSound.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftStatistic.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftStatistic.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftStatistic.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftStatistic.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftTravelAgent.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftTravelAgent.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftTravelAgent.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftTravelAgent.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftWorld.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftWorld.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftWorld.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftWorldBorder.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftWorldBorder.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftWorldBorder.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/CraftWorldBorder.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/LoggerOutputStream.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/LoggerOutputStream.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/LoggerOutputStream.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/LoggerOutputStream.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/Main.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/Main.java similarity index 91% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/Main.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/Main.java index a5bbd8b..5ab1c08 100644 --- a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/Main.java @@ -13,7 +13,7 @@ import net.minecraft.server.MinecraftServer; import org.apache.commons.lang3.JavaVersion; import org.apache.commons.lang3.SystemUtils; -import org.fusesource.jansi.AnsiConsole; +import net.minecrell.terminalconsole.TerminalConsoleAppender; // PandaSpigot public class Main { public static boolean useJline = true; @@ -28,6 +28,7 @@ public class Main { System.exit(1); } // Todo: Installation script + if (System.getProperty("jdk.nio.maxCachedBufferSize") == null) System.setProperty("jdk.nio.maxCachedBufferSize", "262144"); // PandaSpigot - cap per-thread NIO cache size OptionParser parser = new OptionParser() { { acceptsAll(asList("?", "help"), "Show the help"); @@ -176,6 +177,7 @@ public class Main { } try { + /* // PandaSpigot - Handled by TerminalConsoleAppender // This trick bypasses Maven Shade's clever rewriting of our getProperty call when using String literals String jline_UnsupportedTerminal = new String(new char[] {'j','l','i','n','e','.','U','n','s','u','p','p','o','r','t','e','d','T','e','r','m','i','n','a','l'}); String jline_terminal = new String(new char[] {'j','l','i','n','e','.','t','e','r','m','i','n','a','l'}); @@ -193,10 +195,21 @@ public class Main { // This ensures the terminal literal will always match the jline implementation System.setProperty(jline.TerminalFactory.JLINE_TERMINAL, jline.UnsupportedTerminal.class.getName()); } + */ + // PandaSpigot start + if (options.has("nojline")) { + System.setProperty(TerminalConsoleAppender.JLINE_OVERRIDE_PROPERTY, "false"); + useJline = false; + } + // PandaSpigot end if (options.has("noconsole")) { useConsole = false; + // PandaSpigot start + useJline = false; + System.setProperty(TerminalConsoleAppender.JLINE_OVERRIDE_PROPERTY, "false"); + // PandaSpigot end } // Spigot Start @@ -215,6 +228,7 @@ public class Main { System.out.println( "Please see http://www.spigotmc.org/wiki/changing-permgen-size/ for more details and more in-depth instructions." ); } // Spigot End + System.setProperty("library.jansi.version", "eSpigot"); // PandaSpigot - set meaningless jansi version to prevent git builds from crashing on Windows net.techcable.tacospigot.TacoSpigotConfig.init((File) options.valueOf("taco-settings")); // TacoSpigot - load config before we load libraries to allow access while loading System.out.println("Loading libraries, please wait..."); MinecraftServer.main(options); diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/Overridden.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/Overridden.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/Overridden.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/Overridden.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/TrigMath.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/TrigMath.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/TrigMath.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/TrigMath.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftBanner.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftBanner.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftBanner.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftBanner.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftBeacon.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftBeacon.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftBeacon.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftBeacon.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftBrewingStand.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftBrewingStand.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftBrewingStand.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftBrewingStand.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftChest.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftChest.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftChest.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftChest.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftCommandBlock.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftCommandBlock.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftCommandBlock.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftCommandBlock.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftCreatureSpawner.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftCreatureSpawner.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftCreatureSpawner.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftCreatureSpawner.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftDispenser.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftDispenser.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftDispenser.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftDispenser.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftDropper.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftDropper.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftDropper.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftDropper.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftFurnace.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftFurnace.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftFurnace.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftFurnace.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftHopper.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftHopper.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftHopper.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftHopper.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftJukebox.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftJukebox.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftJukebox.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftJukebox.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftNoteBlock.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftNoteBlock.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftNoteBlock.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftNoteBlock.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftSign.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftSign.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftSign.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftSign.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftSkull.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftSkull.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftSkull.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/block/CraftSkull.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/chunkio/ChunkIOExecutor.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/chunkio/ChunkIOExecutor.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/chunkio/ChunkIOExecutor.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/chunkio/ChunkIOExecutor.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/chunkio/ChunkIOProvider.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/chunkio/ChunkIOProvider.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/chunkio/ChunkIOProvider.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/chunkio/ChunkIOProvider.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/chunkio/QueuedChunk.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/chunkio/QueuedChunk.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/chunkio/QueuedChunk.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/chunkio/QueuedChunk.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/command/ColouredConsoleSender.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/command/ColouredConsoleSender.java similarity index 94% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/command/ColouredConsoleSender.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/command/ColouredConsoleSender.java index b4e2fe5..db13671 100644 --- a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/command/ColouredConsoleSender.java +++ b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/command/ColouredConsoleSender.java @@ -5,16 +5,16 @@ import java.util.Map; import org.fusesource.jansi.Ansi; import org.fusesource.jansi.Ansi.Attribute; -import jline.Terminal; +//import jline.Terminal; // PandaSpigot - comment out import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.ConsoleCommandSender; import org.bukkit.craftbukkit.CraftServer; -public class ColouredConsoleSender extends CraftConsoleCommandSender { +public class ColouredConsoleSender /*extends CraftConsoleCommandSender */{/* // PandaSpigot - disable private final Terminal terminal; - private final Map replacements = new EnumMap<>(ChatColor.class); + private final Map replacements = new EnumMap(ChatColor.class); private final ChatColor[] colors = ChatColor.values(); protected ColouredConsoleSender() { @@ -71,4 +71,4 @@ public class ColouredConsoleSender extends CraftConsoleCommandSender { return new ColouredConsoleSender(); } } -} +*/} // PandaSpigot diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java similarity index 88% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java index 7dc9f53..aba1be1 100644 --- a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java +++ b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java @@ -7,9 +7,9 @@ import java.util.logging.Level; import org.bukkit.craftbukkit.CraftServer; import org.bukkit.craftbukkit.util.Waitable; -import jline.console.completer.Completer; +//import jline.console.completer.Completer; // PandaSpigot - Remove jline2 import -public class ConsoleCommandCompleter implements Completer { +public class ConsoleCommandCompleter /*implements Completer*/ { // PandaSpigot - This class is no longer used private final CraftServer server; public ConsoleCommandCompleter(CraftServer server) { diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/command/CraftBlockCommandSender.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/command/CraftBlockCommandSender.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/command/CraftBlockCommandSender.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/command/CraftBlockCommandSender.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/command/CraftConsoleCommandSender.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/command/CraftConsoleCommandSender.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/command/CraftConsoleCommandSender.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/command/CraftConsoleCommandSender.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/command/CraftRemoteConsoleCommandSender.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/command/CraftRemoteConsoleCommandSender.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/command/CraftRemoteConsoleCommandSender.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/command/CraftRemoteConsoleCommandSender.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/command/ProxiedNativeCommandSender.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/command/ProxiedNativeCommandSender.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/command/ProxiedNativeCommandSender.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/command/ProxiedNativeCommandSender.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/command/ServerCommandSender.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/command/ServerCommandSender.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/command/ServerCommandSender.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/command/ServerCommandSender.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/command/VanillaCommandWrapper.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/command/VanillaCommandWrapper.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/command/VanillaCommandWrapper.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/command/VanillaCommandWrapper.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/conversations/ConversationTracker.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/conversations/ConversationTracker.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/conversations/ConversationTracker.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/conversations/ConversationTracker.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/AbstractProjectile.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/AbstractProjectile.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/AbstractProjectile.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/AbstractProjectile.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftAgeable.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftAgeable.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftAgeable.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftAgeable.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftAmbient.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftAmbient.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftAmbient.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftAmbient.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftAnimals.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftAnimals.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftAnimals.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftAnimals.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftArrow.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftArrow.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftArrow.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftArrow.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftBat.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftBat.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftBat.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftBat.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftBlaze.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftBlaze.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftBlaze.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftBlaze.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftBoat.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftBoat.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftBoat.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftBoat.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftCaveSpider.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftCaveSpider.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftCaveSpider.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftCaveSpider.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftChicken.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftChicken.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftChicken.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftChicken.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftComplexLivingEntity.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftComplexLivingEntity.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftComplexLivingEntity.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftComplexLivingEntity.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftComplexPart.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftComplexPart.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftComplexPart.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftComplexPart.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftCow.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftCow.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftCow.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftCow.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftCreature.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftCreature.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftCreature.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftCreature.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftCreeper.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftCreeper.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftCreeper.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftCreeper.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftEgg.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftEgg.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftEgg.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftEgg.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderCrystal.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderCrystal.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderCrystal.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderCrystal.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragon.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragon.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragon.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragon.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragonPart.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragonPart.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragonPart.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragonPart.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderPearl.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderPearl.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderPearl.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderPearl.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderSignal.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderSignal.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderSignal.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderSignal.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderman.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderman.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderman.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderman.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftEndermite.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftEndermite.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftEndermite.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftEndermite.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftExperienceOrb.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftExperienceOrb.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftExperienceOrb.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftExperienceOrb.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingSand.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingSand.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingSand.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingSand.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftFireball.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftFireball.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftFireball.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftFireball.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftFish.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftFish.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftFish.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftFish.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftFlying.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftFlying.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftFlying.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftFlying.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftGhast.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftGhast.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftGhast.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftGhast.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftGiant.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftGiant.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftGiant.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftGiant.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftGolem.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftGolem.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftGolem.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftGolem.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftGuardian.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftGuardian.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftGuardian.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftGuardian.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftHanging.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftHanging.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftHanging.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftHanging.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftHorse.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftHorse.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftHorse.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftHorse.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftIronGolem.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftIronGolem.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftIronGolem.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftIronGolem.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftLargeFireball.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftLargeFireball.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftLargeFireball.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftLargeFireball.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftLeash.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftLeash.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftLeash.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftLeash.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftLightningStrike.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftLightningStrike.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftLightningStrike.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftLightningStrike.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMagmaCube.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMagmaCube.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMagmaCube.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMagmaCube.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecart.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecart.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecart.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecart.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartChest.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartChest.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartChest.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartChest.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartCommand.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartCommand.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartCommand.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartCommand.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartFurnace.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartFurnace.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartFurnace.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartFurnace.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartHopper.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartHopper.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartHopper.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartHopper.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartMobSpawner.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartMobSpawner.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartMobSpawner.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartMobSpawner.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartRideable.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartRideable.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartRideable.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartRideable.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartTNT.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartTNT.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartTNT.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartTNT.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMonster.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMonster.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMonster.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMonster.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMushroomCow.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMushroomCow.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMushroomCow.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftMushroomCow.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftOcelot.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftOcelot.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftOcelot.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftOcelot.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftPainting.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftPainting.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftPainting.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftPainting.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftPig.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftPig.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftPig.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftPig.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftPigZombie.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftPigZombie.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftPigZombie.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftPigZombie.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftProjectile.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftProjectile.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftProjectile.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftProjectile.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftRabbit.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftRabbit.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftRabbit.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftRabbit.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftSheep.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftSheep.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftSheep.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftSheep.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftSilverfish.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftSilverfish.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftSilverfish.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftSilverfish.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeleton.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeleton.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeleton.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeleton.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftSmallFireball.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftSmallFireball.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftSmallFireball.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftSmallFireball.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowball.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowball.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowball.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowball.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftSpider.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftSpider.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftSpider.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftSpider.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftSquid.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftSquid.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftSquid.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftSquid.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftTameableAnimal.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftTameableAnimal.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftTameableAnimal.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftTameableAnimal.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownExpBottle.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownExpBottle.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownExpBottle.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownExpBottle.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownPotion.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownPotion.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownPotion.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownPotion.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftVehicle.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftVehicle.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftVehicle.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftVehicle.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftWaterMob.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftWaterMob.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftWaterMob.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftWaterMob.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftWeather.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftWeather.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftWeather.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftWeather.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftWitherSkull.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftWitherSkull.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftWitherSkull.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftWitherSkull.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftZombie.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftZombie.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftZombie.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/entity/CraftZombie.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/generator/CraftChunkData.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/generator/CraftChunkData.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/generator/CraftChunkData.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/generator/CraftChunkData.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/generator/CustomChunkGenerator.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/generator/CustomChunkGenerator.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/generator/CustomChunkGenerator.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/generator/CustomChunkGenerator.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/generator/InternalChunkGenerator.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/generator/InternalChunkGenerator.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/generator/InternalChunkGenerator.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/generator/InternalChunkGenerator.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/generator/NetherChunkGenerator.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/generator/NetherChunkGenerator.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/generator/NetherChunkGenerator.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/generator/NetherChunkGenerator.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/generator/NormalChunkGenerator.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/generator/NormalChunkGenerator.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/generator/NormalChunkGenerator.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/generator/NormalChunkGenerator.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/generator/SkyLandsChunkGenerator.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/generator/SkyLandsChunkGenerator.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/generator/SkyLandsChunkGenerator.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/generator/SkyLandsChunkGenerator.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/help/CommandAliasHelpTopic.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/help/CommandAliasHelpTopic.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/help/CommandAliasHelpTopic.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/help/CommandAliasHelpTopic.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/help/CustomHelpTopic.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/help/CustomHelpTopic.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/help/CustomHelpTopic.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/help/CustomHelpTopic.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/help/CustomIndexHelpTopic.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/help/CustomIndexHelpTopic.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/help/CustomIndexHelpTopic.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/help/CustomIndexHelpTopic.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/help/HelpTopicAmendment.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/help/HelpTopicAmendment.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/help/HelpTopicAmendment.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/help/HelpTopicAmendment.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/help/HelpYamlReader.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/help/HelpYamlReader.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/help/HelpYamlReader.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/help/HelpYamlReader.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/help/MultipleCommandAliasHelpTopic.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/help/MultipleCommandAliasHelpTopic.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/help/MultipleCommandAliasHelpTopic.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/help/MultipleCommandAliasHelpTopic.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/help/MultipleCommandAliasHelpTopicFactory.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/help/MultipleCommandAliasHelpTopicFactory.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/help/MultipleCommandAliasHelpTopicFactory.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/help/MultipleCommandAliasHelpTopicFactory.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/help/SimpleHelpMap.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/help/SimpleHelpMap.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/help/SimpleHelpMap.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/help/SimpleHelpMap.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftEntityEquipment.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftEntityEquipment.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftEntityEquipment.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftEntityEquipment.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftFurnaceRecipe.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftFurnaceRecipe.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftFurnaceRecipe.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftFurnaceRecipe.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryBeacon.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryBeacon.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryBeacon.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryBeacon.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryBrewer.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryBrewer.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryBrewer.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryBrewer.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryCrafting.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryCrafting.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryCrafting.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryCrafting.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryCustom.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryCustom.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryCustom.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryCustom.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryDoubleChest.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryDoubleChest.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryDoubleChest.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryDoubleChest.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryEnchanting.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryEnchanting.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryEnchanting.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryEnchanting.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryFurnace.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryFurnace.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryFurnace.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryFurnace.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryHorse.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryHorse.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryHorse.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryHorse.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryMerchant.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryMerchant.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryMerchant.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryMerchant.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryPlayer.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryPlayer.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryPlayer.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryPlayer.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryView.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryView.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryView.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryView.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBanner.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBanner.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBanner.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBanner.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBlockState.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBlockState.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBlockState.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBlockState.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBook.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBook.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBook.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBook.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBookSigned.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBookSigned.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBookSigned.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBookSigned.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaCharge.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaCharge.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaCharge.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaCharge.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaEnchantedBook.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaEnchantedBook.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaEnchantedBook.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaEnchantedBook.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaFirework.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaFirework.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaFirework.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaFirework.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaLeatherArmor.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaLeatherArmor.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaLeatherArmor.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaLeatherArmor.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaMap.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaMap.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaMap.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaMap.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaPotion.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaPotion.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaPotion.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaPotion.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSkull.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSkull.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSkull.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSkull.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftRecipe.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftRecipe.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftRecipe.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftRecipe.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftShapedRecipe.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftShapedRecipe.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftShapedRecipe.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftShapedRecipe.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftShapelessRecipe.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftShapelessRecipe.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftShapelessRecipe.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/CraftShapelessRecipe.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/InventoryIterator.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/InventoryIterator.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/InventoryIterator.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/InventoryIterator.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/InventoryWrapper.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/InventoryWrapper.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/InventoryWrapper.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/InventoryWrapper.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/RecipeIterator.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/RecipeIterator.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/RecipeIterator.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/inventory/RecipeIterator.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/map/CraftMapCanvas.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/map/CraftMapCanvas.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/map/CraftMapCanvas.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/map/CraftMapCanvas.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/map/CraftMapRenderer.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/map/CraftMapRenderer.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/map/CraftMapRenderer.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/map/CraftMapRenderer.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/map/CraftMapView.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/map/CraftMapView.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/map/CraftMapView.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/map/CraftMapView.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/map/RenderData.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/map/RenderData.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/map/RenderData.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/map/RenderData.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/metadata/BlockMetadataStore.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/metadata/BlockMetadataStore.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/metadata/BlockMetadataStore.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/metadata/BlockMetadataStore.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/metadata/EntityMetadataStore.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/metadata/EntityMetadataStore.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/metadata/EntityMetadataStore.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/metadata/EntityMetadataStore.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/metadata/PlayerMetadataStore.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/metadata/PlayerMetadataStore.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/metadata/PlayerMetadataStore.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/metadata/PlayerMetadataStore.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/metadata/SpecializedBlockMetadataStore.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/metadata/SpecializedBlockMetadataStore.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/metadata/SpecializedBlockMetadataStore.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/metadata/SpecializedBlockMetadataStore.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/metadata/WorldMetadataStore.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/metadata/WorldMetadataStore.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/metadata/WorldMetadataStore.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/metadata/WorldMetadataStore.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/potion/CraftPotionBrewer.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/potion/CraftPotionBrewer.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/potion/CraftPotionBrewer.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/potion/CraftPotionBrewer.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/potion/CraftPotionEffectType.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/potion/CraftPotionEffectType.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/potion/CraftPotionEffectType.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/potion/CraftPotionEffectType.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/projectiles/CraftBlockProjectileSource.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/projectiles/CraftBlockProjectileSource.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/projectiles/CraftBlockProjectileSource.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/projectiles/CraftBlockProjectileSource.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/scheduler/CraftAsyncDebugger.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/scheduler/CraftAsyncDebugger.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/scheduler/CraftAsyncDebugger.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/scheduler/CraftAsyncDebugger.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/scheduler/CraftAsyncScheduler.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/scheduler/CraftAsyncScheduler.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/scheduler/CraftAsyncScheduler.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/scheduler/CraftAsyncScheduler.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/scheduler/CraftAsyncTask.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/scheduler/CraftAsyncTask.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/scheduler/CraftAsyncTask.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/scheduler/CraftAsyncTask.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/scheduler/CraftFuture.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/scheduler/CraftFuture.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/scheduler/CraftFuture.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/scheduler/CraftFuture.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/scheduler/CraftTask.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/scheduler/CraftTask.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/scheduler/CraftTask.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/scheduler/CraftTask.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftCriteria.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftCriteria.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftCriteria.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftCriteria.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftObjective.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftObjective.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftObjective.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftObjective.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScore.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScore.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScore.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScore.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboard.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboard.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboard.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboard.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardComponent.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardComponent.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardComponent.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardComponent.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardTranslations.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardTranslations.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardTranslations.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardTranslations.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftTeam.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftTeam.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftTeam.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftTeam.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/AsynchronousExecutor.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/AsynchronousExecutor.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/AsynchronousExecutor.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/AsynchronousExecutor.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/BlockStateListPopulator.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/BlockStateListPopulator.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/BlockStateListPopulator.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/BlockStateListPopulator.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/CraftDamageSource.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/CraftDamageSource.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/CraftDamageSource.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/CraftDamageSource.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/CraftIconCache.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/CraftIconCache.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/CraftIconCache.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/CraftIconCache.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/CraftPotionUtil.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/CraftPotionUtil.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/CraftPotionUtil.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/CraftPotionUtil.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/DatFileFilter.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/DatFileFilter.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/DatFileFilter.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/DatFileFilter.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/ForwardLogHandler.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/ForwardLogHandler.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/ForwardLogHandler.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/ForwardLogHandler.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/HashTreeSet.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/HashTreeSet.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/HashTreeSet.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/HashTreeSet.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/LazyHashSet.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/LazyHashSet.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/LazyHashSet.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/LazyHashSet.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/LazyPlayerSet.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/LazyPlayerSet.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/LazyPlayerSet.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/LazyPlayerSet.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/LongHash.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/LongHash.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/LongHash.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/LongHash.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/LongHashSet.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/LongHashSet.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/LongHashSet.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/LongHashSet.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/LongObjectHashMap.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/LongObjectHashMap.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/LongObjectHashMap.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/LongObjectHashMap.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/MojangNameLookup.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/MojangNameLookup.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/MojangNameLookup.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/MojangNameLookup.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/ServerShutdownThread.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/ServerShutdownThread.java similarity index 79% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/ServerShutdownThread.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/ServerShutdownThread.java index 35778e2..4425c5c 100644 --- a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/ServerShutdownThread.java +++ b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/ServerShutdownThread.java @@ -2,6 +2,7 @@ package org.bukkit.craftbukkit.util; import net.minecraft.server.ExceptionWorldConflict; import net.minecraft.server.MinecraftServer; +import net.minecrell.terminalconsole.TerminalConsoleAppender; public class ServerShutdownThread extends Thread { private final MinecraftServer server; @@ -18,7 +19,7 @@ public class ServerShutdownThread extends Thread { ex.printStackTrace(); } finally { try { - server.reader.getTerminal().restore(); + TerminalConsoleAppender.close(); // PandaSpigot - Use TerminalConsoleAppender } catch (Exception ignored) { } } diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/ShortConsoleLogFormatter.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/ShortConsoleLogFormatter.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/ShortConsoleLogFormatter.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/ShortConsoleLogFormatter.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/StructureGrowDelegate.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/StructureGrowDelegate.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/StructureGrowDelegate.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/StructureGrowDelegate.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/TerminalConsoleWriterThread.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/TerminalConsoleWriterThread.java similarity index 89% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/TerminalConsoleWriterThread.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/TerminalConsoleWriterThread.java index 772f730..efb35c7 100644 --- a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/TerminalConsoleWriterThread.java +++ b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/TerminalConsoleWriterThread.java @@ -4,11 +4,11 @@ import java.io.IOException; import java.io.OutputStream; import java.util.logging.Level; import java.util.logging.Logger; -import jline.console.ConsoleReader; +//import jline.console.ConsoleReader; // PandaSpigot - comment out import com.mojang.util.QueueLogAppender; import org.bukkit.craftbukkit.Main; -public class TerminalConsoleWriterThread implements Runnable { +public class TerminalConsoleWriterThread /*implements Runnable */{/* // PandaSpigot - disable final private ConsoleReader reader; final private OutputStream output; @@ -49,4 +49,4 @@ public class TerminalConsoleWriterThread implements Runnable { } } } -} +*/} // PandaSpigot diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/UnsafeList.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/UnsafeList.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/UnsafeList.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/UnsafeList.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/Versioning.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/Versioning.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/Versioning.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/Versioning.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/Waitable.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/Waitable.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/Waitable.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/Waitable.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/WeakCollection.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/WeakCollection.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/WeakCollection.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/WeakCollection.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/permissions/CommandPermissions.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/permissions/CommandPermissions.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/permissions/CommandPermissions.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/permissions/CommandPermissions.java diff --git a/TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/permissions/CraftDefaultPermissions.java b/eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/permissions/CraftDefaultPermissions.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/permissions/CraftDefaultPermissions.java rename to eSpigot-Server/src/main/java/org/bukkit/craftbukkit/util/permissions/CraftDefaultPermissions.java diff --git a/TacoSpigot-Server/src/main/java/org/github/paperspigot/PaperSpigotConfig.java b/eSpigot-Server/src/main/java/org/github/paperspigot/PaperSpigotConfig.java similarity index 87% rename from TacoSpigot-Server/src/main/java/org/github/paperspigot/PaperSpigotConfig.java rename to eSpigot-Server/src/main/java/org/github/paperspigot/PaperSpigotConfig.java index 2ca1479..847a456 100644 --- a/TacoSpigot-Server/src/main/java/org/github/paperspigot/PaperSpigotConfig.java +++ b/eSpigot-Server/src/main/java/org/github/paperspigot/PaperSpigotConfig.java @@ -183,38 +183,23 @@ public class PaperSpigotConfig stackableWaterBuckets = getBoolean( "stackable-buckets.water", false ); stackableMilkBuckets = getBoolean( "stackable-buckets.milk", false ); - Field maxStack; - - try { - maxStack = Material.class.getDeclaredField("maxStack"); - maxStack.setAccessible(true); - - Field modifiers = Field.class.getDeclaredField("modifiers"); - modifiers.setAccessible(true); - modifiers.setInt(maxStack, maxStack.getModifiers() & ~Modifier.FINAL); - } catch (Exception e) { - e.printStackTrace(); - return; + // PandaSpigot start - Remove hacky stackable buckets code that used reflection + int size = Material.BUCKET.getMaxStackSize(); + if (stackableLavaBuckets) { + Material.LAVA_BUCKET.setMaxStackSize(size); + Items.LAVA_BUCKET.c(size); } - try { - if (stackableLavaBuckets) { - maxStack.set(Material.LAVA_BUCKET, Material.BUCKET.getMaxStackSize()); - Items.LAVA_BUCKET.c(Material.BUCKET.getMaxStackSize()); - } - - if (stackableWaterBuckets) { - maxStack.set(Material.WATER_BUCKET, Material.BUCKET.getMaxStackSize()); - Items.WATER_BUCKET.c(Material.BUCKET.getMaxStackSize()); - } - - if (stackableMilkBuckets) { - maxStack.set(Material.MILK_BUCKET, Material.BUCKET.getMaxStackSize()); - Items.MILK_BUCKET.c(Material.BUCKET.getMaxStackSize()); - } - } catch (Exception e) { - e.printStackTrace(); + if (stackableWaterBuckets) { + Material.WATER_BUCKET.setMaxStackSize(size); + Items.WATER_BUCKET.c(size); } + + if (stackableMilkBuckets) { + Material.MILK_BUCKET.setMaxStackSize(size); + Items.MILK_BUCKET.c(size); + } + // PandaSpigot end } public static boolean warnForExcessiveVelocity; @@ -284,9 +269,4 @@ public class PaperSpigotConfig private static void regionCompressionAlgorithm() { regionCompressionAlgorithm = RegionFile.CompressionAlgorithm.valueOf(getString("region-compression-algo", "ZLIB").toUpperCase(Locale.ROOT)); } - - public static boolean kickChatMessageLength; - private static void kickChatMessageLength() { - kickChatMessageLength = getBoolean("kick-chat-message-length", false); - } } diff --git a/TacoSpigot-Server/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/eSpigot-Server/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java rename to eSpigot-Server/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java diff --git a/TacoSpigot-Server/src/main/java/org/github/paperspigot/ServerSchedulerReportingWrapper.java b/eSpigot-Server/src/main/java/org/github/paperspigot/ServerSchedulerReportingWrapper.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/github/paperspigot/ServerSchedulerReportingWrapper.java rename to eSpigot-Server/src/main/java/org/github/paperspigot/ServerSchedulerReportingWrapper.java diff --git a/TacoSpigot-Server/src/main/java/org/spigotmc/ActivationRange.java b/eSpigot-Server/src/main/java/org/spigotmc/ActivationRange.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/spigotmc/ActivationRange.java rename to eSpigot-Server/src/main/java/org/spigotmc/ActivationRange.java diff --git a/TacoSpigot-Server/src/main/java/org/spigotmc/AntiXray.java b/eSpigot-Server/src/main/java/org/spigotmc/AntiXray.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/spigotmc/AntiXray.java rename to eSpigot-Server/src/main/java/org/spigotmc/AntiXray.java diff --git a/TacoSpigot-Server/src/main/java/org/spigotmc/AsyncCatcher.java b/eSpigot-Server/src/main/java/org/spigotmc/AsyncCatcher.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/spigotmc/AsyncCatcher.java rename to eSpigot-Server/src/main/java/org/spigotmc/AsyncCatcher.java diff --git a/TacoSpigot-Server/src/main/java/org/spigotmc/CaseInsensitiveHashingStrategy.java b/eSpigot-Server/src/main/java/org/spigotmc/CaseInsensitiveHashingStrategy.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/spigotmc/CaseInsensitiveHashingStrategy.java rename to eSpigot-Server/src/main/java/org/spigotmc/CaseInsensitiveHashingStrategy.java diff --git a/TacoSpigot-Server/src/main/java/org/spigotmc/CaseInsensitiveMap.java b/eSpigot-Server/src/main/java/org/spigotmc/CaseInsensitiveMap.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/spigotmc/CaseInsensitiveMap.java rename to eSpigot-Server/src/main/java/org/spigotmc/CaseInsensitiveMap.java diff --git a/TacoSpigot-Server/src/main/java/org/spigotmc/LimitStream.java b/eSpigot-Server/src/main/java/org/spigotmc/LimitStream.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/spigotmc/LimitStream.java rename to eSpigot-Server/src/main/java/org/spigotmc/LimitStream.java diff --git a/TacoSpigot-Server/src/main/java/org/spigotmc/Metrics.java b/eSpigot-Server/src/main/java/org/spigotmc/Metrics.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/spigotmc/Metrics.java rename to eSpigot-Server/src/main/java/org/spigotmc/Metrics.java diff --git a/TacoSpigot-Server/src/main/java/org/spigotmc/RestartCommand.java b/eSpigot-Server/src/main/java/org/spigotmc/RestartCommand.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/spigotmc/RestartCommand.java rename to eSpigot-Server/src/main/java/org/spigotmc/RestartCommand.java diff --git a/TacoSpigot-Server/src/main/java/org/spigotmc/SneakyThrow.java b/eSpigot-Server/src/main/java/org/spigotmc/SneakyThrow.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/spigotmc/SneakyThrow.java rename to eSpigot-Server/src/main/java/org/spigotmc/SneakyThrow.java diff --git a/TacoSpigot-Server/src/main/java/org/spigotmc/SpigotConfig.java b/eSpigot-Server/src/main/java/org/spigotmc/SpigotConfig.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/spigotmc/SpigotConfig.java rename to eSpigot-Server/src/main/java/org/spigotmc/SpigotConfig.java diff --git a/TacoSpigot-Server/src/main/java/org/spigotmc/SpigotWorldConfig.java b/eSpigot-Server/src/main/java/org/spigotmc/SpigotWorldConfig.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/spigotmc/SpigotWorldConfig.java rename to eSpigot-Server/src/main/java/org/spigotmc/SpigotWorldConfig.java diff --git a/TacoSpigot-Server/src/main/java/org/spigotmc/TickLimiter.java b/eSpigot-Server/src/main/java/org/spigotmc/TickLimiter.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/spigotmc/TickLimiter.java rename to eSpigot-Server/src/main/java/org/spigotmc/TickLimiter.java diff --git a/TacoSpigot-Server/src/main/java/org/spigotmc/TrackingRange.java b/eSpigot-Server/src/main/java/org/spigotmc/TrackingRange.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/spigotmc/TrackingRange.java rename to eSpigot-Server/src/main/java/org/spigotmc/TrackingRange.java diff --git a/TacoSpigot-Server/src/main/java/org/spigotmc/ValidateUtils.java b/eSpigot-Server/src/main/java/org/spigotmc/ValidateUtils.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/spigotmc/ValidateUtils.java rename to eSpigot-Server/src/main/java/org/spigotmc/ValidateUtils.java diff --git a/TacoSpigot-Server/src/main/java/org/spigotmc/WatchdogThread.java b/eSpigot-Server/src/main/java/org/spigotmc/WatchdogThread.java similarity index 100% rename from TacoSpigot-Server/src/main/java/org/spigotmc/WatchdogThread.java rename to eSpigot-Server/src/main/java/org/spigotmc/WatchdogThread.java diff --git a/eSpigot-Server/src/main/resources/assets/minecraft/lang/en_US.lang b/eSpigot-Server/src/main/resources/assets/minecraft/lang/en_US.lang new file mode 100644 index 0000000..e2abdde --- /dev/null +++ b/eSpigot-Server/src/main/resources/assets/minecraft/lang/en_US.lang @@ -0,0 +1,2678 @@ + +language.name=English +language.region=US +language.code=en_US + +gui.done=Done +gui.cancel=Cancel +gui.back=Back +gui.toTitle=Back to title screen +gui.toMenu=Back to server list +gui.up=Up +gui.down=Down +gui.yes=Yes +gui.no=No +gui.none=None +gui.all=All + +translation.test.none=Hello, world! +translation.test.complex=Prefix, %s%2$s again %s and %1$s lastly %s and also %1$s again! +translation.test.escape=%%s %%%s %%%%s %%%%%s +translation.test.invalid=hi % +translation.test.invalid2=hi % s +translation.test.args=%s %s +translation.test.world=world + +menu.game=Game menu +menu.singleplayer=Singleplayer +menu.multiplayer=Multiplayer +menu.online=Minecraft Realms +menu.options=Options... +menu.quit=Quit Game +menu.returnToMenu=Save and Quit to Title +menu.disconnect=Disconnect +menu.returnToGame=Back to Game +menu.switchingLevel=Switching worlds +menu.generatingLevel=Generating world +menu.loadingLevel=Loading world +menu.generatingTerrain=Building terrain +menu.convertingLevel=Converting world +menu.simulating=Simulating the world for a bit +menu.respawning=Respawning +menu.shareToLan=Open to LAN + +selectWorld.title=Select World +selectWorld.empty=empty +selectWorld.world=World +selectWorld.select=Play Selected World +selectWorld.create=Create New World +selectWorld.recreate=Re-Create +selectWorld.createDemo=Play New Demo World +selectWorld.delete=Delete +selectWorld.rename=Rename +selectWorld.deleteQuestion=Are you sure you want to delete this world? +selectWorld.deleteWarning=will be lost forever! (A long time!) +selectWorld.deleteButton=Delete +selectWorld.renameButton=Rename +selectWorld.renameTitle=Rename World +selectWorld.conversion=Must be converted! +selectWorld.newWorld=New World +selectWorld.newWorld.copyOf=Copy of %s +selectWorld.enterName=World Name +selectWorld.resultFolder=Will be saved in: +selectWorld.enterSeed=Seed for the World Generator +selectWorld.seedInfo=Leave blank for a random seed +selectWorld.cheats=Cheats +selectWorld.customizeType=Customize + +createWorld.customize.presets=Presets +createWorld.customize.presets.title=Select a Preset +createWorld.customize.presets.select=Use Preset +createWorld.customize.presets.share=Want to share your preset with someone? Use the below box! +createWorld.customize.presets.list=Alternatively, here's some we made earlier! +createWorld.customize.flat.title=Superflat Customization +createWorld.customize.flat.tile=Layer Material +createWorld.customize.flat.height=Height +createWorld.customize.flat.addLayer=Add Layer +createWorld.customize.flat.editLayer=Edit Layer +createWorld.customize.flat.removeLayer=Remove Layer +createWorld.customize.flat.layer.top=Top - %d +createWorld.customize.flat.layer=%d +createWorld.customize.flat.layer.bottom=Bottom - %d + +createWorld.customize.custom.page0=Basic Settings +createWorld.customize.custom.page1=Ore Settings +createWorld.customize.custom.page2=Advanced Settings (Expert Users Only!) +createWorld.customize.custom.page3=Extra Advanced Settings (Expert Users Only!) +createWorld.customize.custom.randomize=Randomize +createWorld.customize.custom.prev=Previous Page +createWorld.customize.custom.next=Next Page +createWorld.customize.custom.defaults=Defaults +createWorld.customize.custom.confirm1=This will overwrite your current +createWorld.customize.custom.confirm2=settings and cannot be undone. +createWorld.customize.custom.confirmTitle=Warning! +createWorld.customize.custom.mainNoiseScaleX=Main Noise Scale X +createWorld.customize.custom.mainNoiseScaleY=Main Noise Scale Y +createWorld.customize.custom.mainNoiseScaleZ=Main Noise Scale Z +createWorld.customize.custom.depthNoiseScaleX=Depth Noise Scale X +createWorld.customize.custom.depthNoiseScaleZ=Depth Noise Scale Z +createWorld.customize.custom.depthNoiseScaleExponent=Depth Noise Exponent +createWorld.customize.custom.baseSize=Depth Base Size +createWorld.customize.custom.coordinateScale=Coordinate Scale +createWorld.customize.custom.heightScale=Height Scale +createWorld.customize.custom.stretchY=Height Stretch +createWorld.customize.custom.upperLimitScale=Upper Limit Scale +createWorld.customize.custom.lowerLimitScale=Lower Limit Scale +createWorld.customize.custom.biomeDepthWeight=Biome Depth Weight +createWorld.customize.custom.biomeDepthOffset=Biome Depth Offset +createWorld.customize.custom.biomeScaleWeight=Biome Scale Weight +createWorld.customize.custom.biomeScaleOffset=Biome Scale Offset +createWorld.customize.custom.seaLevel=Sea Level +createWorld.customize.custom.useCaves=Caves +createWorld.customize.custom.useStrongholds=Strongholds +createWorld.customize.custom.useVillages=Villages +createWorld.customize.custom.useMineShafts=Mineshafts +createWorld.customize.custom.useTemples=Temples +createWorld.customize.custom.useMonuments=Ocean Monuments +createWorld.customize.custom.useRavines=Ravines +createWorld.customize.custom.useDungeons=Dungeons +createWorld.customize.custom.dungeonChance=Dungeon Count +createWorld.customize.custom.useWaterLakes=Water Lakes +createWorld.customize.custom.waterLakeChance=Water Lake Rarity +createWorld.customize.custom.useLavaLakes=Lava Lakes +createWorld.customize.custom.lavaLakeChance=Lava Lake Rarity +createWorld.customize.custom.useLavaOceans=Lava Oceans +createWorld.customize.custom.fixedBiome=Biome +createWorld.customize.custom.biomeSize=Biome Size +createWorld.customize.custom.riverSize=River Size + +createWorld.customize.custom.size= Spawn Size +createWorld.customize.custom.count= Spawn Tries +createWorld.customize.custom.minHeight= Min. Height +createWorld.customize.custom.maxHeight= Max. Height +createWorld.customize.custom.center= Center Height +createWorld.customize.custom.spread= Spread Height + +createWorld.customize.custom.presets.title=Customize World Presets +createWorld.customize.custom.presets=Presets +createWorld.customize.custom.preset.waterWorld=Water World +createWorld.customize.custom.preset.isleLand=Isle Land +createWorld.customize.custom.preset.caveDelight=Caver's Delight +createWorld.customize.custom.preset.mountains=Mountain Madness +createWorld.customize.custom.preset.drought=Drought +createWorld.customize.custom.preset.caveChaos=Caves of Chaos +createWorld.customize.custom.preset.goodLuck=Good Luck + +gameMode.survival=Survival Mode +gameMode.creative=Creative Mode +gameMode.adventure=Adventure Mode +gameMode.spectator=Spectator Mode +gameMode.hardcore=Hardcore Mode! +gameMode.changed=Your game mode has been updated + +selectWorld.gameMode=Game Mode +selectWorld.gameMode.survival=Survival +selectWorld.gameMode.survival.line1=Search for resources, crafting, gain +selectWorld.gameMode.survival.line2=levels, health and hunger +selectWorld.gameMode.creative=Creative +selectWorld.gameMode.creative.line1=Unlimited resources, free flying and +selectWorld.gameMode.creative.line2=destroy blocks instantly +selectWorld.gameMode.spectator=Spectator +selectWorld.gameMode.spectator.line1=You can look but don't touch +selectWorld.gameMode.spectator.line2= +selectWorld.gameMode.hardcore=Hardcore +selectWorld.gameMode.hardcore.line1=Same as survival mode, locked at hardest +selectWorld.gameMode.hardcore.line2=difficulty, and one life only +selectWorld.gameMode.adventure=Adventure +selectWorld.gameMode.adventure.line1=Same as survival mode, but blocks can't +selectWorld.gameMode.adventure.line2=be added or removed +selectWorld.moreWorldOptions=More World Options... +selectWorld.mapFeatures=Generate Structures: +selectWorld.mapFeatures.info=Villages, dungeons etc +selectWorld.mapType=World Type: +selectWorld.mapType.normal=Normal +selectWorld.allowCommands=Allow Cheats: +selectWorld.allowCommands.info=Commands like /gamemode, /xp +selectWorld.hardcoreMode=Hardcore: +selectWorld.hardcoreMode.info=World is deleted upon death +selectWorld.bonusItems=Bonus Chest: + +generator.default=Default +generator.flat=Superflat +generator.largeBiomes=Large Biomes +generator.amplified=AMPLIFIED +generator.customized=Customized +generator.debug_all_block_states=Debug Mode + +generator.amplified.info=Notice: Just for fun, requires beefy computer + +selectServer.title=Select Server +selectServer.empty=empty +selectServer.select=Join Server +selectServer.direct=Direct Connect +selectServer.edit=Edit +selectServer.delete=Delete +selectServer.add=Add server +selectServer.defaultName=Minecraft Server +selectServer.deleteQuestion=Are you sure you want to remove this server? +selectServer.deleteWarning=will be lost forever! (A long time!) +selectServer.deleteButton=Delete +selectServer.refresh=Refresh +selectServer.hiddenAddress=(Hidden) +addServer.title=Edit Server Info +addServer.enterName=Server Name +addServer.enterIp=Server Address +addServer.add=Done +addServer.hideAddress=Hide Address +addServer.resourcePack=Server Resource Packs +addServer.resourcePack.enabled=Enabled +addServer.resourcePack.disabled=Disabled +addServer.resourcePack.prompt=Prompt +lanServer.title=LAN World +lanServer.scanning=Scanning for games on your local network +lanServer.start=Start LAN World +lanServer.otherPlayers=Settings for Other Players +mcoServer.title=Minecraft Online World + +multiplayer.title=Play Multiplayer +multiplayer.connect=Connect +multiplayer.info1=Minecraft Multiplayer is currently not finished, but there +multiplayer.info2=is some buggy early testing going on. +multiplayer.ipinfo=Enter the IP of a server to connect to it: +multiplayer.texturePrompt.line1=This server recommends the use of a custom resource pack. +multiplayer.texturePrompt.line2=Would you like to download and install it automagically? +multiplayer.downloadingTerrain=Downloading terrain +multiplayer.downloadingStats=Downloading statistics & achievements... +multiplayer.stopSleeping=Leave Bed +multiplayer.player.joined=%s joined the game +multiplayer.player.joined.renamed=%s (formerly known as %s) joined the game +multiplayer.player.left=%s left the game + +chat.cannotSend=Cannot send chat message +chat.type.text=<%s> %s +chat.type.emote=* %s %s +chat.type.announcement=[%s] %s +chat.type.admin=[%s: %s] +chat.type.achievement=%s has just earned the achievement %s +chat.type.achievement.taken=%s has lost the achievement %s +chat.link.confirm=Are you sure you want to open the following website? +chat.link.warning=Never open links from people that you don't trust! +chat.copy=Copy to Clipboard +chat.link.confirmTrusted=Do you want to open this link or copy it to your clipboard? +chat.link.open=Open in browser + +chat.stream.text=(%s) <%s> %s +chat.stream.emote=(%s) * %s %s + +menu.playdemo=Play Demo World +menu.resetdemo=Reset Demo World + +demo.day.1=This demo will last five game days, do your best! +demo.day.2=Day Two +demo.day.3=Day Three +demo.day.4=Day Four +demo.day.5=This is your last day! +demo.day.warning=Your time is almost up! +demo.day.6=You have passed your fifth day, use F2 to save a screenshot of your creation +demo.reminder=The demo time has expired, buy the game to continue or start a new world! +demo.remainingTime=Remaining time: %s +demo.demoExpired=Demo time's up! +demo.help.movement=Use %1$s, %2$s, %3$s, %4$s and the mouse to move around +demo.help.movementShort=Move by pressing %1$s, %2$s, %3$s, %4$s +demo.help.movementMouse=Look around using the mouse +demo.help.jump=Jump by pressing %1$s +demo.help.inventory=Use %1$s to open your inventory +demo.help.title=Minecraft Demo Mode +demo.help.fullWrapped=This demo will last 5 ingame days (about 1 hour and 40 minutes of real time). Check the achievements for hints! Have fun! +demo.help.buy=Purchase Now! +demo.help.later=Continue Playing! + +connect.connecting=Connecting to the server... +connect.authorizing=Logging in... +connect.failed=Failed to connect to the server + +disconnect.genericReason=%s +disconnect.disconnected=Disconnected by Server +disconnect.lost=Connection Lost +disconnect.kicked=Was kicked from the game +disconnect.timeout=Timed out +disconnect.closed=Connection closed +disconnect.loginFailed=Failed to login +disconnect.loginFailedInfo=Failed to login: %s +disconnect.loginFailedInfo.serversUnavailable=The authentication servers are currently down for maintenance. +disconnect.loginFailedInfo.invalidSession=Invalid session (Try restarting your game) +disconnect.quitting=Quitting +disconnect.endOfStream=End of stream +disconnect.overflow=Buffer overflow +disconnect.spam=Kicked for spamming + +soundCategory.master=Master Volume +soundCategory.music=Music +soundCategory.record=Jukebox/Noteblocks +soundCategory.weather=Weather +soundCategory.hostile=Hostile Creatures +soundCategory.neutral=Friendly Creatures +soundCategory.player=Players +soundCategory.block=Blocks +soundCategory.ambient=Ambient/Environment + +record.nowPlaying=Now playing: %s + +options.off=OFF +options.on=ON +options.visible=Shown +options.hidden=Hidden +options.title=Options +options.controls=Controls... +options.video=Video Settings... +options.language=Language... +options.stream=Broadcast Settings... +options.sounds=Music & Sounds... +options.sounds.title=Music & Sound Options +options.languageWarning=Language translations may not be 100%% accurate +options.videoTitle=Video Settings +options.customizeTitle=Customize World Settings +options.music=Music +options.sound=Sound +options.invertMouse=Invert Mouse +options.fov=FOV +options.fov.min=Normal +options.fov.max=Quake Pro +options.saturation=Saturation +options.gamma=Brightness +options.gamma.min=Moody +options.gamma.max=Bright +options.sensitivity=Sensitivity +options.sensitivity.min=*yawn* +options.sensitivity.max=HYPERSPEED!!! +options.renderDistance=Render Distance +options.renderDistance.tiny=Tiny +options.renderDistance.short=Short +options.renderDistance.normal=Normal +options.renderDistance.far=Far +options.viewBobbing=View Bobbing +options.ao=Smooth Lighting +options.ao.off=OFF +options.ao.min=Minimum +options.ao.max=Maximum +options.anaglyph=3D Anaglyph +options.framerateLimit=Max Framerate +options.framerateLimit.max=Unlimited +options.difficulty=Difficulty +options.difficulty.peaceful=Peaceful +options.difficulty.easy=Easy +options.difficulty.normal=Normal +options.difficulty.hard=Hard +options.difficulty.hardcore=Hardcore +options.graphics=Graphics +options.graphics.fancy=Fancy +options.graphics.fast=Fast +options.guiScale=GUI Scale +options.guiScale.auto=Auto +options.guiScale.small=Small +options.guiScale.normal=Normal +options.guiScale.large=Large +options.advancedOpengl=Advanced OpenGL +options.fboEnable=Enable FBOs +options.postProcessEnable=Enable Post-Processing +options.renderClouds=Clouds +options.qualityButton=Video Quality Settings... +options.qualityVideoTitle=Video Quality Settings +options.performanceButton=Video Performance Settings... +options.performanceVideoTitle=Video Performance Settings +options.advancedButton=Advanced Video Settings... +options.advancedVideoTitle=Advanced Video Settings +options.postButton=Post-Processing Settings... +options.postVideoTitle=Post-Processing Settings +options.farWarning1=A 64 bit Java installation is recommended +options.farWarning2=for 'Far' render distance (you have 32 bit) +options.particles=Particles +options.particles.all=All +options.particles.decreased=Decreased +options.particles.minimal=Minimal +options.multiplayer.title=Multiplayer Settings... +options.chat.title=Chat Settings... +options.chat.visibility=Chat +options.chat.visibility.full=Shown +options.chat.visibility.system=Commands Only +options.chat.visibility.hidden=Hidden +options.chat.color=Colors +options.chat.opacity=Opacity +options.chat.links=Web Links +options.chat.links.prompt=Prompt on Links +options.chat.scale=Scale +options.chat.width=Width +options.chat.height.focused=Focused Height +options.chat.height.unfocused=Unfocused Height +options.skinCustomisation=Skin Customization... +options.skinCustomisation.title=Skin Customization +options.modelPart.cape=Cape +options.modelPart.hat=Hat +options.modelPart.jacket=Jacket +options.modelPart.left_sleeve=Left Sleeve +options.modelPart.right_sleeve=Right Sleeve +options.modelPart.left_pants_leg=Left Pants Leg +options.modelPart.right_pants_leg=Right Pants Leg +options.snooper=Allow Snooper +options.snooper.view=Snooper Settings... +options.snooper.title=Machine Specs Collection +options.snooper.desc=We want to collect information about your machine to help improve Minecraft by knowing what we can support and where the biggest problems are. All of this information is completely anonymous and viewable below. We promise we won't do anything bad with this data, but if you want to opt out then feel free to toggle it off! +options.resourcepack=Resource Packs... +options.fullscreen=Fullscreen +options.vsync=Use VSync +options.vbo=Use VBOs +options.touchscreen=Touchscreen Mode +options.blockAlternatives=Alternate Blocks +options.reducedDebugInfo=Reduced Debug Info +options.entityShadows=Entity Shadows + +options.mipmapLevels=Mipmap Levels +options.forceUnicodeFont=Force Unicode Font + +options.stream.title=Twitch Broadcast Settings +options.stream.bytesPerPixel=Quality +options.stream.micVolumne=Mic Volume +options.stream.micToggleBehavior=Push To +options.stream.mic_toggle.mute=Mute +options.stream.mic_toggle.talk=Talk +options.stream.systemVolume=System Volume +options.stream.kbps=Bandwidth +options.stream.fps=Framerate +options.stream.sendMetadata=Send Metadata +options.stream.compression=Compression +options.stream.compression.low=Low +options.stream.compression.medium=Medium +options.stream.compression.high=High +options.stream.estimation=Estimated resolution: %dx%d +options.stream.changes=You may need to restart your stream for these changes to take place. +options.stream.ingestSelection=Broadcast Server List +options.stream.ingest.title=Twitch Broadcast Servers +options.stream.ingest.reset=Reset Preference +options.stream.chat.title=Twitch Chat Settings +options.stream.chat.enabled=Enable +options.stream.chat.enabled.streaming=Whilst Streaming +options.stream.chat.enabled.always=Always +options.stream.chat.enabled.never=Never +options.stream.chat.userFilter=User Filter +options.stream.chat.userFilter.all=All Viewers +options.stream.chat.userFilter.subs=Subscribers +options.stream.chat.userFilter.mods=Moderators + +difficulty.lock.title=Lock World Difficulty +difficulty.lock.question=Are you sure you want to lock the difficulty of this world? This will set this world to always be %1$s, and you will never be able to change that again. + +title.oldgl1=Old graphics card detected; this may prevent you from +title.oldgl2=playing in the future as OpenGL 2.0 will be required. + +controls.title=Controls +controls.reset=Reset +controls.resetAll=Reset Keys + +key.sprint=Sprint +key.forward=Walk Forwards +key.left=Strafe Left +key.back=Walk Backwards +key.right=Strafe Right +key.jump=Jump +key.inventory=Inventory +key.drop=Drop Item +key.chat=Open Chat +key.sneak=Sneak +key.playerlist=List Players +key.attack=Attack/Destroy +key.use=Use Item/Place Block +key.pickItem=Pick Block +key.mouseButton=Button %1$s +key.command=Open Command +key.screenshot=Take Screenshot +key.togglePerspective=Toggle Perspective +key.smoothCamera=Toggle Cinematic Camera +key.fullscreen=Toggle Fullscreen +key.spectatorOutlines=Highlight Players (Spectators) +key.hotbar.1=Hotbar Slot 1 +key.hotbar.2=Hotbar Slot 2 +key.hotbar.3=Hotbar Slot 3 +key.hotbar.4=Hotbar Slot 4 +key.hotbar.5=Hotbar Slot 5 +key.hotbar.6=Hotbar Slot 6 +key.hotbar.7=Hotbar Slot 7 +key.hotbar.8=Hotbar Slot 8 +key.hotbar.9=Hotbar Slot 9 +key.streamStartStop=Start/Stop Stream +key.streamPauseUnpause=Pause/Unpause Stream +key.streamCommercial=Show Stream Commercials +key.streamToggleMic=Push To Talk/Mute + +key.categories.movement=Movement +key.categories.misc=Miscellaneous +key.categories.multiplayer=Multiplayer +key.categories.gameplay=Gameplay +key.categories.ui=Game Interface +key.categories.inventory=Inventory +key.categories.stream=Streaming + +resourcePack.openFolder=Open resource pack folder +resourcePack.title=Select Resource Packs +resourcePack.available.title=Available Resource Packs +resourcePack.selected.title=Selected Resource Packs +resourcePack.folderInfo=(Place resource pack files here) +resourcePack.incompatible=Incompatible +resourcePack.incompatible.old=(Made for an older version of Minecraft) +resourcePack.incompatible.new=(Made for a newer version of Minecraft) +resourcePack.incompatible.confirm.title=Are you sure you want to load this resource pack? +resourcePack.incompatible.confirm.old=This resource pack was made for an older version of Minecraft and may no longer work correctly. +resourcePack.incompatible.confirm.new=This resource pack was made for a newer version of Minecraft and may no longer work correctly. + +sign.edit=Edit sign message + +book.pageIndicator=Page %1$s of %2$s +book.byAuthor=by %1$s +book.signButton=Sign +book.editTitle=Enter Book Title: +book.finalizeButton=Sign and Close +book.finalizeWarning=Note! When you sign the book, it will no longer be editable. +book.generation.0=Original +book.generation.1=Copy of original +book.generation.2=Copy of a copy +book.generation.3=Tattered + +merchant.deprecated=Trade something else to unlock! + +tile.barrier.name=Barrier +tile.stone.stone.name=Stone +tile.stone.granite.name=Granite +tile.stone.graniteSmooth.name=Polished Granite +tile.stone.diorite.name=Diorite +tile.stone.dioriteSmooth.name=Polished Diorite +tile.stone.andesite.name=Andesite +tile.stone.andesiteSmooth.name=Polished Andesite +tile.hayBlock.name=Hay Bale +tile.grass.name=Grass Block +tile.dirt.name=Dirt +tile.dirt.default.name=Dirt +tile.dirt.coarse.name=Coarse Dirt +tile.dirt.podzol.name=Podzol +tile.stonebrick.name=Cobblestone +tile.wood.name=Wooden Planks +tile.wood.oak.name=Oak Wood Planks +tile.wood.spruce.name=Spruce Wood Planks +tile.wood.birch.name=Birch Wood Planks +tile.wood.jungle.name=Jungle Wood Planks +tile.wood.acacia.name=Acacia Wood Planks +tile.wood.big_oak.name=Dark Oak Wood Planks +tile.sapling.oak.name=Oak Sapling +tile.sapling.spruce.name=Spruce Sapling +tile.sapling.birch.name=Birch Sapling +tile.sapling.jungle.name=Jungle Sapling +tile.sapling.acacia.name=Acacia Sapling +tile.sapling.big_oak.name=Dark Oak Sapling +tile.deadbush.name=Dead Bush +tile.bedrock.name=Bedrock +tile.water.name=Water +tile.lava.name=Lava +tile.sand.name=Sand +tile.sand.default.name=Sand +tile.sand.red.name=Red Sand +tile.sandStone.name=Sandstone +tile.sandStone.default.name=Sandstone +tile.sandStone.chiseled.name=Chiseled Sandstone +tile.sandStone.smooth.name=Smooth Sandstone +tile.redSandStone.name=Red Sandstone +tile.redSandStone.default.name=Red Sandstone +tile.redSandStone.chiseled.name=Chiseled Red Sandstone +tile.redSandStone.smooth.name=Smooth Red Sandstone +tile.gravel.name=Gravel +tile.oreGold.name=Gold Ore +tile.oreIron.name=Iron Ore +tile.oreCoal.name=Coal Ore +tile.log.name=Wood +tile.log.oak.name=Oak Wood +tile.log.spruce.name=Spruce Wood +tile.log.birch.name=Birch Wood +tile.log.jungle.name=Jungle Wood +tile.log.acacia.name=Acacia Wood +tile.log.big_oak.name=Dark Oak Wood +tile.leaves.name=Leaves +tile.leaves.oak.name=Oak Leaves +tile.leaves.spruce.name=Spruce Leaves +tile.leaves.birch.name=Birch Leaves +tile.leaves.jungle.name=Jungle Leaves +tile.leaves.acacia.name=Acacia Leaves +tile.leaves.big_oak.name=Dark Oak Leaves +tile.tallgrass.name=Grass +tile.tallgrass.shrub.name=Shrub +tile.tallgrass.grass.name=Grass +tile.tallgrass.fern.name=Fern +tile.sponge.dry.name=Sponge +tile.sponge.wet.name=Wet Sponge +tile.glass.name=Glass +tile.stainedGlass.name=Stained Glass +tile.stainedGlass.black.name=Black Stained Glass +tile.stainedGlass.red.name=Red Stained Glass +tile.stainedGlass.green.name=Green Stained Glass +tile.stainedGlass.brown.name=Brown Stained Glass +tile.stainedGlass.blue.name=Blue Stained Glass +tile.stainedGlass.purple.name=Purple Stained Glass +tile.stainedGlass.cyan.name=Cyan Stained Glass +tile.stainedGlass.silver.name=Light Gray Stained Glass +tile.stainedGlass.gray.name=Gray Stained Glass +tile.stainedGlass.pink.name=Pink Stained Glass +tile.stainedGlass.lime.name=Lime Stained Glass +tile.stainedGlass.yellow.name=Yellow Stained Glass +tile.stainedGlass.lightBlue.name=Light Blue Stained Glass +tile.stainedGlass.magenta.name=Magenta Stained Glass +tile.stainedGlass.orange.name=Orange Stained Glass +tile.stainedGlass.white.name=White Stained Glass +tile.thinStainedGlass.name=Stained Glass Pane +tile.thinStainedGlass.black.name=Black Stained Glass Pane +tile.thinStainedGlass.red.name=Red Stained Glass Pane +tile.thinStainedGlass.green.name=Green Stained Glass Pane +tile.thinStainedGlass.brown.name=Brown Stained Glass Pane +tile.thinStainedGlass.blue.name=Blue Stained Glass Pane +tile.thinStainedGlass.purple.name=Purple Stained Glass Pane +tile.thinStainedGlass.cyan.name=Cyan Stained Glass Pane +tile.thinStainedGlass.silver.name=Light Gray Stained Glass Pane +tile.thinStainedGlass.gray.name=Gray Stained Glass Pane +tile.thinStainedGlass.pink.name=Pink Stained Glass Pane +tile.thinStainedGlass.lime.name=Lime Stained Glass Pane +tile.thinStainedGlass.yellow.name=Yellow Stained Glass Pane +tile.thinStainedGlass.lightBlue.name=Light Blue Stained Glass Pane +tile.thinStainedGlass.magenta.name=Magenta Stained Glass Pane +tile.thinStainedGlass.orange.name=Orange Stained Glass Pane +tile.thinStainedGlass.white.name=White Stained Glass Pane +tile.thinGlass.name=Glass Pane +tile.cloth.name=Wool +tile.flower1.name=Flower +tile.flower1.dandelion.name=Dandelion +tile.flower2.name=Flower +tile.flower2.poppy.name=Poppy +tile.flower2.blueOrchid.name=Blue Orchid +tile.flower2.allium.name=Allium +tile.flower2.houstonia.name=Azure Bluet +tile.flower2.tulipRed.name=Red Tulip +tile.flower2.tulipOrange.name=Orange Tulip +tile.flower2.tulipWhite.name=White Tulip +tile.flower2.tulipPink.name=Pink Tulip +tile.flower2.oxeyeDaisy.name=Oxeye Daisy +tile.doublePlant.name=Plant +tile.doublePlant.sunflower.name=Sunflower +tile.doublePlant.syringa.name=Lilac +tile.doublePlant.grass.name=Double Tallgrass +tile.doublePlant.fern.name=Large Fern +tile.doublePlant.rose.name=Rose Bush +tile.doublePlant.paeonia.name=Peony +tile.mushroom.name=Mushroom +tile.blockGold.name=Block of Gold +tile.blockIron.name=Block of Iron +tile.stoneSlab.name=Stone Slab +tile.stoneSlab.stone.name=Stone Slab +tile.stoneSlab.sand.name=Sandstone Slab +tile.stoneSlab.wood.name=Wooden Slab +tile.stoneSlab.cobble.name=Cobblestone Slab +tile.stoneSlab.brick.name=Bricks Slab +tile.stoneSlab.smoothStoneBrick.name=Stone Bricks Slab +tile.stoneSlab.netherBrick.name=Nether Brick Slab +tile.stoneSlab.quartz.name=Quartz Slab +tile.stoneSlab2.red_sandstone.name=Red Sandstone Slab +tile.woodSlab.name=Wood Slab +tile.woodSlab.oak.name=Oak Wood Slab +tile.woodSlab.spruce.name=Spruce Wood Slab +tile.woodSlab.birch.name=Birch Wood Slab +tile.woodSlab.jungle.name=Jungle Wood Slab +tile.woodSlab.acacia.name=Acacia Wood Slab +tile.woodSlab.big_oak.name=Dark Oak Wood Slab +tile.brick.name=Bricks +tile.tnt.name=TNT +tile.bookshelf.name=Bookshelf +tile.stoneMoss.name=Moss Stone +tile.obsidian.name=Obsidian +tile.torch.name=Torch +tile.fire.name=Fire +tile.mobSpawner.name=Monster Spawner +tile.stairsWood.name=Oak Wood Stairs +tile.stairsWoodSpruce.name=Spruce Wood Stairs +tile.stairsWoodBirch.name=Birch Wood Stairs +tile.stairsWoodJungle.name=Jungle Wood Stairs +tile.stairsWoodAcacia.name=Acacia Wood Stairs +tile.stairsWoodDarkOak.name=Dark Oak Wood Stairs +tile.chest.name=Chest +tile.chestTrap.name=Trapped Chest +tile.redstoneDust.name=Redstone Dust +tile.oreDiamond.name=Diamond Ore +tile.blockCoal.name=Block of Coal +tile.blockDiamond.name=Block of Diamond +tile.workbench.name=Crafting Table +tile.crops.name=Crops +tile.farmland.name=Farmland +tile.furnace.name=Furnace +tile.sign.name=Sign +tile.doorWood.name=Wooden Door +tile.ladder.name=Ladder +tile.rail.name=Rail +tile.goldenRail.name=Powered Rail +tile.activatorRail.name=Activator Rail +tile.detectorRail.name=Detector Rail +tile.stairsStone.name=Cobblestone Stairs +tile.stairsSandStone.name=Sandstone Stairs +tile.stairsRedSandStone.name=Red Sandstone Stairs +tile.lever.name=Lever +tile.pressurePlateStone.name=Stone Pressure Plate +tile.pressurePlateWood.name=Wooden Pressure Plate +tile.weightedPlate_light.name=Weighted Pressure Plate (Light) +tile.weightedPlate_heavy.name=Weighted Pressure Plate (Heavy) +tile.doorIron.name=Iron Door +tile.oreRedstone.name=Redstone Ore +tile.notGate.name=Redstone Torch +tile.button.name=Button +tile.snow.name=Snow +tile.woolCarpet.name=Carpet +tile.woolCarpet.black.name=Black Carpet +tile.woolCarpet.red.name=Red Carpet +tile.woolCarpet.green.name=Green Carpet +tile.woolCarpet.brown.name=Brown Carpet +tile.woolCarpet.blue.name=Blue Carpet +tile.woolCarpet.purple.name=Purple Carpet +tile.woolCarpet.cyan.name=Cyan Carpet +tile.woolCarpet.silver.name=Light Gray Carpet +tile.woolCarpet.gray.name=Gray Carpet +tile.woolCarpet.pink.name=Pink Carpet +tile.woolCarpet.lime.name=Lime Carpet +tile.woolCarpet.yellow.name=Yellow Carpet +tile.woolCarpet.lightBlue.name=Light Blue Carpet +tile.woolCarpet.magenta.name=Magenta Carpet +tile.woolCarpet.orange.name=Orange Carpet +tile.woolCarpet.white.name=Carpet +tile.ice.name=Ice +tile.icePacked.name=Packed Ice +tile.cactus.name=Cactus +tile.clay.name=Clay +tile.clayHardenedStained.name=Stained Clay +tile.clayHardenedStained.black.name=Black Stained Clay +tile.clayHardenedStained.red.name=Red Stained Clay +tile.clayHardenedStained.green.name=Green Stained Clay +tile.clayHardenedStained.brown.name=Brown Stained Clay +tile.clayHardenedStained.blue.name=Blue Stained Clay +tile.clayHardenedStained.purple.name=Purple Stained Clay +tile.clayHardenedStained.cyan.name=Cyan Stained Clay +tile.clayHardenedStained.silver.name=Light Gray Stained Clay +tile.clayHardenedStained.gray.name=Gray Stained Clay +tile.clayHardenedStained.pink.name=Pink Stained Clay +tile.clayHardenedStained.lime.name=Lime Stained Clay +tile.clayHardenedStained.yellow.name=Yellow Stained Clay +tile.clayHardenedStained.lightBlue.name=Light Blue Stained Clay +tile.clayHardenedStained.magenta.name=Magenta Stained Clay +tile.clayHardenedStained.orange.name=Orange Stained Clay +tile.clayHardenedStained.white.name=White Stained Clay +tile.clayHardened.name=Hardened Clay +tile.reeds.name=Sugar cane +tile.jukebox.name=Jukebox +tile.fence.name=Oak Fence +tile.spruceFence.name=Spruce Fence +tile.birchFence.name=Birch Fence +tile.jungleFence.name=Jungle Fence +tile.darkOakFence.name=Dark Oak Fence +tile.acaciaFence.name=Acacia Fence +tile.fenceGate.name=Oak Fence Gate +tile.spruceFenceGate.name=Spruce Fence Gate +tile.birchFenceGate.name=Birch Fence Gate +tile.jungleFenceGate.name=Jungle Fence Gate +tile.darkOakFenceGate.name=Dark Oak Fence Gate +tile.acaciaFenceGate.name=Acacia Fence Gate +tile.pumpkinStem.name=Pumpkin Stem +tile.pumpkin.name=Pumpkin +tile.litpumpkin.name=Jack o'Lantern +tile.hellrock.name=Netherrack +tile.hellsand.name=Soul Sand +tile.lightgem.name=Glowstone +tile.portal.name=Portal +tile.cloth.black.name=Black Wool +tile.cloth.red.name=Red Wool +tile.cloth.green.name=Green Wool +tile.cloth.brown.name=Brown Wool +tile.cloth.blue.name=Blue Wool +tile.cloth.purple.name=Purple Wool +tile.cloth.cyan.name=Cyan Wool +tile.cloth.silver.name=Light Gray Wool +tile.cloth.gray.name=Gray Wool +tile.cloth.pink.name=Pink Wool +tile.cloth.lime.name=Lime Wool +tile.cloth.yellow.name=Yellow Wool +tile.cloth.lightBlue.name=Light Blue Wool +tile.cloth.magenta.name=Magenta Wool +tile.cloth.orange.name=Orange Wool +tile.cloth.white.name=Wool +tile.oreLapis.name=Lapis Lazuli Ore +tile.blockLapis.name=Lapis Lazuli Block +tile.dispenser.name=Dispenser +tile.dropper.name=Dropper +tile.musicBlock.name=Note Block +tile.cake.name=Cake +tile.bed.name=Bed +tile.bed.occupied=This bed is occupied +tile.bed.noSleep=You can only sleep at night +tile.bed.notSafe=You may not rest now, there are monsters nearby +tile.bed.notValid=Your home bed was missing or obstructed +tile.lockedchest.name=Locked chest +tile.trapdoor.name=Wooden Trapdoor +tile.ironTrapdoor.name=Iron Trapdoor +tile.web.name=Cobweb +tile.stonebricksmooth.name=Stone Bricks +tile.stonebricksmooth.default.name=Stone Bricks +tile.stonebricksmooth.mossy.name=Mossy Stone Bricks +tile.stonebricksmooth.cracked.name=Cracked Stone Bricks +tile.stonebricksmooth.chiseled.name=Chiseled Stone Bricks +tile.monsterStoneEgg.name=Stone Monster Egg +tile.monsterStoneEgg.stone.name=Stone Monster Egg +tile.monsterStoneEgg.cobble.name=Cobblestone Monster Egg +tile.monsterStoneEgg.brick.name=Stone Brick Monster Egg +tile.monsterStoneEgg.mossybrick.name=Mossy Stone Brick Monster Egg +tile.monsterStoneEgg.crackedbrick.name=Cracked Stone Brick Monster Egg +tile.monsterStoneEgg.chiseledbrick.name=Chiseled Stone Brick Monster Egg +tile.pistonBase.name=Piston +tile.pistonStickyBase.name=Sticky Piston +tile.fenceIron.name=Iron Bars +tile.melon.name=Melon +tile.stairsBrick.name=Brick Stairs +tile.stairsStoneBrickSmooth.name=Stone Brick Stairs +tile.vine.name=Vines +tile.netherBrick.name=Nether Brick +tile.netherFence.name=Nether Brick Fence +tile.stairsNetherBrick.name=Nether Brick Stairs +tile.netherStalk.name=Nether Wart +tile.cauldron.name=Cauldron +tile.enchantmentTable.name=Enchantment Table +tile.anvil.name=Anvil +tile.anvil.intact.name=Anvil +tile.anvil.slightlyDamaged.name=Slightly Damaged Anvil +tile.anvil.veryDamaged.name=Very Damaged Anvil +tile.whiteStone.name=End Stone +tile.endPortalFrame.name=End Portal +tile.mycel.name=Mycelium +tile.waterlily.name=Lily Pad +tile.dragonEgg.name=Dragon Egg +tile.redstoneLight.name=Redstone Lamp +tile.cocoa.name=Cocoa +tile.enderChest.name=Ender Chest +tile.oreRuby.name=Ruby Ore +tile.oreEmerald.name=Emerald Ore +tile.blockEmerald.name=Block of Emerald +tile.blockRedstone.name=Block of Redstone +tile.tripWire.name=Tripwire +tile.tripWireSource.name=Tripwire Hook +tile.commandBlock.name=Command Block +tile.beacon.name=Beacon +tile.beacon.primary=Primary Power +tile.beacon.secondary=Secondary Power +tile.cobbleWall.normal.name=Cobblestone Wall +tile.cobbleWall.mossy.name=Mossy Cobblestone Wall +tile.carrots.name=Carrots +tile.potatoes.name=Potatoes +tile.daylightDetector.name=Daylight Sensor +tile.netherquartz.name=Nether Quartz Ore +tile.hopper.name=Hopper +tile.quartzBlock.name=Block of Quartz +tile.quartzBlock.default.name=Block of Quartz +tile.quartzBlock.chiseled.name=Chiseled Quartz Block +tile.quartzBlock.lines.name=Pillar Quartz Block +tile.stairsQuartz.name=Quartz Stairs +tile.slime.name=Slime Block +tile.prismarine.rough.name=Prismarine +tile.prismarine.bricks.name=Prismarine Bricks +tile.prismarine.dark.name=Dark Prismarine +tile.seaLantern.name=Sea Lantern + +item.nameTag.name=Name Tag +item.leash.name=Lead +item.shovelIron.name=Iron Shovel +item.pickaxeIron.name=Iron Pickaxe +item.hatchetIron.name=Iron Axe +item.flintAndSteel.name=Flint and Steel +item.apple.name=Apple +item.cookie.name=Cookie +item.bow.name=Bow +item.arrow.name=Arrow +item.coal.name=Coal +item.charcoal.name=Charcoal +item.diamond.name=Diamond +item.emerald.name=Emerald +item.ingotIron.name=Iron Ingot +item.ingotGold.name=Gold Ingot +item.swordIron.name=Iron Sword +item.swordWood.name=Wooden Sword +item.shovelWood.name=Wooden Shovel +item.pickaxeWood.name=Wooden Pickaxe +item.hatchetWood.name=Wooden Axe +item.swordStone.name=Stone Sword +item.shovelStone.name=Stone Shovel +item.pickaxeStone.name=Stone Pickaxe +item.hatchetStone.name=Stone Axe +item.swordDiamond.name=Diamond Sword +item.shovelDiamond.name=Diamond Shovel +item.pickaxeDiamond.name=Diamond Pickaxe +item.hatchetDiamond.name=Diamond Axe +item.stick.name=Stick +item.bowl.name=Bowl +item.mushroomStew.name=Mushroom Stew +item.swordGold.name=Golden Sword +item.shovelGold.name=Golden Shovel +item.pickaxeGold.name=Golden Pickaxe +item.hatchetGold.name=Golden Axe +item.string.name=String +item.feather.name=Feather +item.sulphur.name=Gunpowder +item.hoeWood.name=Wooden Hoe +item.hoeStone.name=Stone Hoe +item.hoeIron.name=Iron Hoe +item.hoeDiamond.name=Diamond Hoe +item.hoeGold.name=Golden Hoe +item.seeds.name=Seeds +item.seeds_pumpkin.name=Pumpkin Seeds +item.seeds_melon.name=Melon Seeds +item.melon.name=Melon +item.wheat.name=Wheat +item.bread.name=Bread +item.helmetCloth.name=Leather Cap +item.chestplateCloth.name=Leather Tunic +item.leggingsCloth.name=Leather Pants +item.bootsCloth.name=Leather Boots +item.helmetChain.name=Chain Helmet +item.chestplateChain.name=Chain Chestplate +item.leggingsChain.name=Chain Leggings +item.bootsChain.name=Chain Boots +item.helmetIron.name=Iron Helmet +item.chestplateIron.name=Iron Chestplate +item.leggingsIron.name=Iron Leggings +item.bootsIron.name=Iron Boots +item.helmetDiamond.name=Diamond Helmet +item.chestplateDiamond.name=Diamond Chestplate +item.leggingsDiamond.name=Diamond Leggings +item.bootsDiamond.name=Diamond Boots +item.helmetGold.name=Golden Helmet +item.chestplateGold.name=Golden Chestplate +item.leggingsGold.name=Golden Leggings +item.bootsGold.name=Golden Boots +item.flint.name=Flint +item.porkchopRaw.name=Raw Porkchop +item.porkchopCooked.name=Cooked Porkchop +item.chickenRaw.name=Raw Chicken +item.chickenCooked.name=Cooked Chicken +item.muttonRaw.name=Raw Mutton +item.muttonCooked.name=Cooked Mutton +item.rabbitRaw.name=Raw Rabbit +item.rabbitCooked.name=Cooked Rabbit +item.rabbitStew.name=Rabbit Stew +item.rabbitFoot.name=Rabbit's Foot +item.rabbitHide.name=Rabbit Hide +item.beefRaw.name=Raw Beef +item.beefCooked.name=Steak +item.painting.name=Painting +item.frame.name=Item Frame +item.appleGold.name=Golden Apple +item.sign.name=Sign +item.doorOak.name=Oak Door +item.doorSpruce.name=Spruce Door +item.doorBirch.name=Birch Door +item.doorJungle.name=Jungle Door +item.doorAcacia.name=Acacia Door +item.doorDarkOak.name=Dark Oak Door +item.bucket.name=Bucket +item.bucketWater.name=Water Bucket +item.bucketLava.name=Lava Bucket +item.minecart.name=Minecart +item.saddle.name=Saddle +item.doorIron.name=Iron Door +item.redstone.name=Redstone +item.snowball.name=Snowball +item.boat.name=Boat +item.leather.name=Leather +item.milk.name=Milk +item.brick.name=Brick +item.clay.name=Clay +item.reeds.name=Sugar Canes +item.paper.name=Paper +item.book.name=Book +item.slimeball.name=Slimeball +item.minecartChest.name=Minecart with Chest +item.minecartFurnace.name=Minecart with Furnace +item.minecartTnt.name=Minecart with TNT +item.minecartHopper.name=Minecart with Hopper +item.minecartCommandBlock.name=Minecart with Command Block +item.egg.name=Egg +item.compass.name=Compass +item.fishingRod.name=Fishing Rod +item.clock.name=Clock +item.yellowDust.name=Glowstone Dust +item.fish.cod.raw.name=Raw Fish +item.fish.salmon.raw.name=Raw Salmon +item.fish.pufferfish.raw.name=Pufferfish +item.fish.clownfish.raw.name=Clownfish +item.fish.cod.cooked.name=Cooked Fish +item.fish.salmon.cooked.name=Cooked Salmon +item.record.name=Music Disc +item.record.13.desc=C418 - 13 +item.record.cat.desc=C418 - cat +item.record.blocks.desc=C418 - blocks +item.record.chirp.desc=C418 - chirp +item.record.far.desc=C418 - far +item.record.mall.desc=C418 - mall +item.record.mellohi.desc=C418 - mellohi +item.record.stal.desc=C418 - stal +item.record.strad.desc=C418 - strad +item.record.ward.desc=C418 - ward +item.record.11.desc=C418 - 11 +item.record.wait.desc=C418 - wait +item.bone.name=Bone +item.dyePowder.black.name=Ink Sac +item.dyePowder.red.name=Rose Red +item.dyePowder.green.name=Cactus Green +item.dyePowder.brown.name=Cocoa Beans +item.dyePowder.blue.name=Lapis Lazuli +item.dyePowder.purple.name=Purple Dye +item.dyePowder.cyan.name=Cyan Dye +item.dyePowder.silver.name=Light Gray Dye +item.dyePowder.gray.name=Gray Dye +item.dyePowder.pink.name=Pink Dye +item.dyePowder.lime.name=Lime Dye +item.dyePowder.yellow.name=Dandelion Yellow +item.dyePowder.lightBlue.name=Light Blue Dye +item.dyePowder.magenta.name=Magenta Dye +item.dyePowder.orange.name=Orange Dye +item.dyePowder.white.name=Bone Meal +item.sugar.name=Sugar +item.cake.name=Cake +item.bed.name=Bed +item.diode.name=Redstone Repeater +item.comparator.name=Redstone Comparator +item.map.name=Map +item.leaves.name=Leaves +item.shears.name=Shears +item.rottenFlesh.name=Rotten Flesh +item.enderPearl.name=Ender Pearl +item.blazeRod.name=Blaze Rod +item.ghastTear.name=Ghast Tear +item.netherStalkSeeds.name=Nether Wart +item.potion.name=Potion +item.emptyPotion.name=Water Bottle +item.goldNugget.name=Gold Nugget +item.glassBottle.name=Glass Bottle +item.spiderEye.name=Spider Eye +item.fermentedSpiderEye.name=Fermented Spider Eye +item.blazePowder.name=Blaze Powder +item.magmaCream.name=Magma Cream +item.cauldron.name=Cauldron +item.brewingStand.name=Brewing Stand +item.eyeOfEnder.name=Eye of Ender +item.speckledMelon.name=Glistering Melon +item.monsterPlacer.name=Spawn +item.expBottle.name=Bottle o' Enchanting +item.fireball.name=Fire Charge +item.writingBook.name=Book and Quill +item.writtenBook.name=Written Book +item.ruby.name=Ruby +item.flowerPot.name=Flower Pot +item.emptyMap.name=Empty Map +item.carrots.name=Carrot +item.carrotGolden.name=Golden Carrot +item.potato.name=Potato +item.potatoBaked.name=Baked Potato +item.potatoPoisonous.name=Poisonous Potato +item.skull.skeleton.name=Skeleton Skull +item.skull.wither.name=Wither Skeleton Skull +item.skull.zombie.name=Zombie Head +item.skull.char.name=Head +item.skull.player.name=%s's Head +item.skull.creeper.name=Creeper Head +item.carrotOnAStick.name=Carrot on a Stick +item.netherStar.name=Nether Star +item.pumpkinPie.name=Pumpkin Pie +item.enchantedBook.name=Enchanted Book +item.fireworks.name=Firework Rocket +item.fireworks.flight=Flight Duration: +item.fireworksCharge.name=Firework Star +item.fireworksCharge.black=Black +item.fireworksCharge.red=Red +item.fireworksCharge.green=Green +item.fireworksCharge.brown=Brown +item.fireworksCharge.blue=Blue +item.fireworksCharge.purple=Purple +item.fireworksCharge.cyan=Cyan +item.fireworksCharge.silver=Light Gray +item.fireworksCharge.gray=Gray +item.fireworksCharge.pink=Pink +item.fireworksCharge.lime=Lime +item.fireworksCharge.yellow=Yellow +item.fireworksCharge.lightBlue=Light Blue +item.fireworksCharge.magenta=Magenta +item.fireworksCharge.orange=Orange +item.fireworksCharge.white=White +item.fireworksCharge.customColor=Custom +item.fireworksCharge.fadeTo=Fade to +item.fireworksCharge.flicker=Twinkle +item.fireworksCharge.trail=Trail +item.fireworksCharge.type.0=Small Ball +item.fireworksCharge.type.1=Large Ball +item.fireworksCharge.type.2=Star-shaped +item.fireworksCharge.type.3=Creeper-shaped +item.fireworksCharge.type.4=Burst +item.fireworksCharge.type=Unknown Shape +item.netherbrick.name=Nether Brick +item.netherquartz.name=Nether Quartz +item.armorStand.name=Armor Stand +item.horsearmormetal.name=Iron Horse Armor +item.horsearmorgold.name=Gold Horse Armor +item.horsearmordiamond.name=Diamond Horse Armor +item.prismarineShard.name=Prismarine Shard +item.prismarineCrystals.name=Prismarine Crystals + +container.inventory=Inventory +container.hopper=Item Hopper +container.crafting=Crafting +container.dispenser=Dispenser +container.dropper=Dropper +container.furnace=Furnace +container.enchant=Enchant +container.enchant.lapis.one=1 Lapis Lazuli +container.enchant.lapis.many=%d Lapis Lazuli +container.enchant.level.one=1 Enchantment Level +container.enchant.level.many=%d Enchantment Levels +container.enchant.clue=%s . . . ? +container.repair=Repair & Name +container.repair.cost=Enchantment Cost: %1$d +container.repair.expensive=Too Expensive! +container.creative=Item Selection +container.brewing=Brewing Stand +container.chest=Chest +container.chestDouble=Large Chest +container.minecart=Minecart +container.enderchest=Ender Chest +container.beacon=Beacon + +container.isLocked=%s is locked! + +item.dyed=Dyed +item.unbreakable=Unbreakable +item.canBreak=Can break: +item.canPlace=Can be placed on: + +entity.Item.name=Item +entity.XPOrb.name=Experience Orb +entity.SmallFireball.name=Small Fireball +entity.Fireball.name=Fireball +entity.ThrownPotion.name=Potion + +entity.Arrow.name=Arrow +entity.Snowball.name=Snowball +entity.Painting.name=Painting +entity.ArmorStand.name=Armor Stand + +entity.Mob.name=Mob +entity.Monster.name=Monster + +entity.Creeper.name=Creeper +entity.Skeleton.name=Skeleton +entity.Spider.name=Spider +entity.Giant.name=Giant +entity.Zombie.name=Zombie +entity.Slime.name=Slime +entity.Ghast.name=Ghast +entity.PigZombie.name=Zombie Pigman +entity.Enderman.name=Enderman +entity.Endermite.name=Endermite +entity.Silverfish.name=Silverfish +entity.CaveSpider.name=Cave Spider +entity.Blaze.name=Blaze +entity.LavaSlime.name=Magma Cube +entity.MushroomCow.name=Mooshroom +entity.Villager.name=Villager +entity.VillagerGolem.name=Iron Golem +entity.SnowMan.name=Snow Golem +entity.EnderDragon.name=Ender Dragon +entity.WitherBoss.name=Wither +entity.Witch.name=Witch +entity.Guardian.name=Guardian + +entity.Villager.farmer=Farmer +entity.Villager.fisherman=Fisherman +entity.Villager.shepherd=Shepherd +entity.Villager.fletcher=Fletcher +entity.Villager.librarian=Librarian +entity.Villager.cleric=Cleric +entity.Villager.armor=Armorer +entity.Villager.weapon=Weapon Smith +entity.Villager.tool=Tool Smith +entity.Villager.butcher=Butcher +entity.Villager.leather=Leatherworker + +entity.Pig.name=Pig +entity.Sheep.name=Sheep +entity.Cow.name=Cow +entity.Chicken.name=Chicken +entity.Squid.name=Squid +entity.Wolf.name=Wolf +entity.Ozelot.name=Ocelot +entity.Cat.name=Cat +entity.Bat.name=Bat +entity.EntityHorse.name=Horse +entity.horse.name=Horse +entity.donkey.name=Donkey +entity.mule.name=Mule +entity.skeletonhorse.name=Skeleton Horse +entity.zombiehorse.name=Zombie Horse +entity.Rabbit.name=Rabbit +entity.KillerBunny.name=The Killer Bunny + +entity.PrimedTnt.name=Block of TNT +entity.FallingSand.name=Falling Block + +entity.Minecart.name=Minecart +entity.Boat.name=Boat + +entity.generic.name=unknown + +death.fell.accident.ladder=%1$s fell off a ladder +death.fell.accident.vines=%1$s fell off some vines +death.fell.accident.water=%1$s fell out of the water +death.fell.accident.generic=%1$s fell from a high place +death.fell.killer=%1$s was doomed to fall +death.fell.assist=%1$s was doomed to fall by %2$s +death.fell.assist.item=%1$s was doomed to fall by %2$s using %3$s +death.fell.finish=%1$s fell too far and was finished by %2$s +death.fell.finish.item=%1$s fell too far and was finished by %2$s using %3$s + +death.attack.lightningBolt=%1$s was struck by lightning +death.attack.inFire=%1$s went up in flames +death.attack.inFire.player=%1$s walked into fire whilst fighting %2$s +death.attack.onFire=%1$s burned to death +death.attack.onFire.player=%1$s was burnt to a crisp whilst fighting %2$s +death.attack.lava=%1$s tried to swim in lava +death.attack.lava.player=%1$s tried to swim in lava to escape %2$s +death.attack.inWall=%1$s suffocated in a wall +death.attack.drown=%1$s drowned +death.attack.drown.player=%1$s drowned whilst trying to escape %2$s +death.attack.starve=%1$s starved to death +death.attack.cactus=%1$s was pricked to death +death.attack.cactus.player=%1$s walked into a cactus whilst trying to escape %2$s +death.attack.generic=%1$s died +death.attack.explosion=%1$s blew up +death.attack.explosion.player=%1$s was blown up by %2$s +death.attack.magic=%1$s was killed by magic +death.attack.wither=%1$s withered away +death.attack.anvil=%1$s was squashed by a falling anvil +death.attack.fallingBlock=%1$s was squashed by a falling block +death.attack.mob=%1$s was slain by %2$s +death.attack.player=%1$s was slain by %2$s +death.attack.player.item=%1$s was slain by %2$s using %3$s +death.attack.arrow=%1$s was shot by %2$s +death.attack.arrow.item=%1$s was shot by %2$s using %3$s +death.attack.fireball=%1$s was fireballed by %2$s +death.attack.fireball.item=%1$s was fireballed by %2$s using %3$s +death.attack.thrown=%1$s was pummeled by %2$s +death.attack.thrown.item=%1$s was pummeled by %2$s using %3$s +death.attack.indirectMagic=%1$s was killed by %2$s using magic +death.attack.indirectMagic.item=%1$s was killed by %2$s using %3$s +death.attack.thorns=%1$s was killed trying to hurt %2$s +death.attack.fall=%1$s hit the ground too hard +death.attack.outOfWorld=%1$s fell out of the world + +deathScreen.respawn=Respawn +deathScreen.deleteWorld=Delete world +deathScreen.titleScreen=Title screen +deathScreen.score=Score +deathScreen.title.hardcore=Game over! +deathScreen.hardcoreInfo=You cannot respawn in hardcore mode! +deathScreen.title=You died! +deathScreen.leaveServer=Leave server +deathScreen.quit.confirm=Are you sure you want to quit? + +potion.effects.whenDrank=When Applied: +potion.empty=No Effects +potion.moveSpeed=Speed +potion.moveSlowdown=Slowness +potion.digSpeed=Haste +potion.digSlowDown=Mining Fatigue +potion.damageBoost=Strength +potion.heal=Instant Health +potion.harm=Instant Damage +potion.jump=Jump Boost +potion.confusion=Nausea +potion.regeneration=Regeneration +potion.resistance=Resistance +potion.fireResistance=Fire Resistance +potion.waterBreathing=Water Breathing +potion.invisibility=Invisibility +potion.blindness=Blindness +potion.nightVision=Night Vision +potion.hunger=Hunger +potion.weakness=Weakness +potion.poison=Poison +potion.wither=Wither +potion.healthBoost=Health Boost +potion.absorption=Absorption +potion.saturation=Saturation + +potion.moveSpeed.postfix=Potion of Swiftness +potion.moveSlowdown.postfix=Potion of Slowness +potion.digSpeed.postfix=Potion of Haste +potion.digSlowDown.postfix=Potion of Dullness +potion.damageBoost.postfix=Potion of Strength +potion.weakness.postfix=Potion of Weakness +potion.heal.postfix=Potion of Healing +potion.harm.postfix=Potion of Harming +potion.jump.postfix=Potion of Leaping +potion.confusion.postfix=Potion of Nausea +potion.regeneration.postfix=Potion of Regeneration +potion.resistance.postfix=Potion of Resistance +potion.fireResistance.postfix=Potion of Fire Resistance +potion.waterBreathing.postfix=Potion of Water Breathing +potion.invisibility.postfix=Potion of Invisibility +potion.blindness.postfix=Potion of Blindness +potion.nightVision.postfix=Potion of Night Vision +potion.hunger.postfix=Potion of Hunger +potion.poison.postfix=Potion of Poison +potion.wither.postfix=Potion of Decay +potion.healthBoost.postfix=Potion of Health Boost +potion.absorption.postfix=Potion of Absorption +potion.saturation.postfix=Potion of Saturation + +potion.potency.0= +potion.potency.1=II +potion.potency.2=III +potion.potency.3=IV + +potion.prefix.grenade=Splash +potion.prefix.mundane=Mundane +potion.prefix.uninteresting=Uninteresting +potion.prefix.bland=Bland +potion.prefix.clear=Clear +potion.prefix.milky=Milky +potion.prefix.diffuse=Diffuse +potion.prefix.artless=Artless +potion.prefix.thin=Thin +potion.prefix.awkward=Awkward +potion.prefix.flat=Flat +potion.prefix.bulky=Bulky +potion.prefix.bungling=Bungling +potion.prefix.buttered=Buttered +potion.prefix.smooth=Smooth +potion.prefix.suave=Suave +potion.prefix.debonair=Debonair +potion.prefix.thick=Thick +potion.prefix.elegant=Elegant +potion.prefix.fancy=Fancy +potion.prefix.charming=Charming +potion.prefix.dashing=Dashing +potion.prefix.refined=Refined +potion.prefix.cordial=Cordial +potion.prefix.sparkling=Sparkling +potion.prefix.potent=Potent +potion.prefix.foul=Foul +potion.prefix.odorless=Odorless +potion.prefix.rank=Rank +potion.prefix.harsh=Harsh +potion.prefix.acrid=Acrid +potion.prefix.gross=Gross +potion.prefix.stinky=Stinky + +enchantment.damage.all=Sharpness +enchantment.damage.undead=Smite +enchantment.damage.arthropods=Bane of Arthropods +enchantment.knockback=Knockback +enchantment.fire=Fire Aspect +enchantment.protect.all=Protection +enchantment.protect.fire=Fire Protection +enchantment.protect.fall=Feather Falling +enchantment.protect.explosion=Blast Protection +enchantment.protect.projectile=Projectile Protection +enchantment.oxygen=Respiration +enchantment.waterWorker=Aqua Affinity +enchantment.waterWalker=Depth Strider +enchantment.digging=Efficiency +enchantment.untouching=Silk Touch +enchantment.durability=Unbreaking +enchantment.lootBonus=Looting +enchantment.lootBonusDigger=Fortune +enchantment.lootBonusFishing=Luck of the Sea +enchantment.fishingSpeed=Lure +enchantment.arrowDamage=Power +enchantment.arrowFire=Flame +enchantment.arrowKnockback=Punch +enchantment.arrowInfinite=Infinity +enchantment.thorns=Thorns + +enchantment.level.1=I +enchantment.level.2=II +enchantment.level.3=III +enchantment.level.4=IV +enchantment.level.5=V +enchantment.level.6=VI +enchantment.level.7=VII +enchantment.level.8=VIII +enchantment.level.9=IX +enchantment.level.10=X + +gui.achievements=Achievements +gui.stats=Statistics + +stats.tooltip.type.achievement=Achievement +stats.tooltip.type.statistic=Statistic +stat.generalButton=General +stat.blocksButton=Blocks +stat.itemsButton=Items +stat.mobsButton=Mobs + +stat.used=Times Used +stat.mined=Times Mined +stat.depleted=Times Depleted +stat.crafted=Times Crafted +stat.entityKills=You killed %d %s +stat.entityKilledBy=%s killed you %d time(s) +stat.entityKills.none=You have never killed %s +stat.entityKilledBy.none=You have never been killed by %s + +stat.startGame=Times played +stat.createWorld=Worlds created +stat.loadWorld=Saves loaded +stat.joinMultiplayer=Multiplayer joins +stat.leaveGame=Games quit + +stat.playOneMinute=Minutes Played +stat.timeSinceDeath=Since Last Death + +stat.walkOneCm=Distance Walked +stat.crouchOneCm=Distance Crouched +stat.sprintOneCm=Distance Sprinted +stat.fallOneCm=Distance Fallen +stat.swimOneCm=Distance Swum +stat.flyOneCm=Distance Flown +stat.climbOneCm=Distance Climbed +stat.diveOneCm=Distance Dove +stat.minecartOneCm=Distance by Minecart +stat.boatOneCm=Distance by Boat +stat.pigOneCm=Distance by Pig +stat.horseOneCm=Distance by Horse +stat.jump=Jumps +stat.drop=Items Dropped + +stat.damageDealt=Damage Dealt +stat.damageTaken=Damage Taken +stat.deaths=Number of Deaths +stat.mobKills=Mob Kills +stat.animalsBred=Animals Bred +stat.playerKills=Player Kills +stat.fishCaught=Fish Caught +stat.treasureFished=Treasure Fished +stat.junkFished=Junk Fished +stat.talkedToVillager=Talked to Villagers +stat.tradedWithVillager=Traded with Villagers + +stat.cakeSlicesEaten=Cake Slices Eaten +stat.cauldronFilled=Cauldrons Filled +stat.cauldronUsed=Water Taken from Cauldron +stat.armorCleaned=Armor Pieces Cleaned +stat.bannerCleaned=Banners Cleaned +stat.brewingstandInteraction=Interactions with Brewing Stand +stat.beaconInteraction=Interactions with Beacon +stat.dropperInspected=Droppers Searched +stat.hopperInspected=Hoppers Searched +stat.dispenserInspected=Dispensers Searched +stat.noteblockPlayed=Noteblocks played +stat.noteblockTuned=Noteblocks tuned +stat.flowerPotted=Plants potted +stat.trappedChestTriggered=Trapped Chests Triggered +stat.enderchestOpened=Ender Chests Opened +stat.itemEnchanted=Items Enchanted +stat.recordPlayed=Records Played +stat.furnaceInteraction=Interactions with Furnace +stat.workbenchInteraction=Interactions with Crafting Table +stat.chestOpened=Chests Opened + +stat.mineBlock=%1$s Mined +stat.craftItem=%1$s Crafted +stat.useItem=%1$s Used +stat.breakItem=%1$s Depleted + +achievement.get=Achievement get! + +achievement.taken=Taken! +achievement.unknown=??? + +achievement.requires=Requires '%1$s' +achievement.openInventory=Taking Inventory +achievement.openInventory.desc=Press '%1$s' to open your inventory. +achievement.mineWood=Getting Wood +achievement.mineWood.desc=Attack a tree until a block of wood pops out +achievement.buildWorkBench=Benchmarking +achievement.buildWorkBench.desc=Craft a workbench with four blocks of planks +achievement.buildPickaxe=Time to Mine! +achievement.buildPickaxe.desc=Use planks and sticks to make a pickaxe +achievement.buildFurnace=Hot Topic +achievement.buildFurnace.desc=Construct a furnace out of eight stone blocks +achievement.acquireIron=Acquire Hardware +achievement.acquireIron.desc=Smelt an iron ingot +achievement.buildHoe=Time to Farm! +achievement.buildHoe.desc=Use planks and sticks to make a hoe +achievement.makeBread=Bake Bread +achievement.makeBread.desc=Turn wheat into bread +achievement.bakeCake=The Lie +achievement.bakeCake.desc=Wheat, sugar, milk and eggs! +achievement.buildBetterPickaxe=Getting an Upgrade +achievement.buildBetterPickaxe.desc=Construct a better pickaxe +achievement.overpowered=Overpowered +achievement.overpowered.desc=Build a Notch apple +achievement.cookFish=Delicious Fish +achievement.cookFish.desc=Catch and cook fish! +achievement.onARail=On A Rail +achievement.onARail.desc=Travel by minecart at least 1 km from where you started +achievement.buildSword=Time to Strike! +achievement.buildSword.desc=Use planks and sticks to make a sword +achievement.killEnemy=Monster Hunter +achievement.killEnemy.desc=Attack and destroy a monster +achievement.killCow=Cow Tipper +achievement.killCow.desc=Harvest some leather +achievement.breedCow=Repopulation +achievement.breedCow.desc=Breed two cows with wheat +achievement.flyPig=When Pigs Fly +achievement.flyPig.desc=Fly a pig off a cliff +achievement.snipeSkeleton=Sniper Duel +achievement.snipeSkeleton.desc=Kill a skeleton with an arrow from more than 50 meters +achievement.diamonds=DIAMONDS! +achievement.diamonds.desc=Acquire diamonds with your iron tools +achievement.diamondsToYou=Diamonds to you! +achievement.diamondsToYou.desc=Throw diamonds at another player. +achievement.portal=We Need to Go Deeper +achievement.portal.desc=Build a portal to the Nether +achievement.ghast=Return to Sender +achievement.ghast.desc=Destroy a Ghast with a fireball +achievement.blazeRod=Into Fire +achievement.blazeRod.desc=Relieve a Blaze of its rod +achievement.potion=Local Brewery +achievement.potion.desc=Brew a potion +achievement.theEnd=The End? +achievement.theEnd.desc=Locate the End +achievement.theEnd2=The End. +achievement.theEnd2.desc=Defeat the Ender Dragon +achievement.spawnWither=The Beginning? +achievement.spawnWither.desc=Spawn the Wither +achievement.killWither=The Beginning. +achievement.killWither.desc=Kill the Wither +achievement.fullBeacon=Beaconator +achievement.fullBeacon.desc=Create a full beacon +achievement.exploreAllBiomes=Adventuring Time +achievement.exploreAllBiomes.desc=Discover all biomes +achievement.enchantments=Enchanter +achievement.enchantments.desc=Use a book, obsidian and diamonds to construct an enchantment table +achievement.overkill=Overkill +achievement.overkill.desc=Deal nine hearts of damage in a single hit +achievement.bookcase=Librarian +achievement.bookcase.desc=Build some bookshelves to improve your enchantment table + +commands.generic.exception=An unknown error occurred while attempting to perform this command +commands.generic.permission=You do not have permission to use this command +commands.generic.syntax=Invalid command syntax +commands.generic.player.notFound=That player cannot be found +commands.generic.entity.notFound=That entity cannot be found +commands.generic.entity.invalidUuid=The entity UUID provided is in an invalid format +commands.generic.entity.invalidType=Entity type '%s' is invalid +commands.generic.notFound=Unknown command. Try /help for a list of commands +commands.generic.parameter.invalid='%s' is not a valid parameter +commands.generic.num.invalid='%s' is not a valid number +commands.generic.boolean.invalid='%s' is not true or false +commands.generic.num.tooSmall=The number you have entered (%d) is too small, it must be at least %d +commands.generic.num.tooBig=The number you have entered (%d) is too big, it must be at most %d +commands.generic.double.tooSmall=The number you have entered (%.2f) is too small, it must be at least %.2f +commands.generic.double.tooBig=The number you have entered (%.2f) is too big, it must be at most %.2f +commands.generic.usage=Usage: %s + +commands.setidletimeout.usage=/setidletimeout +commands.setidletimeout.success=Successfully set the idle timeout to %d minutes. +commands.xp.failure.widthdrawXp=Cannot give player negative experience points +commands.xp.success=Given %d experience to %s +commands.xp.success.levels=Given %d levels to %s +commands.xp.success.negative.levels=Taken %d levels from %s +commands.xp.usage=/xp [player] OR /xp L [player] +commands.playsound.usage=/playsound [x] [y] [z] [volume] [pitch] [minimumVolume] +commands.playsound.success=Played sound '%s' to %s +commands.playsound.playerTooFar=Player %s is too far away to hear the sound +commands.give.usage=/give [amount] [data] [dataTag] +commands.give.item.notFound=There is no such item with name %d +commands.give.block.notFound=There is no such block with name %d +commands.give.success=Given %s * %d to %s +commands.give.tagError=Data tag parsing failed: %s +commands.replaceitem.usage=/replaceitem ... +commands.replaceitem.entity.usage=/replaceitem entity [amount] [data] [dataTag] +commands.replaceitem.block.usage=/replaceitem block [amount] [data] [dataTag] +commands.replaceitem.tagError=Data tag parsing failed: %s +commands.replaceitem.noContainer=Block at %d, %d, %d is not a container +commands.replaceitem.failed=Could not replace slot %d with %d * %s +commands.replaceitem.success=Replaced slot %d with %d * %s +commands.stats.usage=/stats ... +commands.stats.entity.usage=/stats entity +commands.stats.entity.set.usage=/stats entity set +commands.stats.entity.clear.usage=/stats entity clear +commands.stats.block.usage=/stats block ... +commands.stats.block.set.usage=/stats block set +commands.stats.block.clear.usage=/stats block clear +commands.stats.noCompatibleBlock=Block at %d, %d, %d can not track stats +commands.stats.failed=Invalid parameters +commands.stats.cleared=Cleared %s stats +commands.stats.success=Storing %s stats in %s on %s +commands.summon.usage=/summon [x] [y] [z] [dataTag] +commands.summon.success=Object successfully summoned +commands.summon.failed=Unable to summon object +commands.summon.tagError=Data tag parsing failed: %s +commands.summon.outOfWorld=Cannot summon the object out of the world +commands.testforblock.usage=/testforblock [dataValue] [dataTag] +commands.testforblock.failed.tile=The block at %d,%d,%d is %s (expected: %s). +commands.testforblock.failed.data=The block at %d,%d,%d had the data value of %s (expected: %s). +commands.testforblock.failed.nbt=The block at %d,%d,%d did not have the required NBT keys. +commands.testforblock.failed.tileEntity=The block at %d,%d,%d is not a tile entity and cannot support tag matching. +commands.testforblock.success=Successfully found the block at %d,%d,%d. +commands.testforblock.outOfWorld=Cannot test for block outside of the world +commands.setblock.usage=/setblock [dataValue] [oldBlockHandling] [dataTag] +commands.setblock.success=Block placed +commands.setblock.failed=Unable to place block +commands.setblock.tagError=Data tag parsing failed: %s +commands.setblock.outOfWorld=Cannot place block outside of the world +commands.setblock.notFound=There is no such block with ID/name %s +commands.setblock.noChange=The block couldn't be placed +commands.fill.usage=/fill [dataValue] [oldBlockHandling] [dataTag] +commands.fill.outOfWorld=Cannot place blocks outside of the world +commands.fill.tagError=Data tag parsing failed: %s +commands.fill.success=%d blocks filled +commands.fill.failed=No blocks filled +commands.fill.tooManyBlocks=Too many blocks in the specified area (%d > %d) +commands.clone.usage=/clone [maskMode] [cloneMode] +commands.clone.outOfWorld=Cannot access blocks outside of the world +commands.clone.noOverlap=Source and destination can not overlap +commands.clone.success=%d blocks cloned +commands.clone.failed=No blocks cloned +commands.clone.tooManyBlocks=Too many blocks in the specified area (%d > %d) +commands.compare.usage=/testforblocks [mode] +commands.compare.outOfWorld=Cannot access blocks outside of the world +commands.compare.failed=Source and destination are not identical +commands.compare.success=%d blocks compared +commands.compare.tooManyBlocks=Too many blocks in the specified area (%d > %d) +commands.blockdata.usage=/blockdata +commands.blockdata.success=Block data updated to: %s +commands.blockdata.tagError=Data tag parsing failed: %s +commands.blockdata.outOfWorld=Cannot change block outside of the world +commands.blockdata.notValid=The target block is not a data holder block +commands.blockdata.failed=The data tag did not change: %s +commands.entitydata.usage=/entitydata +commands.entitydata.success=Entity data updated to: %s +commands.entitydata.tagError=Data tag parsing failed: %s +commands.entitydata.noPlayers=%s is a player and cannot be changed +commands.entitydata.failed=The data tag did not change: %s +commands.effect.usage=/effect [seconds] [amplifier] [hideParticles] OR /effect clear +commands.effect.notFound=There is no such mob effect with ID %d +commands.effect.success=Given %1$s (ID %2$d) * %3$d to %4$s for %5$d seconds +commands.effect.success.removed=Took %1$s from %2$s +commands.effect.success.removed.all=Took all effects from %s +commands.effect.failure.notActive=Couldn't take %1$s from %2$s as they do not have the effect +commands.effect.failure.notActive.all=Couldn't take any effects from %s as they do not have any +commands.enchant.usage=/enchant [level] +commands.enchant.notFound=There is no such enchantment with ID %d +commands.enchant.noItem=The target doesn't hold an item +commands.enchant.cantEnchant=The selected enchantment can't be added to the target item +commands.enchant.cantCombine=%1$s can't be combined with %2$s +commands.enchant.success=Enchanting succeeded +commands.particle.usage=/particle [count] [mode] +commands.particle.success=Playing effect %s for %d times +commands.particle.notFound=Unknown effect name (%s) +commands.clear.usage=/clear [player] [item] [data] [maxCount] [dataTag] +commands.clear.success=Cleared the inventory of %s, removing %d items +commands.clear.testing=%s has %d items that match the criteria +commands.clear.failure=Could not clear the inventory of %s, no items to remove +commands.clear.tagError=Data tag parsing failed: %s +commands.downfall.usage=/toggledownfall +commands.downfall.success=Toggled downfall +commands.time.usage=/time +commands.time.added=Added %d to the time +commands.time.set=Set the time to %d +commands.time.query=Time is %d +commands.players.usage=/list +commands.players.list=There are %d/%d players online: +commands.banlist.ips=There are %d total banned IP addresses: +commands.banlist.players=There are %d total banned players: +commands.banlist.usage=/banlist [ips|players] +commands.kill.usage=/kill [player|entity] +commands.kill.successful=Killed %s +commands.kick.success=Kicked %s from the game +commands.kick.success.reason=Kicked %s from the game: '%s' +commands.kick.usage=/kick [reason ...] +commands.op.success=Opped %s +commands.op.failed=Could not op %s +commands.op.usage=/op +commands.deop.success=De-opped %s +commands.deop.failed=Could not de-op %s +commands.deop.usage=/deop +commands.say.usage=/say +commands.ban.success=Banned player %s +commands.ban.failed=Could not ban player %s +commands.ban.usage=/ban [reason ...] +commands.unban.success=Unbanned player %s +commands.unban.failed=Could not unban player %s +commands.unban.usage=/pardon +commands.banip.invalid=You have entered an invalid IP address or a player that is not online +commands.banip.success=Banned IP address %s +commands.banip.success.players=Banned IP address %s belonging to %s +commands.banip.usage=/ban-ip [reason ...] +commands.unbanip.invalid=You have entered an invalid IP address +commands.unbanip.success=Unbanned IP address %s +commands.unbanip.usage=/pardon-ip
      +commands.save.usage=/save-all +commands.save-on.alreadyOn=Saving is already turned on. +commands.save-on.usage=/save-on +commands.save-off.alreadyOff=Saving is already turned off. +commands.save-off.usage=/save-off +commands.save.enabled=Turned on world auto-saving +commands.save.disabled=Turned off world auto-saving +commands.save.start=Saving... +commands.save.success=Saved the world +commands.save.failed=Saving failed: %s +commands.stop.usage=/stop +commands.stop.start=Stopping the server +commands.tp.success=Teleported %s to %s +commands.tp.success.coordinates=Teleported %s to %s, %s, %s +commands.tp.usage=/tp [target player] OR /tp [target player] [ ] +commands.tp.notSameDimension=Unable to teleport because players are not in the same dimension +commands.whitelist.list=There are %d (out of %d seen) whitelisted players: +commands.whitelist.enabled=Turned on the whitelist +commands.whitelist.disabled=Turned off the whitelist +commands.whitelist.reloaded=Reloaded the whitelist +commands.whitelist.add.success=Added %s to the whitelist +commands.whitelist.add.failed=Could not add %s to the whitelist +commands.whitelist.add.usage=/whitelist add +commands.whitelist.remove.success=Removed %s from the whitelist +commands.whitelist.remove.failed=Could not remove %s from the whitelist +commands.whitelist.remove.usage=/whitelist remove +commands.whitelist.usage=/whitelist +commands.scoreboard.usage=/scoreboard ... +commands.scoreboard.noMultiWildcard=Only one user wildcard allowed +commands.scoreboard.allMatchesFailed=All matches failed +commands.scoreboard.teamNotFound=No team was found by the name '%s' +commands.scoreboard.objectiveNotFound=No objective was found by the name '%s' +commands.scoreboard.objectiveReadOnly=The objective '%s' is read-only and cannot be set +commands.scoreboard.objectives.usage=/scoreboard objectives ... +commands.scoreboard.objectives.setdisplay.usage=/scoreboard objectives setdisplay [objective] +commands.scoreboard.objectives.setdisplay.invalidSlot=No such display slot '%s' +commands.scoreboard.objectives.setdisplay.successCleared=Cleared objective display slot '%s' +commands.scoreboard.objectives.setdisplay.successSet=Set the display objective in slot '%s' to '%s' +commands.scoreboard.objectives.add.usage=/scoreboard objectives add [display name ...] +commands.scoreboard.objectives.add.wrongType=Invalid objective criteria type '%s' +commands.scoreboard.objectives.add.alreadyExists=An objective with the name '%s' already exists +commands.scoreboard.objectives.add.tooLong=The name '%s' is too long for an objective, it can be at most %d characters long +commands.scoreboard.objectives.add.displayTooLong=The display name '%s' is too long for an objective, it can be at most %d characters long +commands.scoreboard.objectives.add.success=Added new objective '%s' successfully +commands.scoreboard.objectives.remove.usage=/scoreboard objectives remove +commands.scoreboard.objectives.remove.success=Removed objective '%s' successfully +commands.scoreboard.objectives.list.count=Showing %d objective(s) on scoreboard: +commands.scoreboard.objectives.list.entry=- %s: displays as '%s' and is type '%s' +commands.scoreboard.objectives.list.empty=There are no objectives on the scoreboard +commands.scoreboard.players.usage=/scoreboard players ... +commands.scoreboard.players.name.tooLong=The name '%s' is too long for a player, it can be at most %d characters long +commands.scoreboard.players.set.success=Set score of %s for player %s to %d +commands.scoreboard.players.set.tagMismatch=The dataTag does not match for %s +commands.scoreboard.players.set.tagError=Could not parse dataTag, reason: %s +commands.scoreboard.players.set.usage=/scoreboard players set [dataTag] +commands.scoreboard.players.add.usage=/scoreboard players add [dataTag] +commands.scoreboard.players.remove.usage=/scoreboard players remove [dataTag] +commands.scoreboard.players.reset.usage=/scoreboard players reset [objective] +commands.scoreboard.players.reset.success=Reset scores of player %s +commands.scoreboard.players.resetscore.success=Reset score %s of player %s +commands.scoreboard.players.list.usage=/scoreboard players list [name] +commands.scoreboard.players.list.count=Showing %d tracked players on the scoreboard: +commands.scoreboard.players.list.empty=There are no tracked players on the scoreboard +commands.scoreboard.players.list.player.count=Showing %d tracked objective(s) for %s: +commands.scoreboard.players.list.player.entry=- %2$s: %1$d (%3$s) +commands.scoreboard.players.list.player.empty=Player %s has no scores recorded +commands.scoreboard.players.enable.usage=/scoreboard players enable +commands.scoreboard.players.enable.success=Enabled trigger %s for %s +commands.scoreboard.players.enable.noTrigger=Objective %s is not a trigger +commands.scoreboard.players.test.usage=/scoreboard players test +commands.scoreboard.players.test.notFound=No %s score for %s found +commands.scoreboard.players.test.failed=Score %d is NOT in range %d to %d +commands.scoreboard.players.test.success=Score %d is in range %d to %d +commands.scoreboard.players.operation.usage=/scoreboard players operation +commands.scoreboard.players.operation.notFound=No %s score for %s found +commands.scoreboard.players.operation.invalidOperation=Invalid operation %s +commands.scoreboard.players.operation.success=Operation applied successfully +commands.scoreboard.teams.usage=/scoreboard teams ... +commands.scoreboard.teams.add.usage=/scoreboard teams add [display name ...] +commands.scoreboard.teams.add.alreadyExists=A team with the name '%s' already exists +commands.scoreboard.teams.add.tooLong=The name '%s' is too long for a team, it can be at most %d characters long +commands.scoreboard.teams.add.displayTooLong=The display name '%s' is too long for a team, it can be at most %d characters long +commands.scoreboard.teams.add.success=Added new team '%s' successfully +commands.scoreboard.teams.list.usage=/scoreboard teams list [name] +commands.scoreboard.teams.list.count=Showing %d teams on the scoreboard: +commands.scoreboard.teams.list.entry=- %1$s: '%2$s' has %3$d players +commands.scoreboard.teams.list.empty=There are no teams registered on the scoreboard +commands.scoreboard.teams.list.player.count=Showing %d player(s) in team %s: +commands.scoreboard.teams.list.player.entry=- %2$s: %1$d (%3$s) +commands.scoreboard.teams.list.player.empty=Team %s has no players +commands.scoreboard.teams.empty.usage=/scoreboard teams empty +commands.scoreboard.teams.empty.alreadyEmpty=Team %s is already empty, cannot remove nonexistant players +commands.scoreboard.teams.empty.success=Removed all %d player(s) from team %s +commands.scoreboard.teams.remove.usage=/scoreboard teams remove +commands.scoreboard.teams.remove.success=Removed team %s +commands.scoreboard.teams.join.usage=/scoreboard teams join [player] +commands.scoreboard.teams.join.success=Added %d player(s) to team %s: %s +commands.scoreboard.teams.join.failure=Could not add %d player(s) to team %s: %s +commands.scoreboard.teams.leave.usage=/scoreboard teams leave [player] +commands.scoreboard.teams.leave.success=Removed %d player(s) from their teams: %s +commands.scoreboard.teams.leave.failure=Could not remove %d player(s) from their teams: %s +commands.scoreboard.teams.leave.noTeam=You are not in a team +commands.scoreboard.teams.option.usage=/scoreboard teams option +commands.scoreboard.teams.option.noValue=Valid values for option %s are: %s +commands.scoreboard.teams.option.success=Set option %s for team %s to %s +commands.execute.usage=/execute OR /execute detect +commands.execute.allInvocationsFailed=All invocations failed: '%s' +commands.execute.failed=Failed to execute '%s' as %s +commands.gamemode.success.self=Set own game mode to %s +commands.gamemode.success.other=Set %s's game mode to %s +commands.gamemode.usage=/gamemode [player] +commands.defaultgamemode.usage=/defaultgamemode +commands.defaultgamemode.success=The world's default game mode is now %s +commands.me.usage=/me +commands.help.header=--- Showing help page %d of %d (/help ) --- +commands.help.footer=Tip: Use the key while typing a command to auto-complete the command or its arguments +commands.help.usage=/help [page|command name] +commands.trigger.usage=/trigger +commands.trigger.invalidObjective=Invalid trigger name %s +commands.trigger.invalidMode=Invalid trigger mode %s +commands.trigger.disabled=Trigger %s is not enabled +commands.trigger.invalidPlayer=Only players can use the /trigger command +commands.trigger.success=Trigger %s changed with %s %s +commands.publish.usage=/publish +commands.publish.started=Local game hosted on port %s +commands.publish.failed=Unable to host local game +commands.debug.start=Started debug profiling +commands.debug.stop=Stopped debug profiling after %.2f seconds (%d ticks) +commands.debug.notStarted=Can't stop profiling when we haven't started yet! +commands.debug.usage=/debug +commands.chunkinfo.usage=/chunkinfo [ ] +commands.chunkinfo.location=Chunk location: (%d, %d, %d) +commands.chunkinfo.noChunk=No chunk found at chunk position %d, %d, %d +commands.chunkinfo.notEmpty=Chunk is not empty. +commands.chunkinfo.empty=Chunk is empty. +commands.chunkinfo.notCompiled=Chunk is not compiled. +commands.chunkinfo.compiled=Chunk is compiled. +commands.chunkinfo.hasNoRenderableLayers=Chunk has no renderable layers. +commands.chunkinfo.hasLayers=Chunk has layers: %s +commands.chunkinfo.isEmpty=Chunk has empty layers: %s +commands.chunkinfo.vertices=%s layer's buffer contains %d vertices +commands.chunkinfo.data=First 64 vertices are: %s +commands.tellraw.usage=/tellraw +commands.tellraw.jsonException=Invalid json: %s +commands.message.usage=/tell +commands.message.sameTarget=You can't send a private message to yourself! +commands.message.display.outgoing=You whisper to %s: %s +commands.message.display.incoming=%s whispers to you: %s +commands.difficulty.usage=/difficulty +commands.difficulty.success=Set game difficulty to %s +commands.spawnpoint.usage=/spawnpoint [player] [ ] +commands.spawnpoint.success=Set %s's spawn point to (%d, %d, %d) +commands.setworldspawn.usage=/setworldspawn [ ] +commands.setworldspawn.success=Set the world spawn point to (%d, %d, %d) +commands.gamerule.usage=/gamerule [value] +commands.gamerule.success=Game rule has been updated +commands.gamerule.norule=No game rule called '%s' is available +commands.gamerule.nopermission=Only server owners can change '%s' +commands.weather.usage=/weather [duration in seconds] +commands.weather.clear=Changing to clear weather +commands.weather.rain=Changing to rainy weather +commands.weather.thunder=Changing to rain and thunder +commands.testfor.usage=/testfor [dataTag] +commands.testfor.failure=%s did not match the required data structure +commands.testfor.success=Found %s +commands.testfor.tagError=Data tag parsing failed: %s +commands.seed.usage=/seed +commands.seed.success=Seed: %s +commands.spreadplayers.usage=/spreadplayers +commands.spreadplayers.spreading.teams=Spreading %s teams %s blocks around %s,%s (min %s blocks apart) +commands.spreadplayers.spreading.players=Spreading %s players %s blocks around %s,%s (min %s blocks apart) +commands.spreadplayers.success.teams=Successfully spread %s teams around %s,%s +commands.spreadplayers.success.players=Successfully spread %s players around %s,%s +commands.spreadplayers.info.teams=(Average distance between teams is %s blocks apart after %s iterations) +commands.spreadplayers.info.players=(Average distance between players is %s blocks apart after %s iterations) +commands.spreadplayers.failure.teams=Could not spread %s teams around %s,%s (too many players for space - try using spread of at most %s) +commands.spreadplayers.failure.players=Could not spread %s players around %s,%s (too many players for space - try using spread of at most %s) +commands.achievement.usage=/achievement [player] +commands.achievement.unknownAchievement=Unknown achievement or statistic '%s' +commands.achievement.alreadyHave=Player %s already has achievement %s +commands.achievement.dontHave=Player %s doesn't have achievement %s +commands.achievement.give.success.all=Successfully given all achievements to %s +commands.achievement.give.success.one=Successfully given %s the stat %s +commands.achievement.take.success.all=Successfully taken all achievements from %s +commands.achievement.take.success.one=Successfully taken the stat %s from %s +commands.achievement.statTooLow=Player %s does not have the stat %s +commands.worldborder.usage=/worldborder ... +commands.worldborder.add.usage=/worldborder add [timeInSeconds] +commands.worldborder.set.usage=/worldborder set [timeInSeconds] +commands.worldborder.set.success=Set world border to %s blocks wide (from %s blocks) +commands.worldborder.get.success=World border is currently %s blocks wide +commands.worldborder.setSlowly.shrink.success=Shrinking world border to %s blocks wide (down from %s blocks) over %s seconds +commands.worldborder.setSlowly.grow.success=Growing world border to %s blocks wide (up from %s blocks) over %s seconds +commands.worldborder.center.usage=/worldborder center +commands.worldborder.center.success=Set world border center to %s,%s +commands.worldborder.damage.usage=/worldborder damage +commands.worldborder.damage.buffer.usage=/worldborder damage buffer +commands.worldborder.damage.buffer.success=Set world border damage buffer to %s blocks (from %s blocks) +commands.worldborder.damage.amount.usage=/worldborder damage amount +commands.worldborder.damage.amount.success=Set world border damage amount to %s per block (from %s per block) +commands.worldborder.warning.usage=/worldborder warning +commands.worldborder.warning.time.usage=/worldborder warning time +commands.worldborder.warning.time.success=Set world border warning to %s seconds away (from %s seconds) +commands.worldborder.warning.distance.usage=/worldborder warning distance +commands.worldborder.warning.distance.success=Set world border warning to %s blocks away (from %s blocks) +commands.title.usage=/title ... +commands.title.usage.title=/title title|subtitle +commands.title.usage.clear=/title clear|reset +commands.title.usage.times=/title times +commands.title.success=Title command successfully executed + +itemGroup.buildingBlocks=Building Blocks +itemGroup.decorations=Decoration Blocks +itemGroup.redstone=Redstone +itemGroup.transportation=Transportation +itemGroup.misc=Miscellaneous +itemGroup.search=Search Items +itemGroup.food=Foodstuffs +itemGroup.tools=Tools +itemGroup.combat=Combat +itemGroup.brewing=Brewing +itemGroup.materials=Materials +itemGroup.inventory=Survival Inventory + +inventory.binSlot=Destroy Item + +advMode.setCommand=Set Console Command for Block +advMode.setCommand.success=Command set: %s +advMode.command=Console Command +advMode.nearestPlayer=Use "@p" to target nearest player +advMode.randomPlayer=Use "@r" to target random player +advMode.allPlayers=Use "@a" to target all players +advMode.allEntities=Use "@e" to target all entities +advMode.previousOutput=Previous Output + +advMode.notEnabled=Command blocks are not enabled on this server +advMode.notAllowed=Must be an opped player in creative mode + +mount.onboard=Press %1$s to dismount + +build.tooHigh=Height limit for building is %s blocks + +attribute.modifier.plus.0=+%d %s +attribute.modifier.plus.1=+%d%% %s +attribute.modifier.plus.2=+%d%% %s +attribute.modifier.take.0=-%d %s +attribute.modifier.take.1=-%d%% %s +attribute.modifier.take.2=-%d%% %s + +attribute.name.horse.jumpStrength=Horse Jump Strength +attribute.name.zombie.spawnReinforcements=Zombie Reinforcements +attribute.name.generic.maxHealth=Max Health +attribute.name.generic.followRange=Mob Follow Range +attribute.name.generic.knockbackResistance=Knockback Resistance +attribute.name.generic.movementSpeed=Speed +attribute.name.generic.attackDamage=Attack Damage + +screenshot.success=Saved screenshot as %s +screenshot.failure=Couldn't save screenshot: %s + +stream.user.mode.moderator=Moderator +stream.user.mode.moderator.self=Moderator on your channel +stream.user.mode.moderator.other=Moderator on %s's channel +stream.user.mode.broadcaster=Broadcaster +stream.user.mode.broadcaster.self=Broadcaster (You!) +stream.user.mode.broadcaster.other=Broadcaster +stream.user.mode.administrator=Twitch Administrator +stream.user.mode.staff=Twitch Staff +stream.user.mode.banned=Banned +stream.user.mode.banned.self=Banned on your channel +stream.user.mode.banned.other=Banned on %s's channel +stream.user.subscription.subscriber=Subscriber +stream.user.subscription.subscriber.self=Subscriber to your channel +stream.user.subscription.subscriber.other=Subscriber to %s's channel +stream.user.subscription.turbo=Twitch Turbo + +stream.unavailable.title=Twitch Broadcasting Unavailable +stream.unavailable.report_to_mojang=Report to Mojang + +stream.confirm_start=Are you sure you want to start broadcasting? + +stream.unavailable.account_not_bound=Before you can broadcast Minecraft through Twitch, you will need to link your Twitch account on mojang.com. Would you like to do that now? +stream.unavailable.account_not_bound.okay=Link Accounts +stream.unavailable.account_not_migrated=Before you can broadcast Minecraft through Twitch, you will need to migrate your Minecraft account to a Mojang account. Would you like to do that now? +stream.unavailable.account_not_migrated.okay=Migrate Account +stream.unavailable.failed_auth=Authentication to Twitch failed. Please go to mojang.com and rebind your Twitch account. +stream.unavailable.failed_auth.okay=Rebind Accounts +stream.unavailable.failed_auth_error=Unable to authenticate to Twitch. Please try again later. +stream.unavailable.initialization_failure=Unable to initialize the Twitch SDK. +stream.unavailable.initialization_failure.extra=(Reason: %s) +stream.unavailable.library_arch_mismatch=The custom java version used to launch Minecraft has a different architecture than the one used to run the launcher. Please make sure these are the same, either 32-bit or 64-bit for both. +stream.unavailable.library_failure=Unable to load the libraries needed for the integrated Twitch broadcasting service. +stream.unavailable.no_fbo=Your video card needs to support at least OpenGL version 3.0 or support Framebuffer Objects via an extension to use the integrated Twitch broadcasting. +stream.unavailable.no_fbo.version=You are currently using: %s +stream.unavailable.no_fbo.blend=Separate blending support via EXT is: %s +stream.unavailable.no_fbo.arb=Framebuffer object support via ARB is: %s +stream.unavailable.no_fbo.ext=Framebuffer object support via EXT is: %s +stream.unavailable.not_supported.windows=Unfortunately the integrated Twitch broadcasting requires a newer version of Windows than you are on. You must have at least Windows Vista or newer. +stream.unavailable.not_supported.mac=Unfortunately the integrated Twitch broadcasting on Mac requires a version of OSX newer than the one you are on. You must use 10.7 (Mac OS X Lion) or newer to be able to use this service. Would you like to visit apple.com to learn about upgrading? +stream.unavailable.not_supported.mac.okay=Upgrade +stream.unavailable.not_supported.other=Unfortunately the integrated Twitch broadcasting service requires Windows (Vista or newer) or Mac OS X (10.7/Lion or newer) +stream.unavailable.unknown=Unfortunately you cannot broadcast to Twitch at this time. And we don't know why :'( +stream.unavailable.unknown.chat=Could not start stream: %s + +stream.unavailable.soundflower.chat=Soundflower is required to be able to stream on Mac. %s +stream.unavailable.soundflower.chat.link=Please click here to install it. + +stream.userinfo.chatTooltip=Click to manage user +stream.userinfo.timeout=Timeout +stream.userinfo.ban=Ban +stream.userinfo.unban=Unban +stream.userinfo.mod=Promote to Moderator +stream.userinfo.unmod=Demote from Moderator + +item.banner.black.name=Black Banner +item.banner.red.name=Red Banner +item.banner.green.name=Green Banner +item.banner.brown.name=Brown Banner +item.banner.blue.name=Blue Banner +item.banner.purple.name=Purple Banner +item.banner.cyan.name=Cyan Banner +item.banner.silver.name=Light Gray Banner +item.banner.gray.name=Gray Banner +item.banner.pink.name=Pink Banner +item.banner.lime.name=Lime Banner +item.banner.yellow.name=Yellow Banner +item.banner.lightBlue.name=Light Blue Banner +item.banner.magenta.name=Magenta Banner +item.banner.orange.name=Orange Banner +item.banner.white.name=White Banner + +item.banner.square_bottom_left.black=Black Base Dexter Canton +item.banner.square_bottom_left.red=Red Base Dexter Canton +item.banner.square_bottom_left.green=Green Base Dexter Canton +item.banner.square_bottom_left.brown=Brown Base Dexter Canton +item.banner.square_bottom_left.blue=Blue Base Dexter Canton +item.banner.square_bottom_left.purple=Purple Base Dexter Canton +item.banner.square_bottom_left.cyan=Cyan Base Dexter Canton +item.banner.square_bottom_left.silver=Light Gray Base Dexter Canton +item.banner.square_bottom_left.gray=Gray Base Dexter Canton +item.banner.square_bottom_left.pink=Pink Base Dexter Canton +item.banner.square_bottom_left.lime=Lime Base Dexter Canton +item.banner.square_bottom_left.yellow=Yellow Base Dexter Canton +item.banner.square_bottom_left.lightBlue=Light Blue Base Dexter Canton +item.banner.square_bottom_left.magenta=Magenta Base Dexter Canton +item.banner.square_bottom_left.orange=Orange Base Dexter Canton +item.banner.square_bottom_left.white=White Base Dexter Canton + +item.banner.square_bottom_right.black=Black Base Sinister Canton +item.banner.square_bottom_right.red=Red Base Sinister Canton +item.banner.square_bottom_right.green=Green Base Sinister Canton +item.banner.square_bottom_right.brown=Brown Base Sinister Canton +item.banner.square_bottom_right.blue=Blue Base Sinister Canton +item.banner.square_bottom_right.purple=Purple Base Sinister Canton +item.banner.square_bottom_right.cyan=Cyan Base Sinister Canton +item.banner.square_bottom_right.silver=Light Gray Base Sinister Canton +item.banner.square_bottom_right.gray=Gray Base Sinister Canton +item.banner.square_bottom_right.pink=Pink Base Sinister Canton +item.banner.square_bottom_right.lime=Lime Base Sinister Canton +item.banner.square_bottom_right.yellow=Yellow Base Sinister Canton +item.banner.square_bottom_right.lightBlue=Light Blue Base Sinister Canton +item.banner.square_bottom_right.magenta=Magenta Base Sinister Canton +item.banner.square_bottom_right.orange=Orange Base Sinister Canton +item.banner.square_bottom_right.white=White Base Sinister Canton + +item.banner.square_top_left.black=Black Chief Dexter Canton +item.banner.square_top_left.red=Red Chief Dexter Canton +item.banner.square_top_left.green=Green Chief Dexter Canton +item.banner.square_top_left.brown=Brown Chief Dexter Canton +item.banner.square_top_left.blue=Blue Chief Dexter Canton +item.banner.square_top_left.purple=Purple Chief Dexter Canton +item.banner.square_top_left.cyan=Cyan Chief Dexter Canton +item.banner.square_top_left.silver=Light Gray Chief Dexter Canton +item.banner.square_top_left.gray=Gray Chief Dexter Canton +item.banner.square_top_left.pink=Pink Chief Dexter Canton +item.banner.square_top_left.lime=Lime Chief Dexter Canton +item.banner.square_top_left.yellow=Yellow Chief Dexter Canton +item.banner.square_top_left.lightBlue=Light Blue Chief Dexter Canton +item.banner.square_top_left.magenta=Magenta Chief Dexter Canton +item.banner.square_top_left.orange=Orange Chief Dexter Canton +item.banner.square_top_left.white=White Chief Dexter Canton + +item.banner.square_top_right.black=Black Chief Sinister Canton +item.banner.square_top_right.red=Red Chief Sinister Canton +item.banner.square_top_right.green=Green Chief Sinister Canton +item.banner.square_top_right.brown=Brown Chief Sinister Canton +item.banner.square_top_right.blue=Blue Chief Sinister Canton +item.banner.square_top_right.purple=Purple Chief Sinister Canton +item.banner.square_top_right.cyan=Cyan Chief Sinister Canton +item.banner.square_top_right.silver=Light Gray Chief Sinister Canton +item.banner.square_top_right.gray=Gray Chief Sinister Canton +item.banner.square_top_right.pink=Pink Chief Sinister Canton +item.banner.square_top_right.lime=Lime Chief Sinister Canton +item.banner.square_top_right.yellow=Yellow Chief Sinister Canton +item.banner.square_top_right.lightBlue=Light Blue Chief Sinister Canton +item.banner.square_top_right.magenta=Magenta Chief Sinister Canton +item.banner.square_top_right.orange=Orange Chief Sinister Canton +item.banner.square_top_right.white=White Chief Sinister Canton + +item.banner.stripe_bottom.black=Black Base Fess +item.banner.stripe_bottom.red=Red Base Fess +item.banner.stripe_bottom.green=Green Base Fess +item.banner.stripe_bottom.brown=Brown Base Fess +item.banner.stripe_bottom.blue=Blue Base Fess +item.banner.stripe_bottom.purple=Purple Base Fess +item.banner.stripe_bottom.cyan=Cyan Base Fess +item.banner.stripe_bottom.silver=Light Gray Base Fess +item.banner.stripe_bottom.gray=Gray Base Fess +item.banner.stripe_bottom.pink=Pink Base Fess +item.banner.stripe_bottom.lime=Lime Base Fess +item.banner.stripe_bottom.yellow=Yellow Base Fess +item.banner.stripe_bottom.lightBlue=Light Blue Base Fess +item.banner.stripe_bottom.magenta=Magenta Base Fess +item.banner.stripe_bottom.orange=Orange Base Fess +item.banner.stripe_bottom.white=White Base Fess + +item.banner.stripe_top.black=Black Chief Fess +item.banner.stripe_top.red=Red Chief Fess +item.banner.stripe_top.green=Green Chief Fess +item.banner.stripe_top.brown=Brown Chief Fess +item.banner.stripe_top.blue=Blue Chief Fess +item.banner.stripe_top.purple=Purple Chief Fess +item.banner.stripe_top.cyan=Cyan Chief Fess +item.banner.stripe_top.silver=Light Gray Chief Fess +item.banner.stripe_top.gray=Gray Chief Fess +item.banner.stripe_top.pink=Pink Chief Fess +item.banner.stripe_top.lime=Lime Chief Fess +item.banner.stripe_top.yellow=Yellow Chief Fess +item.banner.stripe_top.lightBlue=Light Blue Chief Fess +item.banner.stripe_top.magenta=Magenta Chief Fess +item.banner.stripe_top.orange=Orange Chief Fess +item.banner.stripe_top.white=White Chief Fess + +item.banner.stripe_left.black=Black Pale Dexter +item.banner.stripe_left.red=Red Pale Dexter +item.banner.stripe_left.green=Green Pale Dexter +item.banner.stripe_left.brown=Brown Pale Dexter +item.banner.stripe_left.blue=Blue Pale Dexter +item.banner.stripe_left.purple=Purple Pale Dexter +item.banner.stripe_left.cyan=Cyan Pale Dexter +item.banner.stripe_left.silver=Light Gray Pale Dexter +item.banner.stripe_left.gray=Gray Pale Dexter +item.banner.stripe_left.pink=Pink Pale Dexter +item.banner.stripe_left.lime=Lime Pale Dexter +item.banner.stripe_left.yellow=Yellow Pale Dexter +item.banner.stripe_left.lightBlue=Light Blue Pale Dexter +item.banner.stripe_left.magenta=Magenta Pale Dexter +item.banner.stripe_left.orange=Orange Pale Dexter +item.banner.stripe_left.white=White Pale Dexter + +item.banner.stripe_right.black=Black Pale Sinister +item.banner.stripe_right.red=Red Pale Sinister +item.banner.stripe_right.green=Green Pale Sinister +item.banner.stripe_right.brown=Brown Pale Sinister +item.banner.stripe_right.blue=Blue Pale Sinister +item.banner.stripe_right.purple=Purple Pale Sinister +item.banner.stripe_right.cyan=Cyan Pale Sinister +item.banner.stripe_right.silver=Light Gray Pale Sinister +item.banner.stripe_right.gray=Gray Pale Sinister +item.banner.stripe_right.pink=Pink Pale Sinister +item.banner.stripe_right.lime=Lime Pale Sinister +item.banner.stripe_right.yellow=Yellow Pale Sinister +item.banner.stripe_right.lightBlue=Light Blue Pale Sinister +item.banner.stripe_right.magenta=Magenta Pale Sinister +item.banner.stripe_right.orange=Orange Pale Sinister +item.banner.stripe_right.white=White Pale Sinister + +item.banner.stripe_center.black=Black Pale +item.banner.stripe_center.red=Red Pale +item.banner.stripe_center.green=Green Pale +item.banner.stripe_center.brown=Brown Pale +item.banner.stripe_center.blue=Blue Pale +item.banner.stripe_center.purple=Purple Pale +item.banner.stripe_center.cyan=Cyan Pale +item.banner.stripe_center.silver=Light Gray Pale +item.banner.stripe_center.gray=Gray Pale +item.banner.stripe_center.pink=Pink Pale +item.banner.stripe_center.lime=Lime Pale +item.banner.stripe_center.yellow=Yellow Pale +item.banner.stripe_center.lightBlue=Light Blue Pale +item.banner.stripe_center.magenta=Magenta Pale +item.banner.stripe_center.orange=Orange Pale +item.banner.stripe_center.white=White Pale + +item.banner.stripe_middle.black=Black Fess +item.banner.stripe_middle.red=Red Fess +item.banner.stripe_middle.green=Green Fess +item.banner.stripe_middle.brown=Brown Fess +item.banner.stripe_middle.blue=Blue Fess +item.banner.stripe_middle.purple=Purple Fess +item.banner.stripe_middle.cyan=Cyan Fess +item.banner.stripe_middle.silver=Light Gray Fess +item.banner.stripe_middle.gray=Gray Fess +item.banner.stripe_middle.pink=Pink Fess +item.banner.stripe_middle.lime=Lime Fess +item.banner.stripe_middle.yellow=Yellow Fess +item.banner.stripe_middle.lightBlue=Light Blue Fess +item.banner.stripe_middle.magenta=Magenta Fess +item.banner.stripe_middle.orange=Orange Fess +item.banner.stripe_middle.white=White Fess + +item.banner.stripe_downright.black=Black Bend +item.banner.stripe_downright.red=Red Bend +item.banner.stripe_downright.green=Green Bend +item.banner.stripe_downright.brown=Brown Bend +item.banner.stripe_downright.blue=Blue Bend +item.banner.stripe_downright.purple=Purple Bend +item.banner.stripe_downright.cyan=Cyan Bend +item.banner.stripe_downright.silver=Light Gray Bend +item.banner.stripe_downright.gray=Gray Bend +item.banner.stripe_downright.pink=Pink Bend +item.banner.stripe_downright.lime=Lime Bend +item.banner.stripe_downright.yellow=Yellow Bend +item.banner.stripe_downright.lightBlue=Light Blue Bend +item.banner.stripe_downright.magenta=Magenta Bend +item.banner.stripe_downright.orange=Orange Bend +item.banner.stripe_downright.white=White Bend + +item.banner.stripe_downleft.black=Black Bend Sinister +item.banner.stripe_downleft.red=Red Bend Sinister +item.banner.stripe_downleft.green=Green Bend Sinister +item.banner.stripe_downleft.brown=Brown Bend Sinister +item.banner.stripe_downleft.blue=Blue Bend Sinister +item.banner.stripe_downleft.purple=Purple Bend Sinister +item.banner.stripe_downleft.cyan=Cyan Bend Sinister +item.banner.stripe_downleft.silver=Light Gray Bend Sinister +item.banner.stripe_downleft.gray=Gray Bend Sinister +item.banner.stripe_downleft.pink=Pink Bend Sinister +item.banner.stripe_downleft.lime=Lime Bend Sinister +item.banner.stripe_downleft.yellow=Yellow Bend Sinister +item.banner.stripe_downleft.lightBlue=Light Blue Bend Sinister +item.banner.stripe_downleft.magenta=Magenta Bend Sinister +item.banner.stripe_downleft.orange=Orange Bend Sinister +item.banner.stripe_downleft.white=White Bend Sinister + +item.banner.small_stripes.black=Black Paly +item.banner.small_stripes.red=Red Paly +item.banner.small_stripes.green=Green Paly +item.banner.small_stripes.brown=Brown Paly +item.banner.small_stripes.blue=Blue Paly +item.banner.small_stripes.purple=Purple Paly +item.banner.small_stripes.cyan=Cyan Paly +item.banner.small_stripes.silver=Light Gray Paly +item.banner.small_stripes.gray=Gray Paly +item.banner.small_stripes.pink=Pink Paly +item.banner.small_stripes.lime=Lime Paly +item.banner.small_stripes.yellow=Yellow Paly +item.banner.small_stripes.lightBlue=Light Blue Paly +item.banner.small_stripes.magenta=Magenta Paly +item.banner.small_stripes.orange=Orange Paly +item.banner.small_stripes.white=White Paly + +item.banner.cross.black=Black Saltire +item.banner.cross.red=Red Saltire +item.banner.cross.green=Green Saltire +item.banner.cross.brown=Brown Saltire +item.banner.cross.blue=Blue Saltire +item.banner.cross.purple=Purple Saltire +item.banner.cross.cyan=Cyan Saltire +item.banner.cross.silver=Light Gray Saltire +item.banner.cross.gray=Gray Saltire +item.banner.cross.pink=Pink Saltire +item.banner.cross.lime=Lime Saltire +item.banner.cross.yellow=Yellow Saltire +item.banner.cross.lightBlue=Light Blue Saltire +item.banner.cross.magenta=Magenta Saltire +item.banner.cross.orange=Orange Saltire +item.banner.cross.white=White Saltire + +item.banner.triangle_bottom.black=Black Chevron +item.banner.triangle_bottom.red=Red Chevron +item.banner.triangle_bottom.green=Green Chevron +item.banner.triangle_bottom.brown=Brown Chevron +item.banner.triangle_bottom.blue=Blue Chevron +item.banner.triangle_bottom.purple=Purple Chevron +item.banner.triangle_bottom.cyan=Cyan Chevron +item.banner.triangle_bottom.silver=Light Gray Chevron +item.banner.triangle_bottom.gray=Gray Chevron +item.banner.triangle_bottom.pink=Pink Chevron +item.banner.triangle_bottom.lime=Lime Chevron +item.banner.triangle_bottom.yellow=Yellow Chevron +item.banner.triangle_bottom.lightBlue=Light Blue Chevron +item.banner.triangle_bottom.magenta=Magenta Chevron +item.banner.triangle_bottom.orange=Orange Chevron +item.banner.triangle_bottom.white=White Chevron + +item.banner.triangle_top.black=Black Inverted Chevron +item.banner.triangle_top.red=Red Inverted Chevron +item.banner.triangle_top.green=Green Inverted Chevron +item.banner.triangle_top.brown=Brown Inverted Chevron +item.banner.triangle_top.blue=Blue Inverted Chevron +item.banner.triangle_top.purple=Purple Inverted Chevron +item.banner.triangle_top.cyan=Cyan Inverted Chevron +item.banner.triangle_top.silver=Light Gray Inverted Chevron +item.banner.triangle_top.gray=Gray Inverted Chevron +item.banner.triangle_top.pink=Pink Inverted Chevron +item.banner.triangle_top.lime=Lime Inverted Chevron +item.banner.triangle_top.yellow=Yellow Inverted Chevron +item.banner.triangle_top.lightBlue=Light Blue Inverted Chevron +item.banner.triangle_top.magenta=Magenta Inverted Chevron +item.banner.triangle_top.orange=Orange Inverted Chevron +item.banner.triangle_top.white=White Inverted Chevron + +item.banner.triangles_bottom.black=Black Base Indented +item.banner.triangles_bottom.red=Red Base Indented +item.banner.triangles_bottom.green=Green Base Indented +item.banner.triangles_bottom.brown=Brown Base Indented +item.banner.triangles_bottom.blue=Blue Base Indented +item.banner.triangles_bottom.purple=Purple Base Indented +item.banner.triangles_bottom.cyan=Cyan Base Indented +item.banner.triangles_bottom.silver=Light Gray Base Indented +item.banner.triangles_bottom.gray=Gray Base Indented +item.banner.triangles_bottom.pink=Pink Base Indented +item.banner.triangles_bottom.lime=Lime Base Indented +item.banner.triangles_bottom.yellow=Yellow Base Indented +item.banner.triangles_bottom.lightBlue=Light Blue Base Indented +item.banner.triangles_bottom.magenta=Magenta Base Indented +item.banner.triangles_bottom.orange=Orange Base Indented +item.banner.triangles_bottom.white=White Base Indented + +item.banner.triangles_top.black=Black Chief Indented +item.banner.triangles_top.red=Red Chief Indented +item.banner.triangles_top.green=Green Chief Indented +item.banner.triangles_top.brown=Brown Chief Indented +item.banner.triangles_top.blue=Blue Chief Indented +item.banner.triangles_top.purple=Purple Chief Indented +item.banner.triangles_top.cyan=Cyan Chief Indented +item.banner.triangles_top.silver=Light Gray Chief Indented +item.banner.triangles_top.gray=Gray Chief Indented +item.banner.triangles_top.pink=Pink Chief Indented +item.banner.triangles_top.lime=Lime Chief Indented +item.banner.triangles_top.yellow=Yellow Chief Indented +item.banner.triangles_top.lightBlue=Light Blue Chief Indented +item.banner.triangles_top.magenta=Magenta Chief Indented +item.banner.triangles_top.orange=Orange Chief Indented +item.banner.triangles_top.white=White Chief Indented + +item.banner.diagonal_left.black=Black Per Bend Sinister +item.banner.diagonal_left.red=Red Per Bend Sinister +item.banner.diagonal_left.green=Green Per Bend Sinister +item.banner.diagonal_left.brown=Brown Per Bend Sinister +item.banner.diagonal_left.blue=Blue Per Bend Sinister +item.banner.diagonal_left.purple=Purple Per Bend Sinister +item.banner.diagonal_left.cyan=Cyan Per Bend Sinister +item.banner.diagonal_left.silver=Light Gray Per Bend Sinister +item.banner.diagonal_left.gray=Gray Per Bend Sinister +item.banner.diagonal_left.pink=Pink Per Bend Sinister +item.banner.diagonal_left.lime=Lime Per Bend Sinister +item.banner.diagonal_left.yellow=Yellow Per Bend Sinister +item.banner.diagonal_left.lightBlue=Light Blue Per Bend Sinister +item.banner.diagonal_left.magenta=Magenta Per Bend Sinister +item.banner.diagonal_left.orange=Orange Per Bend Sinister +item.banner.diagonal_left.white=White Per Bend Sinister + +item.banner.diagonal_right.black=Black Per Bend +item.banner.diagonal_right.red=Red Per Bend +item.banner.diagonal_right.green=Green Per Bend +item.banner.diagonal_right.brown=Brown Per Bend +item.banner.diagonal_right.blue=Blue Per Bend +item.banner.diagonal_right.purple=Purple Per Bend +item.banner.diagonal_right.cyan=Cyan Per Bend +item.banner.diagonal_right.silver=Light Gray Per Bend +item.banner.diagonal_right.gray=Gray Per Bend +item.banner.diagonal_right.pink=Pink Per Bend +item.banner.diagonal_right.lime=Lime Per Bend +item.banner.diagonal_right.yellow=Yellow Per Bend +item.banner.diagonal_right.lightBlue=Light Blue Per Bend +item.banner.diagonal_right.magenta=Magenta Per Bend +item.banner.diagonal_right.orange=Orange Per Bend +item.banner.diagonal_right.white=White Per Bend + +item.banner.diagonal_up_left.black=Black Per Bend Inverted +item.banner.diagonal_up_left.red=Red Per Bend Inverted +item.banner.diagonal_up_left.green=Green Per Bend Inverted +item.banner.diagonal_up_left.brown=Brown Per Bend Inverted +item.banner.diagonal_up_left.blue=Blue Per Bend Inverted +item.banner.diagonal_up_left.purple=Purple Per Bend Inverted +item.banner.diagonal_up_left.cyan=Cyan Per Bend Inverted +item.banner.diagonal_up_left.silver=Light Gray Per Bend Inverted +item.banner.diagonal_up_left.gray=Gray Per Bend Inverted +item.banner.diagonal_up_left.pink=Pink Per Bend Inverted +item.banner.diagonal_up_left.lime=Lime Per Bend Inverted +item.banner.diagonal_up_left.yellow=Yellow Per Bend Inverted +item.banner.diagonal_up_left.lightBlue=Light Blue Per Bend Inverted +item.banner.diagonal_up_left.magenta=Magenta Per Bend Inverted +item.banner.diagonal_up_left.orange=Orange Per Bend Inverted +item.banner.diagonal_up_left.white=White Per Bend Inverted + +item.banner.diagonal_up_right.black=Black Per Bend Sinister Inverted +item.banner.diagonal_up_right.red=Red Per Bend Sinister Inverted +item.banner.diagonal_up_right.green=Green Per Bend Sinister Inverted +item.banner.diagonal_up_right.brown=Brown Per Bend Sinister Inverted +item.banner.diagonal_up_right.blue=Blue Per Bend Sinister Inverted +item.banner.diagonal_up_right.purple=Purple Per Bend Sinister Inverted +item.banner.diagonal_up_right.cyan=Cyan Per Bend Sinister Inverted +item.banner.diagonal_up_right.silver=Light Gray Per Bend Sinister Inverted +item.banner.diagonal_up_right.gray=Gray Per Bend Sinister Inverted +item.banner.diagonal_up_right.pink=Pink Per Bend Sinister Inverted +item.banner.diagonal_up_right.lime=Lime Per Bend Sinister Inverted +item.banner.diagonal_up_right.yellow=Yellow Per Bend Sinister Inverted +item.banner.diagonal_up_right.lightBlue=Light Blue Per Bend Sinister Inverted +item.banner.diagonal_up_right.magenta=Magenta Per Bend Sinister Inverted +item.banner.diagonal_up_right.orange=Orange Per Bend Sinister Inverted +item.banner.diagonal_up_right.white=White Per Bend Sinister Inverted + +item.banner.circle.black=Black Roundel +item.banner.circle.red=Red Roundel +item.banner.circle.green=Green Roundel +item.banner.circle.brown=Brown Roundel +item.banner.circle.blue=Blue Roundel +item.banner.circle.purple=Purple Roundel +item.banner.circle.cyan=Cyan Roundel +item.banner.circle.silver=Light Gray Roundel +item.banner.circle.gray=Gray Roundel +item.banner.circle.pink=Pink Roundel +item.banner.circle.lime=Lime Roundel +item.banner.circle.yellow=Yellow Roundel +item.banner.circle.lightBlue=Light Blue Roundel +item.banner.circle.magenta=Magenta Roundel +item.banner.circle.orange=Orange Roundel +item.banner.circle.white=White Roundel + +item.banner.rhombus.black=Black Lozenge +item.banner.rhombus.red=Red Lozenge +item.banner.rhombus.green=Green Lozenge +item.banner.rhombus.brown=Brown Lozenge +item.banner.rhombus.blue=Blue Lozenge +item.banner.rhombus.purple=Purple Lozenge +item.banner.rhombus.cyan=Cyan Lozenge +item.banner.rhombus.silver=Light Gray Lozenge +item.banner.rhombus.gray=Gray Lozenge +item.banner.rhombus.pink=Pink Lozenge +item.banner.rhombus.lime=Lime Lozenge +item.banner.rhombus.yellow=Yellow Lozenge +item.banner.rhombus.lightBlue=Light Blue Lozenge +item.banner.rhombus.magenta=Magenta Lozenge +item.banner.rhombus.orange=Orange Lozenge +item.banner.rhombus.white=White Lozenge + +item.banner.half_vertical.black=Black Per Pale +item.banner.half_vertical.red=Red Per Pale +item.banner.half_vertical.green=Green Per Pale +item.banner.half_vertical.brown=Brown Per Pale +item.banner.half_vertical.blue=Blue Per Pale +item.banner.half_vertical.purple=Purple Per Pale +item.banner.half_vertical.cyan=Cyan Per Pale +item.banner.half_vertical.silver=Light Gray Per Pale +item.banner.half_vertical.gray=Gray Per Pale +item.banner.half_vertical.pink=Pink Per Pale +item.banner.half_vertical.lime=Lime Per Pale +item.banner.half_vertical.yellow=Yellow Per Pale +item.banner.half_vertical.lightBlue=Light Blue Per Pale +item.banner.half_vertical.magenta=Magenta Per Pale +item.banner.half_vertical.orange=Orange Per Pale +item.banner.half_vertical.white=White Per Pale + +item.banner.half_horizontal.black=Black Per Fess +item.banner.half_horizontal.red=Red Per Fess +item.banner.half_horizontal.green=Green Per Fess +item.banner.half_horizontal.brown=Brown Per Fess +item.banner.half_horizontal.blue=Blue Per Fess +item.banner.half_horizontal.purple=Purple Per Fess +item.banner.half_horizontal.cyan=Cyan Per Fess +item.banner.half_horizontal.silver=Light Gray Per Fess +item.banner.half_horizontal.gray=Gray Per Fess +item.banner.half_horizontal.pink=Pink Per Fess +item.banner.half_horizontal.lime=Lime Per Fess +item.banner.half_horizontal.yellow=Yellow Per Fess +item.banner.half_horizontal.lightBlue=Light Blue Per Fess +item.banner.half_horizontal.magenta=Magenta Per Fess +item.banner.half_horizontal.orange=Orange Per Fess +item.banner.half_horizontal.white=White Per Fess + +item.banner.half_vertical_right.black=Black Per Pale Inverted +item.banner.half_vertical_right.red=Red Per Pale Inverted +item.banner.half_vertical_right.green=Green Per Pale Inverted +item.banner.half_vertical_right.brown=Brown Per Pale Inverted +item.banner.half_vertical_right.blue=Blue Per Pale Inverted +item.banner.half_vertical_right.purple=Purple Per Pale Inverted +item.banner.half_vertical_right.cyan=Cyan Per Pale Inverted +item.banner.half_vertical_right.silver=Light Gray Per Pale Inverted +item.banner.half_vertical_right.gray=Gray Per Pale Inverted +item.banner.half_vertical_right.pink=Pink Per Pale Inverted +item.banner.half_vertical_right.lime=Lime Per Pale Inverted +item.banner.half_vertical_right.yellow=Yellow Per Pale Inverted +item.banner.half_vertical_right.lightBlue=Light Blue Per Pale Inverted +item.banner.half_vertical_right.magenta=Magenta Per Pale Inverted +item.banner.half_vertical_right.orange=Orange Per Pale Inverted +item.banner.half_vertical_right.white=White Per Pale Inverted + +item.banner.half_horizontal_bottom.black=Black Per Fess Inverted +item.banner.half_horizontal_bottom.red=Red Per Fess Inverted +item.banner.half_horizontal_bottom.green=Green Per Fess Inverted +item.banner.half_horizontal_bottom.brown=Brown Per Fess Inverted +item.banner.half_horizontal_bottom.blue=Blue Per Fess Inverted +item.banner.half_horizontal_bottom.purple=Purple Per Fess Inverted +item.banner.half_horizontal_bottom.cyan=Cyan Per Fess Inverted +item.banner.half_horizontal_bottom.silver=Light Gray Per Fess Inverted +item.banner.half_horizontal_bottom.gray=Gray Per Fess Inverted +item.banner.half_horizontal_bottom.pink=Pink Per Fess Inverted +item.banner.half_horizontal_bottom.lime=Lime Per Fess Inverted +item.banner.half_horizontal_bottom.yellow=Yellow Per Fess Inverted +item.banner.half_horizontal_bottom.lightBlue=Light Blue Per Fess Inverted +item.banner.half_horizontal_bottom.magenta=Magenta Per Fess Inverted +item.banner.half_horizontal_bottom.orange=Orange Per Fess Inverted +item.banner.half_horizontal_bottom.white=White Per Fess Inverted + +item.banner.creeper.black=Black Creeper Charge +item.banner.creeper.red=Red Creeper Charge +item.banner.creeper.green=Green Creeper Charge +item.banner.creeper.brown=Brown Creeper Charge +item.banner.creeper.blue=Blue Creeper Charge +item.banner.creeper.purple=Purple Creeper Charge +item.banner.creeper.cyan=Cyan Creeper Charge +item.banner.creeper.silver=Light Gray Creeper Charge +item.banner.creeper.gray=Gray Creeper Charge +item.banner.creeper.pink=Pink Creeper Charge +item.banner.creeper.lime=Lime Creeper Charge +item.banner.creeper.yellow=Yellow Creeper Charge +item.banner.creeper.lightBlue=Light Blue Creeper Charge +item.banner.creeper.magenta=Magenta Creeper Charge +item.banner.creeper.orange=Orange Creeper Charge +item.banner.creeper.white=White Creeper Charge + +item.banner.bricks.black=Black Field Masoned +item.banner.bricks.red=Red Field Masoned +item.banner.bricks.green=Green Field Masoned +item.banner.bricks.brown=Brown Field Masoned +item.banner.bricks.blue=Blue Field Masoned +item.banner.bricks.purple=Purple Field Masoned +item.banner.bricks.cyan=Cyan Field Masoned +item.banner.bricks.silver=Light Gray Field Masoned +item.banner.bricks.gray=Gray Field Masoned +item.banner.bricks.pink=Pink Field Masoned +item.banner.bricks.lime=Lime Field Masoned +item.banner.bricks.yellow=Yellow Field Masoned +item.banner.bricks.lightBlue=Light Blue Field Masoned +item.banner.bricks.magenta=Magenta Field Masoned +item.banner.bricks.orange=Orange Field Masoned +item.banner.bricks.white=White Field Masoned + +item.banner.gradient.black=Black Gradient +item.banner.gradient.red=Red Gradient +item.banner.gradient.green=Green Gradient +item.banner.gradient.brown=Brown Gradient +item.banner.gradient.blue=Blue Gradient +item.banner.gradient.purple=Purple Gradient +item.banner.gradient.cyan=Cyan Gradient +item.banner.gradient.silver=Light Gray Gradient +item.banner.gradient.gray=Gray Gradient +item.banner.gradient.pink=Pink Gradient +item.banner.gradient.lime=Lime Gradient +item.banner.gradient.yellow=Yellow Gradient +item.banner.gradient.lightBlue=Light Blue Gradient +item.banner.gradient.magenta=Magenta Gradient +item.banner.gradient.orange=Orange Gradient +item.banner.gradient.white=White Gradient + +item.banner.gradient_up.black=Black Base Gradient +item.banner.gradient_up.red=Red Base Gradient +item.banner.gradient_up.green=Green Base Gradient +item.banner.gradient_up.brown=Brown Base Gradient +item.banner.gradient_up.blue=Blue Base Gradient +item.banner.gradient_up.purple=Purple Base Gradient +item.banner.gradient_up.cyan=Cyan Base Gradient +item.banner.gradient_up.silver=Light Gray Base Gradient +item.banner.gradient_up.gray=Gray Base Gradient +item.banner.gradient_up.pink=Pink Base Gradient +item.banner.gradient_up.lime=Lime Base Gradient +item.banner.gradient_up.yellow=Yellow Base Gradient +item.banner.gradient_up.lightBlue=Light Blue Base Gradient +item.banner.gradient_up.magenta=Magenta Base Gradient +item.banner.gradient_up.orange=Orange Base Gradient +item.banner.gradient_up.white=White Base Gradient + +item.banner.skull.black=Black Skull Charge +item.banner.skull.red=Red Skull Charge +item.banner.skull.green=Green Skull Charge +item.banner.skull.brown=Brown Skull Charge +item.banner.skull.blue=Blue Skull Charge +item.banner.skull.purple=Purple Skull Charge +item.banner.skull.cyan=Cyan Skull Charge +item.banner.skull.silver=Light Gray Skull Charge +item.banner.skull.gray=Gray Skull Charge +item.banner.skull.pink=Pink Skull Charge +item.banner.skull.lime=Lime Skull Charge +item.banner.skull.yellow=Yellow Skull Charge +item.banner.skull.lightBlue=Light Blue Skull Charge +item.banner.skull.magenta=Magenta Skull Charge +item.banner.skull.orange=Orange Skull Charge +item.banner.skull.white=White Skull Charge + +item.banner.flower.black=Black Flower Charge +item.banner.flower.red=Red Flower Charge +item.banner.flower.green=Green Flower Charge +item.banner.flower.brown=Brown Flower Charge +item.banner.flower.blue=Blue Flower Charge +item.banner.flower.purple=Purple Flower Charge +item.banner.flower.cyan=Cyan Flower Charge +item.banner.flower.silver=Light Gray Flower Charge +item.banner.flower.gray=Gray Flower Charge +item.banner.flower.pink=Pink Flower Charge +item.banner.flower.lime=Lime Flower Charge +item.banner.flower.yellow=Yellow Flower Charge +item.banner.flower.lightBlue=Light Blue Flower Charge +item.banner.flower.magenta=Magenta Flower Charge +item.banner.flower.orange=Orange Flower Charge +item.banner.flower.white=White Flower Charge + +item.banner.border.black=Black Bordure +item.banner.border.red=Red Bordure +item.banner.border.green=Green Bordure +item.banner.border.brown=Brown Bordure +item.banner.border.blue=Blue Bordure +item.banner.border.purple=Purple Bordure +item.banner.border.cyan=Cyan Bordure +item.banner.border.silver=Light Gray Bordure +item.banner.border.gray=Gray Bordure +item.banner.border.pink=Pink Bordure +item.banner.border.lime=Lime Bordure +item.banner.border.yellow=Yellow Bordure +item.banner.border.lightBlue=Light Blue Bordure +item.banner.border.magenta=Magenta Bordure +item.banner.border.orange=Orange Bordure +item.banner.border.white=White Bordure + +item.banner.curly_border.black=Black Bordure Indented +item.banner.curly_border.red=Red Bordure Indented +item.banner.curly_border.green=Green Bordure Indented +item.banner.curly_border.brown=Brown Bordure Indented +item.banner.curly_border.blue=Blue Bordure Indented +item.banner.curly_border.purple=Purple Bordure Indented +item.banner.curly_border.cyan=Cyan Bordure Indented +item.banner.curly_border.silver=Light Gray Bordure Indented +item.banner.curly_border.gray=Gray Bordure Indented +item.banner.curly_border.pink=Pink Bordure Indented +item.banner.curly_border.lime=Lime Bordure Indented +item.banner.curly_border.yellow=Yellow Bordure Indented +item.banner.curly_border.lightBlue=Light Blue Bordure Indented +item.banner.curly_border.magenta=Magenta Bordure Indented +item.banner.curly_border.orange=Orange Bordure Indented +item.banner.curly_border.white=White Bordure Indented + +item.banner.mojang.black=Black Thing +item.banner.mojang.red=Red Thing +item.banner.mojang.green=Green Thing +item.banner.mojang.brown=Brown Thing +item.banner.mojang.blue=Blue Thing +item.banner.mojang.purple=Purple Thing +item.banner.mojang.cyan=Cyan Thing +item.banner.mojang.silver=Light Gray Thing +item.banner.mojang.gray=Gray Thing +item.banner.mojang.pink=Pink Thing +item.banner.mojang.lime=Lime Thing +item.banner.mojang.yellow=Yellow Thing +item.banner.mojang.lightBlue=Light Blue Thing +item.banner.mojang.magenta=Magenta Thing +item.banner.mojang.orange=Orange Thing +item.banner.mojang.white=White Thing + +item.banner.straight_cross.black=Black Cross +item.banner.straight_cross.red=Red Cross +item.banner.straight_cross.green=Green Cross +item.banner.straight_cross.brown=Brown Cross +item.banner.straight_cross.blue=Blue Cross +item.banner.straight_cross.purple=Purple Cross +item.banner.straight_cross.cyan=Cyan Cross +item.banner.straight_cross.silver=Light Gray Cross +item.banner.straight_cross.gray=Gray Cross +item.banner.straight_cross.pink=Pink Cross +item.banner.straight_cross.lime=Lime Cross +item.banner.straight_cross.yellow=Yellow Cross +item.banner.straight_cross.lightBlue=Light Blue Cross +item.banner.straight_cross.magenta=Magenta Cross +item.banner.straight_cross.orange=Orange Cross +item.banner.straight_cross.white=White Cross diff --git a/TacoSpigot-Server/src/main/resources/configurations/bukkit.yml b/eSpigot-Server/src/main/resources/configurations/bukkit.yml similarity index 100% rename from TacoSpigot-Server/src/main/resources/configurations/bukkit.yml rename to eSpigot-Server/src/main/resources/configurations/bukkit.yml diff --git a/TacoSpigot-Server/src/main/resources/configurations/commands.yml b/eSpigot-Server/src/main/resources/configurations/commands.yml similarity index 100% rename from TacoSpigot-Server/src/main/resources/configurations/commands.yml rename to eSpigot-Server/src/main/resources/configurations/commands.yml diff --git a/TacoSpigot-Server/src/main/resources/configurations/help.yml b/eSpigot-Server/src/main/resources/configurations/help.yml similarity index 100% rename from TacoSpigot-Server/src/main/resources/configurations/help.yml rename to eSpigot-Server/src/main/resources/configurations/help.yml diff --git a/eSpigot-Server/src/main/resources/log4j2.component.properties b/eSpigot-Server/src/main/resources/log4j2.component.properties new file mode 100644 index 0000000..0694b21 --- /dev/null +++ b/eSpigot-Server/src/main/resources/log4j2.component.properties @@ -0,0 +1 @@ +log4j.skipJansi=true diff --git a/TacoSpigot-Server/src/main/resources/log4j2.xml b/eSpigot-Server/src/main/resources/log4j2.xml similarity index 73% rename from TacoSpigot-Server/src/main/resources/log4j2.xml rename to eSpigot-Server/src/main/resources/log4j2.xml index 0452fbc..9af4553 100644 --- a/TacoSpigot-Server/src/main/resources/log4j2.xml +++ b/eSpigot-Server/src/main/resources/log4j2.xml @@ -1,12 +1,11 @@ - - - - + + + - + @@ -18,7 +17,6 @@ - diff --git a/eSpigot-Server/src/main/resources/yggdrasil_session_pubkey.der b/eSpigot-Server/src/main/resources/yggdrasil_session_pubkey.der new file mode 100644 index 0000000000000000000000000000000000000000..9c79a3aa4771da1f15af37a2af0898f878ad816f GIT binary patch literal 550 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 QuEJmfE|#`Dqx|px0L@K;Y5)KL literal 0 HcmV?d00001 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..69a9715 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100644 index 0000000..744e882 --- /dev/null +++ b/gradlew @@ -0,0 +1,185 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MSYS* | MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..107acd3 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/pom.xml b/pom.xml deleted file mode 100644 index 674eedc..0000000 --- a/pom.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - 4.0.0 - - - org.sonatype.oss - oss-parent - 7 - - - net.techcable.tacospigot - parent - dev-SNAPSHOT - pom - - TacoSpigot-Parent - Parent project for all TacoSpigot modules. - https://github.com/TacoSpigot/TacoSpigot - - - TacoSpigot-Server - TacoSpigot-API - - - - UTF-8 - - - - - md_5-releases - https://repo.md-5.net/content/repositories/releases/ - - - velocity-repo - https://repo.velocitypowered.com/snapshots/ - - - - - - destroystokyo-releases - https://repo.destroystokyo.com/content/repositories/releases/ - - - destroystokyo-snapshots - https://repo.destroystokyo.com/content/repositories/snapshots/ - - - diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 0000000..ad7bdb5 --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1,9 @@ +rootProject.name = "espigot" + +this.setupSubproject("espigot-server", "eSpigot-Server") +this.setupSubproject("espigot-api", "eSpigot-API") + +fun setupSubproject(name: String, dir: String) { + include(":$name") + project(":$name").projectDir = file(dir) +}

      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 literal 0 HcmV?d00001 diff --git a/.gradle/7.1/executionHistory/executionHistory.lock b/.gradle/7.1/executionHistory/executionHistory.lock new file mode 100644 index 0000000000000000000000000000000000000000..35c04fa776416ce423d8e7e5ba4704b98ebecf68 GIT binary patch literal 17 UcmZSn5GvG?^kaE50|YDw056s1TR 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