From 45b6378c95f64e5273766103f8868325e9391bb8 Mon Sep 17 00:00:00 2001 From: Xeno Date: Tue, 25 Aug 2020 19:06:02 -0500 Subject: [PATCH] Fixed Nether issues Fix #20 and fix #18 --- plugin.yml | 2 +- src/Xenophilicy/TableSpoon/EventListener.php | 4 +- src/Xenophilicy/TableSpoon/block/Anvil.php | 2 +- src/Xenophilicy/TableSpoon/block/Beacon.php | 24 ++--- src/Xenophilicy/TableSpoon/block/Bed.php | 4 +- .../TableSpoon/block/BlockManager.php | 2 +- .../TableSpoon/block/BrewingStand.php | 8 +- src/Xenophilicy/TableSpoon/block/Cauldron.php | 32 +++---- .../TableSpoon/block/DragonEgg.php | 21 +++-- .../TableSpoon/block/EnchantingTable.php | 6 +- .../TableSpoon/block/EndPortal.php | 20 ++--- .../TableSpoon/block/EndPortalFrame.php | 14 +-- src/Xenophilicy/TableSpoon/block/Fire.php | 6 +- .../TableSpoon/block/FrostedIce.php | 8 +- src/Xenophilicy/TableSpoon/block/Hopper.php | 40 ++++----- src/Xenophilicy/TableSpoon/block/Jukebox.php | 24 ++--- src/Xenophilicy/TableSpoon/block/Lava.php | 6 +- .../TableSpoon/block/LitPumpkin.php | 4 +- src/Xenophilicy/TableSpoon/block/Obsidian.php | 10 +-- src/Xenophilicy/TableSpoon/block/Portal.php | 22 ++--- src/Xenophilicy/TableSpoon/block/Pumpkin.php | 4 +- src/Xenophilicy/TableSpoon/block/Rail.php | 57 ++++++------ .../TableSpoon/block/ShulkerBox.php | 20 ++--- .../TableSpoon/block/SlimeBlock.php | 14 +-- .../TableSpoon/block/SnowLayer.php | 4 +- src/Xenophilicy/TableSpoon/block/Sponge.php | 14 +-- .../TableSpoon/block/StillLava.php | 6 +- .../multiblock/EndPortalFrameMultiBlock.php | 2 +- .../block/multiblock/EndPortalMultiBlock.php | 2 +- .../block/multiblock/MultiBlock.php | 10 +-- .../multiblock/MultiBlockEventHandler.php | 2 +- .../block/multiblock/MultiBlockFactory.php | 2 +- .../NetherPortalFrameMultiBlock.php | 30 +++---- .../multiblock/NetherPortalMultiBlock.php | 2 +- .../block/multiblock/PortalMultiBlock.php | 2 +- .../entity/object/AreaEffectCloud.php | 4 +- .../TableSpoon/entity/object/ArmorStand.php | 71 ++++++++------- .../TableSpoon/entity/object/EndCrystal.php | 2 +- .../TableSpoon/entity/object/LeadKnot.php | 2 +- .../TableSpoon/entity/object/Lightning.php | 2 +- .../entity/projectile/FireworkRocket.php | 4 +- .../TableSpoon/entity/vehicle/Boat.php | 18 ++-- .../TableSpoon/entity/vehicle/Vehicle.php | 57 ++++++------ .../event/DimensionPortalsEvent.php | 2 +- .../event/player/PlayerEnterPortalEvent.php | 2 +- .../player/PlayerPortalTeleportEvent.php | 2 +- .../TableSpoon/inventory/EnchantInventory.php | 1 - .../TableSpoon/item/ArmorStand.php | 2 +- src/Xenophilicy/TableSpoon/item/BlazeRod.php | 2 +- src/Xenophilicy/TableSpoon/item/Boat.php | 12 +-- src/Xenophilicy/TableSpoon/item/Bow.php | 2 +- src/Xenophilicy/TableSpoon/item/Bucket.php | 2 +- .../TableSpoon/item/DragonBreath.php | 2 +- src/Xenophilicy/TableSpoon/item/Elytra.php | 2 +- .../TableSpoon/item/EnchantedBook.php | 2 +- .../TableSpoon/item/EndCrystal.php | 2 +- .../TableSpoon/item/EyeOfEnder.php | 2 +- .../TableSpoon/item/FireCharge.php | 2 +- src/Xenophilicy/TableSpoon/item/Fireworks.php | 2 +- .../TableSpoon/item/FishingRod.php | 2 +- .../TableSpoon/item/GlassBottle.php | 2 +- .../TableSpoon/item/ItemManager.php | 2 +- src/Xenophilicy/TableSpoon/item/Lead.php | 2 +- .../TableSpoon/item/LingeringPotion.php | 2 +- src/Xenophilicy/TableSpoon/item/Minecart.php | 2 +- src/Xenophilicy/TableSpoon/item/Record.php | 12 +-- .../TableSpoon/item/ShulkerBox.php | 12 +-- src/Xenophilicy/TableSpoon/item/Trident.php | 2 +- .../TableSpoon/item/UnDyedShulkerBox.php | 2 +- .../item/enchantment/Enchantment.php | 2 +- .../TableSpoon/item/utils/ArmorDurability.php | 14 +-- .../TableSpoon/item/utils/FireworksData.php | 2 +- .../item/utils/FireworksExplosion.php | 12 +-- .../TableSpoon/level/LevelManager.php | 2 +- .../level/generator/biome/Biome.php | 22 ++--- .../level/generator/ender/Ender.php | 22 ++--- .../generator/ender/biome/EnderBiome.php | 2 +- .../generator/ender/populator/EnderPilar.php | 8 +- .../level/particle/MobSpellParticle.php | 3 +- .../TableSpoon/level/particle/Particle.php | 12 +-- .../level/particle/RocketParticle.php | 2 +- .../level/particle/SpellParticle.php | 3 +- .../TableSpoon/level/sound/ExpPickupSound.php | 3 +- .../TableSpoon/level/weather/Weather.php | 50 +++++------ .../TableSpoon/task/DelayedLevelLoadTask.php | 2 +- .../task/ElytraRocketBoostTrackingTask.php | 2 +- .../TableSpoon/task/TickLevelsTask.php | 2 +- src/Xenophilicy/TableSpoon/tile/Beacon.php | 64 ++++++-------- .../TableSpoon/tile/BrewingStand.php | 88 +++++++++---------- src/Xenophilicy/TableSpoon/tile/Cauldron.php | 38 ++++---- src/Xenophilicy/TableSpoon/tile/Hopper.php | 32 +++---- src/Xenophilicy/TableSpoon/tile/Jukebox.php | 44 +++++----- .../TableSpoon/tile/ShulkerBox.php | 24 ++--- src/Xenophilicy/TableSpoon/tile/Tile.php | 8 +- .../TableSpoon/utils/ArmorTypes.php | 10 +-- .../TableSpoon/utils/ArrayUtils.php | 6 +- .../TableSpoon/utils/BiomeUtils.php | 12 +-- src/Xenophilicy/TableSpoon/utils/DyeUtils.php | 4 +- .../TableSpoon/utils/EntityUtils.php | 20 ++--- src/Xenophilicy/TableSpoon/utils/Firework.php | 2 +- .../TableSpoon/utils/FishingLootTable.php | 56 ++++++------ src/Xenophilicy/TableSpoon/utils/Math.php | 10 +-- .../TableSpoon/utils/Orientation.php | 57 +++++------- .../TableSpoon/utils/RailUtils.php | 6 +- src/Xenophilicy/TableSpoon/utils/Xp.php | 2 +- 105 files changed, 626 insertions(+), 693 deletions(-) diff --git a/plugin.yml b/plugin.yml index b040e8a..04ea597 100644 --- a/plugin.yml +++ b/plugin.yml @@ -1,6 +1,6 @@ name: TableSpoon main: Xenophilicy\TableSpoon\TableSpoon -version: 0.0.5-ALPHA +version: 0.0.6-ALPHA api: 3.13.0 authors: [CortexPE, Xenophilicy, HyperFlareMC] description: Adds cool features to PocketMine diff --git a/src/Xenophilicy/TableSpoon/EventListener.php b/src/Xenophilicy/TableSpoon/EventListener.php index 08f3f2a..6f7f43b 100644 --- a/src/Xenophilicy/TableSpoon/EventListener.php +++ b/src/Xenophilicy/TableSpoon/EventListener.php @@ -91,7 +91,6 @@ public function onLevelLoad(LevelLoadEvent $ev){ } } } - return; } /** @@ -113,7 +112,6 @@ public function onDamage(EntityDamageEvent $ev){ } } } - return; } /** @@ -257,7 +255,7 @@ public function onDataPacketSend(DataPacketSendEvent $event): void{ $dimensionId = Utils::getDimension($world); if($dimensionId === $packet->spawnSettings->getDimension()) return; $event->setCancelled(); - if($world === null) $target->sendDataPacket(clone $packet); + $target->sendDataPacket(clone $packet); $pk = clone $packet; $pk->spawnSettings = new SpawnSettings($packet->spawnSettings->getBiomeType(), $packet->spawnSettings->getBiomeName(), Utils::getDimension($world)); $target->sendDataPacket($pk); diff --git a/src/Xenophilicy/TableSpoon/block/Anvil.php b/src/Xenophilicy/TableSpoon/block/Anvil.php index ad4456a..93e67bb 100644 --- a/src/Xenophilicy/TableSpoon/block/Anvil.php +++ b/src/Xenophilicy/TableSpoon/block/Anvil.php @@ -14,7 +14,7 @@ * Class Anvil * @package Xenophilicy\TableSpoon\block */ -class Anvil extends PMAnvil{ +class Anvil extends PMAnvil { public function onActivate(Item $item, Player $player = null): bool{ if(TableSpoon::$settings["blocks"]["anvils"]){ if($player instanceof Player){ diff --git a/src/Xenophilicy/TableSpoon/block/Beacon.php b/src/Xenophilicy/TableSpoon/block/Beacon.php index 0067ede..eebc253 100644 --- a/src/Xenophilicy/TableSpoon/block/Beacon.php +++ b/src/Xenophilicy/TableSpoon/block/Beacon.php @@ -28,53 +28,53 @@ * Class Beacon * @package Xenophilicy\TableSpoon\block */ -class Beacon extends Transparent{ - +class Beacon extends Transparent { + /** * @var int */ protected $id = self::BEACON; - - + + /** * @param int $meta Meta value of the block type */ public function __construct($meta = 0){ $this->meta = $meta; } - + /** * @return bool */ public function canBeActivated(): bool{ return true; } - + /** * @return string */ public function getName(): string{ return "Beacon"; } - + /** * @return int */ public function getLightLevel(): int{ return 15; } - + public function getBlastResistance(): float{ return 15; } - + /** * @return float */ public function getHardness(): float{ return 3; } - + /** * @param Item $item * @param Block $blockReplace @@ -90,7 +90,7 @@ public function place(Item $item, Block $blockReplace, Block $blockClicked, int Tile::createTile(Tile::BEACON, $this->getLevel(), $nbt); return true; } - + /** * @param Item $item * @param Player|null $player @@ -120,7 +120,7 @@ public function onActivate(Item $item, Player $player = null): bool{ } return true; } - + /** * @param Item $item * @param Player|null $player diff --git a/src/Xenophilicy/TableSpoon/block/Bed.php b/src/Xenophilicy/TableSpoon/block/Bed.php index 9fa3f82..3f568b0 100644 --- a/src/Xenophilicy/TableSpoon/block/Bed.php +++ b/src/Xenophilicy/TableSpoon/block/Bed.php @@ -14,8 +14,8 @@ * Class Bed * @package Xenophilicy\TableSpoon\block */ -class Bed extends PMBed{ - +class Bed extends PMBed { + /** * @param Item $item * @param Player|null $player diff --git a/src/Xenophilicy/TableSpoon/block/BlockManager.php b/src/Xenophilicy/TableSpoon/block/BlockManager.php index c00b332..eafafe0 100644 --- a/src/Xenophilicy/TableSpoon/block/BlockManager.php +++ b/src/Xenophilicy/TableSpoon/block/BlockManager.php @@ -10,7 +10,7 @@ * Class BlockManager * @package Xenophilicy\TableSpoon\block */ -class BlockManager{ +class BlockManager { public static function init(): void{ BlockFactory::registerBlock(new Portal(), true); BlockFactory::registerBlock(new EndPortal(), true); diff --git a/src/Xenophilicy/TableSpoon/block/BrewingStand.php b/src/Xenophilicy/TableSpoon/block/BrewingStand.php index b15167f..1baf849 100644 --- a/src/Xenophilicy/TableSpoon/block/BrewingStand.php +++ b/src/Xenophilicy/TableSpoon/block/BrewingStand.php @@ -19,7 +19,7 @@ * Class BrewingStand * @package Xenophilicy\TableSpoon\block */ -class BrewingStand extends PMBrewingStand{ +class BrewingStand extends PMBrewingStand { public function place(Item $item, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector, Player $player = null): bool{ $parent = parent::place($item, $blockReplace, $blockClicked, $face, $clickVector, $player); if(!$blockReplace->getSide(Vector3::SIDE_DOWN)->isTransparent()){ @@ -32,15 +32,15 @@ public function place(Item $item, Block $blockReplace, Block $blockClicked, int } return $parent; } - + public function getLightLevel(): int{ return 1; } - + public function getBlastResistance(): float{ return 2.5; } - + public function onActivate(Item $item, Player $player = null): bool{ if(!TableSpoon::$settings["blocks"]["brewing-stands"] || (TableSpoon::$settings["player"]["limited-creative"] && $player->isCreative())){ return true; diff --git a/src/Xenophilicy/TableSpoon/block/Cauldron.php b/src/Xenophilicy/TableSpoon/block/Cauldron.php index 82a3069..09abad8 100644 --- a/src/Xenophilicy/TableSpoon/block/Cauldron.php +++ b/src/Xenophilicy/TableSpoon/block/Cauldron.php @@ -1,7 +1,6 @@ . - * * @author Xenophilicy\TableSpoon & iTX Technologies * @link https://CortexPE.xyz - * */ declare(strict_types=1); @@ -56,11 +50,11 @@ * Class Cauldron * @package Xenophilicy\TableSpoon\block */ -class Cauldron extends Transparent{ - +class Cauldron extends Transparent { + protected $id = self::CAULDRON_BLOCK; protected $itemId = Item::CAULDRON; - + /** * Cauldron constructor. * @param int $meta @@ -68,32 +62,32 @@ class Cauldron extends Transparent{ public function __construct($meta = 0){ $this->meta = $meta; } - + public function canBeActivated(): bool{ return true; } - + public function getName(): string{ return "Cauldron"; } - + public function getHardness(): float{ return 2; } - + public function getToolType(): int{ return BlockToolType::TYPE_PICKAXE; } - + public function getToolHarvestLevel(): int{ return TieredTool::TIER_WOODEN; } - + public function place(Item $item, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector, Player $player = null): bool{ Tile::createTile(Tile::CAULDRON, $this->getLevel(), CauldronTile::createNBT($this, $face, $item, $player)); return parent::place($item, $blockReplace, $blockClicked, $face, $clickVector, $player); } - + public function onActivate(Item $item, Player $player = null): bool{ if(!TableSpoon::$settings["blocks"]["cauldrons"]){ return false; @@ -188,7 +182,7 @@ public function onActivate(Item $item, Player $player = null): bool{ case Item::POTION: case Item::SPLASH_POTION: if(!$this->isEmpty() && ( // basically.... mismatched potion ID with cauldron = BOOM! - ($tile->getPotionId() != $item->getDamage() && $item->getDamage() != 0) || ($item->getId() == Item::POTION && $tile->isSplashPotion()) || ($item->getId() == Item::SPLASH_POTION && !$tile->isSplashPotion()) && $item->getDamage() != 0 || ($item->getDamage() == 0 && $tile->hasPotion()))){ + ($tile->getPotionId() != $item->getDamage() && $item->getDamage() != 0) || ($item->getId() == Item::POTION && $tile->isSplashPotion()) || ($item->getId() == Item::SPLASH_POTION && !$tile->isSplashPotion()) && $item->getDamage() != 0 || ($item->getDamage() == 0 && $tile->hasPotion()))){ $this->meta = 0; $tile->resetPotion(); $tile->setSplashPotion(false); @@ -277,11 +271,11 @@ public function onActivate(Item $item, Player $player = null): bool{ $this->getLevel()->setBlock($this, $this, true); return true; } - + public function isFull(): bool{ return $this->meta >= 6; } - + public function isEmpty(): bool{ return $this->meta == 0; } diff --git a/src/Xenophilicy/TableSpoon/block/DragonEgg.php b/src/Xenophilicy/TableSpoon/block/DragonEgg.php index be2580b..423801c 100644 --- a/src/Xenophilicy/TableSpoon/block/DragonEgg.php +++ b/src/Xenophilicy/TableSpoon/block/DragonEgg.php @@ -33,48 +33,47 @@ * Class DragonEgg * @package Xenophilicy\TableSpoon\block */ -class DragonEgg extends Fallable{ - +class DragonEgg extends Fallable { + /** @var int $id */ protected $id = self::DRAGON_EGG; - + /** * DragonEgg constructor. - * * @param int $meta */ public function __construct($meta = 0){ $this->meta = $meta; } - + /** * @return string */ public function getName(): string{ return "Dragon Egg"; } - + /** * @return float */ public function getHardness(): float{ return 4.5; } - + /** * @return float */ public function getBlastResistance(): float{ return 45; } - + /** * @return int */ public function getLightLevel(): int{ return 1; } - + /** * @param Item $item * @return bool @@ -82,14 +81,14 @@ public function getLightLevel(): int{ public function isBreakable(Item $item): bool{ return false; } - + /** * @return bool */ public function canBeActivated(): bool{ return true; } - + /** * @param Item $item * @param Player|null $player diff --git a/src/Xenophilicy/TableSpoon/block/EnchantingTable.php b/src/Xenophilicy/TableSpoon/block/EnchantingTable.php index 36db004..0db7b80 100644 --- a/src/Xenophilicy/TableSpoon/block/EnchantingTable.php +++ b/src/Xenophilicy/TableSpoon/block/EnchantingTable.php @@ -17,8 +17,8 @@ * Class EnchantingTable * @package Xenophilicy\TableSpoon\block */ -class EnchantingTable extends PMEnchantingTable{ - +class EnchantingTable extends PMEnchantingTable { + public function onActivate(Item $item, Player $player = null): bool{ if(TableSpoon::$settings["enchantments"]["enchantment-table"] && !(TableSpoon::$settings["player"]["limited-creative"] && $player->isCreative())){ if($player instanceof Player){ @@ -29,7 +29,7 @@ public function onActivate(Item $item, Player $player = null): bool{ } return true; } - + public function countBookshelf(): int{ $count = 0; $level = $this->getLevel(); diff --git a/src/Xenophilicy/TableSpoon/block/EndPortal.php b/src/Xenophilicy/TableSpoon/block/EndPortal.php index 8a00b19..ad26072 100644 --- a/src/Xenophilicy/TableSpoon/block/EndPortal.php +++ b/src/Xenophilicy/TableSpoon/block/EndPortal.php @@ -10,11 +10,11 @@ * Class EndPortal * @package Xenophilicy\TableSpoon\block */ -class EndPortal extends Solid{ - +class EndPortal extends Solid { + /** @var int $id */ protected $id = Block::END_PORTAL; - + /** * EndPortal constructor. * @param int $meta @@ -22,35 +22,35 @@ class EndPortal extends Solid{ public function __construct($meta = 0){ $this->meta = $meta; } - + /** * @return int */ public function getLightLevel(): int{ return 1; } - + /** * @return string */ public function getName(): string{ return "End Portal"; } - + /** * @return float */ public function getHardness(): float{ return -1; } - + /** * @return float */ public function getBlastResistance(): float{ return 18000000; } - + /** * @param Item $item * @return bool @@ -58,14 +58,14 @@ public function getBlastResistance(): float{ public function isBreakable(Item $item): bool{ return false; } - + /** * @return bool */ public function canPassThrough(): bool{ return true; } - + /** * @return bool */ diff --git a/src/Xenophilicy/TableSpoon/block/EndPortalFrame.php b/src/Xenophilicy/TableSpoon/block/EndPortalFrame.php index 0614b88..e5ec7fd 100644 --- a/src/Xenophilicy/TableSpoon/block/EndPortalFrame.php +++ b/src/Xenophilicy/TableSpoon/block/EndPortalFrame.php @@ -12,10 +12,10 @@ * Class EndPortalFrame * @package Xenophilicy\TableSpoon\block */ -class EndPortalFrame extends PMEndPortalFrame{ - +class EndPortalFrame extends PMEndPortalFrame { + public $eye = false; - + /** * EndPortalFrame constructor. * @param int $meta @@ -23,9 +23,9 @@ class EndPortalFrame extends PMEndPortalFrame{ public function __construct($meta = 0){ parent::__construct($meta); } - + // Code below is ported from ClearSky (Big Thanks to XenialDan) - + /** * @param Item $item * @param Block $block @@ -41,7 +41,7 @@ public function place(Item $item, Block $block, Block $target, int $face, Vector $this->getLevel()->setBlock($block, $this, true, true); return true; } - + /** * @param Item $item * @param Player|null $player @@ -59,7 +59,7 @@ public function onActivate(Item $item, Player $player = null): bool{ } return false; } - + // /** // * @return array // */ diff --git a/src/Xenophilicy/TableSpoon/block/Fire.php b/src/Xenophilicy/TableSpoon/block/Fire.php index 3e2a0bb..0c9cb69 100644 --- a/src/Xenophilicy/TableSpoon/block/Fire.php +++ b/src/Xenophilicy/TableSpoon/block/Fire.php @@ -11,8 +11,8 @@ * Class Fire * @package Xenophilicy\TableSpoon\block */ -class Fire extends PMFire{ - +class Fire extends PMFire { + public function onScheduledUpdate(): void{ if($this->meta >= 15){ $this->level->setBlock($this, BlockFactory::get(Block::AIR)); @@ -21,7 +21,7 @@ public function onScheduledUpdate(): void{ $this->level->setBlock($this, $this); } } - + public function onRandomTick(): void{ if(isset(TableSpoon::$weatherData[($k = $this->getLevel()->getId())])){ $weather = TableSpoon::$weatherData[$k]; diff --git a/src/Xenophilicy/TableSpoon/block/FrostedIce.php b/src/Xenophilicy/TableSpoon/block/FrostedIce.php index 97d5ae5..b70dc58 100644 --- a/src/Xenophilicy/TableSpoon/block/FrostedIce.php +++ b/src/Xenophilicy/TableSpoon/block/FrostedIce.php @@ -9,18 +9,18 @@ * Class FrostedIce * @package Xenophilicy\TableSpoon\block */ -class FrostedIce extends Ice{ - +class FrostedIce extends Ice { + /** @var int $id */ protected $id = self::FROSTED_ICE; - + /** * @return string */ public function getName(): string{ return "Frosted Ice"; } - + public function onRandomTick(): void{ $this->meta++; $this->getLevel()->setBlock($this->asVector3(), $this, false, false); diff --git a/src/Xenophilicy/TableSpoon/block/Hopper.php b/src/Xenophilicy/TableSpoon/block/Hopper.php index 8d5c532..7876dbf 100644 --- a/src/Xenophilicy/TableSpoon/block/Hopper.php +++ b/src/Xenophilicy/TableSpoon/block/Hopper.php @@ -3,16 +3,8 @@ namespace Xenophilicy\TableSpoon\block; -use pocketmine\{block\Block, - block\BlockToolType, - block\Transparent, - item\Item, - math\Vector3, - nbt\tag\CompoundTag, - nbt\tag\IntTag, - nbt\tag\ListTag, - nbt\tag\StringTag, - Player}; +use pocketmine\{block\Block, block\BlockToolType, block\Transparent, item\Item, math\Vector3, nbt\tag\CompoundTag, nbt\tag\IntTag, nbt\tag\ListTag, nbt\tag\StringTag, + Player}; use Xenophilicy\TableSpoon\TableSpoon; use Xenophilicy\TableSpoon\tile\Hopper as HopperTile; use Xenophilicy\TableSpoon\tile\Tile; @@ -21,9 +13,9 @@ * Class Hopper * @package Xenophilicy\TableSpoon\block */ -class Hopper extends Transparent{ +class Hopper extends Transparent { protected $id = self::HOPPER_BLOCK; - + /** * Hopper constructor. * @param int $meta @@ -31,27 +23,27 @@ class Hopper extends Transparent{ public function __construct(int $meta = 0){ $this->meta = $meta; } - + public function canBeActivated(): bool{ return true; } - + public function getToolType(): int{ return BlockToolType::TYPE_PICKAXE; } - + public function getName(): string{ return "Hopper"; } - + public function getHardness(): float{ return 3; } - + public function getBlastResistance(): float{ return 24; } - + public function onActivate(Item $item, Player $player = null): bool{ if(TableSpoon::$settings["blocks"]["hoppers"]){ if($player instanceof Player){ @@ -74,28 +66,28 @@ public function onActivate(Item $item, Player $player = null): bool{ } return true; } - + public function place(Item $item, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector, Player $player = null): bool{ $faces = [0 => 0, 1 => 0, 2 => 3, 3 => 2, 4 => 5, 5 => 4]; $this->meta = $faces[$face]; $this->getLevel()->setBlock($blockReplace, $this, true, true); - + $nbt = new CompoundTag("", [new ListTag("Items", []), new StringTag("id", Tile::HOPPER), new IntTag("x", $this->x), new IntTag("y", $this->y), new IntTag("z", $this->z)]); - + if($item->hasCustomName()){ $nbt->setString("CustomName", $item->getCustomName()); } - + if($item->hasCustomBlockData()){ foreach($item->getCustomBlockData() as $key => $v){ $nbt->{$key} = $v; } } - + Tile::createTile(Tile::HOPPER, $this->getLevel(), $nbt); return true; } - + public function getDrops(Item $item): array{ return [Item::get(Item::HOPPER, 0, 1)]; } diff --git a/src/Xenophilicy/TableSpoon/block/Jukebox.php b/src/Xenophilicy/TableSpoon/block/Jukebox.php index 6a5339e..a333b1e 100644 --- a/src/Xenophilicy/TableSpoon/block/Jukebox.php +++ b/src/Xenophilicy/TableSpoon/block/Jukebox.php @@ -21,11 +21,11 @@ * Class Jukebox * @package Xenophilicy\TableSpoon\block */ -class Jukebox extends Solid{ - +class Jukebox extends Solid { + /** @var int $id */ protected $id = self::JUKEBOX; - + /** * Jukebox constructor. * @param int $meta @@ -33,34 +33,34 @@ class Jukebox extends Solid{ public function __construct(int $meta = 0){ parent::__construct(self::JUKEBOX, $meta); } - + public function getName(): string{ return "Jukebox"; } - + public function getHardness(): float{ return 2; } - + public function getToolType(): int{ return BlockToolType::TYPE_AXE; } - + public function getToolHarvestLevel(): int{ return TieredTool::TIER_WOODEN; } - + public function getDrops(Item $item): array{ $drops = []; $drops[] = Item::get(Item::JUKEBOX, 0, 1); - + $tile = $this->getLevel()->getTile($this); if($tile instanceof JukeboxTile){ $drops[] = $tile->getRecordItem(); } return $drops; } - + public function place(Item $item, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector, Player $player = null): bool{ $this->getLevel()->setBlock($blockReplace, $this, true, true); $tile = $this->getLevel()->getTile($this); @@ -70,7 +70,7 @@ public function place(Item $item, Block $blockReplace, Block $blockClicked, int } return true; } - + public function onActivate(Item $item, Player $player = null): bool{ $tile = $this->getLevel()->getTile($this); if($tile instanceof JukeboxTile){ @@ -86,7 +86,7 @@ public function onActivate(Item $item, Player $player = null): bool{ $nbt = new CompoundTag("", [new StringTag(Tile::TAG_ID, Tile::JUKEBOX), new IntTag(Tile::TAG_X, (int)$this->getX()), new IntTag(Tile::TAG_Y, (int)$this->getY()), new IntTag(Tile::TAG_Z, (int)$this->getZ())]); /** @var JukeboxTile $tile */ $tile = Tile::createTile(Tile::JUKEBOX, $this->getLevel(), $nbt); - + if($item instanceof Record){ $tile->setRecordItem($item); if($player != null){ diff --git a/src/Xenophilicy/TableSpoon/block/Lava.php b/src/Xenophilicy/TableSpoon/block/Lava.php index 4bfc24e..9e16de6 100644 --- a/src/Xenophilicy/TableSpoon/block/Lava.php +++ b/src/Xenophilicy/TableSpoon/block/Lava.php @@ -13,8 +13,8 @@ * Class Lava * @package Xenophilicy\TableSpoon\block */ -class Lava extends PMLava{ - +class Lava extends PMLava { + /** * @param Entity $entity */ @@ -31,7 +31,7 @@ public function onEntityCollide(Entity $entity): void{ } $entity->resetFallDistance(); } - + public function getFlowDecayPerBlock(): int{ return (Utils::getDimension($this->getLevel()) == DimensionIds::NETHER) ? 1 : 2; } diff --git a/src/Xenophilicy/TableSpoon/block/LitPumpkin.php b/src/Xenophilicy/TableSpoon/block/LitPumpkin.php index 138a011..7f248d9 100644 --- a/src/Xenophilicy/TableSpoon/block/LitPumpkin.php +++ b/src/Xenophilicy/TableSpoon/block/LitPumpkin.php @@ -63,8 +63,8 @@ * Class LitPumpkin * @package Xenophilicy\TableSpoon\block */ -class LitPumpkin extends PMLitPumpkin{ - +class LitPumpkin extends PMLitPumpkin { + public function place(Item $item, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector, Player $player = null): bool{ return parent::place($item, $blockReplace, $blockClicked, $face, $clickVector, $player); } diff --git a/src/Xenophilicy/TableSpoon/block/Obsidian.php b/src/Xenophilicy/TableSpoon/block/Obsidian.php index 50253bb..d8acae2 100644 --- a/src/Xenophilicy/TableSpoon/block/Obsidian.php +++ b/src/Xenophilicy/TableSpoon/block/Obsidian.php @@ -1,7 +1,6 @@ . - * * @author Xenophilicy\TableSpoon * @link https://CortexPE.xyz - * */ declare(strict_types=1); @@ -46,8 +40,8 @@ * Class Obsidian * @package Xenophilicy\TableSpoon\block */ -class Obsidian extends PMObsidian{ - +class Obsidian extends PMObsidian { + public function onBreak(Item $item, Player $player = null): bool{ parent::onBreak($item); foreach($this->getAllSides() as $i => $block){ diff --git a/src/Xenophilicy/TableSpoon/block/Portal.php b/src/Xenophilicy/TableSpoon/block/Portal.php index a5a5bc4..eded580 100644 --- a/src/Xenophilicy/TableSpoon/block/Portal.php +++ b/src/Xenophilicy/TableSpoon/block/Portal.php @@ -12,11 +12,11 @@ * Class Portal * @package Xenophilicy\TableSpoon\block */ -class Portal extends Transparent{ - +class Portal extends Transparent { + /** @var int $id */ protected $id = Block::PORTAL; - + /** * Portal constructor. * @param int $meta @@ -24,49 +24,49 @@ class Portal extends Transparent{ public function __construct($meta = 0){ $this->meta = $meta; } - + /** * @return string */ public function getName(): string{ return "Portal"; } - + /** * @return float */ public function getHardness(): float{ return -1; } - + /** * @return float */ public function getResistance(): float{ return 0; } - + /** * @return int */ public function getToolType(): int{ return BlockToolType::TYPE_PICKAXE; } - + /** * @return bool */ public function canPassThrough(): bool{ return true; } - + /** * @return bool */ public function hasEntityCollision(): bool{ return true; } - + /** * @param Item $item * @param Player|null $player @@ -110,7 +110,7 @@ public function onBreak(Item $item, Player $player = null): bool{ } return true; } - + /** * @param Item $item * @param Block $block diff --git a/src/Xenophilicy/TableSpoon/block/Pumpkin.php b/src/Xenophilicy/TableSpoon/block/Pumpkin.php index ca5165b..5273750 100644 --- a/src/Xenophilicy/TableSpoon/block/Pumpkin.php +++ b/src/Xenophilicy/TableSpoon/block/Pumpkin.php @@ -13,8 +13,8 @@ * Class Pumpkin * @package Xenophilicy\TableSpoon\block */ -class Pumpkin extends PMPumpkin{ - +class Pumpkin extends PMPumpkin { + public function place(Item $item, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector, Player $player = null): bool{ return parent::place($item, $blockReplace, $blockClicked, $face, $clickVector, $player); } diff --git a/src/Xenophilicy/TableSpoon/block/Rail.php b/src/Xenophilicy/TableSpoon/block/Rail.php index 3ac99c8..62bd86b 100644 --- a/src/Xenophilicy/TableSpoon/block/Rail.php +++ b/src/Xenophilicy/TableSpoon/block/Rail.php @@ -15,12 +15,11 @@ * This is the class where the block being checking to * intersect with the other rail. This follows the minecraft * vanilla rails. - * * @author larryTheCoder * @package Xenophilicy\TableSpoon\block */ -class Rail extends PMRail{ - +class Rail extends PMRail { + // Rail curves and orientation const STRAIGHT_NORTH_SOUTH = 0; const STRAIGHT_EAST_WEST = 1; @@ -32,39 +31,39 @@ class Rail extends PMRail{ const CURVED_SOUTH_WEST = 7; const CURVED_NORTH_WEST = 8; const CURVED_NORTH_EAST = 9; - + /** @var Orientation[] */ public static $railMetadata; - + protected $id = self::RAIL; - + protected $canBePowered = false; - + /** * Rail constructor. * @param int $meta */ public function __construct(int $meta = 0){ parent::__construct($meta); - + self::$railMetadata = Orientation::getMetadata(); } - + public function place(Item $item, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector, Player $player = null): bool{ $down = $this->getSide(Vector3::SIDE_DOWN); if(is_null($down) || $down->isTransparent()){ return false; } - + // Horizontal rules $railsAround = $this->checkRailsAroundAffected(); $railSides = count($railsAround); - + /** @var int[] $sides */ $sides = array_keys($railsAround); /** @var Rail[] $rails */ $rails = array_values($railsAround); - + if($railSides === 1){ // only 1 sides $damage = $this->connectTo($rails[0], $sides[0]); @@ -93,7 +92,7 @@ public function place(Item $item, Block $blockReplace, Block $blockClicked, int $this->setDamage($damage->getDamage()); }else{ $rail = []; - + // Curves see: wiki#Placement $curves = [self::CURVED_SOUTH_EAST, self::CURVED_NORTH_EAST, self::CURVED_SOUTH_WEST, self::CURVED_NORTH_WEST]; foreach($curves as $side){ @@ -111,7 +110,7 @@ public function place(Item $item, Block $blockReplace, Block $blockClicked, int $rail = $railTemp; } } - + $railSouth = $railsAround[$rail[0]]; $railEast = $railsAround[$rail[1]]; $damage = $this->connectMultiples($railSouth, $rail[0], $railEast, $rail[1]); @@ -121,18 +120,17 @@ public function place(Item $item, Block $blockReplace, Block $blockClicked, int // TODO: Support redstone powered rails //} } - + // If there are no other rails adjacent it will be // placed as a straight track oriented north-south. $this->getLevel()->setBlock($this, $this); return true; } - + /** * Get the rails around the adjacent block. * This will only return the blocks that with its * horizontal sides. - * * @return Rail[] */ private function checkRailsAroundAffected(): array{ @@ -146,7 +144,7 @@ private function checkRailsAroundAffected(): array{ } return $array; } - + /** * @param array $faces * @return Rail[] @@ -169,7 +167,7 @@ private function checkRailsAround(array $faces){ } return $result; } - + /** * @return Rail[] */ @@ -177,7 +175,7 @@ public function checkRailsConnected(): array{ $result = []; $origin = $this->getOrientation()->connectingDirections(); $railsAround = $this->checkRailsAround($origin); - + foreach($railsAround as $side => $rail){ if($rail->getOrientation()->hasConnectingDirections(Vector3::getOppositeSide($side))){ $result[$side] = $rail; @@ -185,16 +183,15 @@ public function checkRailsConnected(): array{ } return $result; } - - + + public function getOrientation(): Orientation{ return self::$railMetadata[$this->getDamage()]; } - + /** * Connects to a rail and return the specific orientation * for the connection. - * * @param Rail $other The rail class itself * @param int $face Faces of the rail * @return Orientation The orientation that should be changed with this rail. @@ -225,7 +222,7 @@ private function connectTo(Rail $other, int $face): Orientation{ } return self::$railMetadata[self::STRAIGHT_NORTH_SOUTH]; } - + /** * @param Orientation $origin */ @@ -235,22 +232,20 @@ public function setOrientation(Orientation $origin){ $this->getLevel()->setBlock($this, $this, true, true); } } - + /** * This checks if the rail could be * curved or not. - * * @return bool */ public function canBeCurved(): bool{ return true; } - + /** * Connect to a multiple rail once at a time. * And return an orientation that should be intersect with * these rails. - * * @param Rail $rail1 The rail class itself * @param int $face1 The rail1 orientation * @param Rail $rail2 The rail class itself @@ -260,11 +255,11 @@ public function canBeCurved(): bool{ public function connectMultiples(Rail $rail1, int $face1, Rail $rail2, int $face2): Orientation{ $this->connectTo($rail1, $face1); $this->connectTo($rail2, $face2); - + if(Vector3::getOppositeSide($face1) === $face2){ $delta1 = $this->y = $rail1->y; $delta2 = $this->y = $rail2->y; - + if($delta1 === -1){ return Orientation::getAscendingData($face1); }elseif($delta2 === -2){ diff --git a/src/Xenophilicy/TableSpoon/block/ShulkerBox.php b/src/Xenophilicy/TableSpoon/block/ShulkerBox.php index 5f8aaed..2f050e6 100644 --- a/src/Xenophilicy/TableSpoon/block/ShulkerBox.php +++ b/src/Xenophilicy/TableSpoon/block/ShulkerBox.php @@ -16,8 +16,8 @@ * Class ShulkerBox * @package Xenophilicy\TableSpoon\block */ -class ShulkerBox extends Transparent{ - +class ShulkerBox extends Transparent { + /** * ShulkerBox constructor. * @param int $id @@ -27,23 +27,23 @@ public function __construct(int $id = self::SHULKER_BOX, int $meta = 0){ $this->id = $id; $this->meta = $meta; } - + public function getResistance(): float{ return 30; } - + public function getHardness(): float{ return 2; } - + public function getToolType(): int{ return BlockToolType::TYPE_PICKAXE; } - + public function getName(): string{ return "Shulker Box"; } - + public function place(Item $item, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector, Player $player = null): bool{ $this->getLevel()->setBlock($blockReplace, $this, true, true); $nbt = TileShulkerBox::createNBT($this, $face, $item, $player); @@ -55,7 +55,7 @@ public function place(Item $item, Block $blockReplace, Block $blockClicked, int ($inv = $player->getInventory())->clear($inv->getHeldItemIndex()); return true; } - + public function onBreak(Item $item, Player $player = null): bool{ $t = $this->getLevel()->getTile($this); if($t instanceof TileShulkerBox){ @@ -74,7 +74,7 @@ public function onBreak(Item $item, Player $player = null): bool{ $this->getLevel()->setBlock($this, Block::get(Block::AIR), true, true); return true; } - + public function onActivate(Item $item, Player $player = null): bool{ if(TableSpoon::$settings["blocks"]["shulker-box"]){ if($player instanceof Player){ @@ -90,7 +90,7 @@ public function onActivate(Item $item, Player $player = null): bool{ } return true; } - + public function getDrops(Item $item): array{ return []; } diff --git a/src/Xenophilicy/TableSpoon/block/SlimeBlock.php b/src/Xenophilicy/TableSpoon/block/SlimeBlock.php index 78b8154..44ffd11 100644 --- a/src/Xenophilicy/TableSpoon/block/SlimeBlock.php +++ b/src/Xenophilicy/TableSpoon/block/SlimeBlock.php @@ -10,13 +10,13 @@ * Class SlimeBlock * @package Xenophilicy\TableSpoon\block */ -class SlimeBlock extends Solid{ - +class SlimeBlock extends Solid { + /** * @var int $id */ protected $id = Block::SLIME_BLOCK; - + /** * SlimeBlock constructor. * @param int $meta @@ -24,28 +24,28 @@ class SlimeBlock extends Solid{ public function __construct($meta = 0){ $this->meta = $meta; } - + /** * @return string */ public function getName(): string{ return "Slime Block"; } - + /** * @return float */ public function getHardness(): float{ return 0; } - + /** * @return bool */ public function hasEntityCollision(): bool{ return true; } - + /** * @param Item $item * @return array diff --git a/src/Xenophilicy/TableSpoon/block/SnowLayer.php b/src/Xenophilicy/TableSpoon/block/SnowLayer.php index 9ffc215..104bd24 100644 --- a/src/Xenophilicy/TableSpoon/block/SnowLayer.php +++ b/src/Xenophilicy/TableSpoon/block/SnowLayer.php @@ -13,7 +13,7 @@ * Class SnowLayer * @package Xenophilicy\TableSpoon\block */ -class SnowLayer extends PMSnowLayer{ +class SnowLayer extends PMSnowLayer { public function onRandomTick(): void{ if(TableSpoon::$settings["blocks"]["snow-melts"]){ $destroy = false; @@ -33,7 +33,7 @@ public function onRandomTick(): void{ } } } - + public function ticksRandomly(): bool{ return true; } diff --git a/src/Xenophilicy/TableSpoon/block/Sponge.php b/src/Xenophilicy/TableSpoon/block/Sponge.php index f7b05f4..8ef5959 100644 --- a/src/Xenophilicy/TableSpoon/block/Sponge.php +++ b/src/Xenophilicy/TableSpoon/block/Sponge.php @@ -14,13 +14,13 @@ * Class Sponge * @package Xenophilicy\TableSpoon\block */ -class Sponge extends Transparent{ - +class Sponge extends Transparent { + protected $id = self::SPONGE; - + public function __construct(){ } - + public function place(Item $item, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector, Player $player = null): bool{ if($this->getDamage() == 0){ if(self::absorbWater(new Position($this->x, $this->y, $this->z, $this->getLevel()))){ @@ -32,7 +32,7 @@ public function place(Item $item, Block $blockReplace, Block $blockClicked, int return $this->getLevel()->setBlock($this, $this, true, true); } } - + /** * @param Position $center * @return bool @@ -69,7 +69,7 @@ private function absorbWater(Position $center){ $l = true; $level->setBlock(new Vector3($x, $y, $z), Block::get(0, 0)); } - + } } } @@ -78,7 +78,7 @@ private function absorbWater(Position $center){ } return $l; } - + public function getName(): string{ return "Sponge"; } diff --git a/src/Xenophilicy/TableSpoon/block/StillLava.php b/src/Xenophilicy/TableSpoon/block/StillLava.php index 9d4cb3c..738af93 100644 --- a/src/Xenophilicy/TableSpoon/block/StillLava.php +++ b/src/Xenophilicy/TableSpoon/block/StillLava.php @@ -7,11 +7,11 @@ * Class StillLava * @package Xenophilicy\TableSpoon\block */ -class StillLava extends Lava{ - +class StillLava extends Lava { + /** @var int $id */ protected $id = self::STILL_LAVA; - + /** * @return string */ diff --git a/src/Xenophilicy/TableSpoon/block/multiblock/EndPortalFrameMultiBlock.php b/src/Xenophilicy/TableSpoon/block/multiblock/EndPortalFrameMultiBlock.php index d1035c7..98670b3 100644 --- a/src/Xenophilicy/TableSpoon/block/multiblock/EndPortalFrameMultiBlock.php +++ b/src/Xenophilicy/TableSpoon/block/multiblock/EndPortalFrameMultiBlock.php @@ -20,7 +20,7 @@ * Class EndPortalFrameMultiBlock * @package Xenophilicy\TableSpoon\block\multiblock */ -class EndPortalFrameMultiBlock implements MultiBlock{ +class EndPortalFrameMultiBlock implements MultiBlock { private const SIDES = [Vector3::SIDE_NORTH, Vector3::SIDE_EAST, Vector3::SIDE_SOUTH, Vector3::SIDE_WEST]; diff --git a/src/Xenophilicy/TableSpoon/block/multiblock/EndPortalMultiBlock.php b/src/Xenophilicy/TableSpoon/block/multiblock/EndPortalMultiBlock.php index a599cf5..7db55fa 100644 --- a/src/Xenophilicy/TableSpoon/block/multiblock/EndPortalMultiBlock.php +++ b/src/Xenophilicy/TableSpoon/block/multiblock/EndPortalMultiBlock.php @@ -15,7 +15,7 @@ * Class EndPortalMultiblock * @package Xenophilicy\TableSpoon\block\multiblock */ -class EndPortalMultiBlock extends PortalMultiBlock{ +class EndPortalMultiBlock extends PortalMultiBlock { public function getTargetWorldInstance(): Level{ return TableSpoon::$endLevel; diff --git a/src/Xenophilicy/TableSpoon/block/multiblock/MultiBlock.php b/src/Xenophilicy/TableSpoon/block/multiblock/MultiBlock.php index ad1e72a..1c980c8 100644 --- a/src/Xenophilicy/TableSpoon/block/multiblock/MultiBlock.php +++ b/src/Xenophilicy/TableSpoon/block/multiblock/MultiBlock.php @@ -13,8 +13,8 @@ * Interface MultiBlock * @package Xenophilicy\TableSpoon\block\multiblock */ -interface MultiBlock{ - +interface MultiBlock { + /** * @param Block $wrapping * @param Player $player @@ -23,19 +23,19 @@ interface MultiBlock{ * @return bool */ public function interact(Block $wrapping, Player $player, Item $item, int $face): bool; - + /** * @param Block $wrapping * @return bool */ public function update(Block $wrapping): bool; - + /** * @param Player $player * @param Block $block */ public function onPlayerMoveInside(Player $player, Block $block): void; - + /** * @param Player $player * @param Block $block diff --git a/src/Xenophilicy/TableSpoon/block/multiblock/MultiBlockEventHandler.php b/src/Xenophilicy/TableSpoon/block/multiblock/MultiBlockEventHandler.php index 2a34ac4..284f36e 100644 --- a/src/Xenophilicy/TableSpoon/block/multiblock/MultiBlockEventHandler.php +++ b/src/Xenophilicy/TableSpoon/block/multiblock/MultiBlockEventHandler.php @@ -14,7 +14,7 @@ * Class MultiBlockEventHandler * @package Xenophilicy\TableSpoon\block\multiblock */ -final class MultiBlockEventHandler implements Listener{ +final class MultiBlockEventHandler implements Listener { /** * @param BlockUpdateEvent $event diff --git a/src/Xenophilicy/TableSpoon/block/multiblock/MultiBlockFactory.php b/src/Xenophilicy/TableSpoon/block/multiblock/MultiBlockFactory.php index 84c1101..8bef4ee 100644 --- a/src/Xenophilicy/TableSpoon/block/multiblock/MultiBlockFactory.php +++ b/src/Xenophilicy/TableSpoon/block/multiblock/MultiBlockFactory.php @@ -17,7 +17,7 @@ * Class MultiBlockFactory * @package Xenophilicy\TableSpoon\block\multiblock */ -final class MultiBlockFactory{ +final class MultiBlockFactory { /** @var MultiBlock[] */ private static $blocks = []; diff --git a/src/Xenophilicy/TableSpoon/block/multiblock/NetherPortalFrameMultiBlock.php b/src/Xenophilicy/TableSpoon/block/multiblock/NetherPortalFrameMultiBlock.php index 093fe30..3101342 100644 --- a/src/Xenophilicy/TableSpoon/block/multiblock/NetherPortalFrameMultiBlock.php +++ b/src/Xenophilicy/TableSpoon/block/multiblock/NetherPortalFrameMultiBlock.php @@ -22,14 +22,14 @@ * Class NetherPortalFrameMultiBlock * @package Xenophilicy\TableSpoon\block\multiblock */ -class NetherPortalFrameMultiBlock implements MultiBlock{ - +class NetherPortalFrameMultiBlock implements MultiBlock { + /** @var int */ private $frameBlock; - + /** @var float */ private $lengthSquared; - + /** * NetherPortalFrameMultiBlock constructor. */ @@ -37,7 +37,7 @@ public function __construct(){ $this->frameBlock = (new Obsidian())->getId(); $this->lengthSquared = (new Vector2(21, 21))->lengthSquared(); } - + public function interact(Block $wrapping, Player $player, Item $item, int $face): bool{ if($item->getId() === ItemIds::FLINT_AND_STEEL){ $affectedBlock = $wrapping->getSide($face); @@ -61,7 +61,7 @@ public function interact(Block $wrapping, Player $player, Item $item, int $face) } return false; } - + /** * @param Level $Level * @param Vector3 $origin @@ -79,8 +79,8 @@ public function fill(Level $Level, Vector3 $origin, int $radius, int $direction) $coordinates_hash = Level::blockHash($coordinates->x, $coordinates->y, $coordinates->z); $block = $Level->getBlockAt($coordinates->x, $coordinates->y, $coordinates->z); if($block->getId() === Block::AIR && ArrayUtils::firstOrDefault($blocks, static function(int $hash, Block $block) use ($coordinates_hash) : bool{ - return $hash === $coordinates_hash; - }) === null){ + return $hash === $coordinates_hash; + }) === null){ $this->visit($coordinates, $blocks, $direction); if($direction === Vector3::SIDE_WEST){ $visits->push($coordinates->getSide(Vector3::SIDE_NORTH)); @@ -95,7 +95,7 @@ public function fill(Level $Level, Vector3 $origin, int $radius, int $direction) } return $blocks; } - + /** * @param Vector3 $coords * @param array $blocks @@ -104,7 +104,7 @@ public function fill(Level $Level, Vector3 $origin, int $radius, int $direction) public function visit(Vector3 $coords, array &$blocks, int $direction): void{ $blocks[Level::blockHash($coords->x, $coords->y, $coords->z)] = BlockFactory::get(Block::PORTAL, $direction - 2); } - + /** * @param Block $block * @param int $bHash @@ -113,17 +113,17 @@ public function visit(Vector3 $coords, array &$blocks, int $direction): void{ */ private function isValid(Block $block, int $bHash, array $portals): bool{ return $block->getId() === $this->frameBlock || ArrayUtils::firstOrDefault($portals, static function(int $hash, Block $b) use ($bHash) : bool{ - return $b->getId() === Block::PORTAL; - }) !== null; + return $b->getId() === Block::PORTAL; + }) !== null; } - + public function update(Block $wrapping): bool{ return false; } - + public function onPlayerMoveInside(Player $player, Block $block): void{ } - + public function onPlayerMoveOutside(Player $player, Block $block): void{ } } \ No newline at end of file diff --git a/src/Xenophilicy/TableSpoon/block/multiblock/NetherPortalMultiBlock.php b/src/Xenophilicy/TableSpoon/block/multiblock/NetherPortalMultiBlock.php index 73033fd..8ccc120 100644 --- a/src/Xenophilicy/TableSpoon/block/multiblock/NetherPortalMultiBlock.php +++ b/src/Xenophilicy/TableSpoon/block/multiblock/NetherPortalMultiBlock.php @@ -16,7 +16,7 @@ * Class NetherPortalMultiBlock * @package Xenophilicy\TableSpoon\block\multiblock */ -class NetherPortalMultiBlock extends PortalMultiBlock{ +class NetherPortalMultiBlock extends PortalMultiBlock { /** @var int */ private $frameID; diff --git a/src/Xenophilicy/TableSpoon/block/multiblock/PortalMultiBlock.php b/src/Xenophilicy/TableSpoon/block/multiblock/PortalMultiBlock.php index af90038..86ffd97 100644 --- a/src/Xenophilicy/TableSpoon/block/multiblock/PortalMultiBlock.php +++ b/src/Xenophilicy/TableSpoon/block/multiblock/PortalMultiBlock.php @@ -14,7 +14,7 @@ * Class PortalMultiBlock * @package Xenophilicy\TableSpoon\block\multiblock */ -abstract class PortalMultiBlock implements MultiBlock{ +abstract class PortalMultiBlock implements MultiBlock { /** * PortalMultiBlock constructor. diff --git a/src/Xenophilicy/TableSpoon/entity/object/AreaEffectCloud.php b/src/Xenophilicy/TableSpoon/entity/object/AreaEffectCloud.php index 76a3464..3d3c3f8 100644 --- a/src/Xenophilicy/TableSpoon/entity/object/AreaEffectCloud.php +++ b/src/Xenophilicy/TableSpoon/entity/object/AreaEffectCloud.php @@ -35,12 +35,12 @@ * Class AreaEffectCloud * @package Xenophilicy\TableSpoon\entity\object */ -class AreaEffectCloud extends Entity{ +class AreaEffectCloud extends Entity { public const NETWORK_ID = self::AREA_EFFECT_CLOUD; /** @var string */ public const - TAG_POTION_ID = "PotionId", TAG_AGE = "Age", TAG_RADIUS = "Radius", TAG_RADIUS_ON_USE = "RadiusOnUse", TAG_RADIUS_PER_TICK = "RadiusPerTick", TAG_WAIT_TIME = "WaitTime", TAG_TILE_X = "TileX", TAG_TILE_Y = "TileY", TAG_TILE_Z = "TileZ", TAG_DURATION = "Duration", TAG_DURATION_ON_USE = "DurationOnUse"; + TAG_POTION_ID = "PotionId", TAG_AGE = "Age", TAG_RADIUS = "Radius", TAG_RADIUS_ON_USE = "RadiusOnUse", TAG_RADIUS_PER_TICK = "RadiusPerTick", TAG_WAIT_TIME = "WaitTime", TAG_TILE_X = "TileX", TAG_TILE_Y = "TileY", TAG_TILE_Z = "TileZ", TAG_DURATION = "Duration", TAG_DURATION_ON_USE = "DurationOnUse"; public $width = 5; public $length = 5; public $height = 1; diff --git a/src/Xenophilicy/TableSpoon/entity/object/ArmorStand.php b/src/Xenophilicy/TableSpoon/entity/object/ArmorStand.php index 5f3256a..8b3fc01 100644 --- a/src/Xenophilicy/TableSpoon/entity/object/ArmorStand.php +++ b/src/Xenophilicy/TableSpoon/entity/object/ArmorStand.php @@ -10,6 +10,7 @@ use pocketmine\item\Item; use pocketmine\math\Vector3; use pocketmine\nbt\NBT; +use pocketmine\nbt\tag\CompoundTag; use pocketmine\nbt\tag\ListTag; use pocketmine\network\mcpe\protocol\LevelEventPacket; use pocketmine\network\mcpe\protocol\MobArmorEquipmentPacket; @@ -21,12 +22,12 @@ * Class ArmorStand * @package Xenophilicy\TableSpoon\entity\object */ -class ArmorStand extends Entity{ - +class ArmorStand extends Entity { + public const NETWORK_ID = self::ARMOR_STAND; public const TAG_HAND_ITEMS = "HandItems"; public const TAG_ARMOR_ITEMS = "ArmorItems"; - + // TODO: Poses... public $height = 1.975; public $width = 0.5; @@ -43,22 +44,24 @@ class ArmorStand extends Entity{ protected $leggings; /** @var Item */ protected $boots; - + public function initEntity(): void{ $air = Item::get(Item::AIR)->nbtSerialize(); if(!$this->namedtag->hasTag(self::TAG_HAND_ITEMS, ListTag::class)){ $this->namedtag->setTag(new ListTag(self::TAG_HAND_ITEMS, [$air, // itemInHand - $air // itemOffHand + $air // itemOffHand ], NBT::TAG_Compound)); } if(!$this->namedtag->hasTag(self::TAG_ARMOR_ITEMS, ListTag::class)){ $this->namedtag->setTag(new ListTag(self::TAG_ARMOR_ITEMS, [$air, // boots - $air, // leggings - $air, // chestplate - $air // helmet + $air, // leggings + $air, // chestplate + $air // helmet ], NBT::TAG_Compound)); } + /** @var CompoundTag[] $handItems */ $handItems = $this->namedtag->getListTag(self::TAG_HAND_ITEMS); + /** @var CompoundTag[] $armorItems */ $armorItems = $this->namedtag->getListTag(self::TAG_ARMOR_ITEMS); $this->itemInHand = Item::nbtDeserialize($handItems[0]); $this->itemOffHand = Item::nbtDeserialize($handItems[1]); @@ -70,11 +73,11 @@ public function initEntity(): void{ $this->setMaxHealth(6); parent::initEntity(); } - + public function canCollideWith(Entity $entity): bool{ return false; } - + public function onInteract(Player $player, Item $item, int $slot, Vector3 $clickPos): bool{ if(!$player->isSneaking()){ $diff = $clickPos->getY() - $this->getY(); @@ -120,7 +123,7 @@ public function onInteract(Player $player, Item $item, int $slot, Vector3 $click $this->setItemInHand(Item::get(Item::AIR)); }else{ $playerInv->addItem(clone $this->getItemInHand()); - + $ic = clone $item; $ic->count--; $this->setItemInHand((clone $ic)->setCount(1)); @@ -137,11 +140,11 @@ public function onInteract(Player $player, Item $item, int $slot, Vector3 $click } return true; } - + public function getItemInHand(): Item{ return $this->itemInHand; } - + /** * @param Item $item */ @@ -149,11 +152,11 @@ public function setItemInHand(Item $item){ $this->itemInHand = $item; $this->sendAll(); } - + public function getChestplate(): Item{ return $this->chestplate; } - + /** * @param Item $item */ @@ -161,7 +164,7 @@ public function setChestplate(Item $item){ $this->chestplate = $item; $this->sendAll(); } - + private function get(string $armorType): Item{ // pure laziness xD switch($armorType){ case ArmorTypes::TYPE_HELMET: @@ -179,11 +182,11 @@ private function get(string $armorType): Item{ // pure laziness xD } return Item::get(Item::AIR); } - + public function getHelmet(): Item{ return $this->helmet; } - + /** * @param Item $item */ @@ -191,11 +194,11 @@ public function setHelmet(Item $item){ $this->helmet = $item; $this->sendAll(); } - + public function getLeggings(): Item{ return $this->leggings; } - + /** * @param Item $item */ @@ -203,11 +206,11 @@ public function setLeggings(Item $item){ $this->leggings = $item; $this->sendAll(); } - + public function getBoots(): Item{ return $this->boots; } - + /** * @param Item $item */ @@ -215,11 +218,11 @@ public function setBoots(Item $item){ $this->boots = $item; $this->sendAll(); } - + public function getItemOffHand(): Item{ return $this->itemOffHand; } - + /** * @param Item $item */ @@ -227,7 +230,7 @@ public function setItemOffHand(Item $item){ $this->itemOffHand = $item; $this->sendAll(); } - + /** * @param string $armorType * @param Item $item @@ -254,14 +257,14 @@ private function set(string $armorType, Item $item){ // pure laziness aswell xD break; } } - + public function sendAll(){ foreach($this->getViewers() as $player){ $this->sendHandItems($player); $this->sendArmorItems($player); } } - + /** * @param Player $player */ @@ -271,14 +274,14 @@ public function sendHandItems(Player $player){ $pk->inventorySlot = $pk->hotbarSlot = 0; $pk->item = $this->getItemInHand(); $player->dataPacket($pk); - + $pk = new MobEquipmentPacket(); $pk->entityRuntimeId = $this->getId(); $pk->inventorySlot = $pk->hotbarSlot = 1; $pk->item = $this->getItemOffHand(); $player->dataPacket($pk); } - + /** * @param Player $player */ @@ -291,7 +294,7 @@ public function sendArmorItems(Player $player){ $pk->feet = $this->getBoots(); $player->dataPacket($pk); } - + public function kill(): void{ $this->level->dropItem($this, Item::get(Item::ARMOR_STAND)); $this->level->dropItem($this, $this->getItemInHand()); @@ -302,24 +305,24 @@ public function kill(): void{ $this->level->dropItem($this, $this->getBoots()); parent::kill(); } - + public function spawnTo(Player $player): void{ parent::spawnTo($player); $this->sendArmorItems($player); $this->sendHandItems($player); } - + public function saveNBT(): void{ parent::saveNBT(); $this->namedtag->setTag(new ListTag(self::TAG_ARMOR_ITEMS, [$this->boots->nbtSerialize(), $this->leggings->nbtSerialize(), $this->chestplate->nbtSerialize(), $this->helmet->nbtSerialize()], NBT::TAG_Compound)); $this->namedtag->setTag(new ListTag(self::TAG_HAND_ITEMS, [$this->getItemInHand()->nbtSerialize(), $this->getItemOffHand()->nbtSerialize()], NBT::TAG_Compound)); } - + public function applyGravity(): void{ $this->level->broadcastLevelEvent($this, LevelEventPacket::EVENT_SOUND_ARMOR_STAND_FALL); parent::applyGravity(); } - + public function attack(EntityDamageEvent $source): void{ if($source instanceof EntityDamageByEntityEvent){ $damager = $source->getDamager(); diff --git a/src/Xenophilicy/TableSpoon/entity/object/EndCrystal.php b/src/Xenophilicy/TableSpoon/entity/object/EndCrystal.php index 0bdd2bd..f558ed7 100644 --- a/src/Xenophilicy/TableSpoon/entity/object/EndCrystal.php +++ b/src/Xenophilicy/TableSpoon/entity/object/EndCrystal.php @@ -16,7 +16,7 @@ * Class EndCrystal * @package Xenophilicy\TableSpoon\entity\object */ -class EndCrystal extends Entity{ +class EndCrystal extends Entity { public const TAG_SHOW_BOTTOM = "ShowBottom"; diff --git a/src/Xenophilicy/TableSpoon/entity/object/LeadKnot.php b/src/Xenophilicy/TableSpoon/entity/object/LeadKnot.php index 76ba726..695cf1d 100644 --- a/src/Xenophilicy/TableSpoon/entity/object/LeadKnot.php +++ b/src/Xenophilicy/TableSpoon/entity/object/LeadKnot.php @@ -10,7 +10,7 @@ * Class LeadKnot * @package Xenophilicy\TableSpoon\entity\object */ -class LeadKnot extends Entity{ +class LeadKnot extends Entity { public function onUpdate(int $currentTick): bool{ return false; } diff --git a/src/Xenophilicy/TableSpoon/entity/object/Lightning.php b/src/Xenophilicy/TableSpoon/entity/object/Lightning.php index 19a7f25..4180f3f 100644 --- a/src/Xenophilicy/TableSpoon/entity/object/Lightning.php +++ b/src/Xenophilicy/TableSpoon/entity/object/Lightning.php @@ -16,7 +16,7 @@ * Class Lightning * @package Xenophilicy\TableSpoon\entity\object */ -class Lightning extends Animal{ +class Lightning extends Animal { public const NETWORK_ID = self::LIGHTNING_BOLT; diff --git a/src/Xenophilicy/TableSpoon/entity/projectile/FireworkRocket.php b/src/Xenophilicy/TableSpoon/entity/projectile/FireworkRocket.php index 903b45a..fc85640 100644 --- a/src/Xenophilicy/TableSpoon/entity/projectile/FireworkRocket.php +++ b/src/Xenophilicy/TableSpoon/entity/projectile/FireworkRocket.php @@ -58,10 +58,10 @@ public function __construct(Level $level, CompoundTag $nbt, Entity $shootingEnti $this->fireworks = $item; parent::__construct($level, $nbt, $shootingEntity); } - + /** * @param Player[]|Player $player - * @param array $data Properly formatted entity data, defaults to everything + * @param array|null $data Properly formatted entity data, defaults to everything */ public function sendData($player, array $data = null): void{ if(!is_array($player)){ diff --git a/src/Xenophilicy/TableSpoon/entity/vehicle/Boat.php b/src/Xenophilicy/TableSpoon/entity/vehicle/Boat.php index 6122880..df45456 100644 --- a/src/Xenophilicy/TableSpoon/entity/vehicle/Boat.php +++ b/src/Xenophilicy/TableSpoon/entity/vehicle/Boat.php @@ -32,20 +32,20 @@ * Class Boat * @package Xenophilicy\TableSpoon\entity\vehicle */ -class Boat extends Vehicle{ - +class Boat extends Vehicle { + public const TAG_WOOD_ID = "WoodID"; public const NETWORK_ID = self::BOAT; - + public $height = 0.7; public $width = 1.6; public $gravity = 0; public $drag = 0.1; - + /** @var Entity */ public $linkedEntity = null; protected $age = 0; - + public function initEntity(): void{ if(!$this->namedtag->hasTag(self::TAG_WOOD_ID, ByteTag::class)){ $this->namedtag->setByte(self::TAG_WOOD_ID, 0); @@ -53,18 +53,18 @@ public function initEntity(): void{ $this->setMaxHealth(4); parent::initEntity(); } - + public function getDrops(): array{ return [ItemItem::get(ItemItem::BOAT, $this->getWoodID(), 1)]; } - + /** * @return int */ public function getWoodID(){ return $this->namedtag->getByte(self::TAG_WOOD_ID); } - + public function attack(EntityDamageEvent $source): void{ parent::attack($source); if(!$source->isCancelled()){ @@ -73,7 +73,7 @@ public function attack(EntityDamageEvent $source): void{ PMServer::getInstance()->broadcastPacket($this->getViewers(), $pk); } } - + public function entityBaseTick(int $tickDiff = 1): bool{ return false;/* TODO if($this->closed){ diff --git a/src/Xenophilicy/TableSpoon/entity/vehicle/Vehicle.php b/src/Xenophilicy/TableSpoon/entity/vehicle/Vehicle.php index 5b970d3..39040db 100644 --- a/src/Xenophilicy/TableSpoon/entity/vehicle/Vehicle.php +++ b/src/Xenophilicy/TableSpoon/entity/vehicle/Vehicle.php @@ -1,6 +1,5 @@ . - * * @author Xenophilicy\TableSpoon * @author larryTheCoder * @link https://CortexPE.xyz - * */ namespace Xenophilicy\TableSpoon\entity\vehicle; @@ -47,18 +41,17 @@ /** * Minecraft-minecart project - * * @author larryTheCoder * @package Xenophilicy\TableSpoon\entity\vehicle */ -abstract class Vehicle extends PMVehicle{ - +abstract class Vehicle extends PMVehicle { + /** @var Entity */ protected $linkedEntity = null; /** @var bool */ protected $canInteract; protected $rollingDirection = true; - + /** * Vehicle constructor. * @param Level $level @@ -67,50 +60,50 @@ abstract class Vehicle extends PMVehicle{ public function __construct(Level $level, CompoundTag $nbt){ parent::__construct($level, $nbt); } - + public function getRollingDirection(): int{ return $this->propertyManager->getInt(self::DATA_HURT_DIRECTION); } - + /** * @param int $direction */ public function setRollingDirection(int $direction){ $this->propertyManager->setInt(self::DATA_HURT_DIRECTION, $direction); } - + public function getInteractButtonText(): string{ return "Mount"; } - + public function getLinkedEntity(): ?Entity{ return $this->linkedEntity; } - + /** * @return bool */ public function canDoInteraction(){ return $this->linkedEntity == null && $this->canInteract; } - + public function initEntity(): void{ parent::initEntity(); - + $this->setRollingAmplitude(0); $this->setDamage(0); $this->setRollingDirection(0); - + $this->y += $this->baseOffset; } - + /** * @param int $time */ public function setRollingAmplitude(int $time){ $this->propertyManager->setInt(self::DATA_HURT_TIME, $time); } - + /** * @param int $damage */ @@ -120,7 +113,7 @@ public function setDamage(int $damage){ } $this->propertyManager->setInt(self::DATA_HEALTH, $damage); } - + public function attack(EntityDamageEvent $source): void{ $damage = null; $instantKill = false; @@ -128,14 +121,14 @@ public function attack(EntityDamageEvent $source): void{ $damage = $source->getDamager(); $instantKill = $damage instanceof Player && $damage->isCreative(); } - + if(!$instantKill) $this->performHurtAnimation(rand(4, 8)); // Random is fun - + if($instantKill || $this->getDamage() <= 0){ if($this->linkedEntity != null){ $this->mountEntity($this->linkedEntity); } - + if($instantKill){ $this->kill(); }else{ @@ -143,7 +136,7 @@ public function attack(EntityDamageEvent $source): void{ } } } - + /** * @param float $damage * @return bool @@ -157,15 +150,14 @@ protected function performHurtAnimation(float $damage){ $this->setDamage($this->getDamage() - $damage); return true; } - + public function getDamage(): int{ // This tag should be DATA_DAMAGE_TAKEN but okay? return $this->propertyManager->getInt(self::DATA_HEALTH); } - + /** * Mount or Dismounts an Entity from a vehicle - * * @param Entity $entity The target Entity * @return boolean {@code true} if the mounting successful */ @@ -174,7 +166,7 @@ public function mountEntity(Entity $entity): bool{ $this->server->getInstance()->getLogger()->error("The target of the mounting entity can't be null or must be player"); return false; } - $riding = new EntityLink(); + $riding = new EntityLink($entity->getOwningEntityId(), $this->getId(), EntityLink::TYPE_RIDER, true, true); if(isset($entity->riding) && !is_null($entity->riding)){ // TODO: an event for the interaction $pk = new SetActorLinkPacket(); @@ -210,13 +202,14 @@ public function mountEntity(Entity $entity): bool{ $pk->link = $riding; $entity->dataPacket($pk); } + /** @noinspection PhpUndefinedFieldInspection */ $entity->riding = $this; $this->linkedEntity = $entity; $entity->setDataFlag(self::DATA_FLAGS, self::DATA_FLAG_RIDING, true); $this->propertyManager->setVector3(self::DATA_RIDER_SEAT_POSITION, new Vector3(0, $this->baseOffset * 2, 0)); return true; } - + public function onUpdate(int $currentTick): bool{ $hasUpdated = parent::onUpdate($currentTick); if($this->isFlaggedForDespawn() || !$this->isAlive()){ @@ -232,11 +225,11 @@ public function onUpdate(int $currentTick): bool{ } return $hasUpdated; } - + public function getRollingAmplitude(): int{ return $this->propertyManager->getInt(self::DATA_HURT_TIME); } - + /** * @param Entity $to */ diff --git a/src/Xenophilicy/TableSpoon/event/DimensionPortalsEvent.php b/src/Xenophilicy/TableSpoon/event/DimensionPortalsEvent.php index c2c67ce..693ad64 100644 --- a/src/Xenophilicy/TableSpoon/event/DimensionPortalsEvent.php +++ b/src/Xenophilicy/TableSpoon/event/DimensionPortalsEvent.php @@ -9,5 +9,5 @@ * Class DimensionPortalsEvent * @package Xenophilicy\TableSpoon\event */ -abstract class DimensionPortalsEvent extends Event{ +abstract class DimensionPortalsEvent extends Event { } \ No newline at end of file diff --git a/src/Xenophilicy/TableSpoon/event/player/PlayerEnterPortalEvent.php b/src/Xenophilicy/TableSpoon/event/player/PlayerEnterPortalEvent.php index 83937a5..cde2b8b 100644 --- a/src/Xenophilicy/TableSpoon/event/player/PlayerEnterPortalEvent.php +++ b/src/Xenophilicy/TableSpoon/event/player/PlayerEnterPortalEvent.php @@ -12,7 +12,7 @@ * Class PlayerEnterPortalEvent * @package Xenophilicy\TableSpoon\event\player */ -class PlayerEnterPortalEvent extends DimensionPortalsEvent implements Cancellable{ +class PlayerEnterPortalEvent extends DimensionPortalsEvent implements Cancellable { /** @var Player */ private $player; diff --git a/src/Xenophilicy/TableSpoon/event/player/PlayerPortalTeleportEvent.php b/src/Xenophilicy/TableSpoon/event/player/PlayerPortalTeleportEvent.php index 0890b27..7949dbd 100644 --- a/src/Xenophilicy/TableSpoon/event/player/PlayerPortalTeleportEvent.php +++ b/src/Xenophilicy/TableSpoon/event/player/PlayerPortalTeleportEvent.php @@ -13,7 +13,7 @@ * Class PlayerPortalTeleportEvent * @package Xenophilicy\TableSpoon\event\player */ -class PlayerPortalTeleportEvent extends DimensionPortalsEvent implements Cancellable{ +class PlayerPortalTeleportEvent extends DimensionPortalsEvent implements Cancellable { /** @var Player */ private $player; diff --git a/src/Xenophilicy/TableSpoon/inventory/EnchantInventory.php b/src/Xenophilicy/TableSpoon/inventory/EnchantInventory.php index 68d5544..5fdbe8f 100644 --- a/src/Xenophilicy/TableSpoon/inventory/EnchantInventory.php +++ b/src/Xenophilicy/TableSpoon/inventory/EnchantInventory.php @@ -45,6 +45,5 @@ public function onOpen(Player $who): void{ public function onClose(Player $who): void{ $this->dropContents($this->holder->getLevel(), $this->holder->add(0.5, 0.5, 0.5)); - return; } } \ No newline at end of file diff --git a/src/Xenophilicy/TableSpoon/item/ArmorStand.php b/src/Xenophilicy/TableSpoon/item/ArmorStand.php index 6fa1f8e..35d37b5 100644 --- a/src/Xenophilicy/TableSpoon/item/ArmorStand.php +++ b/src/Xenophilicy/TableSpoon/item/ArmorStand.php @@ -15,7 +15,7 @@ * Class ArmorStand * @package Xenophilicy\TableSpoon\item */ -class ArmorStand extends Item{ +class ArmorStand extends Item { /** * ArmorStand constructor. * @param int $meta diff --git a/src/Xenophilicy/TableSpoon/item/BlazeRod.php b/src/Xenophilicy/TableSpoon/item/BlazeRod.php index ee2b1b3..38ef4af 100644 --- a/src/Xenophilicy/TableSpoon/item/BlazeRod.php +++ b/src/Xenophilicy/TableSpoon/item/BlazeRod.php @@ -9,5 +9,5 @@ * Class BlazeRod * @package Xenophilicy\TableSpoon\item */ -class BlazeRod extends PMBlazeRod{ +class BlazeRod extends PMBlazeRod { } \ No newline at end of file diff --git a/src/Xenophilicy/TableSpoon/item/Boat.php b/src/Xenophilicy/TableSpoon/item/Boat.php index d695d2a..094c88a 100644 --- a/src/Xenophilicy/TableSpoon/item/Boat.php +++ b/src/Xenophilicy/TableSpoon/item/Boat.php @@ -32,8 +32,8 @@ * Class Boat * @package Xenophilicy\TableSpoon\item */ -class Boat extends ItemPM{ - +class Boat extends ItemPM { + /** * Boat constructor. * @param int $meta @@ -52,18 +52,18 @@ public function __construct($meta = 0){ $this->name = "Dark Oak Boat"; } } - + public function getMaxStackSize(): int{ return 1; } - + /** * @return bool */ public function canBeActivated(){ return true; } - + public function onActivate(Player $player, Block $block, Block $target, int $face, Vector3 $facepos): bool{ // TODO return true; @@ -91,7 +91,7 @@ public function onActivate(Player $player, Block $block, Block $target, int $fac } return true;*/ } - + public function getFuelTime(): int{ return 1200; //400 in PC } diff --git a/src/Xenophilicy/TableSpoon/item/Bow.php b/src/Xenophilicy/TableSpoon/item/Bow.php index 153ca62..3236de3 100644 --- a/src/Xenophilicy/TableSpoon/item/Bow.php +++ b/src/Xenophilicy/TableSpoon/item/Bow.php @@ -18,7 +18,7 @@ * Class Bow * @package Xenophilicy\TableSpoon\item */ -class Bow extends PMBow{ +class Bow extends PMBow { public function onReleaseUsing(Player $player): bool{ if($player->isSurvival() and !$player->getInventory()->contains(Item::get(Item::ARROW, 0, 1))){ $player->getInventory()->sendContents($player); diff --git a/src/Xenophilicy/TableSpoon/item/Bucket.php b/src/Xenophilicy/TableSpoon/item/Bucket.php index 08fed18..80b4f07 100644 --- a/src/Xenophilicy/TableSpoon/item/Bucket.php +++ b/src/Xenophilicy/TableSpoon/item/Bucket.php @@ -14,7 +14,7 @@ * Class Bucket * @package Xenophilicy\TableSpoon\item */ -class Bucket extends PMBucket{ +class Bucket extends PMBucket { public function onActivate(Player $player, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector): bool{ if(Utils::getDimension($player->getLevel()) == DimensionIds::NETHER && $this->getOutputBlockID() == Block::WATER){ return false; diff --git a/src/Xenophilicy/TableSpoon/item/DragonBreath.php b/src/Xenophilicy/TableSpoon/item/DragonBreath.php index 1c48a2e..b094907 100644 --- a/src/Xenophilicy/TableSpoon/item/DragonBreath.php +++ b/src/Xenophilicy/TableSpoon/item/DragonBreath.php @@ -9,7 +9,7 @@ * Class DragonBreath * @package Xenophilicy\TableSpoon\item */ -class DragonBreath extends Item{ +class DragonBreath extends Item { /** * DragonBreath constructor. * @param int $meta diff --git a/src/Xenophilicy/TableSpoon/item/Elytra.php b/src/Xenophilicy/TableSpoon/item/Elytra.php index d715f3c..4d7b08b 100644 --- a/src/Xenophilicy/TableSpoon/item/Elytra.php +++ b/src/Xenophilicy/TableSpoon/item/Elytra.php @@ -9,7 +9,7 @@ * Class Elytra * @package Xenophilicy\TableSpoon\item */ -class Elytra extends Durable{ +class Elytra extends Durable { /** * Elytra constructor. * @param int $meta diff --git a/src/Xenophilicy/TableSpoon/item/EnchantedBook.php b/src/Xenophilicy/TableSpoon/item/EnchantedBook.php index f62257c..d9a5922 100644 --- a/src/Xenophilicy/TableSpoon/item/EnchantedBook.php +++ b/src/Xenophilicy/TableSpoon/item/EnchantedBook.php @@ -10,7 +10,7 @@ * Class EnchantedBook * @package Xenophilicy\TableSpoon\item */ -class EnchantedBook extends Item{ +class EnchantedBook extends Item { /** * EnchantedBook constructor. * @param int $meta diff --git a/src/Xenophilicy/TableSpoon/item/EndCrystal.php b/src/Xenophilicy/TableSpoon/item/EndCrystal.php index 766dbd9..cff0a86 100644 --- a/src/Xenophilicy/TableSpoon/item/EndCrystal.php +++ b/src/Xenophilicy/TableSpoon/item/EndCrystal.php @@ -13,7 +13,7 @@ * Class EndCrystal * @package Xenophilicy\TableSpoon\item */ -class EndCrystal extends Item{ +class EndCrystal extends Item { /** * EndCrystal constructor. * @param int $meta diff --git a/src/Xenophilicy/TableSpoon/item/EyeOfEnder.php b/src/Xenophilicy/TableSpoon/item/EyeOfEnder.php index a85533b..7b4af3f 100644 --- a/src/Xenophilicy/TableSpoon/item/EyeOfEnder.php +++ b/src/Xenophilicy/TableSpoon/item/EyeOfEnder.php @@ -9,7 +9,7 @@ * Class EyeOfEnder * @package Xenophilicy\TableSpoon\item */ -class EyeOfEnder extends Item{ +class EyeOfEnder extends Item { /** * EyeOfEnder constructor. * @param int $meta diff --git a/src/Xenophilicy/TableSpoon/item/FireCharge.php b/src/Xenophilicy/TableSpoon/item/FireCharge.php index f10cc85..b6abf64 100644 --- a/src/Xenophilicy/TableSpoon/item/FireCharge.php +++ b/src/Xenophilicy/TableSpoon/item/FireCharge.php @@ -14,7 +14,7 @@ * Class FireCharge * @package Xenophilicy\TableSpoon\item */ -class FireCharge extends Item{ +class FireCharge extends Item { /** * FireCharge constructor. * @param int $meta diff --git a/src/Xenophilicy/TableSpoon/item/Fireworks.php b/src/Xenophilicy/TableSpoon/item/Fireworks.php index 1126665..dae09c5 100644 --- a/src/Xenophilicy/TableSpoon/item/Fireworks.php +++ b/src/Xenophilicy/TableSpoon/item/Fireworks.php @@ -21,7 +21,7 @@ * Class Fireworks * @package Xenophilicy\TableSpoon\item */ -class Fireworks extends Item{ +class Fireworks extends Item { public const TAG_FIREWORKS = "Fireworks"; public const TAG_EXPLOSIONS = "Explosions"; diff --git a/src/Xenophilicy/TableSpoon/item/FishingRod.php b/src/Xenophilicy/TableSpoon/item/FishingRod.php index 70a93e2..4da3ba3 100644 --- a/src/Xenophilicy/TableSpoon/item/FishingRod.php +++ b/src/Xenophilicy/TableSpoon/item/FishingRod.php @@ -23,7 +23,7 @@ * Class FishingRod * @package Xenophilicy\TableSpoon\item */ -class FishingRod extends Durable{ +class FishingRod extends Durable { /** * FishingRod constructor. * @param int $meta diff --git a/src/Xenophilicy/TableSpoon/item/GlassBottle.php b/src/Xenophilicy/TableSpoon/item/GlassBottle.php index 4c31a6e..ef6d8e9 100644 --- a/src/Xenophilicy/TableSpoon/item/GlassBottle.php +++ b/src/Xenophilicy/TableSpoon/item/GlassBottle.php @@ -14,7 +14,7 @@ * Class GlassBottle * @package Xenophilicy\TableSpoon\item */ -class GlassBottle extends PMGlassBottle{ +class GlassBottle extends PMGlassBottle { public function onActivate(Player $player, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector): bool{ if(in_array($blockClicked->getId(), [Block::STILL_WATER, Block::FLOWING_WATER]) || in_array($blockReplace->getId(), [Block::STILL_WATER, Block::FLOWING_WATER])){ if($player->isSurvival()){ diff --git a/src/Xenophilicy/TableSpoon/item/ItemManager.php b/src/Xenophilicy/TableSpoon/item/ItemManager.php index 810b3f5..ec9079c 100644 --- a/src/Xenophilicy/TableSpoon/item/ItemManager.php +++ b/src/Xenophilicy/TableSpoon/item/ItemManager.php @@ -11,7 +11,7 @@ * Class ItemManager * @package Xenophilicy\TableSpoon\item */ -class ItemManager{ +class ItemManager { public static function init(){ ItemFactory::registerItem(new Boat(), true); ItemFactory::registerItem(new LingeringPotion(), true); diff --git a/src/Xenophilicy/TableSpoon/item/Lead.php b/src/Xenophilicy/TableSpoon/item/Lead.php index 8a3b44c..53b123a 100644 --- a/src/Xenophilicy/TableSpoon/item/Lead.php +++ b/src/Xenophilicy/TableSpoon/item/Lead.php @@ -10,7 +10,7 @@ * Class Lead * @package Xenophilicy\TableSpoon\item */ -class Lead extends Item{ +class Lead extends Item { /** * Lead constructor. * @param int $meta diff --git a/src/Xenophilicy/TableSpoon/item/LingeringPotion.php b/src/Xenophilicy/TableSpoon/item/LingeringPotion.php index 599fc10..b0e5bfa 100644 --- a/src/Xenophilicy/TableSpoon/item/LingeringPotion.php +++ b/src/Xenophilicy/TableSpoon/item/LingeringPotion.php @@ -33,7 +33,7 @@ * Class LingeringPotion * @package Xenophilicy\TableSpoon\item */ -class LingeringPotion extends ProjectileItem{ +class LingeringPotion extends ProjectileItem { public const TAG_POTION_ID = "PotionId"; diff --git a/src/Xenophilicy/TableSpoon/item/Minecart.php b/src/Xenophilicy/TableSpoon/item/Minecart.php index d22c4f8..af83865 100644 --- a/src/Xenophilicy/TableSpoon/item/Minecart.php +++ b/src/Xenophilicy/TableSpoon/item/Minecart.php @@ -12,7 +12,7 @@ * Class Minecart * @package Xenophilicy\TableSpoon\item */ -class Minecart extends PMMinecart{ +class Minecart extends PMMinecart { public function onActivate(Player $player, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector): bool{ //$level = $player->getLevel(); //$entity = Entity::createEntity(Entity::MINECART, $level, Entity::createBaseNBT($blockReplace->add(0.5, 0, 0.5))); diff --git a/src/Xenophilicy/TableSpoon/item/Record.php b/src/Xenophilicy/TableSpoon/item/Record.php index 8692698..c100e74 100644 --- a/src/Xenophilicy/TableSpoon/item/Record.php +++ b/src/Xenophilicy/TableSpoon/item/Record.php @@ -10,7 +10,7 @@ * Class Record * @package Xenophilicy\TableSpoon\item */ -class Record extends Item{ +class Record extends Item { /** * Record constructor. * @param int $id @@ -20,15 +20,15 @@ class Record extends Item{ public function __construct(int $id, int $meta, string $name){ parent::__construct($id, $meta, $name); } - + public function getMaxStackSize(): int{ return 1; } - + public function isValid(): bool{ return ($this->getId() >= 500 && $this->getId() <= 511); } - + /** * @return int */ @@ -37,11 +37,11 @@ public function getSoundId(){ $cal -= 1; return $cal; } - + public function getRecordId(): int{ return 1756 + $this->getId(); // so that it matches the wiki... } - + public function getRecordName(): string{ $names = [Item::RECORD_13 => "13", Item::RECORD_CAT => "cat", Item::RECORD_BLOCKS => "blocks", Item::RECORD_CHIRP => "chirp", Item::RECORD_FAR => "far", Item::RECORD_MALL => "mall", Item::RECORD_MELLOHI => "mellohi", Item::RECORD_STAL => "stal", Item::RECORD_STRAD => "strad", Item::RECORD_WARD => "ward", Item::RECORD_11 => "11", Item::RECORD_WAIT => "wait"]; return $names[$this->getId()]; diff --git a/src/Xenophilicy/TableSpoon/item/ShulkerBox.php b/src/Xenophilicy/TableSpoon/item/ShulkerBox.php index 1488bb6..9fabc18 100644 --- a/src/Xenophilicy/TableSpoon/item/ShulkerBox.php +++ b/src/Xenophilicy/TableSpoon/item/ShulkerBox.php @@ -18,8 +18,8 @@ * Class ShulkerBox * @package Xenophilicy\TableSpoon\item */ -class ShulkerBox extends Item{ - +class ShulkerBox extends Item { + const WHITE = 0; const ORANGE = 1; const MAGENTA = 2; @@ -36,7 +36,7 @@ class ShulkerBox extends Item{ const GREEN = 13; const RED = 14; const BLACK = 15; - + /** * @param int $meta * @param string|null $name @@ -51,7 +51,7 @@ public function __construct(int $meta = 0, ?string $name = null, ?NamedTag $inve $this->getNamedTag()->setTag($inventory); } } - + /** * @param int $meta * @return string @@ -92,11 +92,11 @@ private function getColorName(int $meta): string{ return "White"; } } - + public function getMaxStackSize(): int{ return 1; } - + public function onActivate(Player $player, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector): bool{ $block = BlockFactory::get($this->id, $this->meta, $blockReplace); $blockReplace->level->setBlock($blockReplace, $block, true, true); diff --git a/src/Xenophilicy/TableSpoon/item/Trident.php b/src/Xenophilicy/TableSpoon/item/Trident.php index 52a6b6f..6282b13 100644 --- a/src/Xenophilicy/TableSpoon/item/Trident.php +++ b/src/Xenophilicy/TableSpoon/item/Trident.php @@ -12,7 +12,7 @@ * Class Trident * @package Xenophilicy\TableSpoon\item */ -class Trident extends Tool{ +class Trident extends Tool { public const TAG_TRIDENT = "Trident"; diff --git a/src/Xenophilicy/TableSpoon/item/UnDyedShulkerBox.php b/src/Xenophilicy/TableSpoon/item/UnDyedShulkerBox.php index 1df9632..9cd2020 100644 --- a/src/Xenophilicy/TableSpoon/item/UnDyedShulkerBox.php +++ b/src/Xenophilicy/TableSpoon/item/UnDyedShulkerBox.php @@ -11,7 +11,7 @@ * Class UnDyedShulkerBox * @package Xenophilicy\TableSpoon\item */ -class UnDyedShulkerBox extends ShulkerBox{ +class UnDyedShulkerBox extends ShulkerBox { /** * @param string|null $name diff --git a/src/Xenophilicy/TableSpoon/item/enchantment/Enchantment.php b/src/Xenophilicy/TableSpoon/item/enchantment/Enchantment.php index 620cd19..459f8de 100644 --- a/src/Xenophilicy/TableSpoon/item/enchantment/Enchantment.php +++ b/src/Xenophilicy/TableSpoon/item/enchantment/Enchantment.php @@ -10,7 +10,7 @@ * Class Enchantment * @package Xenophilicy\TableSpoon\item\enchantment */ -class Enchantment extends EnchantmentPM{ +class Enchantment extends EnchantmentPM { public static function init(): void{ if(TableSpoon::$settings["enchantments"]["vanilla"]){ self::registerEnchantment(new Enchantment(self::SMITE, "%enchantment.weapon.smite", self::RARITY_UNCOMMON, self::SLOT_SWORD, self::SLOT_NONE, 5)); diff --git a/src/Xenophilicy/TableSpoon/item/utils/ArmorDurability.php b/src/Xenophilicy/TableSpoon/item/utils/ArmorDurability.php index 901c82f..30beb24 100644 --- a/src/Xenophilicy/TableSpoon/item/utils/ArmorDurability.php +++ b/src/Xenophilicy/TableSpoon/item/utils/ArmorDurability.php @@ -9,25 +9,25 @@ * Class ArmorDurability * @package Xenophilicy\TableSpoon\item\utils */ -class ArmorDurability{ +class ArmorDurability { // Just to make it more organized... // VALUES ARE BASED FROM: https://minecraft.gamepedia.com/Helmet, https://minecraft.gamepedia.com/Chestplate, https://minecraft.gamepedia.com/Leggings, https://minecraft.gamepedia.com/Boots /** @var int[] */ public const - LEATHER_DURABILITY = [Item::LEATHER_HELMET => 56, Item::LEATHER_CHESTPLATE => 81, Item::LEATHER_LEGGINGS => 76, Item::LEATHER_BOOTS => 66], CHAIN_DURABILITY = [Item::CHAIN_HELMET => 166, Item::CHAIN_CHESTPLATE => 241, Item::CHAIN_LEGGINGS => 226, Item::CHAIN_BOOTS => 196], IRON_DURABILITY = [Item::IRON_HELMET => 166, Item::IRON_CHESTPLATE => 241, Item::IRON_LEGGINGS => 226, Item::IRON_BOOTS => 196], GOLD_DURABILITY = [Item::GOLD_HELMET => 78, Item::GOLD_CHESTPLATE => 113, Item::GOLD_LEGGINGS => 102, Item::GOLD_BOOTS => 92], DIAMOND_DURABILITY = [Item::DIAMOND_HELMET => 364, Item::DIAMOND_CHESTPLATE => 529, Item::DIAMOND_LEGGINGS => 496, Item::DIAMOND_BOOTS => 430]; + LEATHER_DURABILITY = [Item::LEATHER_HELMET => 56, Item::LEATHER_CHESTPLATE => 81, Item::LEATHER_LEGGINGS => 76, Item::LEATHER_BOOTS => 66], CHAIN_DURABILITY = [Item::CHAIN_HELMET => 166, Item::CHAIN_CHESTPLATE => 241, Item::CHAIN_LEGGINGS => 226, Item::CHAIN_BOOTS => 196], IRON_DURABILITY = [Item::IRON_HELMET => 166, Item::IRON_CHESTPLATE => 241, Item::IRON_LEGGINGS => 226, Item::IRON_BOOTS => 196], GOLD_DURABILITY = [Item::GOLD_HELMET => 78, Item::GOLD_CHESTPLATE => 113, Item::GOLD_LEGGINGS => 102, Item::GOLD_BOOTS => 92], DIAMOND_DURABILITY = [Item::DIAMOND_HELMET => 364, Item::DIAMOND_CHESTPLATE => 529, Item::DIAMOND_LEGGINGS => 496, Item::DIAMOND_BOOTS => 430]; /** @var int */ public const DURABILITY = [Item::LEATHER_HELMET => 56, Item::LEATHER_CHESTPLATE => 81, Item::LEATHER_LEGGINGS => 76, Item::LEATHER_BOOTS => 66, - Item::CHAIN_HELMET => 166, Item::CHAIN_CHESTPLATE => 241, Item::CHAIN_LEGGINGS => 226, Item::CHAIN_BOOTS => 196, + Item::CHAIN_HELMET => 166, Item::CHAIN_CHESTPLATE => 241, Item::CHAIN_LEGGINGS => 226, Item::CHAIN_BOOTS => 196, - Item::IRON_HELMET => 166, Item::IRON_CHESTPLATE => 241, Item::IRON_LEGGINGS => 226, Item::IRON_BOOTS => 196, + Item::IRON_HELMET => 166, Item::IRON_CHESTPLATE => 241, Item::IRON_LEGGINGS => 226, Item::IRON_BOOTS => 196, - Item::GOLD_HELMET => 78, Item::GOLD_CHESTPLATE => 113, Item::GOLD_LEGGINGS => 102, Item::GOLD_BOOTS => 92, + Item::GOLD_HELMET => 78, Item::GOLD_CHESTPLATE => 113, Item::GOLD_LEGGINGS => 102, Item::GOLD_BOOTS => 92, - Item::DIAMOND_HELMET => 364, Item::DIAMOND_CHESTPLATE => 529, Item::DIAMOND_LEGGINGS => 496, Item::DIAMOND_BOOTS => 430, + Item::DIAMOND_HELMET => 364, Item::DIAMOND_CHESTPLATE => 529, Item::DIAMOND_LEGGINGS => 496, Item::DIAMOND_BOOTS => 430, - Item::ELYTRA => 431]; + Item::ELYTRA => 431]; /** @var int */ public const OTHERS = [Item::ELYTRA => 431]; diff --git a/src/Xenophilicy/TableSpoon/item/utils/FireworksData.php b/src/Xenophilicy/TableSpoon/item/utils/FireworksData.php index 5f9ec5f..907d2ca 100644 --- a/src/Xenophilicy/TableSpoon/item/utils/FireworksData.php +++ b/src/Xenophilicy/TableSpoon/item/utils/FireworksData.php @@ -16,7 +16,7 @@ * Class FireworksData * @package Xenophilicy\TableSpoon\item\utils */ -class FireworksData{ +class FireworksData { /** @var int */ public $flight = 1; /** @var FireworksExplosion[] */ diff --git a/src/Xenophilicy/TableSpoon/item/utils/FireworksExplosion.php b/src/Xenophilicy/TableSpoon/item/utils/FireworksExplosion.php index 7143f23..3a10f31 100644 --- a/src/Xenophilicy/TableSpoon/item/utils/FireworksExplosion.php +++ b/src/Xenophilicy/TableSpoon/item/utils/FireworksExplosion.php @@ -8,16 +8,16 @@ * Class FireworksExplosion * @package Xenophilicy\TableSpoon\item\utils */ -class FireworksExplosion{ - +class FireworksExplosion { + /** @var int */ public const - TYPE_SMALL_BALL = 0, TYPE_LARGE_BALL = 1, TYPE_STAR_SHAPED = 2, TYPE_CREEPER_SHAPED = 3, TYPE_BURST = 4; - + TYPE_SMALL_BALL = 0, TYPE_LARGE_BALL = 1, TYPE_STAR_SHAPED = 2, TYPE_CREEPER_SHAPED = 3, TYPE_BURST = 4; + /** @var int */ public const - COLOR_BLACK = 0, COLOR_RED = 1, COLOR_GREEN = 2, COLOR_BROWN = 3, COLOR_BLUE = 4, COLOR_PURPLE = 5, COLOR_CYAN = 6, COLOR_LIGHT_GRAY = 7, COLOR_GRAY = 8, COLOR_PINK = 9, COLOR_LIME = 10, COLOR_YELLOW = 11, COLOR_LIGHT_BLUE = 12, COLOR_MAGENTA = 13, COLOR_ORANGE = 14, COLOR_WHITE = 15; - + COLOR_BLACK = 0, COLOR_RED = 1, COLOR_GREEN = 2, COLOR_BROWN = 3, COLOR_BLUE = 4, COLOR_PURPLE = 5, COLOR_CYAN = 6, COLOR_LIGHT_GRAY = 7, COLOR_GRAY = 8, COLOR_PINK = 9, COLOR_LIME = 10, COLOR_YELLOW = 11, COLOR_LIGHT_BLUE = 12, COLOR_MAGENTA = 13, COLOR_ORANGE = 14, COLOR_WHITE = 15; + /** @var int[] */ public $fireworkColor = [self::COLOR_BLACK, self::COLOR_BLACK, self::COLOR_BLACK]; /** @var int[] */ diff --git a/src/Xenophilicy/TableSpoon/level/LevelManager.php b/src/Xenophilicy/TableSpoon/level/LevelManager.php index 0d84113..402fedb 100644 --- a/src/Xenophilicy/TableSpoon/level/LevelManager.php +++ b/src/Xenophilicy/TableSpoon/level/LevelManager.php @@ -12,7 +12,7 @@ * Class LevelManager * @package Xenophilicy\TableSpoon\level */ -class LevelManager{ +class LevelManager { public static $loaded = false; public static function init(){ diff --git a/src/Xenophilicy/TableSpoon/level/generator/biome/Biome.php b/src/Xenophilicy/TableSpoon/level/generator/biome/Biome.php index 1f1daae..c0a1a3c 100644 --- a/src/Xenophilicy/TableSpoon/level/generator/biome/Biome.php +++ b/src/Xenophilicy/TableSpoon/level/generator/biome/Biome.php @@ -10,21 +10,21 @@ * Class Biome * @package Xenophilicy\TableSpoon\level\generator\biome */ -abstract class Biome extends \pocketmine\level\biome\Biome{ - +abstract class Biome extends \pocketmine\level\biome\Biome { + /** @var int */ public const - END = 9, FROZEN_OCEAN = 10, FROZEN_RIVER = 11, - - ICE_MOUNTAINS = 13, MUSHROOM_ISLAND = 14, MUSHROOM_ISLAND_SHORE = 15, BEACH = 16, DESERT_HILLS = 17, FOREST_HILLS = 18, TAIGA_HILLS = 19, - - BIRCH_FOREST_HILLS = 28, ROOFED_FOREST = 29, COLD_TAIGA = 30, COLD_TAIGA_HILLS = 31, MEGA_TAIGA = 32, MEGA_TAIGA_HILLS = 33, EXTREME_HILLS_PLUS = 34, SAVANNA = 35, SAVANNA_PLATEAU = 36, MESA = 37, MESA_PLATEAU_F = 38, MESA_PLATEAU = 39, - - VOID = 127; - + END = 9, FROZEN_OCEAN = 10, FROZEN_RIVER = 11, + + ICE_MOUNTAINS = 13, MUSHROOM_ISLAND = 14, MUSHROOM_ISLAND_SHORE = 15, BEACH = 16, DESERT_HILLS = 17, FOREST_HILLS = 18, TAIGA_HILLS = 19, + + BIRCH_FOREST_HILLS = 28, ROOFED_FOREST = 29, COLD_TAIGA = 30, COLD_TAIGA_HILLS = 31, MEGA_TAIGA = 32, MEGA_TAIGA_HILLS = 33, EXTREME_HILLS_PLUS = 34, SAVANNA = 35, SAVANNA_PLATEAU = 36, MESA = 37, MESA_PLATEAU_F = 38, MESA_PLATEAU = 39, + + VOID = 127; + public static function init(){ parent::init(); - + self::register(self::HELL, new HellBiome()); self::register(self::END, new EnderBiome()); // TODO: ADD Other Biomes diff --git a/src/Xenophilicy/TableSpoon/level/generator/ender/Ender.php b/src/Xenophilicy/TableSpoon/level/generator/ender/Ender.php index 8986326..ebab650 100644 --- a/src/Xenophilicy/TableSpoon/level/generator/ender/Ender.php +++ b/src/Xenophilicy/TableSpoon/level/generator/ender/Ender.php @@ -36,8 +36,8 @@ * Class Ender * @package Xenophilicy\TableSpoon\level\generator\ender */ -class Ender extends Generator{ - +class Ender extends Generator { + private static $GAUSSIAN_KERNEL = null; private static $SMOOTH_SIZE = 1; /** @var ChunkManager */ @@ -54,7 +54,7 @@ class Ender extends Generator{ private $generationPopulators = []; /** @var Simplex */ private $noiseBase; - + /** * Ender constructor. * @param array $options @@ -64,7 +64,7 @@ public function __construct(array $options = []){ self::generateKernel(); } } - + private static function generateKernel(){ self::$GAUSSIAN_KERNEL = []; $bellSize = 1 / self::$SMOOTH_SIZE; @@ -78,19 +78,19 @@ private static function generateKernel(){ } } } - + public function getName(): string{ return "Ender"; } - + public function getWaterHeight(): int{ return $this->waterHeight; } - + public function getSettings(): array{ return []; } - + public function init(ChunkManager $level, Random $random): void{ $this->level = $level; $this->random = $random; @@ -102,7 +102,7 @@ public function init(ChunkManager $level, Random $random): void{ $pilar->setRandomAmount(0); $this->populators[] = $pilar; } - + public function generateChunk(int $chunkX, int $chunkZ): void{ $this->random->setSeed(0xa6fe78dc ^ ($chunkX << 8) ^ $chunkZ ^ $this->level->getSeed()); $noise = $this->noiseBase->getFastNoise3D(16, 128, 16, 4, 8, 4, $chunkX * 16, 0, $chunkZ * 16); @@ -127,7 +127,7 @@ public function generateChunk(int $chunkX, int $chunkZ): void{ $populator->populate($this->level, $chunkX, $chunkZ, $this->random); } } - + public function populateChunk(int $chunkX, int $chunkZ): void{ $this->random->setSeed(0xa6fe78dc ^ ($chunkX << 8) ^ $chunkZ ^ $this->level->getSeed()); foreach($this->populators as $populator){ @@ -137,7 +137,7 @@ public function populateChunk(int $chunkX, int $chunkZ): void{ $biome = Biome::getBiome($chunk->getBiomeId(7, 7)); $biome->populateChunk($this->level, $chunkX, $chunkZ, $this->random); } - + public function getSpawn(): Vector3{ return new Vector3(100, 48, 0); } diff --git a/src/Xenophilicy/TableSpoon/level/generator/ender/biome/EnderBiome.php b/src/Xenophilicy/TableSpoon/level/generator/ender/biome/EnderBiome.php index 13b7da0..005fb68 100644 --- a/src/Xenophilicy/TableSpoon/level/generator/ender/biome/EnderBiome.php +++ b/src/Xenophilicy/TableSpoon/level/generator/ender/biome/EnderBiome.php @@ -32,7 +32,7 @@ * Class EnderBiome * @package Xenophilicy\TableSpoon\level\generator\ender\biome */ -class EnderBiome extends Biome{ +class EnderBiome extends Biome { public function getName(): string{ return "Ender"; diff --git a/src/Xenophilicy/TableSpoon/level/generator/ender/populator/EnderPilar.php b/src/Xenophilicy/TableSpoon/level/generator/ender/populator/EnderPilar.php index 21860df..a35f30b 100644 --- a/src/Xenophilicy/TableSpoon/level/generator/ender/populator/EnderPilar.php +++ b/src/Xenophilicy/TableSpoon/level/generator/ender/populator/EnderPilar.php @@ -34,23 +34,23 @@ * Class EnderPilar * @package Xenophilicy\TableSpoon\level\generator\ender\populator */ -class EnderPilar extends Populator{ +class EnderPilar extends Populator { private const radii = [3, 4, 3, 5, 3, 4, 3, 3, 5, 4, 5, 3, 5, 4, 4, 5, 5, 4, 4, 4, 5]; - + /** * @param $amount */ public function setRandomAmount($amount){ // $randomAmount = $amount; } - + /** * @param $amount */ public function setBaseAmount($amount){ // $baseAmount = $amount; } - + /** * @param ChunkManager $level * @param int $chunkX diff --git a/src/Xenophilicy/TableSpoon/level/particle/MobSpellParticle.php b/src/Xenophilicy/TableSpoon/level/particle/MobSpellParticle.php index 23cafb1..966d759 100644 --- a/src/Xenophilicy/TableSpoon/level/particle/MobSpellParticle.php +++ b/src/Xenophilicy/TableSpoon/level/particle/MobSpellParticle.php @@ -10,10 +10,9 @@ * Class MobSpellParticle * @package Xenophilicy\TableSpoon\level\particle */ -class MobSpellParticle extends GenericParticle{ +class MobSpellParticle extends GenericParticle { /** * MobSpellParticle constructor. - * * @param Vector3 $pos * @param int $r * @param int $g diff --git a/src/Xenophilicy/TableSpoon/level/particle/Particle.php b/src/Xenophilicy/TableSpoon/level/particle/Particle.php index 18212ff..880fe3a 100644 --- a/src/Xenophilicy/TableSpoon/level/particle/Particle.php +++ b/src/Xenophilicy/TableSpoon/level/particle/Particle.php @@ -10,17 +10,17 @@ * Class Particle * @package Xenophilicy\TableSpoon\level\particle */ -abstract class Particle extends PMParticle{ +abstract class Particle extends PMParticle { // Took me quite a lot of in-game crashes to test em all xD - + // TODO: Find the Official Names of these. public const - TYPE_SMALL_SMOKE_CLOUD = 42, TYPE_FIREWORK_GREEN_OR_YELLOW = 43, // 44 crash... Test Data Value: 0 + TYPE_SMALL_SMOKE_CLOUD = 42, TYPE_FIREWORK_GREEN_OR_YELLOW = 43, // 44 crash... Test Data Value: 0 // 45 crash... Test Data Value: 0 - TYPE_FIREWORK_WHITE = 46, TYPE_FLASH = 47; - + TYPE_FIREWORK_WHITE = 46, TYPE_FLASH = 47; + // 48-50s just crashes me... :shrug: Just add more particles here if y'all find any. :) - + /** * @return DataPacket|DataPacket[] */ diff --git a/src/Xenophilicy/TableSpoon/level/particle/RocketParticle.php b/src/Xenophilicy/TableSpoon/level/particle/RocketParticle.php index a933d5a..6f5c46e 100644 --- a/src/Xenophilicy/TableSpoon/level/particle/RocketParticle.php +++ b/src/Xenophilicy/TableSpoon/level/particle/RocketParticle.php @@ -10,7 +10,7 @@ * Class RocketParticle * @package Xenophilicy\TableSpoon\level\particle */ -class RocketParticle extends GenericParticle{ +class RocketParticle extends GenericParticle { /** * RocketParticle constructor. * @param Vector3 $pos diff --git a/src/Xenophilicy/TableSpoon/level/particle/SpellParticle.php b/src/Xenophilicy/TableSpoon/level/particle/SpellParticle.php index 6dfcb67..e4a306a 100644 --- a/src/Xenophilicy/TableSpoon/level/particle/SpellParticle.php +++ b/src/Xenophilicy/TableSpoon/level/particle/SpellParticle.php @@ -11,10 +11,9 @@ * Class SpellParticle * @package Xenophilicy\TableSpoon\level\particle */ -class SpellParticle extends GenericParticle{ +class SpellParticle extends GenericParticle { /** * SpellParticle constructor. - * * @param Vector3 $pos * @param int $r * @param int $g diff --git a/src/Xenophilicy/TableSpoon/level/sound/ExpPickupSound.php b/src/Xenophilicy/TableSpoon/level/sound/ExpPickupSound.php index de484e7..061dc1f 100644 --- a/src/Xenophilicy/TableSpoon/level/sound/ExpPickupSound.php +++ b/src/Xenophilicy/TableSpoon/level/sound/ExpPickupSound.php @@ -11,10 +11,9 @@ * Class ExpPickupSound * @package Xenophilicy\TableSpoon\level\sound */ -class ExpPickupSound extends GenericSound{ +class ExpPickupSound extends GenericSound { /** * ExpPickupSound constructor. - * * @param Vector3 $pos * @param int $pitch */ diff --git a/src/Xenophilicy/TableSpoon/level/weather/Weather.php b/src/Xenophilicy/TableSpoon/level/weather/Weather.php index 036e4d1..3c958eb 100644 --- a/src/Xenophilicy/TableSpoon/level/weather/Weather.php +++ b/src/Xenophilicy/TableSpoon/level/weather/Weather.php @@ -14,28 +14,27 @@ * Class Weather * @package Xenophilicy\TableSpoon\level\weather */ -class Weather{ - +class Weather { + /** @var int */ public const CLEAR = 0, SUNNY = 0, RAIN = 1, RAINY = 1, RAINY_THUNDER = 2, THUNDER = 3; - + private $level; private $weatherNow; private $strength1; private $strength2; private $duration; private $canCalculate = true; - + /** @var Vector3 */ private $temporalVector; - + private $lastUpdate; - + private $randomWeatherData = [self::CLEAR, self::RAIN, self::RAINY_THUNDER]; - + /** * Weather constructor. - * * @param Level $level * @param int $duration */ @@ -46,10 +45,9 @@ public function __construct(Level $level, $duration = 1200){ $this->lastUpdate = $level->getServer()->getTick(); $this->temporalVector = new Vector3(0, 0, 0); } - + /** * @param $weather - * * @return int */ public static function getWeatherFromString($weather){ @@ -77,14 +75,14 @@ public static function getWeatherFromString($weather){ return -1; } } - + /** * @param bool $canCalc */ public function setCanCalculate(bool $canCalc){ $this->canCalculate = $canCalc; } - + /** * @param $currentTick */ @@ -116,20 +114,20 @@ public function calcWeather($currentTick){ $lightning->spawnToAll(); } } - + } } $this->lastUpdate = $currentTick; } } - + /** * @return bool */ public function canCalculate(): bool{ return $this->canCalculate; } - + /** * @param int $wea * @param int $duration @@ -141,13 +139,13 @@ public function setWeather(int $wea, int $duration = 12000){ $this->duration = $duration; $this->sendWeatherToAll(); } - + public function sendWeatherToAll(){ foreach($this->level->getPlayers() as $player){ $this->sendWeather($player); } } - + /** * @param Player $p */ @@ -179,21 +177,21 @@ public function sendWeather(Player $p){ $p->dataPacket($pk); } } - + /** * @return array */ public function getRandomWeatherData(): array{ return $this->randomWeatherData; } - + /** * @param array $randomWeatherData */ public function setRandomWeatherData(array $randomWeatherData){ $this->randomWeatherData = $randomWeatherData; } - + /** * @return bool */ @@ -203,7 +201,7 @@ public function isSunny(): bool{ } return $this->getWeather() === self::SUNNY; } - + /** * @return int */ @@ -213,7 +211,7 @@ public function getWeather(): int{ } return $this->weatherNow; } - + /** * @return bool */ @@ -223,7 +221,7 @@ public function isRainy(): bool{ } return $this->getWeather() === self::RAINY; } - + /** * @return bool */ @@ -233,7 +231,7 @@ public function isRainyThunder(): bool{ } return $this->getWeather() === self::RAINY_THUNDER; } - + /** * @return bool */ @@ -243,12 +241,12 @@ public function isThunder(): bool{ } return $this->getWeather() === self::THUNDER; } - + /** * @return array */ public function getStrength(): array{ return [$this->strength1, $this->strength2]; } - + } \ No newline at end of file diff --git a/src/Xenophilicy/TableSpoon/task/DelayedLevelLoadTask.php b/src/Xenophilicy/TableSpoon/task/DelayedLevelLoadTask.php index abc56a7..c0a2065 100644 --- a/src/Xenophilicy/TableSpoon/task/DelayedLevelLoadTask.php +++ b/src/Xenophilicy/TableSpoon/task/DelayedLevelLoadTask.php @@ -12,7 +12,7 @@ * Class DelayedLevelLoadTask * @package Xenophilicy\TableSpoon\task */ -class DelayedLevelLoadTask extends Task{ +class DelayedLevelLoadTask extends Task { /** * @param int $currentTick diff --git a/src/Xenophilicy/TableSpoon/task/ElytraRocketBoostTrackingTask.php b/src/Xenophilicy/TableSpoon/task/ElytraRocketBoostTrackingTask.php index b1d5ac5..303101a 100644 --- a/src/Xenophilicy/TableSpoon/task/ElytraRocketBoostTrackingTask.php +++ b/src/Xenophilicy/TableSpoon/task/ElytraRocketBoostTrackingTask.php @@ -12,7 +12,7 @@ * Class ElytraRocketBoostTrackingTask * @package Xenophilicy\TableSpoon\task */ -class ElytraRocketBoostTrackingTask extends Task{ +class ElytraRocketBoostTrackingTask extends Task { /** @var Player */ protected $player; diff --git a/src/Xenophilicy/TableSpoon/task/TickLevelsTask.php b/src/Xenophilicy/TableSpoon/task/TickLevelsTask.php index 5662363..8b3c1a2 100644 --- a/src/Xenophilicy/TableSpoon/task/TickLevelsTask.php +++ b/src/Xenophilicy/TableSpoon/task/TickLevelsTask.php @@ -11,7 +11,7 @@ * Class TickLevelsTask * @package Xenophilicy\TableSpoon\task */ -class TickLevelsTask extends Task{ +class TickLevelsTask extends Task { /** * @param int $currentTick diff --git a/src/Xenophilicy/TableSpoon/tile/Beacon.php b/src/Xenophilicy/TableSpoon/tile/Beacon.php index 33f61db..6fcf55f 100644 --- a/src/Xenophilicy/TableSpoon/tile/Beacon.php +++ b/src/Xenophilicy/TableSpoon/tile/Beacon.php @@ -44,17 +44,17 @@ * Class Beacon * @package Xenophilicy\TableSpoon\tile */ -class Beacon extends Spawnable implements InventoryHolder{ - +class Beacon extends Spawnable implements InventoryHolder { + public const BEACON = "beacon"; - + public const TAG_LEVELS = "levels"; public const TAG_PRIMARY = "primary"; public const TAG_SECONDARY = "secondary"; public const TAG_MOVABLE = "isMovable"; - + const PYRAMID_BLOCKS = [BlockIds::DIAMOND_BLOCK, BlockIds::EMERALD_BLOCK, BlockIds::GOLD_BLOCK, BlockIds::IRON_BLOCK]; - + /** @var BeaconInventory $inventory */ protected $inventory; /** @var int $tier */ @@ -69,10 +69,9 @@ class Beacon extends Spawnable implements InventoryHolder{ private $ticks; /** @var string[] $viewers */ private $viewers = []; - + /** * Beacon constructor. - * * @param Level $level * @param CompoundTag $nbt */ @@ -81,7 +80,7 @@ public function __construct(Level $level, CompoundTag $nbt){ $this->ticks = $this->getLevel()->getServer()->getTick(); $this->scheduleUpdate(); } - + /** * @param CompoundTag $nbt * @param Vector3 $pos @@ -95,7 +94,7 @@ public static function createAdditionalNBT(CompoundTag $nbt, Vector3 $pos, ?int $nbt->setInt(self::TAG_SECONDARY, 0); $nbt->setByte(self::TAG_MOVABLE, 1); } - + /** * @return bool */ @@ -140,7 +139,7 @@ public function onUpdate(): bool{ $this->timings->stopTiming(); return true; } - + private function checkViewers(): void{ $viewers = $this->level->getChunkPlayers($this->getFloorX() >> 4, $this->getFloorZ() >> 4); $names = []; @@ -165,7 +164,7 @@ private function checkViewers(): void{ } $this->viewers = $names; } - + /** * @return int */ @@ -180,18 +179,17 @@ public function getLayers(): int{ if($this->checkShape($this->getSide(0, 4), 4)) $layers++; return $layers; } - + /** * @param Vector3 $pos * @param int $layer - * * @return bool */ public function checkShape(Vector3 $pos, $layer = 1): bool{ for($x = $pos->x - $layer; $x <= $pos->x + $layer; $x++) for($z = $pos->z - $layer; $z <= $pos->z + $layer; $z++) if(!in_array($this->getLevel()->getBlockIdAt($x, $pos->y, $z), [Block::DIAMOND_BLOCK, Block::IRON_BLOCK, Block::EMERALD_BLOCK, Block::GOLD_BLOCK])) return false; return true; } - + public function spawnToAll(){ if($this->closed){ return; @@ -199,7 +197,7 @@ public function spawnToAll(){ // TODO: activate beam if no block above parent::spawnToAll(); } - + /** * @return bool */ @@ -210,7 +208,7 @@ public function solidAbove(): bool{ } return false; } - + /** * @param CompoundTag $nbt */ @@ -220,11 +218,10 @@ public function addAdditionalSpawnData(CompoundTag $nbt): void{ $nbt->setInt(self::TAG_SECONDARY, 0); $nbt->setByte(self::TAG_MOVABLE, 1); } - + /** * @param CompoundTag $nbt * @param Player $player - * * @return bool */ public function updateCompoundTag(CompoundTag $nbt, Player $player): bool{ @@ -232,86 +229,83 @@ public function updateCompoundTag(CompoundTag $nbt, Player $player): bool{ $this->primary = max(0, $nbt->getInt(self::TAG_PRIMARY, 0, true)); $this->secondary = max(0, $nbt->getInt(self::TAG_SECONDARY, 0, true)); $this->movable = (bool)max(0, $nbt->getByte(self::TAG_MOVABLE, 0, true)); - + $this->scheduleUpdate(); $this->spawnToAll(); return true; } - + /** * @return BeaconInventory */ public function getInventory(): BeaconInventory{ return $this->inventory; } - + public function close(): void{ if(!$this->closed){ $this->inventory->removeAllViewers(true); $this->inventory = null; - + parent::close(); } } - + /** * @return int */ public function getTier(): int{ return $this->tier; } - + /** * @return int */ public function getPrimary(): int{ return $this->primary; } - + /** * @param int $primary - * * @return self */ public function setPrimary(int $primary): self{ $this->primary = $primary; return $this; } - + /** * @return int */ public function getSecondary(): int{ return $this->secondary; } - + /** * @param int $secondary - * * @return self */ public function setSecondary(int $secondary): self{ $this->secondary = $secondary; return $this; } - + /** * @return bool */ public function isMovable(): bool{ return (bool)$this->movable; } - + /** * @param bool $movable - * * @return self */ public function setMovable(bool $movable): self{ $this->movable = $movable; return $this; } - + /** * @inheritDoc */ @@ -320,10 +314,10 @@ protected function readSaveData(CompoundTag $nbt): void{ $this->primary = max(0, $nbt->getInt(self::TAG_PRIMARY, 0, true)); $this->secondary = max(0, $nbt->getInt(self::TAG_SECONDARY, 0, true)); $this->movable = (bool)max(1, $nbt->getByte(self::TAG_MOVABLE, 1, true)); - + $this->inventory = new BeaconInventory($this); } - + /** * @inheritDoc */ diff --git a/src/Xenophilicy/TableSpoon/tile/BrewingStand.php b/src/Xenophilicy/TableSpoon/tile/BrewingStand.php index 90bde10..6c71a6f 100644 --- a/src/Xenophilicy/TableSpoon/tile/BrewingStand.php +++ b/src/Xenophilicy/TableSpoon/tile/BrewingStand.php @@ -27,19 +27,19 @@ * Class BrewingStand * @package Xenophilicy\TableSpoon\tile */ -class BrewingStand extends Spawnable implements InventoryHolder, Container, Nameable{ +class BrewingStand extends Spawnable implements InventoryHolder, Container, Nameable { use NameableTrait, ContainerTrait; - + /** @var string */ public const - TAG_BREW_TIME = "BrewTime", TAG_FUEL = "Fuel", TAG_HAS_BOTTLE_0 = "has_bottle_0", TAG_HAS_BOTTLE_1 = "has_bottle_1", TAG_HAS_BOTTLE_2 = "has_bottle_2"; - + TAG_BREW_TIME = "BrewTime", TAG_FUEL = "Fuel", TAG_HAS_BOTTLE_0 = "has_bottle_0", TAG_HAS_BOTTLE_1 = "has_bottle_1", TAG_HAS_BOTTLE_2 = "has_bottle_2"; + /** @var string */ private const TAG_HAS_BOTTLE_BASE = "has_bottle_"; // lazy - + /** @var int */ public const - MAX_BREW_TIME = 400, MAX_FUEL = 20; + MAX_BREW_TIME = 400, MAX_FUEL = 20; /** @var int[] */ public const INGREDIENTS = [Item::NETHER_WART, Item::GLOWSTONE_DUST, Item::REDSTONE, Item::FERMENTED_SPIDER_EYE, Item::MAGMA_CREAM, Item::SUGAR, Item::GLISTERING_MELON, Item::SPIDER_EYE, Item::GHAST_TEAR, Item::BLAZE_POWDER, Item::GOLDEN_CARROT, Item::PUFFERFISH, Item::RABBIT_FOOT, Item::GUNPOWDER, Item::DRAGON_BREATH]; // used for hoppers... /** @var bool */ @@ -48,7 +48,7 @@ class BrewingStand extends Spawnable implements InventoryHolder, Container, Name private $nbt; /** @var BrewingInventory */ private $inventory; - + /** * BrewingStand constructor. * @param Level $level @@ -68,49 +68,49 @@ public function __construct(Level $level, CompoundTag $nbt){ if(!$nbt->hasTag(self::TAG_FUEL, ByteTag::class)){ $nbt->setByte(self::TAG_FUEL, 0); } - + $this->inventory = new BrewingInventory($this); - + $this->loadItems($nbt); $this->scheduleUpdate(); } - + /** * @return Inventory|BrewingInventory */ public function getRealInventory(){ return $this->inventory; } - + public function getDefaultName(): string{ return "Brewing Stand"; } - + public function addAdditionalSpawnData(CompoundTag $nbt): void{ $nbt->setShort(self::TAG_BREW_TIME, self::MAX_BREW_TIME); } - + public function isValidFuel(Item $item): bool{ return ($item->getId() == Item::BLAZE_POWDER && $item->getDamage() == 0); } - + public function isValidMatch(Item $ingredient, Item $potion): bool{ $recipe = TableSpoon::getInstance()->getBrewingManager()->matchBrewingRecipe($ingredient, $potion); return $recipe !== null; } - + public function onUpdate(): bool{ if($this->isClosed() || !TableSpoon::$settings["blocks"]["brewing-stands"]){ return false; } - + $return = $consumeFuel = $canBrew = false; - + $this->timings->startTiming(); - + $fuel = $this->getInventory()->getFuel(); $ingredient = $this->getInventory()->getIngredient(); - + for($i = 1; $i <= 3; $i++){ $hasBottle = false; $currItem = $this->inventory->getItem($i); @@ -120,7 +120,7 @@ public function onUpdate(): bool{ } $this->setBottle($i - 1, $hasBottle); } - + if($this->getFuelValue() > 0){ $canBrew = true; $this->broadcastFuelAmount($this->getFuelValue()); @@ -135,7 +135,7 @@ public function onUpdate(): bool{ $canBrew = false; } } - + if(!$ingredient->isNull() && $canBrew){ if($canBrew && $this->isValidIngredient($ingredient)){ foreach($this->inventory->getPotions() as $potion){ @@ -150,7 +150,7 @@ public function onUpdate(): bool{ }else{ $canBrew = false; } - + if($canBrew){ if($consumeFuel){ $fuel->count--; @@ -166,10 +166,10 @@ public function onUpdate(): bool{ $brewTime -= 1; $this->setBrewTime($brewTime); $this->brewing = true; - + $this->broadcastBrewTime($brewTime); $this->broadcastFuelTotal(self::MAX_FUEL); - + if($brewTime <= 0){ for($i = 1; $i <= 3; $i++){ $hasBottle = false; @@ -188,7 +188,7 @@ public function onUpdate(): bool{ } $this->inventory->setIngredient($ingredient); $this->saveItems($this->nbt); - + $fuelAmount = max($this->getFuelValue() - 1, 0); $this->setFuelValue($fuelAmount); $this->broadcastFuelAmount($fuelAmount); @@ -199,27 +199,27 @@ public function onUpdate(): bool{ $this->broadcastBrewTime(0); $this->brewing = false; } - + if($return){ $this->inventory->sendContents($this->inventory->getViewers()); $this->onChanged(); } - + $this->timings->stopTiming(); return $return; } - + /** * @return Inventory|BrewingInventory */ public function getInventory(){ return $this->inventory; } - + public function isValidPotion(Item $item): bool{ return (in_array($item->getId(), [Item::POTION, Item::SPLASH_POTION])); } - + public function setBottle(int $slot, bool $hasBottle): void{ if($slot > -1 && $slot < 3){ $this->getNBT()->setByte(self::TAG_HAS_BOTTLE_BASE . strval($slot), intval($hasBottle)); @@ -227,17 +227,17 @@ public function setBottle(int $slot, bool $hasBottle): void{ throw new InvalidArgumentException("Slot must be in the range of 0-2."); } } - + // Ported and cleaned up from iTXTech/Genisys - + public function getNBT(): CompoundTag{ return $this->nbt; } - + public function getFuelValue(): int{ return $this->getNBT()->getByte(self::TAG_FUEL, 0); } - + public function broadcastFuelAmount(int $value): void{ $pk = new ContainerSetDataPacket(); $pk->property = ContainerSetDataPacket::PROPERTY_BREWING_STAND_FUEL_AMOUNT; @@ -249,7 +249,7 @@ public function broadcastFuelAmount(int $value): void{ } } } - + public function broadcastFuelTotal(int $value): void{ $pk = new ContainerSetDataPacket(); $pk->property = ContainerSetDataPacket::PROPERTY_BREWING_STAND_FUEL_TOTAL; @@ -261,23 +261,23 @@ public function broadcastFuelTotal(int $value): void{ } } } - + public function isValidIngredient(Item $item): bool{ return (in_array($item->getId(), self::INGREDIENTS) && $item->getDamage() == 0); } - + public function setFuelValue(int $fuel): void{ $this->getNBT()->setByte(self::TAG_FUEL, $fuel); } - + public function getBrewTime(): int{ return $this->getNBT()->getInt(self::TAG_BREW_TIME); } - + public function setBrewTime(int $time): void{ $this->getNBT()->setInt(self::TAG_BREW_TIME, $time); } - + public function broadcastBrewTime(int $time): void{ $pk = new ContainerSetDataPacket(); $pk->property = ContainerSetDataPacket::PROPERTY_BREWING_STAND_BREW_TIME; @@ -289,20 +289,20 @@ public function broadcastBrewTime(int $time): void{ } } } - + public function saveNBT(): CompoundTag{ $this->saveItems($this->nbt); return parent::saveNBT(); } - + public function loadBottles(): void{ $this->loadItems($this->nbt); } - + protected function readSaveData(CompoundTag $nbt): void{ $this->nbt = $nbt; } - + protected function writeSaveData(CompoundTag $nbt): void{ $nbt->setShort(self::TAG_BREW_TIME, self::MAX_BREW_TIME); } diff --git a/src/Xenophilicy/TableSpoon/tile/Cauldron.php b/src/Xenophilicy/TableSpoon/tile/Cauldron.php index e9c043e..da2c821 100644 --- a/src/Xenophilicy/TableSpoon/tile/Cauldron.php +++ b/src/Xenophilicy/TableSpoon/tile/Cauldron.php @@ -15,66 +15,66 @@ * Class Cauldron * @package Xenophilicy\TableSpoon\tile */ -class Cauldron extends Spawnable{ +class Cauldron extends Spawnable { public const TAG_POTION_ID = "PotionId"; public const TAG_SPLASH_POTION = "SplashPotion"; public const TAG_CUSTOM_COLOR = "CustomColor"; - + /** @var int */ protected $potionID = -1; /** @var bool */ protected $splashPotion = false; /** @var Color */ protected $customColor = null; - + public function isSplashPotion(): bool{ return $this->splashPotion; } - + public function setSplashPotion(bool $splashPotion): void{ $this->splashPotion = $splashPotion; $this->onChanged(); } - + public function getCustomColor(): ?Color{ return $this->customColor; } - + public function setCustomColor(Color $customColor): void{ $this->customColor = $customColor; $this->onChanged(); } - + public function resetCustomColor(): void{ $this->customColor = null; $this->onChanged(); } - + public function resetPotion(): void{ $this->setPotionID(-1); } - + public function hasCustomColor(): bool{ return $this->customColor instanceof Color; } - + public function hasPotion(): bool{ return $this->getPotionID() != -1; } - + public function getPotionID(): int{ return $this->potionID; } - + public function setPotionID(int $potionID): void{ $this->potionID = $potionID; $this->onChanged(); } - + protected function writeSaveData(CompoundTag $nbt): void{ $this->applyBaseNBT($nbt); } - + private function applyBaseNBT(CompoundTag $nbt): void{ $nbt->setShort(self::TAG_POTION_ID, $this->potionID); $nbt->setByte(self::TAG_SPLASH_POTION, (int)$this->splashPotion); @@ -86,11 +86,11 @@ private function applyBaseNBT(CompoundTag $nbt): void{ } } } - + protected function addAdditionalSpawnData(CompoundTag $nbt): void{ $this->applyBaseNBT($nbt); } - + protected function readSaveData(CompoundTag $nbt): void{ // migrate old spoons' data if found if($nbt->hasTag(self::TAG_POTION_ID, LongTag::class)){ @@ -98,17 +98,17 @@ protected function readSaveData(CompoundTag $nbt): void{ $this->potionID = $nbt->getLong(self::TAG_POTION_ID, $this->potionID); $nbt->removeTag(self::TAG_POTION_ID); } - + if(!$nbt->hasTag(self::TAG_POTION_ID, ShortTag::class)){ $nbt->setShort(self::TAG_POTION_ID, $this->potionID); } $this->potionID = $nbt->getShort(self::TAG_POTION_ID, $this->potionID); - + if(!$nbt->hasTag(self::TAG_SPLASH_POTION, ByteTag::class)){ $nbt->setByte(self::TAG_SPLASH_POTION, (int)$this->splashPotion); } $this->splashPotion = (bool)$nbt->getByte(self::TAG_SPLASH_POTION, (int)$this->splashPotion); - + if($nbt->hasTag(self::TAG_CUSTOM_COLOR, IntTag::class)){ $this->customColor = Color::fromARGB($nbt->getInt(self::TAG_CUSTOM_COLOR)); } diff --git a/src/Xenophilicy/TableSpoon/tile/Hopper.php b/src/Xenophilicy/TableSpoon/tile/Hopper.php index 46ed38a..31667f2 100644 --- a/src/Xenophilicy/TableSpoon/tile/Hopper.php +++ b/src/Xenophilicy/TableSpoon/tile/Hopper.php @@ -30,14 +30,14 @@ * Class Hopper * @package Xenophilicy\TableSpoon\tile */ -class Hopper extends Spawnable implements InventoryHolder, Container, Nameable{ +class Hopper extends Spawnable implements InventoryHolder, Container, Nameable { use NameableTrait, ContainerTrait; - + /** @var HopperInventory */ private $inventory; /** @var CompoundTag */ private $nbt; - + /** * Hopper constructor. * @param Level $level @@ -45,41 +45,41 @@ class Hopper extends Spawnable implements InventoryHolder, Container, Nameable{ */ public function __construct(Level $level, CompoundTag $nbt){ parent::__construct($level, $nbt); - + $this->inventory = new HopperInventory($this); - + $this->loadItems($nbt); $this->scheduleUpdate(); } - + protected static function createAdditionalNBT(CompoundTag $nbt, Vector3 $pos, ?int $face = null, ?Item $item = null, ?Player $player = null): void{ $nbt->setTag(new ListTag("Items", [], NBT::TAG_Compound)); if($item !== null and $item->hasCustomName()){ $nbt->setString("CustomName", $item->getCustomName()); } } - + /** * @return Inventory|HopperInventory */ public function getRealInventory(){ return $this->inventory; } - + public function getSize(): int{ return 5; } - + public function getDefaultName(): string{ return "Hopper"; } - + public function addAdditionalSpawnData(CompoundTag $nbt): void{ if($this->hasName()){ $nbt->setTag($this->nbt->getTag("CustomName")); } } - + public function close(): void{ if(!$this->isClosed()){ foreach($this->getInventory()->getViewers() as $viewer){ @@ -88,14 +88,14 @@ public function close(): void{ parent::close(); } } - + /** * @return Inventory|HopperInventory */ public function getInventory(){ return $this->inventory; } - + public function onUpdate(): bool{ if((Server::getInstance()->getTick() % 8) == 0 && TableSpoon::$settings["blocks"]["hoppers"]){ if(!($this->getBlock() instanceof HopperBlock)){ @@ -247,16 +247,16 @@ public function onUpdate(): bool{ } return true; } - + public function saveNBT(): CompoundTag{ $this->saveItems($this->nbt); return parent::saveNBT(); } - + protected function readSaveData(CompoundTag $nbt): void{ $this->nbt = $nbt; } - + protected function writeSaveData(CompoundTag $nbt): void{ } } \ No newline at end of file diff --git a/src/Xenophilicy/TableSpoon/tile/Jukebox.php b/src/Xenophilicy/TableSpoon/tile/Jukebox.php index 57c11d2..cb0d2c0 100644 --- a/src/Xenophilicy/TableSpoon/tile/Jukebox.php +++ b/src/Xenophilicy/TableSpoon/tile/Jukebox.php @@ -17,12 +17,12 @@ * Class Jukebox * @package Xenophilicy\TableSpoon\tile */ -class Jukebox extends Spawnable{ - +class Jukebox extends Spawnable { + /** @var string */ public const - TAG_RECORD = "record", TAG_RECORD_ITEM = "recordItem"; - + TAG_RECORD = "record", TAG_RECORD_ITEM = "recordItem"; + /** @var int */ protected $record = 0; // default id... /** @var Item */ @@ -31,7 +31,7 @@ class Jukebox extends Spawnable{ private $loaded = false; /** @var CompoundTag */ private $nbt; - + /** * Jukebox constructor. * @param Level $level @@ -39,28 +39,28 @@ class Jukebox extends Spawnable{ */ public function __construct(Level $level, CompoundTag $nbt){ parent::__construct($level, $nbt); - + if(!$nbt->hasTag(self::TAG_RECORD, IntTag::class)){ $nbt->setInt(self::TAG_RECORD, 0); } $this->record = $nbt->getInt(self::TAG_RECORD); - + if(!$nbt->hasTag(self::TAG_RECORD_ITEM, CompoundTag::class)){ $nbt->setTag((Item::get(Item::AIR, 0, 1))->nbtSerialize(-1, self::TAG_RECORD_ITEM)); } $this->recordItem = Item::nbtDeserialize($nbt->getCompoundTag(self::TAG_RECORD_ITEM)); } - + public function dropMusicDisc(){ $this->getLevel()->dropItem($this->add(0.5, 0.5, 0.5), new Item($this->getRecordItem()->getId())); $this->recordItem = Item::get(Item::AIR, 0, 1); $this->getLevel()->broadcastLevelSoundEvent($this, LevelSoundEventPacket::SOUND_STOP_RECORD); } - + public function getRecordItem(): Item{ return ($this->recordItem instanceof Item ? $this->recordItem : Item::get(Item::AIR, 0, 1)); } - + /** * @param Record $disc */ @@ -68,14 +68,14 @@ public function setRecordItem(Record $disc){ $this->recordItem = $disc; $this->record = $disc->getRecordId(); } - + /** * @param int $recordId */ public function setRecordId(int $recordId){ $this->record = $recordId; } - + public function onUpdate(): bool{ if($this->recordItem instanceof Record && !$this->loaded){ $this->playMusicDisc(); @@ -83,7 +83,7 @@ public function onUpdate(): bool{ } return true; } - + public function playMusicDisc(){ $recordItem = $this->getRecordItem(); if($recordItem instanceof Record){ @@ -92,7 +92,7 @@ public function playMusicDisc(){ $pk->sound = $recordItem->getSoundId(); $pk->position = $this->asVector3(); $this->getLevel()->addChunkPacket($this->getX() >> 4, $this->getZ() >> 4, $pk); - + foreach($this->getLevel()->getEntities() as $entity){ if($entity->distance($this) <= 65){ if($entity instanceof Player){ @@ -103,35 +103,35 @@ public function playMusicDisc(){ } } } - + public function saveNBT(): CompoundTag{ $this->getNBT()->setTag($this->getRecordItem()->nbtSerialize(-1, self::TAG_RECORD_ITEM)); $this->getNBT()->setInt(self::TAG_RECORD, $this->getRecordId()); return parent::saveNBT(); } - + public function getNBT(): CompoundTag{ return $this->nbt; } - + public function getRecordId(): int{ return $this->record; } - + public function addAdditionalSpawnData(CompoundTag $nbt): void{ $nbt->setInt(self::TAG_RECORD, $this->getRecordId()); - + $record = $this->getRecordItem() instanceof Item ? $this->getRecordItem() : Item::get(Item::AIR, 0, 1); $nbt->setTag($record->nbtSerialize(-1, self::TAG_RECORD_ITEM)); } - + protected function readSaveData(CompoundTag $nbt): void{ $this->nbt = $nbt; } - + protected function writeSaveData(CompoundTag $nbt): void{ $nbt->setInt(self::TAG_RECORD, $this->getRecordId()); - + $record = $this->getRecordItem() instanceof Item ? $this->getRecordItem() : Item::get(Item::AIR, 0, 1); $nbt->setTag($record->nbtSerialize(-1, self::TAG_RECORD_ITEM)); } diff --git a/src/Xenophilicy/TableSpoon/tile/ShulkerBox.php b/src/Xenophilicy/TableSpoon/tile/ShulkerBox.php index 27f9781..f9b0b44 100644 --- a/src/Xenophilicy/TableSpoon/tile/ShulkerBox.php +++ b/src/Xenophilicy/TableSpoon/tile/ShulkerBox.php @@ -21,13 +21,13 @@ * Class ShulkerBox * @package Xenophilicy\TableSpoon\tile */ -class ShulkerBox extends Spawnable implements InventoryHolder, Container, Nameable{ +class ShulkerBox extends Spawnable implements InventoryHolder, Container, Nameable { use NameableTrait, ContainerTrait; - + protected $facing = self::SIDE_UP; /** @var ShulkerBoxInventory */ protected $inventory; - + /** * @param Level $level * @param CompoundTag $nbt @@ -35,7 +35,7 @@ class ShulkerBox extends Spawnable implements InventoryHolder, Container, Nameab public function __construct(Level $level, CompoundTag $nbt){ parent::__construct($level, $nbt); } - + protected static function createAdditionalNBT(CompoundTag $nbt, Vector3 $pos, ?int $face = null, ?Item $item = null, ?Player $player = null): void{ if($face === null){ $face = 1; @@ -44,11 +44,11 @@ protected static function createAdditionalNBT(CompoundTag $nbt, Vector3 $pos, ?i $nbt->setByte("isMovable", 1); $nbt->setByte("Findable", 0); } - + public function getDefaultName(): string{ return "Shulker Box"; } - + public function close(): void{ if(!$this->isClosed()){ $this->inventory->removeAllViewers(true); @@ -56,41 +56,41 @@ public function close(): void{ parent::close(); } } - + /** * @return Inventory|ShulkerBoxInventory */ public function getRealInventory(){ return $this->inventory; } - + /** * @return Inventory|ShulkerBoxInventory */ public function getInventory(){ return $this->inventory; } - + /** * @return int */ public function getFacing(): int{ return $this->facing; } - + protected function addAdditionalSpawnData(CompoundTag $nbt): void{ $nbt->setByte("facing", $this->facing); $nbt->setByte("isMovable", 1); $nbt->setByte("Findable", 0); } - + protected function readSaveData(CompoundTag $nbt): void{ $this->loadName($nbt); $this->inventory = new ShulkerBoxInventory($this); $this->loadItems($nbt); $this->facing = $nbt->getByte("facing", 1); } - + protected function writeSaveData(CompoundTag $nbt): void{ $this->saveName($nbt); $this->saveItems($nbt); diff --git a/src/Xenophilicy/TableSpoon/tile/Tile.php b/src/Xenophilicy/TableSpoon/tile/Tile.php index bc44c69..adf875b 100644 --- a/src/Xenophilicy/TableSpoon/tile/Tile.php +++ b/src/Xenophilicy/TableSpoon/tile/Tile.php @@ -11,11 +11,11 @@ * Class Tile * @package Xenophilicy\TableSpoon\tile */ -abstract class Tile extends PMTile{ +abstract class Tile extends PMTile { /** @var string */ public const - BEACON = "Beacon", SHULKER_BOX = "ShulkerBox", HOPPER = "Hopper", JUKEBOX = "Jukebox", CAULDRON = "Cauldron"; - + BEACON = "Beacon", SHULKER_BOX = "ShulkerBox", HOPPER = "Hopper", JUKEBOX = "Jukebox", CAULDRON = "Cauldron"; + public static function init(){ try{ self::registerTile(Beacon::class); @@ -23,7 +23,7 @@ public static function init(){ self::registerTile(Hopper::class); self::registerTile(BrewingStand::class); self::registerTile(Cauldron::class); - + //self::registerTile(Jukebox::class); }catch(ReflectionException $e){ TableSpoon::getInstance()->getLogger()->error($e); // stfu phpstorm diff --git a/src/Xenophilicy/TableSpoon/utils/ArmorTypes.php b/src/Xenophilicy/TableSpoon/utils/ArmorTypes.php index 4fa1805..134f085 100644 --- a/src/Xenophilicy/TableSpoon/utils/ArmorTypes.php +++ b/src/Xenophilicy/TableSpoon/utils/ArmorTypes.php @@ -9,15 +9,15 @@ * Class ArmorTypes * @package Xenophilicy\TableSpoon\utils */ -class ArmorTypes{ +class ArmorTypes { /** @var int[] */ public const - HELMET = [Item::LEATHER_HELMET, Item::CHAIN_HELMET, Item::IRON_HELMET, Item::GOLD_HELMET, Item::DIAMOND_HELMET], CHESTPLATE = [Item::LEATHER_CHESTPLATE, Item::CHAIN_CHESTPLATE, Item::IRON_CHESTPLATE, Item::GOLD_CHESTPLATE, Item::DIAMOND_CHESTPLATE, Item::ELYTRA], LEGGINGS = [Item::LEATHER_LEGGINGS, Item::CHAIN_LEGGINGS, Item::IRON_LEGGINGS, Item::GOLD_LEGGINGS, Item::DIAMOND_LEGGINGS], BOOTS = [Item::LEATHER_BOOTS, Item::CHAIN_BOOTS, Item::IRON_BOOTS, Item::GOLD_BOOTS, Item::DIAMOND_BOOTS]; - + HELMET = [Item::LEATHER_HELMET, Item::CHAIN_HELMET, Item::IRON_HELMET, Item::GOLD_HELMET, Item::DIAMOND_HELMET], CHESTPLATE = [Item::LEATHER_CHESTPLATE, Item::CHAIN_CHESTPLATE, Item::IRON_CHESTPLATE, Item::GOLD_CHESTPLATE, Item::DIAMOND_CHESTPLATE, Item::ELYTRA], LEGGINGS = [Item::LEATHER_LEGGINGS, Item::CHAIN_LEGGINGS, Item::IRON_LEGGINGS, Item::GOLD_LEGGINGS, Item::DIAMOND_LEGGINGS], BOOTS = [Item::LEATHER_BOOTS, Item::CHAIN_BOOTS, Item::IRON_BOOTS, Item::GOLD_BOOTS, Item::DIAMOND_BOOTS]; + /** @var string */ public const - TYPE_HELMET = "HELMET", TYPE_CHESTPLATE = "CHESTPLATE", TYPE_LEGGINGS = "LEGGINGS", TYPE_BOOTS = "BOOTS", TYPE_NULL = "NIL"; - + TYPE_HELMET = "HELMET", TYPE_CHESTPLATE = "CHESTPLATE", TYPE_LEGGINGS = "LEGGINGS", TYPE_BOOTS = "BOOTS", TYPE_NULL = "NIL"; + public static function getType(Item $armor): string{ if(in_array($armor->getId(), $type = self::HELMET)){ return self::TYPE_HELMET; diff --git a/src/Xenophilicy/TableSpoon/utils/ArrayUtils.php b/src/Xenophilicy/TableSpoon/utils/ArrayUtils.php index cef8fc6..988c401 100644 --- a/src/Xenophilicy/TableSpoon/utils/ArrayUtils.php +++ b/src/Xenophilicy/TableSpoon/utils/ArrayUtils.php @@ -11,8 +11,8 @@ * Class ArrayUtils * @package Xenophilicy\TableSpoon\utils */ -final class ArrayUtils{ - +final class ArrayUtils { + /** * @param mixed[] $array * @param Closure $condition @@ -25,7 +25,7 @@ public static function firstOrDefault(array $array, Closure $condition, $fallbac return $element; } } - + return $fallback; } } \ No newline at end of file diff --git a/src/Xenophilicy/TableSpoon/utils/BiomeUtils.php b/src/Xenophilicy/TableSpoon/utils/BiomeUtils.php index d5cae31..0e03fbe 100644 --- a/src/Xenophilicy/TableSpoon/utils/BiomeUtils.php +++ b/src/Xenophilicy/TableSpoon/utils/BiomeUtils.php @@ -11,13 +11,13 @@ * Class BiomeUtils * @package Xenophilicy\TableSpoon\utils */ -class BiomeUtils extends Utils{ +class BiomeUtils extends Utils { public const - OCEAN = 0, PLAINS = 1, DESERT = 2, MOUNTAINS = 3, FOREST = 4, TAIGA = 5, SWAMP = 6, RIVER = 7, HELL = 8, END = 9, FROZEN_OCEAN = 10, FROZEN_RIVER = 11, ICE_PLAINS = 12, ICE_MOUNTAINS = 13, MUSHROOM_ISLAND = 14, MUSHROOM_ISLAND_SHORE = 15, BEACH = 16, DESERT_HILLS = 17, FOREST_HILLS = 18, TAIGA_HILLS = 19, SMALL_MOUNTAINS = 20, COLD_BEACH = 26, BIRCH_FOREST = 27, BIRCH_FOREST_HILLS = 28, ROOFED_FOREST = 29, COLD_TAIGA = 30, COLD_TAIGA_HILLS = 31, MEGA_TAIGA = 32, MEGA_TAIGA_HILLS = 33, EXTREME_HILLS_PLUS = 34, SAVANNA = 35, SAVANNA_PLATEAU = 36, MESA = 37, MESA_PLATEAU_F = 38, MESA_PLATEAU = 39; - + OCEAN = 0, PLAINS = 1, DESERT = 2, MOUNTAINS = 3, FOREST = 4, TAIGA = 5, SWAMP = 6, RIVER = 7, HELL = 8, END = 9, FROZEN_OCEAN = 10, FROZEN_RIVER = 11, ICE_PLAINS = 12, ICE_MOUNTAINS = 13, MUSHROOM_ISLAND = 14, MUSHROOM_ISLAND_SHORE = 15, BEACH = 16, DESERT_HILLS = 17, FOREST_HILLS = 18, TAIGA_HILLS = 19, SMALL_MOUNTAINS = 20, COLD_BEACH = 26, BIRCH_FOREST = 27, BIRCH_FOREST_HILLS = 28, ROOFED_FOREST = 29, COLD_TAIGA = 30, COLD_TAIGA_HILLS = 31, MEGA_TAIGA = 32, MEGA_TAIGA_HILLS = 33, EXTREME_HILLS_PLUS = 34, SAVANNA = 35, SAVANNA_PLATEAU = 36, MESA = 37, MESA_PLATEAU_F = 38, MESA_PLATEAU = 39; + /** @var float[] */ public const BIOME_ID_TO_TEMPERATURE = [self::OCEAN => 0.5, self::PLAINS => 0.8, self::DESERT => 2.0, self::MOUNTAINS => 0.2, self::FOREST => 0.7, self::TAIGA => 0.25, self::SWAMP => 0.8, self::RIVER => 0.5, self::HELL => 2.0, self::END => 0.5, self::FROZEN_OCEAN => 0.0, self::FROZEN_RIVER => 0.0, self::ICE_PLAINS => 0.0, self::ICE_MOUNTAINS => 0.0, self::MUSHROOM_ISLAND => 0.9, self::MUSHROOM_ISLAND_SHORE => 0.9, self::BEACH => 0.8, self::DESERT_HILLS => 2.0, self::FOREST_HILLS => 0.7, self::TAIGA_HILLS => 0.25, self::SMALL_MOUNTAINS => 20, self::COLD_BEACH => 0.05, self::BIRCH_FOREST => 0.6, self::BIRCH_FOREST_HILLS => 0.6, self::ROOFED_FOREST => 0.7, self::COLD_TAIGA => -0.5, self::COLD_TAIGA_HILLS => -0.5, self::MEGA_TAIGA => 0.3, self::MEGA_TAIGA_HILLS => 0.25, self::EXTREME_HILLS_PLUS => 0.2, self::SAVANNA => 1.2, self::SAVANNA_PLATEAU => 1.1, self::MESA => 2.0, self::MESA_PLATEAU_F => 2.0, self::MESA_PLATEAU => 2.0]; - + public static function getTemperature(int $x, int $y, int $z, Level $level): float{ $temp = self::getBiomeTemperature($x, $z, $level); $seaLevel = 64; // default sea level @@ -27,7 +27,7 @@ public static function getTemperature(int $x, int $y, int $z, Level $level): flo } return $temp; } - + public static function getBiomeTemperature(int $x, int $z, Level $level): float{ $id = $level->getBiomeId($x, $z); if(isset(self::BIOME_ID_TO_TEMPERATURE[$id])){ @@ -35,5 +35,5 @@ public static function getBiomeTemperature(int $x, int $z, Level $level): float{ } return 0.0; } - + } \ No newline at end of file diff --git a/src/Xenophilicy/TableSpoon/utils/DyeUtils.php b/src/Xenophilicy/TableSpoon/utils/DyeUtils.php index 33396d1..584fcec 100644 --- a/src/Xenophilicy/TableSpoon/utils/DyeUtils.php +++ b/src/Xenophilicy/TableSpoon/utils/DyeUtils.php @@ -11,7 +11,7 @@ * Class DyeUtils * @package Xenophilicy\TableSpoon\utils */ -class DyeUtils extends Utils{ +class DyeUtils extends Utils { public const DYE_BLACK = 0; public const DYE_RED = 1; public const DYE_GREEN = 2; @@ -28,7 +28,7 @@ class DyeUtils extends Utils{ public const DYE_MAGENTA = 13; public const DYE_ORANGE = 14; public const DYE_WHITE = 15; - + public static function getDyeColor(int $id): Color{ switch($id){ case self::DYE_BLACK: diff --git a/src/Xenophilicy/TableSpoon/utils/EntityUtils.php b/src/Xenophilicy/TableSpoon/utils/EntityUtils.php index ffd4ba6..a939184 100644 --- a/src/Xenophilicy/TableSpoon/utils/EntityUtils.php +++ b/src/Xenophilicy/TableSpoon/utils/EntityUtils.php @@ -19,12 +19,12 @@ * Class EntityUtils * @package Xenophilicy\TableSpoon\utils */ -class EntityUtils extends Utils{ +class EntityUtils extends Utils { /** @var Entity[] */ public static $ridingEntity = []; /** @var Entity[] */ public static $riddenByEntity = []; - + public static function leashEntityToPlayer(Player $player, Entity $entity): bool{ // TODO: fix this $entityDPM = $entity->getDataPropertyManager(); if($entityDPM->getByte(Entity::DATA_FLAG_LEASHED) != 1){ @@ -38,7 +38,7 @@ public static function leashEntityToPlayer(Player $player, Entity $entity): bool return false; } } - + public static function isInsideOfPortal(Entity $entity): bool{ if($entity->level === null){ return false; @@ -49,7 +49,7 @@ public static function isInsideOfPortal(Entity $entity): bool{ } return false; } - + public static function isInsideOfEndPortal(Entity $entity): bool{ if($entity->level === null){ return false; @@ -60,7 +60,7 @@ public static function isInsideOfEndPortal(Entity $entity): bool{ } return false; } - + // Creds: Altay public static function mountEntity(Entity $vehicle, Entity $entity, int $type = EntityLink::TYPE_RIDER, bool $send = true): void{ if(!isset(self::$ridingEntity[$entity->getId()]) and $entity !== $vehicle){ @@ -85,7 +85,7 @@ public static function mountEntity(Entity $vehicle, Entity $entity, int $type = } } } - + private static function getMountedYOffset(Entity $entity): float{ switch($entity->getId()){ case Entity::BOAT: @@ -93,7 +93,7 @@ private static function getMountedYOffset(Entity $entity): float{ } return 0; } - + public static function dismountEntity(Entity $vehicle, Entity $entity, bool $send = true): void{ if(isset(self::$ridingEntity[$entity->getId()])){ unset(self::$ridingEntity[$entity->getId()]); @@ -117,10 +117,9 @@ public static function dismountEntity(Entity $vehicle, Entity $entity, bool $sen } } } - + /** * Returns if the structure is valid & the axis - * * @param Block $head * @return array */ @@ -130,10 +129,9 @@ public static function checkSnowGolemStructure(Block $head): array{ $block2 = ($level->getBlock($head->subtract(0, 2, 0))->getId() == Block::SNOW_BLOCK); return [($block1 && $block2), "Y"]; } - + /** * Returns if the structure is valid & the axis - * * @param Block $head * @return array */ diff --git a/src/Xenophilicy/TableSpoon/utils/Firework.php b/src/Xenophilicy/TableSpoon/utils/Firework.php index 67adad0..53a54f0 100644 --- a/src/Xenophilicy/TableSpoon/utils/Firework.php +++ b/src/Xenophilicy/TableSpoon/utils/Firework.php @@ -15,7 +15,7 @@ * Class Firework * @package Xenophilicy\TableSpoon\utils */ -class Firework extends Utils{ +class Firework extends Utils { /** * @param FireworksData $data * @return CompoundTag diff --git a/src/Xenophilicy/TableSpoon/utils/FishingLootTable.php b/src/Xenophilicy/TableSpoon/utils/FishingLootTable.php index 0c7cf3c..2a96aad 100644 --- a/src/Xenophilicy/TableSpoon/utils/FishingLootTable.php +++ b/src/Xenophilicy/TableSpoon/utils/FishingLootTable.php @@ -14,17 +14,17 @@ * Class FishingLootTable * @package Xenophilicy\TableSpoon\utils */ -class FishingLootTable{ +class FishingLootTable { // VALUES BASED FROM: https://minecraft.gamepedia.com/Fishing - + public const DEFAULT_UNENCHANTED = "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NDtyOjEyO2k6MTQ1O3I6MjtpOjE0NjtyOjI0NztpOjE0NztyOjEyO2k6MTQ4O3I6MjtpOjE0OTtyOjEyO2k6MTUwO3I6MjtpOjE1MTtyOjI7aToxNTI7cjoxMjtpOjE1MztyOjI7aToxNTQ7cjoyNjc7aToxNTU7cjoxOTc7aToxNTY7cjoyO2k6MTU3O3I6MTI7aToxNTg7cjoyO2k6MTU5O3I6MjtpOjE2MDtyOjI7aToxNjE7cjo5ODtpOjE2MjtyOjI7aToxNjM7cjoyMjtpOjE2NDtyOjI7aToxNjU7cjoyO2k6MTY2O3I6MjtpOjE2NztyOjM5O2k6MTY4O3I6MjY3O2k6MTY5O3I6MjtpOjE3MDtyOjI7aToxNzE7cjoxMjtpOjE3MjtyOjI7aToxNzM7cjoyO2k6MTc0O3I6MjtpOjE3NTtyOjEyO2k6MTc2O3I6Mzk7aToxNzc7cjoyO2k6MTc4O3I6MjtpOjE3OTtyOjIzODtpOjE4MDtyOjI7aToxODE7cjoxMjtpOjE4MjtyOjI7aToxODM7cjoyO2k6MTg0O3I6Mzk7aToxODU7cjoxMjtpOjE4NjtyOjM5O2k6MTg3O3I6MjtpOjE4ODtyOjI7aToxODk7cjoyO2k6MTkwO3I6MTI7aToxOTE7cjoyO2k6MTkyO3I6MjtpOjE5MztyOjI7aToxOTQ7cjoxMjtpOjE5NTtyOjI7aToxOTY7cjoxMjtpOjE5NztyOjIyO2k6MTk4O3I6Mzk7aToxOTk7cjoyO2k6MjAwO3I6MjtpOjIwMTtyOjI7aToyMDI7cjoyO2k6MjAzO3I6MTI7aToyMDQ7cjoyO2k6MjA1O3I6MTI7aToyMDY7cjozOTtpOjIwNztyOjI7aToyMDg7cjo3NjtpOjIwOTtyOjI7aToyMTA7cjoyO2k6MjExO3I6MTI7aToyMTI7cjoyO2k6MjEzO3I6MjtpOjIxNDtyOjI7aToyMTU7cjo3NjtpOjIxNjtyOjEyO2k6MjE3O3I6MjtpOjIxODtyOjk4O2k6MjE5O3I6Mzk7aToyMjA7cjozOTtpOjIyMTtyOjM5O2k6MjIyO3I6MjtpOjIyMztyOjEyO2k6MjI0O3I6MjtpOjIyNTtyOjI7aToyMjY7cjoxMjtpOjIyNztyOjEyO2k6MjI4O3I6MjM4O2k6MjI5O3I6Mzk7aToyMzA7cjoxMzU7aToyMzE7cjoyO2k6MjMyO3I6MTE1O2k6MjMzO3I6MTI7aToyMzQ7cjoyO2k6MjM1O3I6MTI7aToyMzY7cjoyO2k6MjM3O3I6MjtpOjIzODtyOjI7aToyMzk7cjoyO2k6MjQwO3I6MTE1O2k6MjQxO3I6MjtpOjI0MjtyOjI7aToyNDM7cjoyO2k6MjQ0O3I6MjI7aToyNDU7cjoxMjtpOjI0NjtyOjEyO2k6MjQ3O3I6MjtpOjI0ODtyOjEyO2k6MjQ5O086MTk6InBvY2tldG1pbmVcaXRlbVxEeWUiOjc6e3M6ODoiACoAYmxvY2siO047czo1OiIAKgBpZCI7aTozNTE7czo3OiIAKgBtZXRhIjtpOjA7czoyNjoiAHBvY2tldG1pbmVcaXRlbVxJdGVtAHRhZ3MiO3M6MDoiIjtzOjMxOiIAcG9ja2V0bWluZVxpdGVtXEl0ZW0AY2FjaGVkTkJUIjtOO3M6NToiY291bnQiO2k6MTtzOjc6IgAqAG5hbWUiO3M6MzoiRHllIjt9aToyNTA7cjoyO2k6MjUxO3I6MTI7aToyNTI7cjozMTtpOjI1MztyOjI7aToyNTQ7cjozOTtpOjI1NTtyOjI7aToyNTY7cjoyO2k6MjU3O3I6MjI7aToyNTg7cjoyO2k6MjU5O3I6MjtpOjI2MDtyOjI7aToyNjE7cjozOTtpOjI2MjtyOjI7aToyNjM7cjoyO2k6MjY0O3I6MjtpOjI2NTtyOjEyO2k6MjY2O3I6MjtpOjI2NztyOjI7aToyNjg7cjoxMjtpOjI2OTtyOjEyO2k6MjcwO3I6MjtpOjI3MTtyOjI7aToyNzI7cjoyO2k6MjczO3I6MjtpOjI3NDtyOjI7aToyNzU7cjoyO2k6Mjc2O3I6MTI7aToyNzc7cjoyO2k6Mjc4O3I6Mzk7aToyNzk7cjoxMjtpOjI4MDtyOjI7aToyODE7cjoyO2k6MjgyO3I6NzY7aToyODM7cjoyO2k6Mjg0O3I6MjtpOjI4NTtyOjM5O2k6Mjg2O3I6MjtpOjI4NztyOjk4O2k6Mjg4O3I6MjtpOjI4OTtyOjI7aToyOTA7cjoyO2k6MjkxO3I6MjtpOjI5MjtyOjI7aToyOTM7cjoyO2k6Mjk0O3I6MjtpOjI5NTtyOjI7aToyOTY7cjoxMjtpOjI5NztyOjI7aToyOTg7cjoxMjtpOjI5OTtyOjI7aTozMDA7cjoyO2k6MzAxO3I6MjtpOjMwMjtyOjI7aTozMDM7cjoyO2k6MzA0O3I6MjtpOjMwNTtyOjI7aTozMDY7cjoxMjtpOjMwNztyOjEyO2k6MzA4O3I6MjtpOjMwOTtyOjI7aTozMTA7cjoxMjtpOjMxMTtyOjEyO2k6MzEyO3I6MjtpOjMxMztyOjE3ODtpOjMxNDtyOjI7aTozMTU7cjoyO2k6MzE2O3I6MjtpOjMxNztyOjEyO2k6MzE4O3I6MTI7aTozMTk7cjozOTtpOjMyMDtyOjI7aTozMjE7cjoxMjtpOjMyMjtyOjI7aTozMjM7cjoyO2k6MzI0O3I6Mzk7aTozMjU7cjoxMjtpOjMyNjtyOjM5O2k6MzI3O3I6MjtpOjMyODtyOjk4O2k6MzI5O3I6MTI7aTozMzA7cjoxMjtpOjMzMTtyOjI2NztpOjMzMjtyOjEyO2k6MzMzO3I6Mzk7aTozMzQ7cjoyO2k6MzM1O3I6MTI7aTozMzY7cjoyO2k6MzM3O3I6MjY3O2k6MzM4O3I6MjtpOjMzOTtyOjI7aTozNDA7cjoxMjtpOjM0MTtyOjEyO2k6MzQyO3I6Mzk7aTozNDM7cjoyO2k6MzQ0O3I6MjtpOjM0NTtyOjI7aTozNDY7cjoxMjtpOjM0NztyOjI7aTozNDg7cjoyO2k6MzQ5O3I6MTI7aTozNTA7cjoyO2k6MzUxO3I6MjtpOjM1MjtyOjI7aTozNTM7cjoyO2k6MzU0O3I6MjtpOjM1NTtyOjI7aTozNTY7cjoyO2k6MzU3O3I6MTk3O2k6MzU4O3I6MjtpOjM1OTtyOjEyO2k6MzYwO3I6MjtpOjM2MTtyOjI7aTozNjI7cjoyO2k6MzYzO3I6MjtpOjM2NDtyOjEyO2k6MzY1O3I6MjtpOjM2NjtyOjI7aTozNjc7cjozOTtpOjM2ODtyOjI7aTozNjk7cjo3NjtpOjM3MDtyOjEyO2k6MzcxO3I6MjtpOjM3MjtyOjI7aTozNzM7cjo1MztpOjM3NDtyOjE5NztpOjM3NTtyOjI7aTozNzY7cjoyO2k6Mzc3O3I6MjtpOjM3ODtyOjEyO2k6Mzc5O3I6MjQ3O2k6MzgwO3I6MjtpOjM4MTtyOjM5O2k6MzgyO3I6MjtpOjM4MztyOjI7aTozODQ7cjoxOTc7aTozODU7cjoyO2k6Mzg2O3I6MjtpOjM4NztyOjEyO2k6Mzg4O3I6MjtpOjM4OTtyOjI7aTozOTA7cjoyO2k6MzkxO3I6MjEwO2k6MzkyO3I6MjtpOjM5MztyOjM5O2k6Mzk0O3I6MjtpOjM5NTtyOjI7aTozOTY7cjoyO2k6Mzk3O3I6MTI7aTozOTg7cjoxMjtpOjM5OTtyOjEyO2k6NDAwO3I6MjtpOjQwMTtyOjI7aTo0MDI7cjoyO2k6NDAzO3I6MjtpOjQwNDtyOjI7aTo0MDU7cjoyO2k6NDA2O3I6MjtpOjQwNztyOjI7aTo0MDg7cjoxMjtpOjQwOTtyOjExNTtpOjQxMDtyOjIzODtpOjQxMTtyOjEyO2k6NDEyO3I6NzY7aTo0MTM7cjoyO2k6NDE0O3I6MTI7aTo0MTU7cjozOTtpOjQxNjtyOjI7aTo0MTc7cjoxMjtpOjQxODtyOjI7aTo0MTk7cjo3NjtpOjQyMDtyOjI7aTo0MjE7cjoyO2k6NDIyO3I6MjI7aTo0MjM7cjoxMjtpOjQyNDtyOjM5O2k6NDI1O3I6MjtpOjQyNjtyOjc2O2k6NDI3O3I6MjI7aTo0Mjg7cjoyMzg7aTo0Mjk7cjoyO2k6NDMwO3I6MjtpOjQzMTtyOjI7aTo0MzI7cjoyO2k6NDMzO3I6NzY7aTo0MzQ7cjoxMzU7aTo0MzU7cjoyO2k6NDM2O3I6MjtpOjQzNztyOjI7aTo0Mzg7cjo1MztpOjQzOTtyOjI7aTo0NDA7cjoyO2k6NDQxO3I6MjtpOjQ0MjtyOjIzODtpOjQ0MztyOjI7aTo0NDQ7cjozOTtpOjQ0NTtyOjk4O2k6NDQ2O3I6MjtpOjQ0NztyOjI7aTo0NDg7cjoxMjtpOjQ0OTtyOjI7aTo0NTA7cjozOTtpOjQ1MTtyOjI7aTo0NTI7cjoyO2k6NDUzO3I6MjtpOjQ1NDtyOjM5O2k6NDU1O3I6MjtpOjQ1NjtyOjI7aTo0NTc7cjoyO2k6NDU4O3I6MjtpOjQ1OTtyOjM5O2k6NDYwO3I6MTI7aTo0NjE7cjoyO2k6NDYyO3I6NzY7aTo0NjM7cjoxMjtpOjQ2NDtyOjE5NztpOjQ2NTtyOjI7aTo0NjY7cjoxMjtpOjQ2NztyOjM5O2k6NDY4O3I6MjtpOjQ2OTtyOjEyO2k6NDcwO3I6MjY3O2k6NDcxO3I6MTI7aTo0NzI7cjoxOTc7aTo0NzM7cjoyO2k6NDc0O3I6MjtpOjQ3NTtyOjM5O2k6NDc2O3I6Mzk7aTo0Nzc7cjoyO2k6NDc4O3I6MjtpOjQ3OTtyOjI7aTo0ODA7cjo3NjtpOjQ4MTtyOjEzNTtpOjQ4MjtyOjIzODtpOjQ4MztyOjI2NztpOjQ4NDtyOjM5O2k6NDg1O3I6MjtpOjQ4NjtyOjM5O2k6NDg3O3I6MzE7aTo0ODg7cjoyNjc7aTo0ODk7cjoyO2k6NDkwO3I6MTI7aTo0OTE7cjoyMzg7aTo0OTI7cjoyNjc7aTo0OTM7cjozOTtpOjQ5NDtyOjI7aTo0OTU7cjoxOTc7aTo0OTY7cjoyO2k6NDk3O3I6Mzk7aTo0OTg7cjoyNDc7aTo0OTk7cjoxMjtpOjUwMDtyOjM5O2k6NTAxO3I6MjtpOjUwMjtyOjI7aTo1MDM7cjoxMjtpOjUwNDtyOjM5O2k6NTA1O3I6MzE7aTo1MDY7cjoxMjtpOjUwNztyOjE5NztpOjUwODtyOjEyO2k6NTA5O3I6MjtpOjUxMDtyOjEyO2k6NTExO3I6MTI7aTo1MTI7cjoyO2k6NTEzO3I6MTI7aTo1MTQ7cjoyO2k6NTE1O3I6NTM7aTo1MTY7cjoxMjtpOjUxNztyOjEyO2k6NTE4O3I6MjtpOjUxOTtyOjM5O2k6NTIwO3I6MTI7aTo1MjE7cjoxNzg7aTo1MjI7cjoyO2k6NTIzO3I6MjtpOjUyNDtyOjI7aTo1MjU7cjoyO2k6NTI2O3I6Mzk7aTo1Mjc7cjoyO2k6NTI4O3I6MTc4O2k6NTI5O3I6MjtpOjUzMDtyOjIyO2k6NTMxO3I6MTI7aTo1MzI7cjoyO2k6NTMzO3I6MjtpOjUzNDtyOjEyO2k6NTM1O3I6MjtpOjUzNjtyOjI7aTo1Mzc7cjoxMzU7aTo1Mzg7cjoxMjtpOjUzOTtyOjI7aTo1NDA7cjoxMzU7aTo1NDE7cjozOTtpOjU0MjtyOjIxMDtpOjU0MztyOjI7aTo1NDQ7cjoyO2k6NTQ1O3I6MjtpOjU0NjtyOjI7aTo1NDc7cjo1MztpOjU0ODtyOjM5O2k6NTQ5O3I6MjtpOjU1MDtyOjIzODtpOjU1MTtyOjM5O2k6NTUyO3I6MjtpOjU1MztyOjI7aTo1NTQ7cjoyNjc7aTo1NTU7cjoyO2k6NTU2O3I6MTI7aTo1NTc7cjoyO2k6NTU4O3I6MTI7aTo1NTk7cjoyNjc7aTo1NjA7cjoyNDc7aTo1NjE7cjozOTtpOjU2MjtyOjI7aTo1NjM7cjozOTtpOjU2NDtyOjI7aTo1NjU7cjoxMjtpOjU2NjtyOjEyO2k6NTY3O3I6MjtpOjU2ODtyOjMxO2k6NTY5O3I6MjtpOjU3MDtyOjI7aTo1NzE7cjoxMjtpOjU3MjtyOjEyO2k6NTczO3I6MTI7aTo1NzQ7cjozMTtpOjU3NTtyOjI7aTo1NzY7cjoyO2k6NTc3O3I6MjtpOjU3ODtyOjI7aTo1Nzk7cjoyO2k6NTgwO3I6MTI7aTo1ODE7cjoyO2k6NTgyO3I6MTI7aTo1ODM7cjoyO2k6NTg0O3I6Mzk7aTo1ODU7cjoyO2k6NTg2O3I6MjtpOjU4NztyOjI7aTo1ODg7cjoyO2k6NTg5O3I6MjtpOjU5MDtyOjEyO2k6NTkxO3I6NzY7aTo1OTI7cjoxMjtpOjU5MztyOjI7aTo1OTQ7cjoyO2k6NTk1O3I6MTI7aTo1OTY7cjoxMjtpOjU5NztyOjM5O2k6NTk4O3I6MjtpOjU5OTtyOjEyO2k6NjAwO3I6MTE1O2k6NjAxO3I6MjtpOjYwMjtyOjIyO2k6NjAzO3I6MjtpOjYwNDtyOjExNTtpOjYwNTtyOjEyO2k6NjA2O3I6MjtpOjYwNztyOjM5O2k6NjA4O3I6Mzk7aTo2MDk7cjoyO2k6NjEwO3I6MTI7aTo2MTE7cjoyO2k6NjEyO3I6MTE1O2k6NjEzO3I6Mzk7aTo2MTQ7cjoyO2k6NjE1O3I6MjtpOjYxNjtyOjEyO2k6NjE3O3I6MjtpOjYxODtyOjI7aTo2MTk7cjoyO2k6NjIwO3I6MjtpOjYyMTtyOjEyO2k6NjIyO3I6MTI7aTo2MjM7cjoyO2k6NjI0O3I6MjtpOjYyNTtyOjEyO2k6NjI2O3I6Mzk7aTo2Mjc7cjo5ODtpOjYyODtyOjEyO2k6NjI5O3I6MTI7aTo2MzA7cjoyO2k6NjMxO3I6MjtpOjYzMjtyOjM5O2k6NjMzO3I6MjEwO2k6NjM0O3I6MjtpOjYzNTtyOjEyO2k6NjM2O3I6MTk3O2k6NjM3O3I6NTM7aTo2Mzg7cjo3NjtpOjYzOTtyOjUzO2k6NjQwO3I6MTI7aTo2NDE7cjozOTtpOjY0MjtyOjI7aTo2NDM7cjozOTtpOjY0NDtyOjM5O2k6NjQ1O3I6MjtpOjY0NjtyOjEyO2k6NjQ3O3I6MjtpOjY0ODtyOjEyO2k6NjQ5O3I6MjtpOjY1MDtyOjI7aTo2NTE7cjoyO2k6NjUyO3I6MjtpOjY1MztyOjEyO2k6NjU0O3I6MjY3O2k6NjU1O3I6Mzk7aTo2NTY7cjoyMjtpOjY1NztyOjI7aTo2NTg7cjoyO2k6NjU5O3I6MTk3O2k6NjYwO3I6MjtpOjY2MTtyOjI7aTo2NjI7cjoxMjtpOjY2MztyOjM5O2k6NjY0O3I6Mzk7aTo2NjU7cjoyO2k6NjY2O3I6MTE1O2k6NjY3O3I6MjtpOjY2ODtyOjI7aTo2Njk7cjoyO2k6NjcwO3I6MjtpOjY3MTtyOjI7aTo2NzI7cjoyO2k6NjczO3I6MTI7aTo2NzQ7cjoyO2k6Njc1O3I6MTI7aTo2NzY7cjoyO2k6Njc3O3I6Mzk7aTo2Nzg7cjozMTtpOjY3OTtyOjI7aTo2ODA7cjoyO2k6NjgxO3I6MjtpOjY4MjtyOjI7aTo2ODM7cjoxMjtpOjY4NDtyOjEyO2k6Njg1O3I6Mzk7aTo2ODY7cjo3NjtpOjY4NztyOjI7aTo2ODg7cjoyO2k6Njg5O3I6MjtpOjY5MDtyOjI7aTo2OTE7cjoxMjtpOjY5MjtyOjEyO2k6NjkzO3I6MjQ3O2k6Njk0O3I6MTI7aTo2OTU7cjoxMjtpOjY5NjtyOjEyO2k6Njk3O3I6MjtpOjY5ODtyOjI7aTo2OTk7cjoxMTU7aTo3MDA7cjoyO2k6NzAxO3I6MjtpOjcwMjtyOjI7aTo3MDM7cjoyO2k6NzA0O3I6MTI7aTo3MDU7cjoxMjtpOjcwNjtyOjEyO2k6NzA3O3I6MjtpOjcwODtyOjEyO2k6NzA5O3I6MjtpOjcxMDtyOjI7aTo3MTE7cjozOTtpOjcxMjtyOjI7aTo3MTM7cjoyO2k6NzE0O3I6NzY7aTo3MTU7cjoyO2k6NzE2O3I6MjtpOjcxNztyOjI7aTo3MTg7cjoyO2k6NzE5O3I6MjtpOjcyMDtyOjM5O2k6NzIxO3I6MTI7aTo3MjI7cjozMTtpOjcyMztyOjEyO2k6NzI0O3I6MjtpOjcyNTtyOjM5O2k6NzI2O3I6MTI7aTo3Mjc7cjoxMjtpOjcyODtyOjI7aTo3Mjk7cjoyO2k6NzMwO3I6MjtpOjczMTtyOjM5O2k6NzMyO3I6MjtpOjczMztyOjI7aTo3MzQ7cjoyO2k6NzM1O3I6MjtpOjczNjtyOjI7aTo3Mzc7cjoxMjtpOjczODtyOjI7aTo3Mzk7cjozOTtpOjc0MDtyOjI7aTo3NDE7cjoyO2k6NzQyO3I6MjtpOjc0MztyOjI7aTo3NDQ7cjoyO2k6NzQ1O3I6MjtpOjc0NjtyOjM5O2k6NzQ3O3I6MjtpOjc0ODtyOjI7aTo3NDk7cjoyO2k6NzUwO3I6MjtpOjc1MTtyOjI7aTo3NTI7cjoxMjtpOjc1MztyOjI7aTo3NTQ7cjoxMjtpOjc1NTtyOjI7aTo3NTY7cjozOTtpOjc1NztyOjI7aTo3NTg7cjoyO2k6NzU5O3I6MjtpOjc2MDtyOjEyO2k6NzYxO3I6MTI7aTo3NjI7cjoyO2k6NzYzO3I6MjtpOjc2NDtyOjI7aTo3NjU7cjozOTtpOjc2NjtyOjEzNTtpOjc2NztyOjI7aTo3Njg7cjozOTtpOjc2OTtyOjI7aTo3NzA7cjozOTtpOjc3MTtyOjI7aTo3NzI7cjoyO2k6NzczO3I6MjtpOjc3NDtyOjI7aTo3NzU7cjozOTtpOjc3NjtyOjM5O2k6Nzc3O3I6MjtpOjc3ODtyOjI7aTo3Nzk7cjozOTM7aTo3ODA7cjoyO2k6NzgxO3I6MTI7aTo3ODI7cjoyO2k6NzgzO3I6MjtpOjc4NDtyOjc2O2k6Nzg1O3I6MTI7aTo3ODY7cjozOTtpOjc4NztyOjI7aTo3ODg7cjoxMjtpOjc4OTtyOjI7aTo3OTA7cjoyO2k6NzkxO3I6Mzk7aTo3OTI7cjoxMjtpOjc5MztyOjExNTtpOjc5NDtyOjI7aTo3OTU7cjoxMjtpOjc5NjtyOjI0NztpOjc5NztyOjI7aTo3OTg7cjoyO2k6Nzk5O3I6MjtpOjgwMDtyOjI7aTo4MDE7cjozOTtpOjgwMjtyOjI7aTo4MDM7cjoyO2k6ODA0O3I6MjtpOjgwNTtyOjIxMDtpOjgwNjtyOjM5O2k6ODA3O3I6MjM4O2k6ODA4O3I6MjtpOjgwOTtyOjEyO2k6ODEwO3I6MjtpOjgxMTtyOjUzO2k6ODEyO3I6Mzk7aTo4MTM7cjoyO2k6ODE0O3I6MTI7aTo4MTU7cjoyO2k6ODE2O3I6MjtpOjgxNztyOjEyO2k6ODE4O3I6MjtpOjgxOTtyOjI7aTo4MjA7cjoyO2k6ODIxO3I6MjtpOjgyMjtyOjI7aTo4MjM7cjoxMjtpOjgyNDtyOjI7aTo4MjU7cjoxMjtpOjgyNjtyOjEyO2k6ODI3O3I6MjtpOjgyODtyOjI7aTo4Mjk7cjozOTtpOjgzMDtyOjIxMDtpOjgzMTtyOjI7aTo4MzI7cjoyO2k6ODMzO3I6MTI7aTo4MzQ7cjoxMjtpOjgzNTtyOjEyO2k6ODM2O3I6MjtpOjgzNztyOjEyO2k6ODM4O3I6MjM4O2k6ODM5O3I6MjtpOjg0MDtyOjEyO2k6ODQxO3I6MjtpOjg0MjtyOjEyO2k6ODQzO3I6MjtpOjg0NDtyOjEyO2k6ODQ1O3I6MzE7aTo4NDY7cjoyO2k6ODQ3O3I6MTI7aTo4NDg7cjoxMjtpOjg0OTtyOjEyO2k6ODUwO3I6MjtpOjg1MTtyOjEyO2k6ODUyO3I6MjtpOjg1MztyOjI7aTo4NTQ7cjoxMjtpOjg1NTtyOjI7aTo4NTY7cjoxMjtpOjg1NztyOjIxMDtpOjg1ODtyOjI7aTo4NTk7cjoyO2k6ODYwO3I6MjM4O2k6ODYxO3I6MTc4O2k6ODYyO3I6MTM1O2k6ODYzO3I6MjtpOjg2NDtyOjEyO2k6ODY1O3I6MjtpOjg2NjtyOjEyO2k6ODY3O3I6MjtpOjg2ODtyOjExNTtpOjg2OTtyOjEyO2k6ODcwO3I6MTM1O2k6ODcxO3I6MjY3O2k6ODcyO3I6MjtpOjg3MztyOjEyO2k6ODc0O3I6MTI7aTo4NzU7cjoxMjtpOjg3NjtyOjUzO2k6ODc3O3I6MjtpOjg3ODtyOjM5O2k6ODc5O3I6MjtpOjg4MDtyOjI7aTo4ODE7cjoyO2k6ODgyO3I6MTI7aTo4ODM7cjoyO2k6ODg0O3I6MTI7aTo4ODU7cjozMTtpOjg4NjtyOjMxO2k6ODg3O3I6MjtpOjg4ODtyOjI7aTo4ODk7cjoyO2k6ODkwO3I6MjtpOjg5MTtyOjIyO2k6ODkyO3I6MjtpOjg5MztyOjEyO2k6ODk0O3I6MjtpOjg5NTtyOjI7aTo4OTY7cjoyO2k6ODk3O3I6MTI7aTo4OTg7cjoxMjtpOjg5OTtyOjM5O2k6OTAwO3I6MjtpOjkwMTtyOjI7aTo5MDI7cjozOTtpOjkwMztyOjI7aTo5MDQ7cjoyO2k6OTA1O3I6MTI7aTo5MDY7cjoyO2k6OTA3O3I6MjtpOjkwODtyOjM5O2k6OTA5O3I6MTI7aTo5MTA7cjoxMjtpOjkxMTtyOjE3ODtpOjkxMjtyOjM5O2k6OTEzO3I6NTM7aTo5MTQ7cjoyO2k6OTE1O3I6MjtpOjkxNjtyOjI7aTo5MTc7cjozOTtpOjkxODtyOjI7aTo5MTk7cjoxMjtpOjkyMDtyOjI7aTo5MjE7cjoyO2k6OTIyO3I6MjtpOjkyMztyOjUzO2k6OTI0O3I6MjtpOjkyNTtyOjI7aTo5MjY7cjoyO2k6OTI3O3I6Mzk7aTo5Mjg7cjoyO2k6OTI5O3I6MTI7aTo5MzA7cjo5ODtpOjkzMTtyOjI7aTo5MzI7cjoyO2k6OTMzO3I6MjtpOjkzNDtyOjEyO2k6OTM1O3I6MjtpOjkzNjtyOjIxMDtpOjkzNztyOjI7aTo5Mzg7cjoyO2k6OTM5O3I6MjtpOjk0MDtyOjEyO2k6OTQxO3I6MjtpOjk0MjtyOjI7aTo5NDM7cjoxMjtpOjk0NDtyOjM5O2k6OTQ1O3I6MTI7aTo5NDY7cjoyO2k6OTQ3O3I6Mzk7aTo5NDg7cjoyO2k6OTQ5O3I6MjtpOjk1MDtyOjc2O2k6OTUxO3I6Mzk7aTo5NTI7cjozOTtpOjk1MztyOjI7aTo5NTQ7cjoxMTU7aTo5NTU7cjoyO2k6OTU2O3I6MjtpOjk1NztyOjM5O2k6OTU4O3I6MTI7aTo5NTk7cjoyO2k6OTYwO3I6Mzk7aTo5NjE7cjoyO2k6OTYyO3I6MjtpOjk2MztyOjI7aTo5NjQ7cjoxOTc7aTo5NjU7cjozOTtpOjk2NjtyOjEyO2k6OTY3O3I6MjtpOjk2ODtyOjIyO2k6OTY5O3I6MjtpOjk3MDtyOjI7aTo5NzE7cjozMTtpOjk3MjtyOjI7aTo5NzM7cjoxMjtpOjk3NDtyOjM5O2k6OTc1O3I6MjM4O2k6OTc2O3I6MjtpOjk3NztyOjEyO2k6OTc4O3I6MjtpOjk3OTtyOjI7aTo5ODA7cjoxMjtpOjk4MTtyOjI7aTo5ODI7cjoyO2k6OTgzO3I6MTk3O2k6OTg0O3I6MjtpOjk4NTtyOjEyO2k6OTg2O3I6MjtpOjk4NztyOjUzO30"; public const DEFAULT_LOS1_ENCHANTED = "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MTE4O3I6Njg7aToxMTk7cjoyO2k6MTIwO3I6MjtpOjEyMTtyOjI7aToxMjI7cjoyO2k6MTIzO3I6MjtpOjEyNDtyOjQwO2k6MTI1O3I6MjtpOjEyNjtyOjQwO2k6MTI3O3I6NDA7aToxMjg7cjoyO2k6MTI5O3I6MzI7aToxMzA7cjoyO2k6MTMxO3I6MjtpOjEzMjtyOjI7aToxMzM7cjoyMjc7aToxMzQ7cjoyO2k6MTM1O3I6MjtpOjEzNjtyOjY4O2k6MTM3O3I6MjtpOjEzODtyOjQwO2k6MTM5O3I6MjtpOjE0MDtyOjI7aToxNDE7cjo0MDtpOjE0MjtyOjY4O2k6MTQzO3I6MjtpOjE0NDtyOjY4O2k6MTQ1O3I6MjtpOjE0NjtyOjY4O2k6MTQ3O3I6NDA7aToxNDg7cjo0MDtpOjE0OTtyOjY4O2k6MTUwO3I6MjtpOjE1MTtyOjY4O2k6MTUyO3I6Njg7aToxNTM7cjo2ODtpOjE1NDtyOjI7aToxNTU7cjoyO2k6MTU2O3I6MjtpOjE1NztyOjQwO2k6MTU4O3I6MjtpOjE1OTtyOjE2ODtpOjE2MDtyOjI7aToxNjE7cjoyO2k6MTYyO3I6MjtpOjE2MztyOjI7aToxNjQ7cjoyO2k6MTY1O3I6Njg7aToxNjY7cjo0MDtpOjE2NztyOjI7aToxNjg7cjoyO2k6MTY5O3I6MjtpOjE3MDtyOjY4O2k6MTcxO3I6Njg7aToxNzI7cjo0MDtpOjE3MztyOjQwO2k6MTc0O3I6MjtpOjE3NTtyOjI7aToxNzY7cjoxNTA7aToxNzc7cjo2ODtpOjE3ODtyOjY4O2k6MTc5O3I6MjtpOjE4MDtyOjY4O2k6MTgxO3I6MjtpOjE4MjtyOjY4O2k6MTgzO3I6MjtpOjE4NDtyOjI7aToxODU7cjo2ODtpOjE4NjtyOjI7aToxODc7cjoyO2k6MTg4O3I6MjtpOjE4OTtyOjI7aToxOTA7cjo2ODtpOjE5MTtyOjY4O2k6MTkyO3I6MjtpOjE5MztyOjY4O2k6MTk0O3I6MjtpOjE5NTtyOjY4O2k6MTk2O3I6MjtpOjE5NztyOjI7aToxOTg7cjo2ODtpOjE5OTtyOjI7aToyMDA7cjoyO2k6MjAxO3I6MjtpOjIwMjtPOjE5OiJwb2NrZXRtaW5l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cjo0MDtpOjI5NztyOjY4O2k6Mjk4O3I6Njg7aToyOTk7cjoyO2k6MzAwO3I6NDA7aTozMDE7cjo0MDtpOjMwMjtyOjEzO2k6MzAzO3I6MjtpOjMwNDtyOjI7aTozMDU7cjo0MDtpOjMwNjtyOjQwO2k6MzA3O3I6MjtpOjMwODtyOjY4O2k6MzA5O3I6MjtpOjMxMDtyOjQwO2k6MzExO3I6Njg7aTozMTI7cjo2ODtpOjMxMztyOjY4O2k6MzE0O3I6MjtpOjMxNTtyOjY4O2k6MzE2O3I6Njg7aTozMTc7cjoyO2k6MzE4O3I6Njg7aTozMTk7cjoxNTA7aTozMjA7cjoyO2k6MzIxO3I6NDA7aTozMjI7cjo2ODtpOjMyMztyOjY4O2k6MzI0O3I6MjtpOjMyNTtyOjI7aTozMjY7cjoyO2k6MzI3O3I6MTM7aTozMjg7cjoyO2k6MzI5O3I6Njg7aTozMzA7cjoyO2k6MzMxO3I6MzI7aTozMzI7cjo0MDtpOjMzMztyOjY4O2k6MzM0O3I6NDA7aTozMzU7cjoyO2k6MzM2O3I6Njg7aTozMzc7cjoxNTA7aTozMzg7cjo2ODtpOjMzOTtyOjY4O2k6MzQwO3I6MjtpOjM0MTtyOjM1MztpOjM0MjtyOjI7aTozNDM7cjo2ODtpOjM0NDtyOjQwO2k6MzQ1O3I6Njg7aTozNDY7cjoyO2k6MzQ3O3I6NDA7aTozNDg7cjoyO2k6MzQ5O3I6Njg7aTozNTA7cjo2ODtpOjM1MTtyOjI7aTozNTI7cjoyO2k6MzUzO3I6NDA7aTozNTQ7cjo2ODtpOjM1NTtyOjY4O2k6MzU2O3I6MjtpOjM1NztyOjI7aTozNTg7cjoyO2k6MzU5O3I6MTY4O2k6MzYwO3I6NDA7aTozNjE7cjoyO2k6MzYyO3I6MjtpOjM2MztyOjI7aTozNjQ7cjoyO2k6MzY1O3I6MjtpOjM2NjtyOjY4O2k6MzY3O3I6MjtpOjM2ODtyOjI7aTozNjk7cjoyO2k6MzcwO3I6Njg7aTozNzE7cjoyO2k6MzcyO3I6Njg7aTozNzM7cjo2ODtpOjM3NDtyOjI7aTozNzU7cjoyO2k6Mzc2O3I6MjtpOjM3NztyOjI7aTozNzg7cjo2ODtpOjM3OTtyOjI7aTozODA7cjo0MDtpOjM4MTtyOjY4O2k6MzgyO3I6MjtpOjM4MztyOjI7aTozODQ7cjoyO2k6Mzg1O3I6MjtpOjM4NjtyOjQwO2k6Mzg3O3I6MjtpOjM4ODtyOjI7aTozODk7cjo0MDtpOjM5MDtyOjI7aTozOTE7cjoyO2k6MzkyO3I6MjtpOjM5MztyOjY4O2k6Mzk0O3I6MTE1O2k6Mzk1O3I6MjtpOjM5NjtyOjY4O2k6Mzk3O3I6Njg7aTozOTg7cjoyO2k6Mzk5O3I6MjtpOjQwMDtyOjI7aTo0MDE7cjoyO2k6NDAyO3I6MjtpOjQwMztyOjI7aTo0MDQ7cjoxMztpOjQwNTtyOjI7aTo0MDY7cjoyO2k6NDA3O3I6MjtpOjQwODtyOjI7aTo0MDk7cjoyO2k6NDEwO3I6MjtpOjQxMTtyOjY4O2k6NDEyO3I6MjE7aTo0MTM7cjo2ODtpOjQxNDtyOjQwO2k6NDE1O3I6MjtpOjQxNjtyOjY4O2k6NDE3O3I6MjtpOjQxODtyOjI7aTo0MTk7cjo2ODtpOjQyMDtyOjQwO2k6NDIxO3I6MjtpOjQyMjtyOjI7aTo0MjM7cjo2ODtpOjQyNDtyOjI7aTo0MjU7cjo2ODtpOjQyNjtyOjI7aTo0Mjc7cjoyO2k6NDI4O3I6MTM0O2k6NDI5O3I6MzI1O2k6NDMwO3I6ODc7aTo0MzE7cjoyO2k6NDMyO3I6NDA7aTo0MzM7cjoyO2k6NDM0O3I6MjtpOjQzNTtyOjEzO2k6NDM2O3I6MjtpOjQzNztyOjI7aTo0Mzg7cjoyO2k6NDM5O3I6MjtpOjQ0MDtyOjI7aTo0NDE7cjoyO2k6NDQyO3I6MjtpOjQ0MztyOjI7aTo0NDQ7cjoyO2k6NDQ1O3I6MjtpOjQ0NjtyOjI7aTo0NDc7cjoyO2k6NDQ4O3I6MTUwO2k6NDQ5O3I6MjtpOjQ1MDtyOjEzO2k6NDUxO3I6Njg7aTo0NTI7cjozMjtpOjQ1MztyOjY4O2k6NDU0O3I6MTUwO2k6NDU1O3I6Njg7aTo0NTY7cjoyO2k6NDU3O3I6NDA7aTo0NTg7cjoxMztpOjQ1OTtyOjI7aTo0NjA7cjo2ODtpOjQ2MTtyOjM1MztpOjQ2MjtyOjY4O2k6NDYzO3I6MjtpOjQ2NDtyOjI7aTo0NjU7cjoyO2k6NDY2O3I6ODc7aTo0Njc7cjo2ODtpOjQ2ODtyOjY4O2k6NDY5O3I6NDA7aTo0NzA7cjoyMTtpOjQ3MTtyOjEzNDtpOjQ3MjtyOjI7aTo0NzM7cjo2ODtpOjQ3NDtyOjY4O2k6NDc1O3I6Njg7aTo0NzY7cjoyO2k6NDc3O3I6MjtpOjQ3ODtyOjIxO2k6NDc5O3I6Njg7aTo0ODA7cjoyO2k6NDgxO3I6MjtpOjQ4MjtyOjQwO2k6NDgzO3I6MTE1O2k6NDg0O3I6NDA7aTo0ODU7cjoyO2k6NDg2O3I6MjtpOjQ4NztyOjY4O2k6NDg4O3I6MjtpOjQ4OTtyOjY4O2k6NDkwO3I6Njg7aTo0OTE7cjoyO2k6NDkyO3I6MzUzO2k6NDkzO3I6MTM0O2k6NDk0O3I6Mzk0O2k6NDk1O3I6Njg7aTo0OTY7cjoyO2k6NDk3O3I6MjtpOjQ5ODtyOjI7aTo0OTk7cjo0MDtpOjUwMDtyOjY4O2k6NTAxO3I6Njg7aTo1MDI7cjoyO2k6NTAzO3I6NDE2O2k6NTA0O3I6MjtpOjUwNTtyOjY4O2k6NTA2O3I6MjtpOjUwNztyOjI7aTo1MDg7cjoyO2k6NTA5O3I6MjtpOjUxMDtyOjI7aTo1MTE7cjoyO2k6NTEyO3I6Njg7aTo1MTM7cjoyO2k6NTE0O3I6MjtpOjUxNTtyOjI7aTo1MTY7cjoyO2k6NTE3O3I6Njg7aTo1MTg7cjoyO2k6NTE5O3I6MjtpOjUyMDtyOjI7aTo1MjE7cjoyO2k6NTIyO3I6MjtpOjUyMztyOjEzNDtpOjUyNDtyOjY4O2k6NTI1O3I6Njg7aTo1MjY7cjoyO2k6NTI3O3I6MjI3O2k6NTI4O3I6MTY4O2k6NTI5O3I6Njg7aTo1MzA7cjo0MDtpOjUzMTtyOjI7aTo1MzI7cjoyO2k6NTMzO3I6MjtpOjUzNDtyOjY4O2k6NTM1O3I6MjtpOjUzNjtyOjE2ODtpOjUzNztyOjI7aTo1Mzg7cjoxMTU7aTo1Mzk7cjoyO2k6NTQwO3I6MjtpOjU0MTtyOjY4O2k6NTQyO3I6MjtpOjU0MztyOjY4O2k6NTQ0O3I6NDA7aTo1NDU7cjozOTQ7aTo1NDY7cjoyO2k6NTQ3O3I6MjtpOjU0ODtyOjI7aTo1NDk7cjo0MDtpOjU1MDtyOjExNTtpOjU1MTtyOjI7aTo1NTI7cjozNTM7aTo1NTM7cjoyO2k6NTU0O3I6MjI3O2k6NTU1O3I6MjtpOjU1NjtyOjI7aTo1NTc7cjoxNTA7aTo1NTg7cjo2ODtpOjU1OTtyOjI7aTo1NjA7cjoyO2k6NTYxO3I6Mzk0O2k6NTYyO3I6NDA7aTo1NjM7cjo2ODtpOjU2NDtyOjI7aTo1NjU7cjo2ODtpOjU2NjtyOjI7aTo1Njc7cjoyO2k6NTY4O3I6MTY4O2k6NTY5O3I6MjtpOjU3MDtyOjQwO2k6NTcxO3I6MjtpOjU3MjtyOjI7aTo1NzM7cjoyO2k6NTc0O3I6MjI3O2k6NTc1O3I6MjtpOjU3NjtyOjI7aTo1Nzc7cjoyO2k6NTc4O3I6NDA7aTo1Nzk7cjoyO2k6NTgwO3I6MjtpOjU4MTtyOjI7aTo1ODI7cjoyO2k6NTgzO3I6MjtpOjU4NDtyOjI7aTo1ODU7cjoyO2k6NTg2O3I6MjtpOjU4NztyOjQwO2k6NTg4O3I6NDA7aTo1ODk7cjoyO2k6NTkwO3I6Njg7aTo1OTE7cjoyO2k6NTkyO3I6MjtpOjU5MztyOjI7aTo1OTQ7cjoxNjg7aTo1OTU7cjoyO2k6NTk2O3I6MzUzO2k6NTk3O3I6MjtpOjU5ODtyOjI7aTo1OTk7cjozMjtpOjYwMDtyOjY4O2k6NjAxO3I6NDA7aTo2MDI7cjoyO2k6NjAzO3I6MjtpOjYwNDtyOjQwO2k6NjA1O3I6MjtpOjYwNjtyOjI7aTo2MDc7cjo2ODtpOjYwODtyOjY4O2k6NjA5O3I6Njg7aTo2MTA7cjoyO2k6NjExO3I6MjtpOjYxMjtyOjUwO2k6NjEzO3I6MjtpOjYxNDtyOjUwO2k6NjE1O3I6MjtpOjYxNjtyOjY4O2k6NjE3O3I6MjtpOjYxODtyOjI7aTo2MTk7cjo4NztpOjYyMDtyOjI7aTo2MjE7cjoyO2k6NjIyO3I6MTUwO2k6NjIzO3I6MjtpOjYyNDtyOjI7aTo2MjU7cjoyMjc7aTo2MjY7cjo2ODtpOjYyNztyOjI7aTo2Mjg7cjoyO2k6NjI5O3I6MzI7aTo2MzA7cjoyO2k6NjMxO3I6ODc7aTo2MzI7cjoxNTA7aTo2MzM7cjo0MDtpOjYzNDtyOjI7aTo2MzU7cjo2ODtpOjYzNjtyOjY4O2k6NjM3O3I6Njg7aTo2Mzg7cjo2ODtpOjYzOTtyOjY4O2k6NjQwO3I6NDA7aTo2NDE7cjozNTM7aTo2NDI7cjo2ODtpOjY0MztyOjI7aTo2NDQ7cjo0MTY7aTo2NDU7cjoyO2k6NjQ2O3I6Njg7aTo2NDc7cjo0MTY7aTo2NDg7cjoxNjg7aTo2NDk7cjo0MDtpOjY1MDtyOjI7aTo2NTE7cjo4NztpOjY1MjtyOjQxNjtpOjY1MztyOjI7aTo2NTQ7cjo2ODtpOjY1NTtyOjI7aTo2NTY7cjoyO2k6NjU3O3I6Njg7aTo2NTg7cjoyO2k6NjU5O3I6MjtpOjY2MDtyOjEzNDtpOjY2MTtyOjMyO2k6NjYyO3I6NDA7aTo2NjM7cjoyO2k6NjY0O3I6Njg7aTo2NjU7cjo0MDtpOjY2NjtyOjQwO2k6NjY3O3I6MjtpOjY2ODtyOjExNTtpOjY2OTtyOjI7aTo2NzA7cjo2ODtpOjY3MTtyOjI7aTo2NzI7cjoxNjg7aTo2NzM7cjoyO2k6Njc0O3I6ODc7aTo2NzU7cjo2ODtpOjY3NjtyOjI7aTo2Nzc7cjoyO2k6Njc4O3I6MTUwO2k6Njc5O3I6MjtpOjY4MDtyOjI7aTo2ODE7cjo0MDtpOjY4MjtyOjIxO2k6NjgzO3I6MjtpOjY4NDtyOjEzO2k6Njg1O3I6NDA7aTo2ODY7cjoyO2k6Njg3O3I6MTY4O2k6Njg4O3I6MjtpOjY4OTtyOjI7aTo2OTA7cjoxNTA7aTo2OTE7cjoyO2k6NjkyO3I6ODc7aTo2OTM7cjo0MDtpOjY5NDtyOjMyO2k6Njk1O3I6Njg7aTo2OTY7cjoyO2k6Njk3O3I6Njg7aTo2OTg7cjoyO2k6Njk5O3I6MjtpOjcwMDtyOjI7aTo3MDE7cjoyO2k6NzAyO3I6MjtpOjcwMztyOjI7aTo3MDQ7cjoyO2k6NzA1O3I6MjE7aTo3MDY7cjoyO2k6NzA3O3I6NDA7aTo3MDg7cjoyO2k6NzA5O3I6MjtpOjcxMDtyOjQwO2k6NzExO3I6NDA7aTo3MTI7cjo0MDtpOjcxMztyOjE1MDtpOjcxNDtyOjI7aTo3MTU7cjoyO2k6NzE2O3I6MjtpOjcxNztyOjM5NDtpOjcxODtyOjI7aTo3MTk7cjoyO2k6NzIwO3I6MjtpOjcyMTtyOjI7aTo3MjI7cjo0MDtpOjcyMztyOjY4O2k6NzI0O3I6MjtpOjcyNTtyOjI7aTo3MjY7cjoyO2k6NzI3O3I6Njg7aTo3Mjg7cjo2ODtpOjcyOTtyOjI7aTo3MzA7cjo2ODtpOjczMTtyOjY4O2k6NzMyO3I6MjtpOjczMztyOjI7aTo3MzQ7cjo2ODtpOjczNTtyOjI7aTo3MzY7cjo0MDtpOjczNztyOjQwO2k6NzM4O3I6MjtpOjczOTtyOjI7aTo3NDA7cjo2ODtpOjc0MTtyOjI7aTo3NDI7cjoyO2k6NzQzO3I6MjtpOjc0NDtyOjI7aTo3NDU7cjoyO2k6NzQ2O3I6NDE2O2k6NzQ3O3I6Njg7aTo3NDg7cjo2ODtpOjc0OTtyOjI7aTo3NTA7cjoyO2k6NzUxO3I6MjtpOjc1MjtyOjI7aTo3NTM7cjoyO2k6NzU0O3I6MjtpOjc1NTtyOjI7aTo3NTY7cjoyO2k6NzU3O3I6MTE1O2k6NzU4O3I6MjtpOjc1OTtyOjEzNDtpOjc2MDtyOjI7aTo3NjE7cjoyO2k6NzYyO3I6MjtpOjc2MztyOjI7aTo3NjQ7cjoyO2k6NzY1O3I6MjtpOjc2NjtyOjI7aTo3Njc7cjo0MDtpOjc2ODtyOjY4O2k6NzY5O3I6MjI3O2k6NzcwO3I6NDE2O2k6NzcxO3I6MTM0O2k6NzcyO3I6MjtpOjc3MztyOjI7aTo3NzQ7cjoyO2k6Nzc1O3I6NDA7aTo3NzY7cjo0MTY7aTo3Nzc7cjoyO2k6Nzc4O3I6Njg7aTo3Nzk7cjoyO2k6NzgwO3I6MjtpOjc4MTtyOjY4O2k6NzgyO3I6MzI7aTo3ODM7cjoyO2k6Nzg0O3I6MjtpOjc4NTtyOjQwO2k6Nzg2O3I6Njg7aTo3ODc7cjoxMzQ7aTo3ODg7cjoyO2k6Nzg5O3I6Njg7aTo3OTA7cjoyO2k6NzkxO3I6Njg7aTo3OTI7cjo2ODtpOjc5MztyOjI7aTo3OTQ7cjo2ODtpOjc5NTtyOjQwO2k6Nzk2O3I6NDA7aTo3OTc7cjo2ODtpOjc5ODtyOjI7aTo3OTk7cjo0MTY7aTo4MDA7cjo2ODtpOjgwMTtyOjQwO2k6ODAyO3I6MjtpOjgwMztyOjI7aTo4MDQ7cjoyO2k6ODA1O3I6MjtpOjgwNjtyOjI7aTo4MDc7cjoyO2k6ODA4O3I6MzI7aTo4MDk7cjo2ODtpOjgxMDtyOjI7aTo4MTE7cjo0MDtpOjgxMjtyOjQwO2k6ODEzO3I6Njg7aTo4MTQ7cjoxMztpOjgxNTtyOjIxO2k6ODE2O3I6Njg7aTo4MTc7cjoyO2k6ODE4O3I6NDA7aTo4MTk7cjoyO2k6ODIwO3I6Njg7aTo4MjE7cjoyO2k6ODIyO3I6MjtpOjgyMztyOjI7aTo4MjQ7cjo2ODtpOjgyNTtyOjIyNztpOjgyNjtyOjI7aTo4Mjc7cjo2ODtpOjgyODtyOjY4O2k6ODI5O3I6MjE7aTo4MzA7cjo2ODtpOjgzMTtyOjI7aTo4MzI7cjoyMTtpOjgzMztyOjM1MztpOjgzNDtyOjI7aTo4MzU7cjoyO2k6ODM2O3I6Njg7aTo4Mzc7cjoyO2k6ODM4O3I6MjtpOjgzOTtyOjQwO2k6ODQwO3I6MjtpOjg0MTtyOjI7aTo4NDI7cjoyO2k6ODQzO3I6MjtpOjg0NDtyOjY4O2k6ODQ1O3I6MjtpOjg0NjtyOjY4O2k6ODQ3O3I6NDA7aTo4NDg7cjo2ODtpOjg0OTtyOjI7aTo4NTA7cjoyO2k6ODUxO3I6MjtpOjg1MjtyOjI7aTo4NTM7cjo2ODtpOjg1NDtyOjI7aTo4NTU7cjoyO2k6ODU2O3I6MjtpOjg1NztyOjI7aTo4NTg7cjoyO2k6ODU5O3I6NDA7aTo4NjA7cjoyO2k6ODYxO3I6NDA7aTo4NjI7cjo2ODtpOjg2MztyOjI7aTo4NjQ7cjo0MDtpOjg2NTtyOjI7aTo4NjY7cjoyO2k6ODY3O3I6NDA7aTo4Njg7cjo0MDtpOjg2OTtyOjI7aTo4NzA7cjoxMzQ7aTo4NzE7cjo0MDtpOjg3MjtyOjQwO2k6ODczO3I6MjtpOjg3NDtyOjI7aTo4NzU7cjo2ODtpOjg3NjtyOjI7aTo4Nzc7cjoyO2k6ODc4O3I6MjtpOjg3OTtyOjI7aTo4ODA7cjo2ODtpOjg4MTtyOjI7aTo4ODI7cjo2ODtpOjg4MztyOjI7aTo4ODQ7cjo2ODtpOjg4NTtyOjI7aTo4ODY7cjo2ODtpOjg4NztyOjQwO2k6ODg4O3I6Njg7aTo4ODk7cjozNTM7aTo4OTA7cjo2ODtpOjg5MTtyOjY4O2k6ODkyO3I6MjtpOjg5MztyOjY4O2k6ODk0O3I6MjtpOjg5NTtyOjI7aTo4OTY7cjo0MDtpOjg5NztyOjY4O2k6ODk4O3I6MjtpOjg5OTtyOjI7aTo5MDA7cjoyO2k6OTAxO3I6MTUwO2k6OTAyO3I6MjtpOjkwMztyOjI7aTo5MDQ7cjo2ODtpOjkwNTtyOjQwO2k6OTA2O3I6Njg7aTo5MDc7cjoyO2k6OTA4O3I6Njg7aTo5MDk7cjoyO2k6OTEwO3I6MjtpOjkxMTtyOjY4O2k6OTEyO3I6MjI3O2k6OTEzO3I6MjtpOjkxNDtyOjI7aTo5MTU7cjoyO2k6OTE2O3I6MjtpOjkxNztyOjIyNztpOjkxODtyOjI7aTo5MTk7cjoyMTtpOjkyMDtyOjI7aTo5MjE7cjoyMTtpOjkyMjtyOjY4O2k6OTIzO3I6Njg7aTo5MjQ7cjoyO2k6OTI1O3I6MjtpOjkyNjtyOjI7aTo5Mjc7cjoyO2k6OTI4O3I6NTA7aTo5Mjk7cjoyO2k6OTMwO3I6ODc7aTo5MzE7cjoyO2k6OTMyO3I6Njg7aTo5MzM7cjo2ODtpOjkzNDtyOjg3O2k6OTM1O3I6MTM0O2k6OTM2O3I6MjtpOjkzNztyOjQwO2k6OTM4O3I6MjtpOjkzOTtyOjI7aTo5NDA7cjoyO2k6OTQxO3I6MjtpOjk0MjtyOjI7aTo5NDM7cjoyO2k6OTQ0O3I6Mzk0O2k6OTQ1O3I6ODc7aTo5NDY7cjo2ODtpOjk0NztyOjI7aTo5NDg7cjo2ODtpOjk0OTtyOjI7aTo5NTA7cjo2ODtpOjk1MTtyOjY4O2k6OTUyO3I6NDA7aTo5NTM7cjoyO2k6OTU0O3I6MjtpOjk1NTtyOjI7aTo5NTY7cjo4NztpOjk1NztyOjY4O2k6OTU4O3I6Njg7aTo5NTk7cjoyO2k6OTYwO3I6MTUwO2k6OTYxO3I6MjtpOjk2MjtyOjE1MDtpOjk2MztyOjQxNjtpOjk2NDtyOjI7aTo5NjU7cjo0MDtpOjk2NjtyOjI7aTo5Njc7cjoyO2k6OTY4O3I6MjtpOjk2OTtyOjIyNztpOjk3MDtyOjI7aTo5NzE7cjoyO2k6OTcyO3I6Njg7aTo5NzM7cjoxNTA7aTo5NzQ7cjoyO2k6OTc1O3I6MTUwO2k6OTc2O3I6MjtpOjk3NztyOjY4O2k6OTc4O3I6MjtpOjk3OTtyOjI7aTo5ODA7cjo2ODtpOjk4MTtyOjEzO30"; public const DEFAULT_LOS2_ENCHANTED = "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OjE4O2k6MTc2O3I6MTA7aToxNzc7cjoxODtpOjE3ODtyOjEwO2k6MTc5O3I6MTA7aToxODA7cjoyNjtpOjE4MTtyOjI2O2k6MTgyO3I6MTA7aToxODM7cjoyNjtpOjE4NDtyOjI2O2k6MTg1O3I6MTA7aToxODY7cjoxMDtpOjE4NztyOjEwO2k6MTg4O086MjA6InBvY2tldG1pbmVcaXRlbVxJdGVtIjo3OntzOjg6IgAqAGJsb2NrIjtOO3M6NToiACoAaWQiO2k6MzI5O3M6NzoiACoAbWV0YSI7aTowO3M6MjY6IgBwb2NrZXRtaW5lXGl0ZW1cSXRlbQB0YWdzIjtzOjA6IiI7czozMToiAHBvY2tldG1pbmVcaXRlbVxJdGVtAGNhY2hlZE5CVCI7TjtzOjU6ImNvdW50IjtpOjE7czo3OiIAKgBuYW1lIjtzOjc6IlVua25vd24iO31pOjE4OTtyOjEwO2k6MTkwO3I6MTA7aToxOTE7cjoxMDtpOjE5MjtyOjE4O2k6MTkzO3I6MTA7aToxOTQ7cjoxMDtpOjE5NTtyOjE4O2k6MTk2O3I6MTA7aToxOTc7cjoxMDtpOjE5ODtyOjE4O2k6MTk5O3I6MTA7aToyMDA7cjozMTg7aToyMDE7cjoxMDtpOjIwMjtyOjI4MjtpOjIwMztyOjEwO2k6MjA0O3I6MTA7aToyMDU7cjoxODtpOjIwNjtyOjEwO2k6MjA3O3I6MTA7aToyMDg7cjoxMDtpOjIwOTtyOjEwO2k6MjEwO3I6MTg7aToyMTE7cjoyNjtpOjIxMjtyOjEwNjtpOjIxMztyOjEwO2k6MjE0O3I6MTA7aToyMTU7cjoxMDtpOjIxNjtyOjEwO2k6MjE3O3I6MTg7aToyMTg7cjoxMDtpOjIxOTtyOjI7aToyMjA7cjoxMDtpOjIyMTtyOjE4O2k6MjIyO3I6MjY7aToyMjM7cjoxMDtpOjIyNDtyOjE4O2k6MjI1O3I6MTA7aToyMjY7cjoyNjtpOjIyNztyOjI2O2k6MjI4O3I6MTA7aToyMjk7cjoxMDtpOjIzMDtyOjEwO2k6MjMxO3I6MjtpOjIzMjtyOjE4O2k6MjMzO3I6MTA7aToyMzQ7cjoxMDtpOjIzNTtyOjEwO2k6MjM2O3I6MTg7aToyMzc7cjoxMDtpOjIzODtyOjE4MTtpOjIzOTtyOjE4O2k6MjQwO3I6MTA7aToyNDE7cjoxMDtpOjI0MjtyOjE4O2k6MjQzO3I6MjtpOjI0NDtyOjEwO2k6MjQ1O3I6MTg7aToyNDY7cjoyNjtpOjI0NztyOjEwO2k6MjQ4O3I6MTA7aToyNDk7cjoxMDtpOjI1MDtyOjE4O2k6MjUxO3I6MTA7aToyNTI7cjoxMDtpOjI1MztyOjEwO2k6MjU0O3I6MTA7aToyNTU7cjoxNjk7aToyNTY7cjoyODI7aToyNTc7cjoyNjtpOjI1ODtyOjEwO2k6MjU5O3I6MjY7aToyNjA7cjoyNjtpOjI2MTtyOjE4O2k6MjYyO3I6MTg7aToyNjM7cjoxMDtpOjI2NDtyOjEwO2k6MjY1O3I6MTg7aToyNjY7cjoxMDtpOjI2NztyOjEwO2k6MjY4O3I6MTA7aToyNjk7cjoxODtpOjI3MDtyOjEwO2k6MjcxO3I6MTA7aToyNzI7cjoxMDtpOjI3MztyOjE4O2k6Mjc0O3I6MTA7aToyNzU7cjoyNjtpOjI3NjtyOjEwO2k6Mjc3O3I6MTg7aToyNzg7cjoxODtpOjI3OTtyOjEwO2k6MjgwO3I6MTA7aToyODE7cjoxMDY7aToyODI7cjoxMDtpOjI4MztyOjEwO2k6Mjg0O3I6MTA7aToyODU7cjoxMDtpOjI4NjtyOjI7aToyODc7cjoxMDtpOjI4ODtyOjE4O2k6Mjg5O3I6MTA7aToyOTA7cjoyODI7aToyOTE7cjoxMDtpOjI5MjtyOjEwO2k6MjkzO3I6MTY5O2k6Mjk0O3I6MTA7aToyOTU7cjoxMDtpOjI5NjtyOjE4O2k6Mjk3O3I6MTA7aToyOTg7cjoxMDtpOjI5OTtyOjEwNjtpOjMwMDtyOjI2O2k6MzAxO3I6MjY7aTozMDI7cjoxMDtpOjMwMztyOjEwO2k6MzA0O3I6MTg7aTozMDU7cjoyNjtpOjMwNjtyOjEwO2k6MzA3O3I6MTg7aTozMDg7cjoyNjtpOjMwOTtyOjEwO2k6MzEwO3I6MTA7aTozMTE7cjoxMDtpOjMxMjtyOjEwO2k6MzEzO3I6MTg7aTozMTQ7cjoxODE7aTozMTU7cjoxMDtpOjMxNjtyOjE4O2k6MzE3O3I6MTA7aTozMTg7cjoxNjk7aTozMTk7cjoxMDtpOjMyMDtyOjI2O2k6MzIxO3I6MTA7aTozMjI7cjoxODtpOjMyMztyOjEwO2k6MzI0O3I6MTA7aTozMjU7cjoxMDtpOjMyNjtyOjEwO2k6MzI3O3I6MTg7aTozMjg7cjoxMDtpOjMyOTtyOjI2O2k6MzMwO3I6MjY7aTozMzE7cjoxMDtpOjMzMjtyOjE4O2k6MzMzO3I6MTg7aTozMzQ7cjoxMDtpOjMzNTtyOjI2O2k6MzM2O3I6MTA7aTozMzc7cjoxMDtpOjMzODtyOjEwO2k6MzM5O3I6MTg7aTozNDA7cjoxMDtpOjM0MTtyOjEwO2k6MzQyO3I6MTA7aTozNDM7cjoxMDtpOjM0NDtyOjE4O2k6MzQ1O086MjA6InBvY2tldG1pbmVcaXRlbVxJdGVtIjo3OntzOjg6IgAqAGJsb2NrIjtOO3M6NToiACoAaWQiO2k6MzUyO3M6NzoiACoAbWV0YSI7aTowO3M6MjY6IgBwb2NrZXRtaW5lXGl0ZW1cSXRlbQB0YWdzIjtzOjA6IiI7czozMToiAHBvY2tldG1pbmVcaXRlbVxJdGVtAGNhY2hlZE5CVCI7TjtzOjU6ImNvdW50IjtpOjE7czo3OiIAKgBuYW1lIjtzOjQ6IkJvbmUiO31pOjM0NjtyOjEwO2k6MzQ3O3I6MTg7aTozNDg7cjozMTg7aTozNDk7cjoxMDtpOjM1MDtyOjEwO2k6MzUxO3I6MTA7aTozNTI7cjo4NztpOjM1MztyOjEwO2k6MzU0O3I6MjY7aTozNTU7cjoxMDtpOjM1NjtyOjI2O2k6MzU3O3I6MTA7aTozNTg7cjoyNjtpOjM1OTtyOjI2O2k6MzYwO3I6MTA7aTozNjE7cjoxMDtpOjM2MjtyOjEwO2k6MzYzO3I6MTg7aTozNjQ7cjoyNjtpOjM2NTtyOjEwO2k6MzY2O3I6MTA7aTozNjc7cjoxMDtpOjM2ODtyOjE4O2k6MzY5O3I6MjY7aTozNzA7cjoxMDtpOjM3MTtyOjEwO2k6MzcyO3I6MTgxO2k6MzczO3I6ODc7aTozNzQ7cjozMTg7aTozNzU7cjoxMDtpOjM3NjtyOjEwO2k6Mzc3O3I6MTA7aTozNzg7cjoxODtpOjM3OTtyOjEwO2k6MzgwO3I6MTg7aTozODE7cjoxMDtpOjM4MjtyOjEwO2k6MzgzO3I6MTg7aTozODQ7cjoxODtpOjM4NTtyOjI2O2k6Mzg2O3I6MjIwO2k6Mzg3O3I6MTA7aTozODg7cjoxODtpOjM4OTtyOjE4MTtpOjM5MDtyOjE4O2k6MzkxO3I6MTg7aTozOTI7cjoyNjtpOjM5MztyOjEwO2k6Mzk0O3I6MTA7aTozOTU7cjoxMDtpOjM5NjtyOjEwO2k6Mzk3O3I6ODc7aTozOTg7cjoxMDtpOjM5OTtyOjMxODtpOjQwMDtyOjI4MjtpOjQwMTtyOjQ3O2k6NDAyO3I6MTA7aTo0MDM7cjoxODtpOjQwNDtyOjEwO2k6NDA1O3I6MTA7aTo0MDY7cjoyODI7aTo0MDc7cjoxODtpOjQwODtyOjE4O2k6NDA5O3I6MTg7aTo0MTA7cjoxMDtpOjQxMTtyOjg3O2k6NDEyO3I6MTA7aTo0MTM7cjoxODtpOjQxNDtyOjI2O2k6NDE1O3I6MjtpOjQxNjtyOjEwO2k6NDE3O3I6MTg7aTo0MTg7cjoxMDtpOjQxOTtyOjEwO2k6NDIwO3I6MTA7aTo0MjE7cjo0ODI7aTo0MjI7cjoyO2k6NDIzO3I6MTA7aTo0MjQ7cjoxMDtpOjQyNTtyOjEwO2k6NDI2O3I6MTA7aTo0Mjc7cjo4NztpOjQyODtyOjE4O2k6NDI5O3I6MTA7aTo0MzA7cjo0NztpOjQzMTtyOjE2OTtpOjQzMjtyOjE4O2k6NDMzO3I6MTg7aTo0MzQ7cjoxMDtpOjQzNTtyOjE4O2k6NDM2O3I6MTA7aTo0Mzc7cjoxODtpOjQzODtyOjI4MjtpOjQzOTtyOjE4O2k6NDQwO3I6MTg7aTo0NDE7cjoxMDtpOjQ0MjtyOjEwO2k6NDQzO3I6MTg7aTo0NDQ7cjoxODtpOjQ0NTtyOjE4O2k6NDQ2O3I6MTg7aTo0NDc7cjoxMDtpOjQ0ODtyOjEwO2k6NDQ5O3I6MTA7aTo0NTA7cjoxMDtpOjQ1MTtyOjMxODtpOjQ1MjtyOjg3O2k6NDUzO3I6MTA7aTo0NTQ7cjoxMDtpOjQ1NTtyOjEwO2k6NDU2O3I6MTA2O2k6NDU3O3I6MjY7aTo0NTg7cjoxODtpOjQ1OTtyOjEwO2k6NDYwO3I6MTA7aTo0NjE7cjoxMDtpOjQ2MjtyOjEwO2k6NDYzO3I6MTA7aTo0NjQ7cjoyNjtpOjQ2NTtyOjQ4MjtpOjQ2NjtyOjEwO2k6NDY3O3I6MzE4O2k6NDY4O3I6MTA7aTo0Njk7cjoxMDtpOjQ3MDtyOjE4O2k6NDcxO086MTk6InBvY2tldG1pbmVcaXRlbVxEeWUiOjc6e3M6ODoiACoAYmxvY2siO047czo1OiIAKgBpZCI7aTozNTE7czo3OiIAKgBtZXRhIjtpOjA7czoyNjoiAHBvY2tldG1pbmVcaXRlbVxJdGVtAHRhZ3MiO3M6MDoiIjtzOjMxOiIAcG9ja2V0bWluZVxpdGVtXEl0ZW0AY2FjaGVkTkJUIjtOO3M6NToiY291bnQiO2k6MTtzOjc6IgAqAG5hbWUiO3M6MzoiRHllIjt9aTo0NzI7cjoxMDtpOjQ3MztyOjI2O2k6NDc0O3I6MTA7aTo0NzU7cjoxMDY7aTo0NzY7cjoyODI7aTo0Nzc7cjoyNjtpOjQ3ODtyOjEwO2k6NDc5O3I6MTA7aTo0ODA7cjoxMDtpOjQ4MTtyOjEwO2k6NDgyO3I6MTg7aTo0ODM7cjoxMDtpOjQ4NDtyOjEwO2k6NDg1O3I6MjY7aTo0ODY7cjoxODtpOjQ4NztyOjE4O2k6NDg4O3I6MTA7aTo0ODk7cjoyNjtpOjQ5MDtyOjE4O2k6NDkxO3I6MTA7aTo0OTI7cjoxODtpOjQ5MztyOjEwO2k6NDk0O3I6MTA7aTo0OTU7cjoyNjtpOjQ5NjtyOjI2O2k6NDk3O3I6MTA7aTo0OTg7cjoxMDtpOjQ5OTtyOjEwO2k6NTAwO3I6MTg7aTo1MDE7cjoxNjk7aTo1MDI7cjoyNjtpOjUwMztyOjE4O2k6NTA0O3I6MTA7aTo1MDU7cjoyNjtpOjUwNjtyOjE4O2k6NTA3O3I6MTA7aTo1MDg7cjoxODtpOjUwOTtyOjEwO2k6NTEwO3I6MTA7aTo1MTE7cjoxMDtpOjUxMjtyOjEwO2k6NTEzO3I6MTA7aTo1MTQ7cjoxMDtpOjUxNTtyOjE4O2k6NTE2O3I6MTA7aTo1MTc7cjoxODtpOjUxODtyOjIwMTtpOjUxOTtyOjE4O2k6NTIwO3I6MTg7aTo1MjE7cjoxODtpOjUyMjtyOjI7aTo1MjM7cjoyNjtpOjUyNDtyOjE4O2k6NTI1O3I6MTA7aTo1MjY7cjoxMDtpOjUyNztyOjEwO2k6NTI4O3I6MTA7aTo1Mjk7cjoxMDtpOjUzMDtyOjEwNjtpOjUzMTtyOjg3O2k6NTMyO3I6MTA7aTo1MzM7cjoxMDtpOjUzNDtyOjE4O2k6NTM1O3I6MTA7aTo1MzY7cjoxMDtpOjUzNztyOjEwO2k6NTM4O3I6MTg7aTo1Mzk7cjoyO2k6NTQwO3I6MTA7aTo1NDE7cjoyNjtpOjU0MjtyOjg3O2k6NTQzO3I6MjIwO2k6NTQ0O3I6MTg7aTo1NDU7cjoyNjtpOjU0NjtyOjEwO2k6NTQ3O3I6MTg7aTo1NDg7cjoxODtpOjU0OTtyOjEwO2k6NTUwO3I6MTA7aTo1NTE7cjoxMDtpOjU1MjtyOjI4MjtpOjU1MztyOjEwO2k6NTU0O3I6MTA7aTo1NTU7cjoxMDtpOjU1NjtyOjEwO2k6NTU3O3I6MjY7aTo1NTg7cjoxMDtpOjU1OTtyOjE4O2k6NTYwO3I6MTA7aTo1NjE7cjoxMDtpOjU2MjtyOjE4O2k6NTYzO3I6MjY7aTo1NjQ7cjoxMDtpOjU2NTtyOjEwO2k6NTY2O3I6MTA7aTo1Njc7cjoxMDtpOjU2ODtyOjI4MjtpOjU2OTtyOjEwO2k6NTcwO3I6MTg7aTo1NzE7cjoxODtpOjU3MjtyOjEwO2k6NTczO3I6MTg7aTo1NzQ7cjoxODtpOjU3NTtyOjEwO2k6NTc2O3I6MTA7aTo1Nzc7cjoxMDtpOjU3ODtyOjE4O2k6NTc5O3I6MTA7aTo1ODA7cjoxMDtpOjU4MTtyOjE4O2k6NTgyO3I6MTA7aTo1ODM7cjoxODtpOjU4NDtyOjEwO2k6NTg1O3I6MjY7aTo1ODY7cjoxMDtpOjU4NztyOjI2O2k6NTg4O3I6MTA7aTo1ODk7cjoxODtpOjU5MDtyOjEwO2k6NTkxO3I6MTA7aTo1OTI7cjoxNjk7aTo1OTM7cjoxMDtpOjU5NDtyOjE4O2k6NTk1O3I6MTA7aTo1OTY7cjoxMDtpOjU5NztyOjEwO2k6NTk4O3I6MjY7aTo1OTk7cjoxMDtpOjYwMDtyOjI4MjtpOjYwMTtyOjEwO2k6NjAyO3I6MTA7aTo2MDM7cjoxMDtpOjYwNDtyOjEwO2k6NjA1O3I6MTA7aTo2MDY7cjoxODtpOjYwNztyOjEwO2k6NjA4O3I6MjY7aTo2MDk7cjoxMDtpOjYxMDtyOjEwO2k6NjExO3I6MTA7aTo2MTI7cjoxMDtpOjYxMztyOjEwO2k6NjE0O3I6MjY7aTo2MTU7cjoyNjtpOjYxNjtyOjEwO2k6NjE3O3I6MTA7aTo2MTg7cjoxMDtpOjYxOTtyOjI2O2k6NjIwO3I6MjY7aTo2MjE7cjoxMDtpOjYyMjtyOjEwO2k6NjIzO3I6MTg7aTo2MjQ7cjoxODtpOjYyNTtyOjEwO2k6NjI2O3I6MTg7aTo2Mjc7cjoyNjtpOjYyODtyOjI2O2k6NjI5O3I6MTA7aTo2MzA7cjoxMDtpOjYzMTtyOjEwO2k6NjMyO3I6MTA7aTo2MzM7cjoxODtpOjYzNDtyOjE4O2k6NjM1O3I6MjAxO2k6NjM2O3I6MjgyO2k6NjM3O3I6MTg7aTo2Mzg7cjoxMDtpOjYzOTtyOjEwO2k6NjQwO3I6MTA7aTo2NDE7cjoxMDtpOjY0MjtyOjE4O2k6NjQzO3I6MTA7aTo2NDQ7cjoyODI7aTo2NDU7cjoxMDtpOjY0NjtyOjEwO2k6NjQ3O3I6MTA7aTo2NDg7cjoyODI7aTo2NDk7cjoyNjtpOjY1MDtyOjE4O2k6NjUxO3I6NzM7aTo2NTI7cjoxMDtpOjY1MztyOjEwO2k6NjU0O3I6MjY7aTo2NTU7cjoxMDtpOjY1NjtyOjEwO2k6NjU3O3I6MTA7aTo2NTg7cjoxODtpOjY1OTtyOjEwO2k6NjYwO3I6MTA7aTo2NjE7cjoxMDtpOjY2MjtyOjE4O2k6NjYzO3I6MTg7aTo2NjQ7cjoxMDtpOjY2NTtyOjEwO2k6NjY2O3I6MTA7aTo2Njc7cjoyNjtpOjY2ODtyOjE4O2k6NjY5O3I6MTA7aTo2NzA7cjoyMzA7aTo2NzE7cjoxMDtpOjY3MjtyOjI2O2k6NjczO3I6MTA7aTo2NzQ7cjoxMDtpOjY3NTtyOjEwO2k6Njc2O3I6MTg7aTo2Nzc7cjo0NztpOjY3ODtyOjEwO2k6Njc5O3I6MTA2O2k6NjgwO3I6NjE1O2k6NjgxO3I6MTA7aTo2ODI7cjoyNjtpOjY4MztyOjEwO2k6Njg0O3I6MTA7aTo2ODU7cjo0ODI7aTo2ODY7cjoxODtpOjY4NztyOjI2O2k6Njg4O3I6MTA7aTo2ODk7cjo0ODI7aTo2OTA7cjoxMDtpOjY5MTtyOjI2O2k6NjkyO3I6MTA7aTo2OTM7cjoxODtpOjY5NDtyOjEwO2k6Njk1O3I6MTA7aTo2OTY7cjoxODtpOjY5NztyOjEwO2k6Njk4O3I6MjtpOjY5OTtyOjEwO2k6NzAwO3I6MTg7aTo3MDE7cjoxMDtpOjcwMjtyOjE4O2k6NzAzO3I6MjY7aTo3MDQ7cjoxMDtpOjcwNTtyOjEwO2k6NzA2O3I6MTA7aTo3MDc7cjoxMDtpOjcwODtyOjEwO2k6NzA5O3I6MjgyO2k6NzEwO3I6MTA7aTo3MTE7cjoxMDtpOjcxMjtyOjEwO2k6NzEzO3I6MTg7aTo3MTQ7cjoxMDtpOjcxNTtyOjEwO2k6NzE2O3I6MjtpOjcxNztyOjEwO2k6NzE4O3I6MjY7aTo3MTk7cjoyMDE7aTo3MjA7cjoxMDtpOjcyMTtyOjI2O2k6NzIyO3I6MTA7aTo3MjM7cjo4NztpOjcyNDtyOjEwO2k6NzI1O3I6NDgyO2k6NzI2O3I6MjY7aTo3Mjc7cjoxMDtpOjcyODtyOjEwO2k6NzI5O3I6MTg7aTo3MzA7cjoxODtpOjczMTtyOjEwO2k6NzMyO3I6MTA7aTo3MzM7cjoyNjtpOjczNDtyOjg3O2k6NzM1O3I6MTA7aTo3MzY7cjoxMDtpOjczNztyOjEwO2k6NzM4O3I6MTg7aTo3Mzk7cjoyNjtpOjc0MDtyOjE4O2k6NzQxO3I6MTA7aTo3NDI7cjoxMDtpOjc0MztyOjE4O2k6NzQ0O3I6MTg7aTo3NDU7cjoyNjtpOjc0NjtyOjEwO2k6NzQ3O3I6MjY7aTo3NDg7cjoxMDtpOjc0OTtyOjEwO2k6NzUwO3I6MjY7aTo3NTE7cjoxMDtpOjc1MjtyOjEwO2k6NzUzO3I6MTA7aTo3NTQ7cjoxODtpOjc1NTtyOjEwO2k6NzU2O3I6ODc7aTo3NTc7cjoxMDtpOjc1ODtyOjEwO2k6NzU5O3I6MTA7aTo3NjA7cjoxMDtpOjc2MTtyOjEwO2k6NzYyO3I6MjY7aTo3NjM7cjoyNjtpOjc2NDtyOjE4O2k6NzY1O3I6MTg7aTo3NjY7cjoxMDtpOjc2NztyOjMxODtpOjc2ODtyOjEwO2k6NzY5O3I6MTA7aTo3NzA7cjoxODtpOjc3MTtyOjEwO2k6NzcyO3I6MTg7aTo3NzM7cjoyNjtpOjc3NDtyOjI2O2k6Nzc1O3I6MzE4O2k6Nzc2O3I6MjMwO2k6Nzc3O3I6MTA7aTo3Nzg7cjoxODtpOjc3OTtyOjEwO2k6NzgwO3I6MTA7aTo3ODE7cjoxMDtpOjc4MjtyOjg3O2k6NzgzO3I6MjY7aTo3ODQ7cjoxMDtpOjc4NTtyOjE4O2k6Nzg2O3I6MTg7aTo3ODc7cjoxMDtpOjc4ODtyOjEwO2k6Nzg5O3I6MTA7aTo3OTA7cjoxMDtpOjc5MTtyOjEwO2k6NzkyO3I6MTA7aTo3OTM7cjoyMDE7aTo3OTQ7cjozMTg7aTo3OTU7cjoxODtpOjc5NjtyOjE4O2k6Nzk3O3I6MjY7aTo3OTg7cjo0NztpOjc5OTtyOjEwO2k6ODAwO3I6MTA7aTo4MDE7cjoxODtpOjgwMjtyOjEwO2k6ODAzO3I6MTA7aTo4MDQ7cjoxMDtpOjgwNTtyOjE4O2k6ODA2O3I6MTA7aTo4MDc7cjoxODtpOjgwODtyOjEwO2k6ODA5O3I6MTA7aTo4MTA7cjo3MztpOjgxMTtyOjIyMDtpOjgxMjtyOjEwO2k6ODEzO3I6MTg7aTo4MTQ7cjoxMDtpOjgxNTtyOjEwO2k6ODE2O3I6MTg7aTo4MTc7cjoyNjtpOjgxODtyOjEwO2k6ODE5O3I6MTA7aTo4MjA7cjoxMDtpOjgyMTtyOjEwO2k6ODIyO3I6MTA7aTo4MjM7cjoxMDtpOjgyNDtyOjMxODtpOjgyNTtyOjMxODtpOjgyNjtyOjg3O2k6ODI3O3I6MTg7aTo4Mjg7cjoxODtpOjgyOTtyOjEwO2k6ODMwO3I6MTA7aTo4MzE7cjoxMDtpOjgzMjtyOjEwO2k6ODMzO3I6MjY7aTo4MzQ7cjoxMDtpOjgzNTtyOjE4O2k6ODM2O3I6MTA7aTo4Mzc7cjoxMDtpOjgzODtyOjE4O2k6ODM5O3I6MTg7aTo4NDA7cjoyNjtpOjg0MTtyOjE4O2k6ODQyO3I6MTA7aTo4NDM7cjoxMDtpOjg0NDtyOjIyMDtpOjg0NTtyOjEwO2k6ODQ2O3I6MTA7aTo4NDc7cjoyMDE7aTo4NDg7cjoxMDtpOjg0OTtyOjEwO2k6ODUwO3I6MTA7aTo4NTE7cjoxMDtpOjg1MjtyOjEwO2k6ODUzO3I6MTA7aTo4NTQ7cjoyMjA7aTo4NTU7cjoxMDtpOjg1NjtyOjE4O2k6ODU3O3I6MTg7aTo4NTg7cjoxODtpOjg1OTtyOjEwO2k6ODYwO3I6MTA7aTo4NjE7cjoxODtpOjg2MjtyOjEwO2k6ODYzO3I6MTA7aTo4NjQ7cjoyO2k6ODY1O3I6MTA7aTo4NjY7cjoxMDtpOjg2NztyOjE4O2k6ODY4O3I6MTA7aTo4Njk7cjoxMDtpOjg3MDtyOjEwO2k6ODcxO3I6MTg7aTo4NzI7cjo0ODI7aTo4NzM7cjoxMDtpOjg3NDtyOjEwO2k6ODc1O3I6MTg7aTo4NzY7cjoxMDtpOjg3NztyOjEwO2k6ODc4O3I6MjMwO2k6ODc5O3I6MTg7aTo4ODA7cjoyNjtpOjg4MTtyOjEwO2k6ODgyO3I6MTY5O2k6ODgzO3I6MjY7aTo4ODQ7cjoxMDtpOjg4NTtyOjMxODtpOjg4NjtyOjI2O2k6ODg3O3I6MjY7aTo4ODg7cjoxODtpOjg4OTtyOjEwO2k6ODkwO3I6MTA7aTo4OTE7cjoxMDtpOjg5MjtyOjEwO2k6ODkzO3I6MjY7aTo4OTQ7cjoxMDtpOjg5NTtyOjIwMTtpOjg5NjtyOjQ3O2k6ODk3O3I6MTA7aTo4OTg7cjoxMDtpOjg5OTtyOjI2O2k6OTAwO3I6MjgyO2k6OTAxO3I6MTg7aTo5MDI7cjoyNjtpOjkwMztyOjEwO2k6OTA0O3I6MTg7aTo5MDU7cjoxODtpOjkwNjtyOjEwO2k6OTA3O3I6MTg7aTo5MDg7cjoxMDtpOjkwOTtyOjEwO2k6OTEwO3I6MTg7aTo5MTE7cjoxMDtpOjkxMjtyOjI2O2k6OTEzO3I6MTg7aTo5MTQ7cjoxMDtpOjkxNTtyOjg3O2k6OTE2O3I6NDgyO2k6OTE3O3I6MTg7aTo5MTg7cjo3MztpOjkxOTtyOjEwO2k6OTIwO3I6MTA7aTo5MjE7cjoyNjtpOjkyMjtyOjEwO2k6OTIzO3I6MTA7aTo5MjQ7cjoyNjtpOjkyNTtyOjczO2k6OTI2O3I6MjY7aTo5Mjc7cjoxODtpOjkyODtyOjEwO2k6OTI5O3I6MTA7aTo5MzA7cjoxODtpOjkzMTtyOjI4MjtpOjkzMjtyOjI2O2k6OTMzO3I6MTA7aTo5MzQ7cjoyMjA7aTo5MzU7cjoxMDtpOjkzNjtyOjE4O2k6OTM3O3I6MTA7aTo5Mzg7cjoxMDtpOjkzOTtyOjEwO2k6OTQwO3I6MTg7aTo5NDE7cjozMTg7aTo5NDI7cjoxMDtpOjk0MztyOjEwO2k6OTQ0O3I6MTg7aTo5NDU7cjoxMDtpOjk0NjtyOjE4O2k6OTQ3O3I6MjAxO2k6OTQ4O3I6MTA7aTo5NDk7cjoxMDtpOjk1MDtyOjIzMDtpOjk1MTtyOjI2O2k6OTUyO3I6MTA7aTo5NTM7cjoxMDtpOjk1NDtyOjE4O2k6OTU1O3I6MTA7aTo5NTY7cjoxMDtpOjk1NztyOjMxODtpOjk1ODtyOjE4O2k6OTU5O3I6MTA7aTo5NjA7cjozMTg7aTo5NjE7cjoxODtpOjk2MjtyOjEwO2k6OTYzO3I6MTA7aTo5NjQ7cjoyNjtpOjk2NTtyOjEwO2k6OTY2O3I6MTA7fQ"; public const DEFAULT_LOS3_ENCHANTED = "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OjEzODtyOjI7aToxMzk7cjoyO2k6MTQwO3I6MjY7aToxNDE7cjoyO2k6MTQyO3I6MTQ7aToxNDM7cjoyO2k6MTQ0O3I6MjtpOjE0NTtyOjEwNztpOjE0NjtyOjc1O2k6MTQ3O3I6MjtpOjE0ODtyOjI7aToxNDk7cjo3NTtpOjE1MDtyOjI2O2k6MTUxO3I6MTQ7aToxNTI7cjo3NTtpOjE1MztyOjI7aToxNTQ7cjoyO2k6MTU1O3I6MTQ7aToxNTY7cjoyO2k6MTU3O3I6MjY7aToxNTg7cjoyNjtpOjE1OTtyOjI7aToxNjA7cjoyO2k6MTYxO3I6MjtpOjE2MjtyOjE0OTtpOjE2MztyOjI2O2k6MTY0O3I6MjIxO2k6MTY1O3I6MjtpOjE2NjtyOjI7aToxNjc7cjoyNjtpOjE2ODtyOjIyMTtpOjE2OTtyOjI7aToxNzA7cjoyO2k6MTcxO3I6MjtpOjE3MjtyOjE0O2k6MTczO3I6MTQ7aToxNzQ7cjo3NTtpOjE3NTtyOjI7aToxNzY7cjoyO2k6MTc3O3I6MTQ7aToxNzg7cjoyO2k6MTc5O3I6MjtpOjE4MDtyOjI7aToxODE7cjoyO2k6MTgyO3I6MjtpOjE4MztyOjI7aToxODQ7cjoyO2k6MTg1O3I6MjtpOjE4NjtyOjI7aToxODc7cjoyO2k6MTg4O3I6MjtpOjE4OTtyOjE0O2k6MTkwO3I6MjtpOjE5MTtyOjI2O2k6MTkyO3I6MjtpOjE5MztyOjI7aToxOTQ7cjoyO2k6MTk1O3I6MjY7aToxOTY7cjoxNDtpOjE5NztyOjI7aToxOTg7cjoyO2k6MTk5O3I6MjtpOjIwMDtyOjI7aToyMDE7cjoyO2k6MjAyO3I6MjY7aToyMDM7cjo3NTtpOjIwNDtyOjI7aToyMDU7cjoyO2k6MjA2O3I6MjtpOjIwNztyOjI7aToyMDg7cjoxNDtpOjIwOTtyOjI7aToyMTA7cjoyO2k6MjExO3I6MjY7aToyMTI7cjoxNDtpOjIxMztyOjIyMTtpOjIxNDtPOjIwOiJwb2NrZXRtaW5lXGl0ZW1cSXRlbSI6Nzp7czo4OiIAKgBibG9jayI7TjtzOjU6IgAqAGlkIjtpOjM1MjtzOjc6IgAqAG1ldGEiO2k6MDtzOjI2OiIAcG9ja2V0bWluZVxpdGVtXEl0ZW0AdGFncyI7czowOiIiO3M6MzE6IgBwb2NrZXRtaW5lXGl0ZW1cSXRlbQBjYWNoZWROQlQiO047czo1OiJjb3VudCI7aToxO3M6NzoiACoAbmFtZSI7czo0OiJCb25lIjt9aToyMTU7cjoyO2k6MjE2O3I6MjtpOjIxNztyOjE2NTtpOjIxODtyOjI7aToyMTk7cjoxNDtpOjIyMDtyOjI7aToyMjE7cjoyO2k6MjIyO3I6MjtpOjIyMztyOjI7aToyMjQ7cjoyO2k6MjI1O3I6MjtpOjIyNjtyOjI7aToyMjc7cjozMzA7aToyMjg7cjoxNDtpOjIyOTtyOjI7aToyMzA7cjoxNDtpOjIzMTtyOjI7aToyMzI7cjoxNDtpOjIzMztyOjI7aToyMzQ7cjoxNDtpOjIzNTtyOjI2O2k6MjM2O3I6MjtpOjIzNztyOjI7aToyMzg7cjoxNDtpOjIzOTtyOjI7aToyNDA7cjoyO2k6MjQxO3I6MTQ7aToyNDI7cjoxNDtpOjI0MztyOjI7aToyNDQ7cjoyO2k6MjQ1O3I6MjtpOjI0NjtyOjI7aToyNDc7cjoyO2k6MjQ4O3I6MjtpOjI0OTtyOjE0O2k6MjUwO3I6MjtpOjI1MTtyOjE2NTtpOjI1MjtyOjE0O2k6MjUzO3I6MjtpOjI1NDtyOjE0O2k6MjU1O3I6MjtpOjI1NjtyOjI7aToyNTc7cjoyO2k6MjU4O3I6MjtpOjI1OTtyOjc1O2k6MjYwO3I6MjY7aToyNjE7cjoyO2k6MjYyO3I6MjtpOjI2MztyOjI7aToyNjQ7cjoyO2k6MjY1O3I6MTQ5O2k6MjY2O3I6MjY7aToyNjc7cjoyO2k6MjY4O3I6MjtpOjI2OTtyOjI7aToyNzA7cjoxNDtpOjI3MTtyOjE0O2k6MjcyO3I6MjtpOjI3MztyOjI7aToyNzQ7cjoyO2k6Mjc1O3I6MTQ7aToyNzY7cjoyNjtpOjI3NztyOjI7aToyNzg7cjoyO2k6Mjc5O3I6MjtpOjI4MDtyOjI7aToyODE7cjoyO2k6MjgyO3I6MTQ5O2k6MjgzO3I6MjtpOjI4NDtyOjE0O2k6Mjg1O3I6MTQ7aToyODY7cjoyO2k6Mjg3O3I6MjtpOjI4ODtyOjE0O2k6Mjg5O3I6MjtpOjI5MDtyOjI7aToyOTE7cjoyO2k6MjkyO3I6MjtpOjI5MztyOjE0O2k6Mjk0O3I6MjtpOjI5NTtyOjI2O2k6Mjk2O3I6MjY7aToyOTc7cjoyO2k6Mjk4O3I6MjY7aToyOTk7cjoyO2k6MzAwO3I6MjtpOjMwMTtyOjE0O2k6MzAyO3I6MTQ7aTozMDM7cjoyO2k6MzA0O3I6MjtpOjMwNTtyOjI7aTozMDY7cjoyO2k6MzA3O3I6MjtpOjMwODtyOjI7aTozMDk7cjoyMjE7aTozMTA7cjoxNDtpOjMxMTtyOjI7aTozMTI7cjoxNDtpOjMxMztyOjI7aTozMTQ7cjoyO2k6MzE1O3I6MTQ7aTozMTY7cjoyO2k6MzE3O3I6MzQ7aTozMTg7TzoyMDoicG9ja2V0bWluZVxpdGVtXEl0ZW0iOjc6e3M6ODoiACoAYmxvY2siO047czo1OiIAKgBpZCI7aTozMzQ7czo3OiIAKgBtZXRhIjtpOjA7czoyNjoiAHBvY2tldG1pbmVcaXRlbVxJdGVtAHRhZ3MiO3M6MDoiIjtzOjMxOiIAcG9ja2V0bWluZVxpdGVtXEl0ZW0AY2FjaGVkTkJUIjtOO3M6NToiY291bnQiO2k6MTtzOjc6IgAqAG5hbWUiO3M6NzoiTGVhdGhlciI7fWk6MzE5O3I6NDI7aTozMjA7cjoxNDtpOjMyMTtyOjI7aTozMjI7cjoyO2k6MzIzO3I6MzMwO2k6MzI0O3I6MjtpOjMyNTtyOjI7aTozMjY7cjoyO2k6MzI3O3I6MjIxO2k6MzI4O3I6MTQ7aTozMjk7cjoyO2k6MzMwO3I6MjtpOjMzMTtyOjI7aTozMzI7cjoyO2k6MzMzO3I6MjtpOjMzNDtyOjI7aTozMzU7cjoxNDtpOjMzNjtyOjI7aTozMzc7cjoyNjtpOjMzODtyOjI7aTozMzk7cjoyO2k6MzQwO3I6MjtpOjM0MTtyOjE0O2k6MzQyO3I6MjtpOjM0MztyOjE0O2k6MzQ0O3I6MTQ7aTozNDU7cjoyO2k6MzQ2O3I6MjtpOjM0NztyOjEwNztpOjM0ODtPOjI4OiJwb2NrZXRtaW5lXGl0ZW1cTGVhdGhlckJvb3RzIjo3OntzOjg6IgAqAGJsb2NrIjtOO3M6NToiACoAaWQiO2k6MzAxO3M6NzoiACoAbWV0YSI7aTowO3M6MjY6IgBwb2NrZXRtaW5lXGl0ZW1cSXRlbQB0YWdzIjtzOjA6IiI7czozMToiAHBvY2tldG1pbmVcaXRlbVxJdGVtAGNhY2hlZE5CVCI7TjtzOjU6ImNvdW50IjtpOjE7czo3OiIAKgBuYW1lIjtzOjEzOiJMZWF0aGVyIEJvb3RzIjt9aTozNDk7cjoyO2k6MzUwO3I6MjtpOjM1MTtyOjI7aTozNTI7cjoyO2k6MzUzO3I6MjtpOjM1NDtyOjE0O2k6MzU1O3I6MjtpOjM1NjtyOjI7aTozNTc7cjoyO2k6MzU4O3I6MTQ7aTozNTk7cjoyO2k6MzYwO3I6MTQ7aTozNjE7cjoyO2k6MzYyO3I6MjtpOjM2MztyOjE0O2k6MzY0O3I6MjtpOjM2NTtyOjI7aTozNjY7cjoyMjE7aTozNjc7cjo0NDE7aTozNjg7cjozNDtpOjM2OTtyOjE0O2k6MzcwO3I6MjY7aTozNzE7cjoxNDtpOjM3MjtyOjE3NztpOjM3MztyOjI7aTozNzQ7cjoyO2k6Mzc1O3I6MTQ7aTozNzY7cjoyNjtpOjM3NztyOjI7aTozNzg7cjoyO2k6Mzc5O3I6MjtpOjM4MDtyOjI7aTozODE7cjoyO2k6MzgyO3I6MTQ7aTozODM7cjoyNjtpOjM4NDtyOjE0O2k6Mzg1O3I6MjtpOjM4NjtyOjI7aTozODc7cjoyNjtpOjM4ODtyOjE0OTtpOjM4OTtyOjE0O2k6MzkwO3I6MjIxO2k6MzkxO3I6MjtpOjM5MjtyOjE0O2k6MzkzO3I6MjtpOjM5NDtyOjI7aTozOTU7cjoyNjtpOjM5NjtyOjIyMTtpOjM5NztyOjI2O2k6Mzk4O3I6MjtpOjM5OTtyOjE0OTtpOjQwMDtyOjIyMTtpOjQwMTtyOjE0O2k6NDAyO3I6MjY7aTo0MDM7cjoyNjtpOjQwNDtyOjE0O2k6NDA1O3I6MjtpOjQwNjtyOjI7aTo0MDc7cjoxNDtpOjQwODtyOjI2O2k6NDA5O3I6MjtpOjQxMDtyOjI7aTo0MTE7cjoyNjtpOjQxMjtyOjI7aTo0MTM7cjoyO2k6NDE0O3I6MjtpOjQxNTtyOjI2O2k6NDE2O3I6MjY7aTo0MTc7TzoyMToicG9ja2V0bWluZVxpdGVtXFN0aWNrIjo3OntzOjg6IgAqAGJsb2NrIjtOO3M6NToiACoAaWQiO2k6MjgwO3M6NzoiACoAbWV0YSI7aTowO3M6MjY6IgBwb2NrZXRtaW5lXGl0ZW1cSXRlbQB0YWdzIjtzOjA6IiI7czozMToiAHBvY2tldG1pbmVcaXRlbVxJdGVtAGNhY2hlZE5CVCI7TjtzOjU6ImNvdW50IjtpOjE7czo3OiIAKgBuYW1lIjtzOjU6IlN0aWNrIjt9aTo0MTg7cjoyMjE7aTo0MTk7cjoyO2k6NDIwO3I6MjtpOjQyMTtyOjI7aTo0MjI7cjoyO2k6NDIzO3I6NDQxO2k6NDI0O3I6MTQ7aTo0MjU7cjozMzA7aTo0MjY7cjoyO2k6NDI3O3I6MjtpOjQyODtyOjI7aTo0Mjk7cjo0MjtpOjQzMDtyOjI7aTo0MzE7cjoyO2k6NDMyO3I6MjtpOjQzMztyOjI7aTo0MzQ7cjoyO2k6NDM1O3I6MjtpOjQzNjtyOjE0O2k6NDM3O3I6MjtpOjQzODtyOjE0O2k6NDM5O3I6MTQ7aTo0NDA7cjoxNDtpOjQ0MTtyOjI7aTo0NDI7cjoyO2k6NDQzO3I6MjtpOjQ0NDtyOjI7aTo0NDU7cjoxNDtpOjQ0NjtyOjI2O2k6NDQ3O3I6MTQ7aTo0NDg7cjoyO2k6NDQ5O3I6MjtpOjQ1MDtyOjI7aTo0NTE7cjoyO2k6NDUyO3I6MjY7aTo0NTM7cjoxNDtpOjQ1NDtyOjI7aTo0NTU7cjoxNDtpOjQ1NjtyOjE0O2k6NDU3O3I6MjY7aTo0NTg7cjoyO2k6NDU5O3I6MTQ7aTo0NjA7cjoxNDtpOjQ2MTtyOjI7aTo0NjI7cjoyO2k6NDYzO3I6NDI7aTo0NjQ7cjoxNjU7aTo0NjU7cjoyO2k6NDY2O3I6MTQ7aTo0Njc7cjozNDtpOjQ2ODtyOjI7aTo0Njk7cjoyO2k6NDcwO3I6MjIxO2k6NDcxO3I6NDc4O2k6NDcyO3I6MzQ7aTo0NzM7cjoxNDtpOjQ3NDtyOjI7aTo0NzU7cjoxNDtpOjQ3NjtyOjI7aTo0Nzc7cjoxNDtpOjQ3ODtyOjI7aTo0Nzk7cjo3NTtpOjQ4MDtyOjI7aTo0ODE7cjoyMjE7aTo0ODI7cjoyO2k6NDgzO3I6MzQ7aTo0ODQ7cjoyO2k6NDg1O3I6MjtpOjQ4NjtyOjI7aTo0ODc7cjozNDtpOjQ4ODtyOjI2O2k6NDg5O3I6MjtpOjQ5MDtyOjI2O2k6NDkxO3I6MjtpOjQ5MjtyOjE0O2k6NDkzO3I6MTQ7aTo0OTQ7cjozNDtpOjQ5NTtyOjE0O2k6NDk2O3I6MTQ7aTo0OTc7cjoyO2k6NDk4O3I6MjtpOjQ5OTtyOjI7aTo1MDA7cjoxNDtpOjUwMTtyOjI7aTo1MDI7cjoxNDtpOjUwMztyOjE0O2k6NTA0O3I6MjtpOjUwNTtyOjI2O2k6NTA2O3I6MTQ7aTo1MDc7cjoyNjtpOjUwODtyOjI2O2k6NTA5O3I6MjtpOjUxMDtyOjE0O2k6NTExO3I6MjtpOjUxMjtyOjI7aTo1MTM7cjoyO2k6NTE0O3I6MjtpOjUxNTtyOjI2O2k6NTE2O3I6MjY7aTo1MTc7cjoyO2k6NTE4O3I6MjtpOjUxOTtyOjI7aTo1MjA7cjo0NDE7aTo1MjE7cjoxNDk7aTo1MjI7cjoyO2k6NTIzO3I6MjY7aTo1MjQ7cjoyO2k6NTI1O3I6MTQ7aTo1MjY7cjoyNDA7aTo1Mjc7cjoyNjtpOjUyODtyOjIyMTtpOjUyOTtyOjI7aTo1MzA7cjoxNDtpOjUzMTtyOjE0O2k6NTMyO3I6MTQ7aTo1MzM7cjoyO2k6NTM0O3I6MjY7aTo1MzU7cjo0Nzg7aTo1MzY7cjoyO2k6NTM3O3I6MjtpOjUzODtyOjI2O2k6NTM5O3I6MjtpOjU0MDtyOjI7aTo1NDE7cjoyO2k6NTQyO3I6MTQ7aTo1NDM7cjoyNjtpOjU0NDtyOjI7aTo1NDU7cjoyO2k6NTQ2O3I6MzQ7aTo1NDc7cjoyNjtpOjU0ODtyOjI7aTo1NDk7cjoyO2k6NTUwO3I6MTQ7aTo1NTE7cjoxNDtpOjU1MjtyOjI7aTo1NTM7cjoyNjtpOjU1NDtyOjE0O2k6NTU1O3I6MjtpOjU1NjtyOjI2O2k6NTU3O3I6MjtpOjU1ODtyOjI0MDtpOjU1OTtyOjE3NztpOjU2MDtyOjE0O2k6NTYxO3I6MjtpOjU2MjtyOjQ3ODtpOjU2MztyOjI7aTo1NjQ7cjoyO2k6NTY1O3I6MTQ5O2k6NTY2O3I6MjtpOjU2NztyOjE0O2k6NTY4O3I6MjtpOjU2OTtyOjI7aTo1NzA7cjoxNDk7aTo1NzE7cjoyO2k6NTcyO3I6MTQ7aTo1NzM7cjoyO2k6NTc0O3I6MjtpOjU3NTtyOjEwNztpOjU3NjtyOjE0O2k6NTc3O3I6MTQ7aTo1Nzg7cjoxNDtpOjU3OTtyOjE0OTtpOjU4MDtyOjI7aTo1ODE7cjo3NTtpOjU4MjtyOjI2O2k6NTgzO3I6MTQ7aTo1ODQ7cjozNDtpOjU4NTtyOjc1O2k6NTg2O3I6MjtpOjU4NztyOjE0O2k6NTg4O3I6MjtpOjU4OTtyOjE0O2k6NTkwO3I6MjtpOjU5MTtyOjE0O2k6NTkyO3I6MTQ7aTo1OTM7cjoyO2k6NTk0O3I6MTQ7aTo1OTU7cjoyNjtpOjU5NjtyOjI7aTo1OTc7cjoyNjtpOjU5ODtyOjI7aTo1OTk7cjo3NTtpOjYwMDtyOjE0O2k6NjAxO3I6MTQ5O2k6NjAyO3I6MjtpOjYwMztyOjI7aTo2MDQ7cjoyO2k6NjA1O3I6MjtpOjYwNjtyOjE0O2k6NjA3O3I6MjtpOjYwODtyOjI7aTo2MDk7cjoyO2k6NjEwO3I6MjQwO2k6NjExO3I6MjtpOjYxMjtyOjI2O2k6NjEzO3I6MjtpOjYxNDtyOjE0O2k6NjE1O3I6MjtpOjYxNjtyOjE0O2k6NjE3O3I6MjIxO2k6NjE4O3I6MjY7aTo2MTk7cjoyNjtpOjYyMDtyOjU1NDtpOjYyMTtyOjE0O2k6NjIyO3I6MTQ7aTo2MjM7cjoyO2k6NjI0O3I6MTQ7aTo2MjU7cjoxNDtpOjYyNjtPOjE5OiJwb2NrZXRtaW5lXGl0ZW1cRHllIjo3OntzOjg6IgAqAGJsb2NrIjtOO3M6NToiACoAaWQiO2k6MzUxO3M6NzoiACoAbWV0YSI7aTowO3M6MjY6IgBwb2NrZXRtaW5lXGl0ZW1cSXRlbQB0YWdzIjtzOjA6IiI7czozMToiAHBvY2tldG1pbmVcaXRlbVxJdGVtAGNhY2hlZE5CVCI7TjtzOjU6ImNvdW50IjtpOjE7czo3OiIAKgBuYW1lIjtzOjM6IkR5ZSI7fWk6NjI3O3I6MjtpOjYyODtyOjE0O2k6NjI5O3I6MjtpOjYzMDtyOjI7aTo2MzE7cjoyO2k6NjMyO3I6MTQ7aTo2MzM7cjoxNDtpOjYzNDtyOjI7aTo2MzU7cjoyO2k6NjM2O3I6MTQ7aTo2Mzc7cjoyO2k6NjM4O3I6MjtpOjYzOTtyOjI7aTo2NDA7cjoxNDtpOjY0MTtyOjE0O2k6NjQyO3I6MjtpOjY0MztyOjI7aTo2NDQ7cjoxNDtpOjY0NTtyOjE0O2k6NjQ2O3I6MjtpOjY0NztyOjI7aTo2NDg7cjoyO2k6NjQ5O3I6MjtpOjY1MDtyOjE0O2k6NjUxO3I6MjY7aTo2NTI7cjoyNjtpOjY1MztyOjI2O2k6NjU0O3I6MzQ7aTo2NTU7cjoxNDtpOjY1NjtyOjI7aTo2NTc7cjoxNDtpOjY1ODtyOjE0O2k6NjU5O3I6MjtpOjY2MDtyOjE0O2k6NjYxO3I6MjtpOjY2MjtyOjI2O2k6NjYzO3I6MjtpOjY2NDtyOjE2NTtpOjY2NTtyOjI2O2k6NjY2O3I6MjtpOjY2NztyOjI7aTo2Njg7cjoyO2k6NjY5O3I6MjtpOjY3MDtyOjE0O2k6NjcxO3I6MjtpOjY3MjtyOjI7aTo2NzM7cjoyO2k6Njc0O3I6MjY7aTo2NzU7cjoyO2k6Njc2O3I6MjY7aTo2Nzc7cjoxNDtpOjY3ODtyOjI7aTo2Nzk7cjoyO2k6NjgwO3I6MjtpOjY4MTtyOjI7aTo2ODI7cjoyO2k6NjgzO3I6MjtpOjY4NDtyOjI7aTo2ODU7cjozNDtpOjY4NjtyOjI7aTo2ODc7cjoyO2k6Njg4O3I6MTA3O2k6Njg5O3I6MTQ5O2k6NjkwO3I6MjtpOjY5MTtyOjI7aTo2OTI7cjoyO2k6NjkzO3I6MjtpOjY5NDtyOjI2O2k6Njk1O3I6MTQ7aTo2OTY7cjoyNjtpOjY5NztyOjI7aTo2OTg7cjoxNDtpOjY5OTtyOjI7aTo3MDA7cjoyO2k6NzAxO3I6MjY7aTo3MDI7cjoxNDtpOjcwMztyOjE0O2k6NzA0O3I6MjtpOjcwNTtyOjI7aTo3MDY7cjo0MjtpOjcwNztyOjI7aTo3MDg7cjoyO2k6NzA5O3I6MjtpOjcxMDtyOjI7aTo3MTE7cjoyO2k6NzEyO3I6MTQ7aTo3MTM7cjozNDtpOjcxNDtyOjI7aTo3MTU7cjoyMjE7aTo3MTY7cjoyO2k6NzE3O3I6MjtpOjcxODtyOjE0O2k6NzE5O3I6MjtpOjcyMDtyOjI7aTo3MjE7cjoyNjtpOjcyMjtyOjE0O2k6NzIzO3I6MjtpOjcyNDtyOjI2O2k6NzI1O3I6MjtpOjcyNjtyOjI2O2k6NzI3O3I6MjtpOjcyODtyOjI7aTo3Mjk7cjoyNjtpOjczMDtyOjI7aTo3MzE7cjoyO2k6NzMyO3I6MTQ7aTo3MzM7cjoyO2k6NzM0O3I6MTQ7aTo3MzU7cjoxNDtpOjczNjtyOjI7aTo3Mzc7cjoxNDtpOjczODtyOjE0O2k6NzM5O3I6MTQ7aTo3NDA7cjoyO2k6NzQxO3I6MTQ7aTo3NDI7cjoyO2k6NzQzO3I6MjtpOjc0NDtyOjE0O2k6NzQ1O3I6MTQ7aTo3NDY7cjoyO2k6NzQ3O3I6MjtpOjc0ODtyOjI7aTo3NDk7cjoxNDtpOjc1MDtyOjU1NDtpOjc1MTtyOjI7aTo3NTI7cjoyO2k6NzUzO3I6MjtpOjc1NDtyOjI7aTo3NTU7cjoyO2k6NzU2O3I6MTQ7aTo3NTc7cjoyO2k6NzU4O3I6MTQ7aTo3NTk7cjoyO2k6NzYwO3I6MjtpOjc2MTtyOjI7aTo3NjI7cjoyO2k6NzYzO3I6NDQxO2k6NzY0O3I6MjY7aTo3NjU7cjoyO2k6NzY2O3I6MjtpOjc2NztyOjE0O2k6NzY4O3I6MTQ7aTo3Njk7cjoyO2k6NzcwO3I6MjtpOjc3MTtyOjc1O2k6NzcyO3I6MTQ7aTo3NzM7cjoxNDtpOjc3NDtyOjE0O2k6Nzc1O3I6MjtpOjc3NjtyOjI7aTo3Nzc7cjoyO2k6Nzc4O3I6MjtpOjc3OTtyOjI2O2k6NzgwO3I6MjtpOjc4MTtyOjE0O2k6NzgyO3I6MjtpOjc4MztyOjI7aTo3ODQ7cjoyO2k6Nzg1O3I6MjY7aTo3ODY7cjoxNDk7aTo3ODc7cjoyNjtpOjc4ODtyOjIyMTtpOjc4OTtyOjI7aTo3OTA7cjoxNDtpOjc5MTtyOjI7aTo3OTI7cjoxNDtpOjc5MztyOjI7aTo3OTQ7cjoyO2k6Nzk1O3I6MTQ7aTo3OTY7cjoyO2k6Nzk3O3I6MjtpOjc5ODtyOjI7aTo3OTk7cjoyO2k6ODAwO3I6MTQ7aTo4MDE7cjoyNjtpOjgwMjtyOjI7aTo4MDM7cjoxNDtpOjgwNDtyOjE0O2k6ODA1O3I6MjY7aTo4MDY7cjoxNDtpOjgwNztyOjI7aTo4MDg7cjoyO2k6ODA5O3I6MjtpOjgxMDtyOjI7aTo4MTE7cjoyO2k6ODEyO3I6MjY7aTo4MTM7cjoyO2k6ODE0O3I6MjQwO2k6ODE1O3I6MTQ7aTo4MTY7cjoyO2k6ODE3O3I6MjY7aTo4MTg7cjoyO2k6ODE5O3I6MjY7aTo4MjA7cjo3NTtpOjgyMTtyOjE0OTtpOjgyMjtyOjI7aTo4MjM7cjoyNjtpOjgyNDtyOjI7aTo4MjU7cjoyO2k6ODI2O3I6MTQ7aTo4Mjc7cjoxNDtpOjgyODtyOjI2O2k6ODI5O3I6MjtpOjgzMDtyOjI7aTo4MzE7cjoyO2k6ODMyO3I6MjY7aTo4MzM7cjoxNDtpOjgzNDtyOjE0O2k6ODM1O3I6MjtpOjgzNjtyOjI2O2k6ODM3O3I6MjY7aTo4Mzg7cjoyO2k6ODM5O3I6MjtpOjg0MDtyOjI7aTo4NDE7cjoyNjtpOjg0MjtyOjI7aTo4NDM7cjoyO2k6ODQ0O3I6MTQ7aTo4NDU7cjoyO2k6ODQ2O3I6NDc4O2k6ODQ3O3I6MjY7aTo4NDg7cjoxNDk7aTo4NDk7cjo3NzA7aTo4NTA7cjoyO2k6ODUxO3I6MTQ7aTo4NTI7cjoyO2k6ODUzO3I6MjtpOjg1NDtyOjMzMDtpOjg1NTtyOjI7aTo4NTY7cjoyO2k6ODU3O3I6MjtpOjg1ODtyOjI7aTo4NTk7cjoyO2k6ODYwO3I6MjtpOjg2MTtyOjE0O2k6ODYyO3I6MjtpOjg2MztyOjI7aTo4NjQ7cjoyO2k6ODY1O3I6MTQ5O2k6ODY2O3I6MjtpOjg2NztyOjI7aTo4Njg7cjoyMjE7aTo4Njk7cjoxNDtpOjg3MDtyOjI7aTo4NzE7cjozNDtpOjg3MjtyOjI7aTo4NzM7cjoyO2k6ODc0O3I6MjY7aTo4NzU7cjoxNDtpOjg3NjtyOjI7aTo4Nzc7cjoxNDk7aTo4Nzg7cjoxNDtpOjg3OTtyOjI7aTo4ODA7cjoyO2k6ODgxO3I6MjtpOjg4MjtyOjQ0MTtpOjg4MztyOjI7aTo4ODQ7cjoyNjtpOjg4NTtyOjI7aTo4ODY7cjoxNDtpOjg4NztyOjI2O2k6ODg4O3I6MjtpOjg4OTtyOjI7aTo4OTA7cjoyO2k6ODkxO3I6MjtpOjg5MjtyOjI7aTo4OTM7cjoyNjtpOjg5NDtyOjI2O2k6ODk1O3I6MjtpOjg5NjtyOjI7aTo4OTc7cjoyO2k6ODk4O3I6MTQ7aTo4OTk7cjoxNDk7aTo5MDA7cjoyNjtpOjkwMTtyOjI2O2k6OTAyO3I6MjtpOjkwMztyOjE0O2k6OTA0O3I6MjQwO2k6OTA1O3I6MTQ7aTo5MDY7cjoxNDtpOjkwNztyOjI7aTo5MDg7cjoyO2k6OTA5O3I6MTQ7aTo5MTA7cjoxNDtpOjkxMTtyOjE0O2k6OTEyO3I6MjtpOjkxMztyOjI2O2k6OTE0O3I6MjtpOjkxNTtyOjM0O2k6OTE2O3I6MjtpOjkxNztyOjI7aTo5MTg7cjo3NTtpOjkxOTtyOjE0O2k6OTIwO3I6MjtpOjkyMTtyOjE0O2k6OTIyO3I6MjtpOjkyMztyOjI7aTo5MjQ7cjoyO2k6OTI1O3I6MjtpOjkyNjtyOjE0O2k6OTI3O3I6NzU7aTo5Mjg7cjoyO2k6OTI5O3I6MjtpOjkzMDtyOjI7aTo5MzE7cjoyO2k6OTMyO3I6MjtpOjkzMztyOjI2O2k6OTM0O3I6MjtpOjkzNTtyOjI7aTo5MzY7cjoyO2k6OTM3O3I6MjtpOjkzODtyOjI7aTo5Mzk7cjoxNDk7aTo5NDA7cjoxNDtpOjk0MTtyOjIyMTtpOjk0MjtyOjI7aTo5NDM7cjoyO2k6OTQ0O3I6MjtpOjk0NTtyOjI7aTo5NDY7cjoyO2k6OTQ3O3I6MTQ7aTo5NDg7cjoxNDtpOjk0OTtyOjc1O2k6OTUwO3I6MjtpOjk1MTtyOjI7aTo5NTI7cjoyO2k6OTUzO3I6MTY1O2k6OTU0O3I6NDc4O2k6OTU1O3I6MjtpOjk1NjtyOjE0O2k6OTU3O3I6MzMwO2k6OTU4O3I6Mjt9"; - + /** @var Item[] */ public static $UN_ENCHANTED_LOOT, $LOS1_ENCHANTED_LOOT, $LOS2_ENCHANTED_LOOT, $LOS3_ENCHANTED_LOOT; - + public static function init(): void{ if(TableSpoon::$cacheFile->get("date", "") != strval(date("d-m-y"))){ TableSpoon::getInstance()->getLogger()->debug("Generating new FishingLootTable"); @@ -43,7 +43,6 @@ public static function init(): void{ $fishingRodLoots[] = base64_encode(serialize(self::$LOS3_ENCHANTED_LOOT)); TableSpoon::$cacheFile->set("fishingRodLoots", $fishingRodLoots); TableSpoon::$cacheFile->save(); - return; }else{ $fishingRodLoots = TableSpoon::$cacheFile->get("fishingRodLoots"); if(is_array($fishingRodLoots)){ @@ -57,10 +56,9 @@ public static function init(): void{ self::$LOS2_ENCHANTED_LOOT = unserialize(base64_decode(self::DEFAULT_LOS2_ENCHANTED)); self::$LOS3_ENCHANTED_LOOT = unserialize(base64_decode(self::DEFAULT_LOS3_ENCHANTED)); } - return; } } - + private static function initUnenchanted(): void{ //count = Percentage x 1000 $arr = "UN_ENCHANTED_LOOT"; @@ -69,7 +67,7 @@ private static function initUnenchanted(): void{ self::loopedEntry(self::getItem(Item::RAW_SALMON), 212, $arr); self::loopedEntry(self::getItem(Item::CLOWNFISH), 17, $arr); self::loopedEntry(self::getItem(Item::CLOWNFISH), 111, $arr); - + // Treasure self::loopedEntry(self::getItem(Item::BOW), 8, $arr); self::loopedEntry(self::getItem(Item::ENCHANTED_BOOK), 8, $arr); @@ -77,7 +75,7 @@ private static function initUnenchanted(): void{ self::loopedEntry(self::getItem(Item::NAME_TAG), 8, $arr); self::loopedEntry(self::getItem(Item::SADDLE), 8, $arr); self::loopedEntry(self::getItem(Item::LILY_PAD), 8, $arr); - + // Junk self::loopedEntry(self::getItem(Item::BOWL), 12, $arr); self::loopedEntry(self::getItem(Item::FISHING_ROD), 2, $arr); @@ -90,9 +88,8 @@ private static function initUnenchanted(): void{ self::loopedEntry(self::getItem(Item::BONE), 12, $arr); self::loopedEntry(self::getItem(Item::DYE)->setDamage(0), 1, $arr); // ink sac self::loopedEntry(self::getItem(Item::TRIPWIRE_HOOK), 12, $arr); - return; } - + /** * @param Item $item * @param int $count @@ -113,13 +110,13 @@ private static function loopedEntry(Item $item, int $count, string $arrayName){ case Item::BOW: case Item::FISHING_ROD: if(TableSpoon::$settings["enchantments"]["vanilla"]){ - + if($item->getId() == Item::BOW){ $rand = [Enchantment::POWER, Enchantment::PUNCH, Enchantment::FLAME, Enchantment::INFINITY]; }elseif($item->getId() == Item::FISHING_ROD){ $rand = [Enchantment::LUCK_OF_THE_SEA, Enchantment::LURE, Enchantment::UNBREAKING]; } - + if(isset($rand)){ $enchantment = Enchantment::getEnchantment($rand[array_rand($rand)]); if($enchantment instanceof Enchantment){ @@ -140,11 +137,11 @@ private static function loopedEntry(Item $item, int $count, string $arrayName){ } } } - + private static function getItem(int $id): Item{ return Item::get($id, 0, 1); } - + private static function initLOS1(): void{ //count = Percentage x 1000 $arr = "LOS1_ENCHANTED_LOOT"; @@ -153,7 +150,7 @@ private static function initLOS1(): void{ self::loopedEntry(self::getItem(Item::RAW_SALMON), 212, $arr); self::loopedEntry(self::getItem(Item::CLOWNFISH), 17, $arr); self::loopedEntry(self::getItem(Item::CLOWNFISH), 110, $arr); - + // Treasure self::loopedEntry(self::getItem(Item::BOW), 12, $arr); self::loopedEntry(self::getItem(Item::ENCHANTED_BOOK), 12, $arr); @@ -161,7 +158,7 @@ private static function initLOS1(): void{ self::loopedEntry(self::getItem(Item::NAME_TAG), 12, $arr); self::loopedEntry(self::getItem(Item::SADDLE), 12, $arr); self::loopedEntry(self::getItem(Item::LILY_PAD), 12, $arr); - + // Junk self::loopedEntry(self::getItem(Item::BOWL), 10, $arr); self::loopedEntry(self::getItem(Item::FISHING_ROD), 2, $arr); @@ -174,9 +171,8 @@ private static function initLOS1(): void{ self::loopedEntry(self::getItem(Item::BONE), 10, $arr); self::loopedEntry(self::getItem(Item::DYE)->setDamage(0), 1, $arr); // ink sac self::loopedEntry(self::getItem(Item::TRIPWIRE_HOOK), 10, $arr); - return; } - + private static function initLOS2(): void{ //count = Percentage x 1000 $arr = "LOS2_ENCHANTED_LOOT"; @@ -185,7 +181,7 @@ private static function initLOS2(): void{ self::loopedEntry(self::getItem(Item::RAW_SALMON), 212, $arr); self::loopedEntry(self::getItem(Item::CLOWNFISH), 17, $arr); self::loopedEntry(self::getItem(Item::CLOWNFISH), 110, $arr); - + // Treasure self::loopedEntry(self::getItem(Item::BOW), 15, $arr); self::loopedEntry(self::getItem(Item::ENCHANTED_BOOK), 15, $arr); @@ -193,7 +189,7 @@ private static function initLOS2(): void{ self::loopedEntry(self::getItem(Item::NAME_TAG), 15, $arr); self::loopedEntry(self::getItem(Item::SADDLE), 15, $arr); self::loopedEntry(self::getItem(Item::LILY_PAD), 15, $arr); - + // Junk self::loopedEntry(self::getItem(Item::BOWL), 7, $arr); self::loopedEntry(self::getItem(Item::FISHING_ROD), 1, $arr); @@ -206,9 +202,8 @@ private static function initLOS2(): void{ self::loopedEntry(self::getItem(Item::BONE), 7, $arr); self::loopedEntry(self::getItem(Item::DYE)->setDamage(0), 1, $arr); // ink sac self::loopedEntry(self::getItem(Item::TRIPWIRE_HOOK), 7, $arr); - return; } - + private static function initLOS3(): void{ //count = Percentage x 1000 $arr = "LOS3_ENCHANTED_LOOT"; @@ -217,7 +212,7 @@ private static function initLOS3(): void{ self::loopedEntry(self::getItem(Item::RAW_SALMON), 211, $arr); self::loopedEntry(self::getItem(Item::CLOWNFISH), 17, $arr); self::loopedEntry(self::getItem(Item::CLOWNFISH), 110, $arr); - + // Treasure self::loopedEntry(self::getItem(Item::BOW), 19, $arr); self::loopedEntry(self::getItem(Item::ENCHANTED_BOOK), 19, $arr); @@ -225,7 +220,7 @@ private static function initLOS3(): void{ self::loopedEntry(self::getItem(Item::NAME_TAG), 19, $arr); self::loopedEntry(self::getItem(Item::SADDLE), 19, $arr); self::loopedEntry(self::getItem(Item::LILY_PAD), 19, $arr); - + // Junk self::loopedEntry(self::getItem(Item::BOWL), 5, $arr); self::loopedEntry(self::getItem(Item::FISHING_ROD), 1, $arr); @@ -238,20 +233,19 @@ private static function initLOS3(): void{ self::loopedEntry(self::getItem(Item::BONE), 5, $arr); self::loopedEntry(self::getItem(Item::DYE)->setDamage(0), 1, $arr); // ink sac self::loopedEntry(self::getItem(Item::TRIPWIRE_HOOK), 5, $arr); - return; } - + public static function getRandom(int $level): Item{ switch($level){ default: case 0: - return array_rand(self::$UN_ENCHANTED_LOOT); + return self::$UN_ENCHANTED_LOOT[array_rand(self::$UN_ENCHANTED_LOOT)]; case 1: - return array_rand(self::$LOS1_ENCHANTED_LOOT); + return self::$LOS1_ENCHANTED_LOOT[array_rand(self::$LOS1_ENCHANTED_LOOT)]; case 2: - return array_rand(self::$LOS2_ENCHANTED_LOOT); + return self::$LOS2_ENCHANTED_LOOT[array_rand(self::$LOS2_ENCHANTED_LOOT)]; case 3: - return array_rand(self::$LOS3_ENCHANTED_LOOT); + return self::$LOS3_ENCHANTED_LOOT[array_rand(self::$LOS3_ENCHANTED_LOOT)]; } } } \ No newline at end of file diff --git a/src/Xenophilicy/TableSpoon/utils/Math.php b/src/Xenophilicy/TableSpoon/utils/Math.php index 1bab73c..1c465a5 100644 --- a/src/Xenophilicy/TableSpoon/utils/Math.php +++ b/src/Xenophilicy/TableSpoon/utils/Math.php @@ -10,7 +10,7 @@ * Class Math * @package Xenophilicy\TableSpoon\utils */ -class Math extends Utils{ +class Math extends Utils { /** * @param float $min * @param float $max @@ -19,7 +19,7 @@ class Math extends Utils{ public static function getPercentage(float $min, float $max){ return ((min($min, $max) / max($min, $max)) * 100); } - + /** * @param $value * @param $min @@ -29,7 +29,7 @@ public static function getPercentage(float $min, float $max){ public static function clamp($value, $min, $max){ return $value < $min ? $min : ($value > $max ? $max : $value); } - + /** * @param float $d0 * @param $d1 @@ -39,13 +39,13 @@ public static function getDirection(float $d0, $d1){ if($d0 < 0){ $d0 = -$d0; } - + if($d1 < 0){ $d1 = -$d1; } return $d0 > $d1 ? $d0 : $d1; } - + /** * @param float $yaw * @return float diff --git a/src/Xenophilicy/TableSpoon/utils/Orientation.php b/src/Xenophilicy/TableSpoon/utils/Orientation.php index 0420577..c2c2acf 100644 --- a/src/Xenophilicy/TableSpoon/utils/Orientation.php +++ b/src/Xenophilicy/TableSpoon/utils/Orientation.php @@ -8,16 +8,15 @@ /** * The helper class for rail - * * @package Xenophilicy\TableSpoon\utils */ -class Orientation{ - +class Orientation { + // The type of the rail const STRAIGHT = 0; const ASCENDING = 1; const CURVED = 2; - + /** @var int */ private $meta; /** @var int */ @@ -26,7 +25,7 @@ class Orientation{ private $connectingDirections; /** @var int|null */ private $ascendingDirection; - + /** * Orientation constructor. * @param int $meta @@ -42,16 +41,15 @@ private function __construct(int $meta, int $state, int $from, int $to, ?int $as $this->connectingDirections[$to] = $to; $this->ascendingDirection = $ascendingDirection; } - + /** * Get all of the possible orientation that * been made with rail. - * * @return Orientation[] */ public static function getMetadata(): array{ $railMetadata = []; - + $railMetadata[] = new Orientation(0, self::STRAIGHT, Vector3::SIDE_NORTH, Vector3::SIDE_SOUTH, null); $railMetadata[] = new Orientation(1, self::STRAIGHT, Vector3::SIDE_EAST, Vector3::SIDE_WEST, null); $railMetadata[] = new Orientation(2, self::ASCENDING, Vector3::SIDE_EAST, Vector3::SIDE_WEST, Vector3::SIDE_EAST); @@ -64,11 +62,10 @@ public static function getMetadata(): array{ $railMetadata[] = new Orientation(9, self::CURVED, Vector3::SIDE_NORTH, Vector3::SIDE_EAST, null); return $railMetadata; } - + /** * Get orientation metadata by their damage or * meta. - * * @param int $meta * @return Orientation */ @@ -78,10 +75,9 @@ public static function byMetadata(int $meta): Orientation{ } return Rail::$railMetadata[$meta]; } - + /** * Gets the metadata for a straight railways. - * * @param int $face * @return Orientation */ @@ -96,10 +92,9 @@ public static function getNormalRail(int $face): Orientation{ } return Rail::$railMetadata[Rail::STRAIGHT_NORTH_SOUTH]; } - + /** * Gets the metadata for the ascending rail. - * * @param int $face * @return Orientation */ @@ -116,11 +111,10 @@ public static function getAscendingData(int $face): Orientation{ } return Rail::$railMetadata[Rail::ASCENDING_EAST]; } - + /** * Get if the rail could be curved to the specific * direction based on the given parameters. - * * @param int $face1 * @param int $face2 * @return Orientation @@ -129,18 +123,17 @@ public static function getCurvedState(int $face1, int $face2): Orientation{ $origin = [Rail::CURVED_SOUTH_EAST, Rail::CURVED_SOUTH_WEST, Rail::CURVED_NORTH_WEST, Rail::CURVED_NORTH_EAST]; foreach($origin as $side){ $o = Rail::$railMetadata[$side]; - + if(isset($o->connectingDirections[$face1]) && isset($o->connectingDirections[$face2])){ return $o; } } return Rail::$railMetadata[Rail::CURVED_SOUTH_EAST]; } - + /** * Get if the rail that could possibly changes it * orientation to either straight or curved. - * * @param int $face1 * @param int $face2 * @return Orientation @@ -149,36 +142,33 @@ public static function getConnectedState(int $face1, int $face2): Orientation{ $origin = Orientation::getHorizontalRails(); foreach($origin as $side){ $o = Rail::$railMetadata[$side]; - + if(isset($o->connectingDirections[$face1]) && isset($o->connectingDirections[$face2])){ return $o; } } return Rail::$railMetadata[Rail::STRAIGHT_NORTH_SOUTH]; } - + /** * Gets all the horizontal rails as array - * * @return array */ public static function getHorizontalRails(): array{ return [Rail::STRAIGHT_NORTH_SOUTH, Rail::STRAIGHT_EAST_WEST, Rail::CURVED_SOUTH_EAST, Rail::CURVED_SOUTH_WEST, Rail::CURVED_NORTH_WEST, Rail::CURVED_NORTH_EAST]; } - + /** * Returns the metadata of this orientation - * * @return int */ public function getDamage(): int{ return $this->meta; } - + /** * Gets if the of the rail has its own possible * connections to the other rail. - * * @param int ...$faces * @return bool */ @@ -191,48 +181,43 @@ public function hasConnectingDirections(int...$faces): bool{ } return true; } - + /** * Get the possible connections that this * rail could connects with. - * * @return int[] */ public function connectingDirections(): array{ return $this->connectingDirections; } - + /** * Get the ascending direction for this * rail metadata. - * * @return int|null */ public function ascendingDirection(){ return $this->ascendingDirection; } - + /** * Gets if this rail could be straight - * * @return bool */ public function isStraight(): bool{ return $this->state == self::STRAIGHT; } - + /** * Checks if this rail is ascending - * * @return bool */ public function isAscending(): bool{ return $this->state == self::ASCENDING; } - + /** * Checks if this rail is curved - * * @return bool */ public function isCurved(): bool{ diff --git a/src/Xenophilicy/TableSpoon/utils/RailUtils.php b/src/Xenophilicy/TableSpoon/utils/RailUtils.php index 8be4830..09b47ca 100644 --- a/src/Xenophilicy/TableSpoon/utils/RailUtils.php +++ b/src/Xenophilicy/TableSpoon/utils/RailUtils.php @@ -12,8 +12,8 @@ * Rewrite by larryTheCoder * @package Xenophilicy\TableSpoon\utils */ -class RailUtils{ - +class RailUtils { + /** * @param $block * @return bool @@ -32,6 +32,6 @@ public static function isRailBlock($block): bool{ return false; } } - + } diff --git a/src/Xenophilicy/TableSpoon/utils/Xp.php b/src/Xenophilicy/TableSpoon/utils/Xp.php index 6e97f2c..2c2cf72 100644 --- a/src/Xenophilicy/TableSpoon/utils/Xp.php +++ b/src/Xenophilicy/TableSpoon/utils/Xp.php @@ -11,7 +11,7 @@ * Class Xp * @package Xenophilicy\TableSpoon\utils */ -class Xp extends Utils{ +class Xp extends Utils { public static function getXpDropsForEntity(Entity $e): int{ switch($e::NETWORK_ID){ // animals //