From c1fb88faaedb84d76917c9c410e0ad0e78b1152f Mon Sep 17 00:00:00 2001 From: Sollace Date: Tue, 22 Sep 2020 15:11:20 +0200 Subject: [PATCH] Back to basics: strip away anything that's not the core of the mod --- book.xcf | Bin 623381 -> 0 bytes gradle.properties | 14 +- rainbow.svg | 128 ---- .../unicopia/AwaitTickQueue.java | 13 +- .../unicopia/EquinePredicates.java | 27 +- .../minelittlepony/unicopia/InAnimate.java | 12 - .../unicopia/InteractionManager.java | 4 +- .../com/minelittlepony/unicopia/TreeType.java | 2 +- .../minelittlepony/unicopia/UEntities.java | 25 + .../com/minelittlepony/unicopia/UTags.java | 26 - .../com/minelittlepony/unicopia/Unicopia.java | 8 +- .../unicopia/ability/Abilities.java | 4 - .../unicopia/ability/Ability.java | 2 +- .../unicopia/ability/AbilityDispatcher.java | 2 +- .../unicopia/ability/CarryAbility.java | 2 +- .../ability/ChangelingDisguiseAbility.java | 11 +- .../ability/ChangelingFeedAbility.java | 8 +- .../ability/EarthPonyGrowAbility.java | 4 +- .../ability/EarthPonyStompAbility.java | 6 +- .../unicopia/ability/FlightPredicate.java | 2 +- .../unicopia/ability/HeightPredicate.java | 2 +- .../PegasusCloudInteractionAbility.java | 81 -- .../ability/UnicornCastingAbility.java | 8 +- .../ability/UnicornTeleportAbility.java | 4 +- .../unicopia/{ => ability}/magic/Affine.java | 2 +- .../{ => ability}/magic/Affinity.java | 2 +- .../{ => ability}/magic/AttachableSpell.java | 2 +- .../unicopia/{ => ability}/magic/Caster.java | 22 +- .../{ => ability}/magic/CasterUtils.java | 31 +- .../{ => ability}/magic/Levelled.java | 2 +- .../unicopia/{ => ability}/magic/Magical.java | 2 +- .../unicopia/{ => ability}/magic/Spell.java | 4 +- .../{ => ability}/magic/Suppressable.java | 2 +- .../{ => ability}/magic/ThrowableSpell.java | 35 +- .../magic/spell/AbstractRangedAreaSpell.java | 6 +- .../magic/spell/AbstractSpell.java | 6 +- .../magic/spell/AttractiveSpell.java | 30 +- .../magic/spell/AwkwardSpell.java | 32 +- .../magic/spell/DisguiseSpell.java | 30 +- .../{ => ability}/magic/spell/FireSpell.java | 69 +- .../magic/spell/GenericSpell.java | 10 +- .../{ => ability}/magic/spell/IceSpell.java | 71 +- .../magic/spell/InfernoSpell.java | 19 +- .../magic/spell/NecromancySpell.java | 6 +- .../magic/spell/RevealingSpell.java | 14 +- .../magic/spell/ScorchSpell.java | 14 +- .../magic/spell/ShieldSpell.java | 21 +- .../magic/spell/SiphoningSpell.java | 13 +- .../magic/spell/SpellRegistry.java | 67 +- .../ability/magic/spell/package-info.java | 1 + .../state}/BlockStateConverter.java | 2 +- .../state}/BlockStateMap.java | 2 +- .../state}/ReversableBlockStateConverter.java | 2 +- .../state}/ReversableBlockStateMap.java | 2 +- .../state}/StateMapping.java | 2 +- .../blockstate => block/state}/StateMaps.java | 2 +- .../client/ClientInteractionManager.java | 6 +- .../unicopia/client/KeyBindingsHandler.java | 2 +- .../unicopia/client/URenderers.java | 9 +- .../unicopia/client/UnicopiaClient.java | 79 +- .../client/gui/SettingsScreen.java | 2 +- .../unicopia/{world => }/client/gui/UHud.java | 8 +- .../client/particle/DiskParticle.java | 2 +- .../client/particle/MagicParticle.java | 2 +- .../client/particle/SphereParticle.java | 10 +- .../unicopia/client/render/RenderLayers.java | 25 + .../client/render/WorldRenderDelegate.java | 6 +- .../unicopia/command/Commands.java | 1 + .../unicopia/command/DisguiseCommand.java | 8 +- .../unicopia/command/GravityCommand.java | 4 +- .../unicopia/command/SpeciesCommand.java | 4 +- .../unicopia/ducks/Colourful.java | 8 - .../unicopia/ducks/Farmland.java | 12 - .../unicopia/ducks/PickedItemSupplier.java | 7 - .../unicopia/{equine => entity}/Creature.java | 16 +- .../{equine => entity}/EntityPhysics.java | 4 +- .../Ponylike.java => entity/Equine.java} | 7 +- .../{ducks => entity}/IItemEntity.java | 4 +- .../unicopia/{equine => entity}/ItemImpl.java | 5 +- .../unicopia/{equine => entity}/Physics.java | 2 +- .../{ducks => entity}/PonyContainer.java | 11 +- .../unicopia/{equine => entity}/Trap.java | 2 +- .../player/Aeronautics.java | 2 +- .../player/MagicReserves.java | 2 +- .../player/ManaContainer.java | 2 +- .../{equine => entity}/player/Motion.java | 2 +- .../player/PlayerAttributes.java | 6 +- .../player/PlayerCamera.java | 2 +- .../player/PlayerDimensions.java | 4 +- .../player/PlayerPhysics.java | 17 +- .../{equine => entity}/player/Pony.java | 89 +-- .../dummy/DummyClientPlayerEntity.java | 2 +- .../player}/dummy/DummyPlayerEntity.java | 4 +- .../dummy/DummyServerPlayerEntity.java | 2 +- .../equine/player/PlayerInventory.java | 190 ----- .../equine/player/PlayerPageStats.java | 73 -- .../unicopia/{world => }/item/AppleItem.java | 9 +- .../{world => }/item/PredicatedBlockItem.java | 2 +- .../{world => }/item/RottenAppleItem.java | 4 +- .../minelittlepony/unicopia/item/UItems.java | 52 ++ .../{world => }/item/VanillaOverrides.java | 4 +- .../{world => }/item/ZapAppleItem.java | 12 +- .../unicopia/{ => item}/toxin/Toxic.java | 4 +- .../{ => item}/toxin/ToxicHolder.java | 2 +- .../unicopia/{ => item}/toxin/ToxicItem.java | 2 +- .../unicopia/{ => item}/toxin/Toxicity.java | 2 +- .../unicopia/{ => item}/toxin/Toxics.java | 2 +- .../unicopia/{ => item}/toxin/Toxin.java | 2 +- .../unicopia/{ => item}/toxin/UEffects.java | 2 +- .../{ => item}/toxin/UFoodComponents.java | 2 +- .../unicopia/magic/AffineItem.java | 21 - .../unicopia/magic/CastResult.java | 25 - .../unicopia/magic/DispenceableSpell.java | 22 - .../unicopia/magic/Dispensable.java | 74 -- .../unicopia/magic/EtherialListener.java | 18 - .../unicopia/magic/HeldSpell.java | 15 - .../unicopia/magic/Useable.java | 46 -- .../magic/spell/AbstractLinkedSpell.java | 112 --- .../magic/spell/ChangelingTrapSpell.java | 233 ------ .../unicopia/magic/spell/ChargingSpell.java | 96 --- .../unicopia/magic/spell/DarknessSpell.java | 259 ------- .../unicopia/magic/spell/FlameSpell.java | 48 -- .../unicopia/magic/spell/GlowingSpell.java | 107 --- .../unicopia/magic/spell/PortalSpell.java | 338 --------- .../unicopia/magic/spell/package-info.java | 1 - .../unicopia/mixin/CriterionsRegistry.java | 15 - .../unicopia/mixin/MixinBlockItem.java | 5 +- .../mixin/MixinEntityContextImpl.java | 26 - .../unicopia/mixin/MixinFallingBlock.java | 25 - .../unicopia/mixin/MixinFarmlandBlock.java | 30 - .../unicopia/mixin/MixinHoeItem.java | 30 - .../unicopia/mixin/MixinItem.java | 2 +- .../unicopia/mixin/MixinItemEntity.java | 4 +- .../unicopia/mixin/MixinItems.java | 2 +- .../unicopia/mixin/MixinLivingEntity.java | 14 +- .../unicopia/mixin/MixinPlayerEntity.java | 8 +- .../unicopia/mixin/MixinProjectileEntity.java | 2 +- .../mixin/MixinServerPlayerEntity.java | 6 +- .../unicopia/mixin/MixinStructureFeature.java | 14 - .../unicopia/mixin/MixinStructuresConfig.java | 16 - .../minelittlepony/unicopia/mixin/Walker.java | 12 - .../mixin/client/DefaultTexturesRegistry.java | 17 - .../unicopia/mixin/client/MixinCamera.java | 2 +- .../client/MixinEntityRenderDispatcher.java | 6 +- .../mixin/client/MixinGameRenderer.java | 4 +- .../unicopia/mixin/client/MixinInGameHud.java | 9 +- .../mixin/client/MixinItemModels.java | 2 +- .../mixin/client/MixinKeyboardInput.java | 2 +- .../mixin/client/MixinMinecraftClient.java | 53 -- .../unicopia/mixin/client/MixinMouse.java | 2 +- .../unicopia/network/Channel.java | 1 - .../unicopia/network/EffectSync.java | 6 +- .../unicopia/network/MsgPlayerAbility.java | 2 +- .../network/MsgPlayerCapabilities.java | 2 +- .../network/MsgRequestCapabilities.java | 2 +- .../unicopia/network/MsgSpawnRainbow.java | 53 -- .../DiskParticleEffect.java | 2 +- .../MagicParticleEffect.java | 2 +- .../ParticleEmitter.java | 2 +- .../ParticleHandle.java | 5 +- .../ParticleSource.java | 2 +- .../ParticleSpawner.java | 2 +- .../ParticleUtils.java | 2 +- .../SphereParticleEffect.java | 2 +- .../{particles => particle}/UParticles.java | 2 +- .../MagicProjectileEntity.java | 30 +- .../{util => }/projectile/Projectile.java | 4 +- .../{util => }/projectile/ProjectileUtil.java | 2 +- .../minelittlepony/unicopia/util/HoeUtil.java | 21 - .../unicopia/util/MagicalDamageSource.java | 16 +- .../unicopia/util/OreReplacer.java | 140 ---- .../unicopia/util/Registries.java | 1 - .../unicopia/util/VecHelper.java | 6 +- .../unicopia/util/WorldHelper.java | 79 -- .../unicopia/util/projectile/Tossable.java | 30 - .../unicopia/world/TossableItem.java | 96 --- .../unicopia/world/UnicopiaWorld.java | 41 - .../world/advancement/AbstractCriterion.java | 52 -- .../advancement/AdvancementPredicate.java | 31 - .../world/advancement/BOHDeathCriterion.java | 77 -- .../world/block/AbstractDoorBlock.java | 126 --- .../world/block/ChiselledChitinBlock.java | 75 -- .../unicopia/world/block/ChitinBlock.java | 64 -- .../unicopia/world/block/Covering.java | 44 -- .../world/block/DiamondDoorBlock.java | 32 - .../unicopia/world/block/DutchDoorBlock.java | 58 -- .../world/block/FruitLeavesBlock.java | 172 ----- .../unicopia/world/block/GemTorchBlock.java | 157 ---- .../unicopia/world/block/HiveWallBlock.java | 351 --------- .../unicopia/world/block/SlimeDripBlock.java | 245 ------ .../unicopia/world/block/SlimeLayerBlock.java | 36 - .../unicopia/world/block/SmartSlabBlock.java | 85 --- .../world/block/SmartStairsBlock.java | 77 -- .../unicopia/world/block/StickPlantBlock.java | 124 --- .../unicopia/world/block/TallCropBlock.java | 257 ------- .../unicopia/world/block/UBlocks.java | 185 ----- .../unicopia/world/block/UMaterials.java | 12 - .../world/block/WallGemTorchBlock.java | 93 --- .../world/block/gas/CloudAnvilBlock.java | 111 --- .../unicopia/world/block/gas/CloudBlock.java | 113 --- .../world/block/gas/CloudDoorBlock.java | 55 -- .../world/block/gas/CloudFarmlandBlock.java | 102 --- .../world/block/gas/CloudFenceBlock.java | 84 -- .../block/gas/CloudInteractionContext.java | 105 --- .../world/block/gas/CloudSlabBlock.java | 52 -- .../world/block/gas/CloudSoilBlock.java | 20 - .../world/block/gas/CloudStairsBlock.java | 47 -- .../world/block/gas/CoverableCloudBlock.java | 42 - .../unicopia/world/block/gas/Gas.java | 65 -- .../unicopia/world/block/gas/GasState.java | 80 -- .../world/block/gas/PillarCloudBlock.java | 45 -- .../unicopia/world/client/UWorldClient.java | 52 -- .../world/client/gui/BagOfHoldingScreen.java | 147 ---- .../world/client/gui/SpellBookScreen.java | 237 ------ .../unicopia/world/client/gui/UScreens.java | 27 - .../unicopia/world/client/package-info.java | 1 - .../render/ButterflyEntityRenderer.java | 39 - .../client/render/CloudEntityRenderer.java | 78 -- .../client/render/CucoonEntityRenderer.java | 33 - .../client/render/RainbowEntityRenderer.java | 73 -- .../world/client/render/RenderLayers.java | 51 -- .../client/render/SpearEntityRenderer.java | 21 - .../client/render/SpellbookEntityRender.java | 58 -- .../render/SpellcastEntityRenderer.java | 87 --- .../render/model/ButterflyEntityModel.java | 80 -- .../client/render/model/CloudEntityModel.java | 40 - .../render/model/CucoonEntityModel.java | 54 -- .../client/render/model/GemEntityModel.java | 92 --- .../client/render/model/SpellbookModel.java | 82 -- .../container/BagOfHoldingContainer.java | 101 --- .../container/BagOfHoldingInventory.java | 222 ------ .../world/container/HeavyInventory.java | 86 --- .../world/container/SpellBookContainer.java | 187 ----- .../world/container/SpellbookResultSlot.java | 105 --- .../unicopia/world/container/UContainers.java | 19 - .../world/entity/ButterflyEntity.java | 227 ------ .../unicopia/world/entity/CloudEntity.java | 718 ------------------ .../world/entity/ConstructionCloudEntity.java | 112 --- .../unicopia/world/entity/CucoonEntity.java | 314 -------- .../world/entity/FollowCasterGoal.java | 135 ---- .../world/entity/RacingCloudEntity.java | 83 -- .../unicopia/world/entity/RainbowEntity.java | 134 ---- .../unicopia/world/entity/SpearEntity.java | 189 ----- .../world/entity/SpellbookEntity.java | 208 ----- .../world/entity/SpellcastEntity.java | 372 --------- .../unicopia/world/entity/UEntities.java | 102 --- .../world/entity/WildCloudEntity.java | 133 ---- .../world/item/AlicornAmuletItem.java | 321 -------- .../unicopia/world/item/BagOfHoldingItem.java | 143 ---- .../world/item/CastableMagicItem.java | 64 -- .../unicopia/world/item/CloudPlacerItem.java | 76 -- .../world/item/CursedMagicGemItem.java | 58 -- .../world/item/EnchantedStaffItem.java | 147 ---- .../world/item/ExtendedShearsItem.java | 64 -- .../unicopia/world/item/MagicGemItem.java | 200 ----- .../unicopia/world/item/MossItem.java | 44 -- .../unicopia/world/item/RottenTomatoItem.java | 69 -- .../unicopia/world/item/SpearItem.java | 101 --- .../unicopia/world/item/SpellbookItem.java | 79 -- .../unicopia/world/item/StaffItem.java | 102 --- .../unicopia/world/item/StickItem.java | 58 -- .../unicopia/world/item/SugaryItem.java | 28 - .../unicopia/world/item/TomatoItem.java | 21 - .../unicopia/world/item/TomatoSeedsItem.java | 52 -- .../unicopia/world/item/UItems.java | 195 ----- .../unicopia/world/recipe/Pattern.java | 240 ------ .../world/recipe/ShapedSpecialRecipe.java | 100 --- .../world/recipe/ShapelessSpecialRecipe.java | 105 --- .../world/recipe/SpellBookRecipe.java | 122 --- .../unicopia/world/recipe/URecipes.java | 30 - .../unicopia/world/recipe/Utils.java | 82 -- .../recipe/enchanting/CompoundCondition.java | 56 -- .../recipe/enchanting/IConditionFactory.java | 8 - .../enchanting/IPageUnlockListener.java | 12 - .../recipe/enchanting/IUnlockCondition.java | 30 - .../world/recipe/enchanting/IUnlockEvent.java | 5 - .../world/recipe/enchanting/Page.java | 40 - .../world/recipe/enchanting/PageInstance.java | 109 --- .../world/recipe/enchanting/PageOwner.java | 45 -- .../world/recipe/enchanting/PageState.java | 24 - .../recipe/enchanting/PageStateCondition.java | 31 - .../world/recipe/enchanting/Pages.java | 134 ---- .../recipe/enchanting/SpellCraftingEvent.java | 61 -- .../recipe/ingredient/ChoicePredicate.java | 59 -- .../recipe/ingredient/DamagePredicate.java | 92 --- .../ingredient/EnchantmentPredicate.java | 89 --- .../recipe/ingredient/PotionPredicate.java | 88 --- .../world/recipe/ingredient/Predicate.java | 46 -- .../ingredient/PredicateSerializer.java | 49 -- .../ingredient/PredicatedIngredient.java | 121 --- .../recipe/ingredient/SpellPredicate.java | 72 -- .../recipe/ingredient/StackPredicate.java | 105 --- .../world/recipe/ingredient/TagPredicate.java | 91 --- .../recipe/ingredient/ToxicityPredicate.java | 68 -- .../world/structure/CloudDungeonFeature.java | 106 --- .../structure/CustomSaplingGenerator.java | 74 -- .../unicopia/world/structure/RuinFeature.java | 103 --- .../structure/StructureFeatureBuilder.java | 108 --- .../world/structure/StructureRegistry.java | 16 - .../unicopia/world/structure/UStructures.java | 52 -- .../unicopia/advancements/bag_of_holding.json | 23 - .../advancements/bag_of_holding_2.json | 23 - .../advancements/bag_of_holding_3.json | 23 - .../unicopia/advancements/first_staff.json | 30 - .../unicopia/advancements/just_a_stick.json | 28 - .../advancements/just_the_beginning.json | 38 - .../unicopia/blockstates/alfalfa_crops.json | 19 - .../unicopia/blockstates/apple_leaves.json | 6 - .../unicopia/blockstates/apple_sapling.json | 6 - .../unicopia/blockstates/bakery_door.json | 39 - .../chiseled_chitin_shell_block.json | 10 - .../blockstates/chiseled_marble_block.json | 5 - .../blockstates/chitin_shell_block.json | 7 - .../blockstates/chitin_shell_slab.json | 11 - .../blockstates/chitin_shell_stairs.json | 129 ---- .../unicopia/blockstates/cloud_anvil.json | 8 - .../unicopia/blockstates/cloud_block.json | 5 - .../unicopia/blockstates/cloud_farmland.json | 12 - .../unicopia/blockstates/cloud_fence.json | 17 - .../unicopia/blockstates/cloud_slab.json | 7 - .../unicopia/blockstates/cloud_stairs.json | 45 -- .../blockstates/cloudsdale_tomato_plant.json | 12 - .../blockstates/dense_cloud_block.json | 5 - .../blockstates/dense_cloud_pillar.json | 7 - .../blockstates/dense_cloud_slab.json | 7 - .../blockstates/dense_cloud_stairs.json | 45 -- .../unicopia/blockstates/diamond_door.json | 68 -- .../blockstates/enchanted_cloud_block.json | 7 - .../blockstates/enchanted_cloud_slab.json | 11 - .../blockstates/enchanted_cloud_stairs.json | 130 ---- .../unicopia/blockstates/enchanted_torch.json | 6 - .../blockstates/enchanted_wall_torch.json | 12 - .../unicopia/blockstates/flower_pot.json | 7 - .../unicopia/blockstates/hive_wall_block.json | 13 - .../unicopia/blockstates/library_door.json | 68 -- .../blockstates/misted_glass_door.json | 68 -- .../unicopia/blockstates/slime_drip.json | 20 - .../unicopia/blockstates/slime_layer.json | 12 - .../blockstates/smooth_marble_block.json | 5 - .../blockstates/smooth_marble_slab.json | 7 - .../assets/unicopia/blockstates/stick.json | 5 - .../unicopia/blockstates/sugar_block.json | 5 - .../unicopia/blockstates/tomato_plant.json | 12 - .../resources/assets/unicopia/lang/en_us.json | 108 --- .../models/block/alfalfa_crops/shaft.json | 6 - .../models/block/alfalfa_crops/stage0.json | 6 - .../models/block/alfalfa_crops/stage1.json | 6 - .../models/block/alfalfa_crops/stage2.json | 6 - .../models/block/alfalfa_crops/stage3.json | 6 - .../models/block/alfalfa_crops/stage4.json | 6 - .../unicopia/models/block/apple_leaves.json | 6 - .../models/block/apple_leaves_heavy.json | 38 - .../unicopia/models/block/apple_sapling.json | 6 - .../block/chiseled_chitin_shell_block.json | 22 - .../models/block/chiseled_marble_block.json | 7 - .../models/block/chitin_shell_block.json | 22 - .../block/chitin_shell_block_covered.json | 8 - .../models/block/chitin_shell_block_snow.json | 8 - .../block/chitin_shell_inner_stairs.json | 8 - .../chitin_shell_inner_stairs_covered.json | 5 - .../block/chitin_shell_inner_stairs_top.json | 6 - ...chitin_shell_inner_stairs_top_covered.json | 6 - .../block/chitin_shell_outer_stairs.json | 8 - .../chitin_shell_outer_stairs_covered.json | 5 - .../block/chitin_shell_outer_stairs_top.json | 6 - ...chitin_shell_outer_stairs_top_covered.json | 6 - .../models/block/chitin_shell_slab.json | 8 - .../models/block/chitin_shell_slab_top.json | 8 - .../block/chitin_shell_slab_top_covered.json | 8 - .../block/chitin_shell_slab_top_snow.json | 8 - .../models/block/chitin_shell_stairs.json | 8 - .../block/chitin_shell_stairs_covered.json | 5 - .../models/block/chitin_shell_stairs_top.json | 6 - .../chitin_shell_stairs_top_covered.json | 6 - .../unicopia/models/block/cloud_anvil.json | 8 - .../unicopia/models/block/cloud_block.json | 6 - .../unicopia/models/block/cloud_cube.json | 29 - .../models/block/cloud_fence_inventory.json | 69 -- .../models/block/cloud_fence_post.json | 6 - .../models/block/cloud_fence_side.json | 30 - .../models/block/cloud_inner_stairs.json | 50 -- .../models/block/cloud_outer_stairs.json | 53 -- .../unicopia/models/block/cloud_slab.json | 8 - .../unicopia/models/block/cloud_slab_top.json | 8 - .../unicopia/models/block/cloud_stairs.json | 59 -- .../models/block/dense_cloud_block.json | 6 - .../block/dense_cloud_inner_stairs.json | 5 - .../block/dense_cloud_outer_stairs.json | 5 - .../models/block/dense_cloud_pillar.json | 7 - .../models/block/dense_cloud_slab.json | 8 - .../models/block/dense_cloud_slab_top.json | 8 - .../models/block/dense_cloud_stairs.json | 5 - .../models/block/door/bakery_bottom.json | 7 - .../models/block/door/bakery_bottom_rh.json | 7 - .../models/block/door/bakery_top.json | 7 - .../models/block/door/bakery_top_rh.json | 7 - .../unicopia/models/block/door/bottom.json | 19 - .../unicopia/models/block/door/bottom_rh.json | 19 - .../models/block/door/diamond_bottom.json | 7 - .../models/block/door/diamond_bottom_rh.json | 7 - .../models/block/door/diamond_top.json | 7 - .../models/block/door/diamond_top_rh.json | 7 - .../models/block/door/library_bottom.json | 7 - .../models/block/door/library_bottom_rh.json | 7 - .../models/block/door/library_top.json | 7 - .../models/block/door/library_top_rh.json | 7 - .../models/block/door/mist_bottom.json | 7 - .../models/block/door/mist_bottom_rh.json | 7 - .../unicopia/models/block/door/mist_top.json | 7 - .../models/block/door/mist_top_rh.json | 7 - .../unicopia/models/block/door/top.json | 19 - .../unicopia/models/block/door/top_rh.json | 19 - .../models/block/enchanted_cloud_block.json | 8 - .../block/enchanted_cloud_block_covered.json | 8 - .../block/enchanted_cloud_inner_stairs.json | 8 - .../enchanted_cloud_inner_stairs_covered.json | 5 - .../enchanted_cloud_inner_stairs_top.json | 6 - ...hanted_cloud_inner_stairs_top_covered.json | 6 - .../block/enchanted_cloud_outer_stairs.json | 8 - .../enchanted_cloud_outer_stairs_covered.json | 5 - .../enchanted_cloud_outer_stairs_top.json | 6 - ...hanted_cloud_outer_stairs_top_covered.json | 6 - .../models/block/enchanted_cloud_slab.json | 8 - .../block/enchanted_cloud_slab_top.json | 8 - .../enchanted_cloud_slab_top_covered.json | 8 - .../models/block/enchanted_cloud_stairs.json | 8 - .../block/enchanted_cloud_stairs_covered.json | 5 - .../block/enchanted_cloud_stairs_top.json | 6 - .../enchanted_cloud_stairs_top_covered.json | 6 - .../models/block/enchanted_torch.json | 6 - .../models/block/enchanted_torch_lit.json | 6 - .../models/block/enchanted_wall_torch.json | 6 - .../block/enchanted_wall_torch_lit.json | 6 - .../unicopia/models/block/farmland/dry.json | 8 - .../unicopia/models/block/farmland/wet.json | 8 - .../unicopia/models/block/hive_dying.json | 7 - .../unicopia/models/block/hive_growing.json | 7 - .../unicopia/models/block/hive_stable.json | 7 - .../models/block/slime_drip/bulb_stage0.json | 30 - .../models/block/slime_drip/bulb_stage1.json | 30 - .../models/block/slime_drip/bulb_stage2.json | 30 - .../models/block/slime_drip/bulb_stage3.json | 30 - .../models/block/slime_drip/tail_stage0.json | 19 - .../models/block/slime_drip/tail_stage1.json | 19 - .../models/block/slime_drip/tail_stage2.json | 19 - .../models/block/slime_drip/tail_stage3.json | 19 - .../models/block/slime_layer/layer_10.json | 30 - .../models/block/slime_layer/layer_12.json | 30 - .../models/block/slime_layer/layer_14.json | 30 - .../models/block/slime_layer/layer_2.json | 19 - .../models/block/slime_layer/layer_4.json | 19 - .../models/block/slime_layer/layer_6.json | 30 - .../models/block/slime_layer/layer_8.json | 30 - .../models/block/smooth_marble_block.json | 6 - .../models/block/smooth_marble_slab.json | 8 - .../models/block/smooth_marble_slab_top.json | 8 - .../unicopia/models/block/sugar_block.json | 6 - .../models/block/tomato_plant/stage0.json | 20 - .../models/block/tomato_plant/stage1.json | 47 -- .../models/block/tomato_plant/stage2.json | 6 - .../models/block/tomato_plant/stage3.json | 6 - .../models/block/tomato_plant/stage4.json | 6 - .../unicopia/models/block/torch_tall.json | 20 - .../models/block/torch_tall_wall.json | 35 - .../unicopia/models/item/alfalfa_leaves.json | 6 - .../unicopia/models/item/alfalfa_seeds.json | 6 - .../unicopia/models/item/alicorn_amulet.json | 18 - .../unicopia/models/item/apple_cider.json | 6 - .../unicopia/models/item/apple_leaves.json | 3 - .../unicopia/models/item/apple_seeds.json | 6 - .../unicopia/models/item/bag_of_holding.json | 6 - .../unicopia/models/item/bakery_door.json | 6 - .../unicopia/models/item/boop_o_roops.json | 6 - .../unicopia/models/item/burned_juice.json | 6 - .../models/item/butterfly_spawn_egg.json | 3 - .../assets/unicopia/models/item/cereal.json | 6 - .../item/chiseled_chitin_shell_block.json | 3 - .../models/item/chiseled_marble_block.json | 10 - .../unicopia/models/item/chitin_shell.json | 6 - .../models/item/chitin_shell_block.json | 3 - .../models/item/chitin_shell_slab.json | 10 - .../models/item/chitin_shell_stairs.json | 3 - .../unicopia/models/item/cloud_anvil.json | 3 - .../unicopia/models/item/cloud_block.json | 10 - .../unicopia/models/item/cloud_farmland.json | 3 - .../unicopia/models/item/cloud_fence.json | 3 - .../unicopia/models/item/cloud_matter.json | 18 - .../unicopia/models/item/cloud_slab.json | 10 - .../unicopia/models/item/cloud_spawn_egg.json | 3 - .../unicopia/models/item/cloud_stairs.json | 3 - .../models/item/cloudsdale_tomato.json | 6 - .../item/construction_cloud_spawner.json | 6 - .../unicopia/models/item/corrupted_gem.json | 19 - .../assets/unicopia/models/item/cucoon.json | 6 - .../models/item/daffodil_daisy_sandwich.json | 6 - .../models/item/dense_cloud_block.json | 10 - .../models/item/dense_cloud_pillar.json | 10 - .../models/item/dense_cloud_slab.json | 10 - .../models/item/dense_cloud_stairs.json | 3 - .../assets/unicopia/models/item/dew_drop.json | 18 - .../unicopia/models/item/diamond_door.json | 6 - .../models/item/enchanted_cloud_block.json | 10 - .../models/item/enchanted_cloud_slab.json | 10 - .../models/item/enchanted_cloud_stairs.json | 3 - .../unicopia/models/item/enchanted_torch.json | 6 - .../assets/unicopia/models/item/gem.json | 19 - .../unicopia/models/item/handheld_staff.json | 25 - .../unicopia/models/item/hay_burger.json | 6 - .../unicopia/models/item/hay_fries.json | 6 - .../unicopia/models/item/hive_wall_block.json | 3 - .../assets/unicopia/models/item/juice.json | 6 - .../unicopia/models/item/library_door.json | 6 - .../models/item/meadow_brook_staff.json | 6 - .../models/item/misted_glass_door.json | 6 - .../assets/unicopia/models/item/moss.json | 6 - .../assets/unicopia/models/item/mug.json | 28 - .../models/item/racing_cloud_spawner.json | 6 - .../models/item/remembrance_staff.json | 6 - .../models/item/rotten_cloudsdale_tomato.json | 6 - .../unicopia/models/item/rotten_tomato.json | 6 - .../assets/unicopia/models/item/salad.json | 6 - .../unicopia/models/item/slime_layer.json | 3 - .../models/item/smooth_marble_block.json | 10 - .../models/item/smooth_marble_slab.json | 10 - .../assets/unicopia/models/item/spear.json | 6 - .../unicopia/models/item/spellbook.json | 6 - .../unicopia/models/item/sugar_block.json | 3 - .../assets/unicopia/models/item/tomato.json | 6 - .../unicopia/models/item/tomato_seeds.json | 6 - .../unicopia/models/item/wheat_worms.json | 6 - .../models/item/wild_cloud_spawner.json | 6 - .../unicopia/sounds/cicada/cicada_4.ogg | Bin 60898 -> 0 bytes .../unicopia/sounds/cicada/cicada_5.ogg | Bin 26866 -> 0 bytes .../unicopia/sounds/cicada/cicada_6.ogg | Bin 40139 -> 0 bytes .../unicopia/sounds/insect/insect_1.ogg | Bin 19361 -> 0 bytes .../unicopia/sounds/insect/insect_2.ogg | Bin 61348 -> 0 bytes .../unicopia/sounds/insect/insect_3.ogg | Bin 97449 -> 0 bytes .../assets/unicopia/sounds/slime/advance.ogg | Bin 9669 -> 0 bytes .../assets/unicopia/sounds/slime/retract.ogg | Bin 15796 -> 0 bytes .../textures/blocks/alfalfa/shaft.png | Bin 638 -> 0 bytes .../textures/blocks/alfalfa/stage_0.png | Bin 474 -> 0 bytes .../textures/blocks/alfalfa/stage_1.png | Bin 165 -> 0 bytes .../textures/blocks/alfalfa/stage_2.png | Bin 495 -> 0 bytes .../textures/blocks/alfalfa/stage_3.png | Bin 486 -> 0 bytes .../textures/blocks/alfalfa/stage_4.png | Bin 689 -> 0 bytes .../textures/blocks/bakery_door_lower.png | Bin 590 -> 0 bytes .../textures/blocks/bakery_door_upper.png | Bin 502 -> 0 bytes .../textures/blocks/chiseled_cloud.png | Bin 3358 -> 0 bytes .../blocks/chiseled_marble_block_side.png | Bin 3142 -> 0 bytes .../textures/blocks/chitin_block_bottom.png | Bin 3488 -> 0 bytes .../blocks/chitin_block_chissled_full.png | Bin 3365 -> 0 bytes .../blocks/chitin_block_chissled_half.png | Bin 3368 -> 0 bytes .../textures/blocks/chitin_block_covered.png | Bin 3344 -> 0 bytes .../blocks/chitin_block_snow_covered.png | Bin 3406 -> 0 bytes .../textures/blocks/chitin_block_spike.png | Bin 3391 -> 0 bytes .../textures/blocks/chitin_block_top.png | Bin 3383 -> 0 bytes .../blocks/chitin_block_uncovered.png | Bin 3378 -> 0 bytes .../chitin_shell_slab_side_uncovered.png | Bin 3240 -> 0 bytes .../unicopia/textures/blocks/cloud_block.png | Bin 3405 -> 0 bytes .../textures/blocks/cloud_farmland_dry.png | Bin 3082 -> 0 bytes .../textures/blocks/cloud_farmland_wet.png | Bin 3076 -> 0 bytes .../textures/blocks/dense_cloud_block.png | Bin 2971 -> 0 bytes .../textures/blocks/dense_cloud_pillar.png | Bin 3052 -> 0 bytes .../blocks/dense_cloud_pillar_end.png | Bin 3084 -> 0 bytes .../textures/blocks/diamond_door_lower.png | Bin 537 -> 0 bytes .../textures/blocks/diamond_door_upper.png | Bin 886 -> 0 bytes .../blocks/diamond_door_upper.png.mcmeta | 11 - .../textures/blocks/enchanted_cloud_block.png | Bin 3413 -> 0 bytes .../blocks/enchanted_cloud_block_bottom.png | Bin 3444 -> 0 bytes .../blocks/enchanted_cloud_block_top.png | Bin 3369 -> 0 bytes .../blocks/enchanted_cloud_slab_side.png | Bin 3072 -> 0 bytes .../textures/blocks/enchanted_torch.png | Bin 194 -> 0 bytes .../textures/blocks/enchanted_torch_lit.png | Bin 201 -> 0 bytes .../unicopia/textures/blocks/hive_dying.png | Bin 3586 -> 0 bytes .../unicopia/textures/blocks/hive_end.png | Bin 3543 -> 0 bytes .../unicopia/textures/blocks/hive_growing.png | Bin 4095 -> 0 bytes .../textures/blocks/hive_growing.png.mcmeta | 11 - .../unicopia/textures/blocks/hive_stable.png | Bin 3538 -> 0 bytes .../unicopia/textures/blocks/leaves_apple.png | Bin 499 -> 0 bytes .../textures/blocks/library_door_lower.png | Bin 610 -> 0 bytes .../textures/blocks/library_door_upper.png | Bin 631 -> 0 bytes .../blocks/misted_glass_door_lower.png | Bin 2948 -> 0 bytes .../blocks/misted_glass_door_upper.png | Bin 3009 -> 0 bytes .../textures/blocks/sapling_apple.png | Bin 604 -> 0 bytes .../unicopia/textures/blocks/slime_bulb.png | Bin 3436 -> 0 bytes .../unicopia/textures/blocks/slime_tail.png | Bin 3279 -> 0 bytes .../textures/blocks/smooth_marble_block.png | Bin 2912 -> 0 bytes .../assets/unicopia/textures/blocks/stick.png | Bin 2948 -> 0 bytes .../unicopia/textures/blocks/sugar_block.png | Bin 3240 -> 0 bytes .../textures/blocks/tomato_plant/stage_1.png | Bin 3021 -> 0 bytes .../textures/blocks/tomato_plant/stage_2.png | Bin 3215 -> 0 bytes .../textures/blocks/tomato_plant/stage_3.png | Bin 3218 -> 0 bytes .../textures/blocks/tomato_plant/stage_4.png | Bin 3218 -> 0 bytes .../textures/entity/butterfly/blue.png | Bin 2923 -> 0 bytes .../textures/entity/butterfly/brimstone.png | Bin 3362 -> 0 bytes .../textures/entity/butterfly/butterfly.png | Bin 2855 -> 0 bytes .../textures/entity/butterfly/green.png | Bin 2907 -> 0 bytes .../textures/entity/butterfly/hedylidae.png | Bin 3419 -> 0 bytes .../textures/entity/butterfly/lime.png | Bin 3389 -> 0 bytes .../textures/entity/butterfly/lycaenidae.png | Bin 3490 -> 0 bytes .../textures/entity/butterfly/magenta.png | Bin 2890 -> 0 bytes .../textures/entity/butterfly/monarch.png | Bin 3537 -> 0 bytes .../textures/entity/butterfly/nymphalidae.png | Bin 3437 -> 0 bytes .../textures/entity/butterfly/pink.png | Bin 2911 -> 0 bytes .../textures/entity/butterfly/purple.png | Bin 2898 -> 0 bytes .../textures/entity/butterfly/red.png | Bin 2912 -> 0 bytes .../entity/butterfly/white_monarch.png | Bin 3537 -> 0 bytes .../textures/entity/butterfly/yellow.png | Bin 2927 -> 0 bytes .../textures/entity/cloud_spawner.png | Bin 2965 -> 0 bytes .../unicopia/textures/entity/clouds.png | Bin 6216 -> 0 bytes .../unicopia/textures/entity/clouds_storm.png | Bin 6251 -> 0 bytes .../unicopia/textures/entity/cucoon.png | Bin 3436 -> 0 bytes .../textures/entity/enchanting_table_book.png | Bin 1015 -> 0 bytes .../entity/enchanting_table_book_blue.png | Bin 471 -> 0 bytes .../assets/unicopia/textures/entity/gem.png | Bin 28136 -> 0 bytes .../textures/entity/projectiles/spear.png | Bin 191 -> 0 bytes .../unicopia/textures/environment/rainbow.png | Bin 11349 -> 0 bytes .../unicopia/textures/gui/container/book.png | Bin 64780 -> 0 bytes .../unicopia/textures/item/alfalfa_leaves.png | Bin 3022 -> 0 bytes .../unicopia/textures/item/alfalfa_seeds.png | Bin 241 -> 0 bytes .../unicopia/textures/item/alicorn_amulet.png | Bin 549 -> 0 bytes .../unicopia/textures/item/apple_cider.png | Bin 3070 -> 0 bytes .../unicopia/textures/item/apple_seeds.png | Bin 3253 -> 0 bytes .../unicopia/textures/item/apple_zap.png | Bin 3376 -> 0 bytes .../unicopia/textures/item/bag_of_holding.png | Bin 3107 -> 0 bytes .../unicopia/textures/item/bakery_door.png | Bin 185 -> 0 bytes .../unicopia/textures/item/boop_o_roops.png | Bin 264 -> 0 bytes .../unicopia/textures/item/burned_juice.png | Bin 197 -> 0 bytes .../assets/unicopia/textures/item/cereal.png | Bin 304 -> 0 bytes .../unicopia/textures/item/chitin_shell.png | Bin 3224 -> 0 bytes .../unicopia/textures/item/cloud_matter.png | Bin 3188 -> 0 bytes .../textures/item/cooked_zap_apple.png | Bin 3455 -> 0 bytes .../unicopia/textures/item/corrupted_gem.png | Bin 543 -> 0 bytes .../textures/item/corrupted_gem_overlay.png | Bin 543 -> 0 bytes .../assets/unicopia/textures/item/cucoon.png | Bin 3273 -> 0 bytes .../textures/item/daffodil_daisy_sandwich.png | Bin 3233 -> 0 bytes .../unicopia/textures/item/dew_drop.png | Bin 145 -> 0 bytes .../unicopia/textures/item/diamond_door.png | Bin 219 -> 0 bytes .../unicopia/textures/item/empty_gem_slot.png | Bin 439 -> 0 bytes .../assets/unicopia/textures/item/gem.png | Bin 603 -> 0 bytes .../unicopia/textures/item/gem_overlay.png | Bin 603 -> 0 bytes .../unicopia/textures/item/hay_burger.png | Bin 3188 -> 0 bytes .../unicopia/textures/item/hay_fries.png | Bin 3195 -> 0 bytes .../assets/unicopia/textures/item/juice.png | Bin 271 -> 0 bytes .../unicopia/textures/item/library_door.png | Bin 218 -> 0 bytes .../textures/item/meadow_brook_staff.png | Bin 3216 -> 0 bytes .../textures/item/misted_glass_door.png | Bin 245 -> 0 bytes .../assets/unicopia/textures/item/moss.png | Bin 3092 -> 0 bytes .../assets/unicopia/textures/item/mug.png | Bin 3044 -> 0 bytes .../textures/item/remembrance_staff.png | Bin 3244 -> 0 bytes .../unicopia/textures/item/rotten_tomato.png | Bin 3184 -> 0 bytes .../assets/unicopia/textures/item/salad.png | Bin 314 -> 0 bytes .../unicopia/textures/item/spellbook.png | Bin 3278 -> 0 bytes .../assets/unicopia/textures/item/tomato.png | Bin 3119 -> 0 bytes .../unicopia/textures/item/tomato_seeds.png | Bin 3239 -> 0 bytes .../unicopia/textures/item/wheat_worms.png | Bin 528 -> 0 bytes .../unicopia/textures/item/wooden_spear.png | Bin 3199 -> 0 bytes .../textures/items/alicorn_amulet_overlay.png | Bin 603 -> 0 bytes .../textures/models/armor/alicorn_amulet.png | Bin 550 -> 0 bytes .../textures/pages/chapter_1_gems.png | Bin 59527 -> 0 bytes .../unicopia/textures/pages/preface.png | Bin 33238 -> 0 bytes .../data/minecraft/tags/blocks/anvil.json | 6 - .../data/minecraft/tags/blocks/climbable.json | 6 - .../data/minecraft/tags/blocks/doors.json | 7 - .../data/minecraft/tags/blocks/fences.json | 6 - .../data/minecraft/tags/blocks/leaves.json | 6 - .../data/minecraft/tags/blocks/slabs.json | 10 - .../data/minecraft/tags/blocks/stairs.json | 9 - .../minecraft/tags/blocks/wooden_doors.json | 7 - .../data/minecraft/tags/items/anvil.json | 6 - .../data/minecraft/tags/items/doors.json | 7 - .../data/minecraft/tags/items/fences.json | 6 - .../data/minecraft/tags/items/leaves.json | 6 - .../data/minecraft/tags/items/slabs.json | 10 - .../data/minecraft/tags/items/stairs.json | 9 - .../minecraft/tags/items/wooden_doors.json | 7 - .../loot_tables/blocks/alfalfa_crops.json | 84 -- .../loot_tables/blocks/apple_leaves.json | 182 ----- .../loot_tables/blocks/apple_sapling.json | 19 - .../loot_tables/blocks/bakery_door.json | 28 - .../blocks/chiseled_chitin_shell_block.json | 14 - .../blocks/chiseled_marble_block.json | 23 - .../loot_tables/blocks/chitin_block.json | 38 - .../blocks/chitin_shell_block.json | 47 -- .../loot_tables/blocks/chitin_shell_slab.json | 11 - .../blocks/chitin_shell_stairs.json | 11 - .../loot_tables/blocks/cloud_anvil.json | 11 - .../loot_tables/blocks/cloud_block.json | 11 - .../loot_tables/blocks/cloud_farmland.json | 11 - .../loot_tables/blocks/cloud_fence.json | 11 - .../loot_tables/blocks/cloud_slab.json | 11 - .../loot_tables/blocks/cloud_stairs.json | 11 - .../blocks/cloudsdale_tomato_plant.json | 93 --- .../loot_tables/blocks/dense_cloud_block.json | 11 - .../blocks/dense_cloud_pillar.json | 11 - .../loot_tables/blocks/dense_cloud_slab.json | 11 - .../blocks/dense_cloud_stairs.json | 11 - .../loot_tables/blocks/diamond_door.json | 28 - .../blocks/enchanted_cloud_block.json | 11 - .../blocks/enchanted_cloud_slab.json | 11 - .../blocks/enchanted_cloud_stairs.json | 11 - .../loot_tables/blocks/enchanted_torch.json | 18 - .../blocks/enchanted_wall_torch.json | 18 - .../loot_tables/blocks/hive_wall_block.json | 42 - .../loot_tables/blocks/library_door.json | 28 - .../loot_tables/blocks/misted_glass_door.json | 11 - .../loot_tables/blocks/slime_drip.json | 60 -- .../loot_tables/blocks/slime_layer.json | 23 - .../blocks/smooth_marble_block.json | 23 - .../blocks/smooth_marble_slab.json | 23 - .../unicopia/loot_tables/blocks/stick.json | 11 - .../loot_tables/blocks/sugar_block.json | 38 - .../loot_tables/blocks/tomato_plant.json | 93 --- .../unicopia/loot_tables/entities/cloud.json | 52 -- .../loot_tables/entities/racing_cloud.json | 52 -- .../loot_tables/entities/wild_cloud.json | 52 -- .../data/unicopia/pages/chapter_1_gems.json | 9 - .../data/unicopia/pages/preface.json | 8 - .../data/unicopia/recipes/apple_cider.json | 23 - .../data/unicopia/recipes/apple_seeds.json | 7 - .../data/unicopia/recipes/bag_of_holding.json | 20 - .../data/unicopia/recipes/bakery_door.json | 17 - .../data/unicopia/recipes/boop_o_roops.json | 17 - .../data/unicopia/recipes/burned_juice.json | 9 - .../data/unicopia/recipes/cereal.json | 10 - .../recipes/chiseled_chitin_shell_block.json | 14 - .../recipes/chiseled_marble_block.json | 13 - .../data/unicopia/recipes/chitin_shell.json | 9 - .../unicopia/recipes/chitin_shell_block.json | 15 - .../chitin_shell_block_to_chitin_shell.json | 7 - .../unicopia/recipes/chitin_shell_slab.json | 12 - .../unicopia/recipes/chitin_shell_stairs.json | 14 - .../data/unicopia/recipes/cloud_anvil.json | 14 - .../data/unicopia/recipes/cloud_block.json | 13 - .../recipes/cloud_block_to_cloud_matter.json | 7 - .../data/unicopia/recipes/cloud_fence.json | 14 - .../data/unicopia/recipes/cloud_slab.json | 12 - .../data/unicopia/recipes/cloud_stairs.json | 14 - .../recipes/construction_cloud_spawner.json | 17 - .../unicopia/recipes/cooked_zap_apple.json | 9 - .../data/unicopia/recipes/cucoon.json | 17 - .../recipes/daffodil_daisy_sandwich_safe.json | 17 - .../daffodil_daisy_sandwich_toxic.json | 18 - .../unicopia/recipes/dense_cloud_block.json | 13 - .../unicopia/recipes/dense_cloud_pillar.json | 14 - .../unicopia/recipes/dense_cloud_slab.json | 12 - .../unicopia/recipes/dense_cloud_stairs.json | 14 - .../data/unicopia/recipes/diamond_door.json | 14 - .../recipes/enchanted_cloud_block.json | 23 - .../recipes/enchanted_cloud_slab.json | 12 - .../recipes/enchanted_cloud_stairs.json | 14 - .../unicopia/recipes/enchanted_torch.json | 16 - .../recipes/enchantments/alicorn_amulet.json | 10 - .../recipes/enchantments/awkward.json | 16 - .../unicopia/recipes/enchantments/charge.json | 10 - .../unicopia/recipes/enchantments/fire.json | 10 - .../unicopia/recipes/enchantments/flame.json | 10 - .../unicopia/recipes/enchantments/ice.json | 10 - .../recipes/enchantments/inferno.json | 10 - .../unicopia/recipes/enchantments/light.json | 10 - .../enchantments/music_disc_crusade.json | 12 - .../recipes/enchantments/music_disc_funk.json | 12 - .../recipes/enchantments/music_disc_pet.json | 12 - .../enchantments/music_disc_popular.json | 12 - .../enchantments/music_disc_shuffle.json | 12 - .../recipes/enchantments/necromancy.json | 10 - .../unicopia/recipes/enchantments/pilon.json | 10 - .../unicopia/recipes/enchantments/portal.json | 11 - .../recipes/enchantments/repulsion.json | 14 - .../unicopia/recipes/enchantments/reveal.json | 10 - .../unicopia/recipes/enchantments/shield.json | 10 - .../unicopia/recipes/enchantments/siphon.json | 11 - .../recipes/enchantments/suffering.json | 10 - .../unicopia/recipes/enchantments/vortex.json | 10 - .../unicopia/recipes/flim_flam_cider.json | 23 - .../resources/data/unicopia/recipes/gem.json | 35 - .../data/unicopia/recipes/gem_repair.json | 14 - .../unicopia/recipes/hay_burger_safe.json | 21 - .../unicopia/recipes/hay_burger_toxic.json | 24 - .../data/unicopia/recipes/hay_fries.json | 14 - .../data/unicopia/recipes/juice.json | 18 - .../data/unicopia/recipes/library_door.json | 17 - .../unicopia/recipes/meadow_brook_staff.json | 17 - .../unicopia/recipes/misted_glass_door.json | 14 - .../unicopia/recipes/moss_to_green_dye.json | 12 - .../resources/data/unicopia/recipes/mug.json | 17 - .../recipes/racing_cloud_spawner.json | 16 - .../unicopia/recipes/remembrance_staff.json | 22 - .../data/unicopia/recipes/salad_fair.json | 19 - .../data/unicopia/recipes/salad_lethal.json | 24 - .../data/unicopia/recipes/salad_safe.json | 18 - .../data/unicopia/recipes/salad_severe.json | 21 - .../data/unicopia/recipes/slime_ball.json | 14 - .../data/unicopia/recipes/slime_layer.json | 12 - .../unicopia/recipes/smooth_marble_block.json | 14 - .../unicopia/recipes/smooth_marble_slab.json | 13 - .../data/unicopia/recipes/spellbook.json | 8 - .../data/unicopia/recipes/sugar_block.json | 14 - .../recipes/sugar_block_to_sugar.json | 7 - .../data/unicopia/recipes/tomato_seeds.json | 7 - .../unicopia/recipes/trick_green_apple.json | 11 - .../unicopia/recipes/trick_red_apple.json | 11 - .../unicopia/recipes/trick_sour_apple.json | 11 - .../unicopia/recipes/trick_sweet_apple.json | 11 - .../unicopia/recipes/trick_zap_apple.json | 11 - .../data/unicopia/recipes/water_bottle.json | 20 - .../data/unicopia/recipes/water_bucket.json | 17 - .../unicopia/recipes/wild_cloud_spawner.json | 14 - .../data/unicopia/structures/cloud/center.nbt | Bin 21761 -> 0 bytes .../structures/cloud/huge_ruin/four.nbt | Bin 11002 -> 0 bytes .../structures/cloud/huge_ruin/one.nbt | Bin 17990 -> 0 bytes .../structures/cloud/huge_ruin/three.nbt | Bin 14771 -> 0 bytes .../structures/cloud/huge_ruin/two.nbt | Bin 17550 -> 0 bytes .../data/unicopia/structures/cloud/island.nbt | Bin 688 -> 0 bytes .../unicopia/structures/cloud/large_ruin.nbt | Bin 10383 -> 0 bytes .../structures/cloud/ruin_segment.nbt | Bin 2272 -> 0 bytes .../data/unicopia/structures/cloud/small.nbt | Bin 4409 -> 0 bytes .../structures/ground/temple_with_book.nbt | Bin 1224 -> 0 bytes .../structures/ground/temple_without_book.nbt | Bin 658 -> 0 bytes .../data/unicopia/structures/ground/tower.nbt | Bin 2362 -> 0 bytes .../structures/ground/wizard_tower_blue.nbt | Bin 7188 -> 0 bytes .../structures/ground/wizard_tower_red.nbt | Bin 6463 -> 0 bytes .../tags/items/apple_bloom_spirit.json | 9 - .../unicopia/tags/items/cursed_artefacts.json | 6 - .../unicopia/tags/items/dark_elementals.json | 14 - .../unicopia/tags/items/death_elementals.json | 12 - .../unicopia/tags/items/fire_elementals.json | 11 - .../unicopia/tags/items/fresh_tomatoes.json | 7 - .../tags/items/hammerspace_immune.json | 23 - .../tags/items/harmonic_elementals.json | 10 - .../unicopia/tags/items/ice_elementals.json | 8 - .../tags/items/knowledge_elementals.json | 9 - .../unicopia/tags/items/life_elementals.json | 13 - .../unicopia/tags/items/light_elementals.json | 7 - .../tags/items/rotting_elementals.json | 12 - .../unicopia/tags/items/scootaloo_spirit.json | 9 - .../data/unicopia/tags/items/shards.json | 8 - .../data/unicopia/tags/items/shells.json | 9 - .../unicopia/tags/items/sight_elementals.json | 9 - .../unicopia/tags/items/sound_elementals.json | 6 - .../tags/items/sweetie_belle_spirit.json | 8 - .../unicopiamc/loot_tables/blocks/clay.json | 36 - .../unicopiamc/loot_tables/blocks/dirt.json | 36 - .../unicopiamc/loot_tables/blocks/grass.json | 74 -- .../loot_tables/blocks/grass_block.json | 36 - .../loot_tables/blocks/grass_path.json | 36 - .../loot_tables/blocks/large_fern.json | 74 -- .../unicopiamc/loot_tables/blocks/stone.json | 51 -- .../loot_tables/blocks/tall_grass.json | 74 -- src/main/resources/unicopia.mixin.json | 16 +- unicopia notes.txt | 163 ---- 851 files changed, 506 insertions(+), 22435 deletions(-) delete mode 100644 book.xcf delete mode 100644 rainbow.svg delete mode 100644 src/main/java/com/minelittlepony/unicopia/InAnimate.java create mode 100644 src/main/java/com/minelittlepony/unicopia/UEntities.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/ability/PegasusCloudInteractionAbility.java rename src/main/java/com/minelittlepony/unicopia/{ => ability}/magic/Affine.java (79%) rename src/main/java/com/minelittlepony/unicopia/{ => ability}/magic/Affinity.java (96%) rename src/main/java/com/minelittlepony/unicopia/{ => ability}/magic/AttachableSpell.java (92%) rename src/main/java/com/minelittlepony/unicopia/{ => ability}/magic/Caster.java (80%) rename src/main/java/com/minelittlepony/unicopia/{ => ability}/magic/CasterUtils.java (58%) rename src/main/java/com/minelittlepony/unicopia/{ => ability}/magic/Levelled.java (91%) rename src/main/java/com/minelittlepony/unicopia/{ => ability}/magic/Magical.java (74%) rename src/main/java/com/minelittlepony/unicopia/{ => ability}/magic/Spell.java (95%) rename src/main/java/com/minelittlepony/unicopia/{ => ability}/magic/Suppressable.java (90%) rename src/main/java/com/minelittlepony/unicopia/{ => ability}/magic/ThrowableSpell.java (65%) rename src/main/java/com/minelittlepony/unicopia/{ => ability}/magic/spell/AbstractRangedAreaSpell.java (83%) rename src/main/java/com/minelittlepony/unicopia/{ => ability}/magic/spell/AbstractSpell.java (86%) rename src/main/java/com/minelittlepony/unicopia/{ => ability}/magic/spell/AttractiveSpell.java (76%) rename src/main/java/com/minelittlepony/unicopia/{ => ability}/magic/spell/AwkwardSpell.java (69%) rename src/main/java/com/minelittlepony/unicopia/{ => ability}/magic/spell/DisguiseSpell.java (95%) rename src/main/java/com/minelittlepony/unicopia/{ => ability}/magic/spell/FireSpell.java (74%) rename src/main/java/com/minelittlepony/unicopia/{ => ability}/magic/spell/GenericSpell.java (76%) rename src/main/java/com/minelittlepony/unicopia/{ => ability}/magic/spell/IceSpell.java (54%) rename src/main/java/com/minelittlepony/unicopia/{ => ability}/magic/spell/InfernoSpell.java (78%) rename src/main/java/com/minelittlepony/unicopia/{ => ability}/magic/spell/NecromancySpell.java (94%) rename src/main/java/com/minelittlepony/unicopia/{ => ability}/magic/spell/RevealingSpell.java (80%) rename src/main/java/com/minelittlepony/unicopia/{ => ability}/magic/spell/ScorchSpell.java (83%) rename src/main/java/com/minelittlepony/unicopia/{ => ability}/magic/spell/ShieldSpell.java (88%) rename src/main/java/com/minelittlepony/unicopia/{ => ability}/magic/spell/SiphoningSpell.java (91%) rename src/main/java/com/minelittlepony/unicopia/{ => ability}/magic/spell/SpellRegistry.java (70%) create mode 100644 src/main/java/com/minelittlepony/unicopia/ability/magic/spell/package-info.java rename src/main/java/com/minelittlepony/unicopia/{util/blockstate => block/state}/BlockStateConverter.java (93%) rename src/main/java/com/minelittlepony/unicopia/{util/blockstate => block/state}/BlockStateMap.java (96%) rename src/main/java/com/minelittlepony/unicopia/{util/blockstate => block/state}/ReversableBlockStateConverter.java (69%) rename src/main/java/com/minelittlepony/unicopia/{util/blockstate => block/state}/ReversableBlockStateMap.java (89%) rename src/main/java/com/minelittlepony/unicopia/{util/blockstate => block/state}/StateMapping.java (98%) rename src/main/java/com/minelittlepony/unicopia/{util/blockstate => block/state}/StateMaps.java (98%) rename src/main/java/com/minelittlepony/unicopia/{world => }/client/gui/SettingsScreen.java (93%) rename src/main/java/com/minelittlepony/unicopia/{world => }/client/gui/UHud.java (95%) create mode 100644 src/main/java/com/minelittlepony/unicopia/client/render/RenderLayers.java rename src/main/java/com/minelittlepony/unicopia/{world => }/client/render/WorldRenderDelegate.java (91%) delete mode 100644 src/main/java/com/minelittlepony/unicopia/ducks/Colourful.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/ducks/Farmland.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/ducks/PickedItemSupplier.java rename src/main/java/com/minelittlepony/unicopia/{equine => entity}/Creature.java (84%) rename src/main/java/com/minelittlepony/unicopia/{equine => entity}/EntityPhysics.java (94%) rename src/main/java/com/minelittlepony/unicopia/{equine/Ponylike.java => entity/Equine.java} (83%) rename src/main/java/com/minelittlepony/unicopia/{ducks => entity}/IItemEntity.java (53%) rename src/main/java/com/minelittlepony/unicopia/{equine => entity}/ItemImpl.java (93%) rename src/main/java/com/minelittlepony/unicopia/{equine => entity}/Physics.java (92%) rename src/main/java/com/minelittlepony/unicopia/{ducks => entity}/PonyContainer.java (65%) rename src/main/java/com/minelittlepony/unicopia/{equine => entity}/Trap.java (71%) rename src/main/java/com/minelittlepony/unicopia/{equine => entity}/player/Aeronautics.java (96%) rename src/main/java/com/minelittlepony/unicopia/{equine => entity}/player/MagicReserves.java (94%) rename src/main/java/com/minelittlepony/unicopia/{equine => entity}/player/ManaContainer.java (94%) rename src/main/java/com/minelittlepony/unicopia/{equine => entity}/player/Motion.java (85%) rename src/main/java/com/minelittlepony/unicopia/{equine => entity}/player/PlayerAttributes.java (92%) rename src/main/java/com/minelittlepony/unicopia/{equine => entity}/player/PlayerCamera.java (97%) rename src/main/java/com/minelittlepony/unicopia/{equine => entity}/player/PlayerDimensions.java (96%) rename src/main/java/com/minelittlepony/unicopia/{equine => entity}/player/PlayerPhysics.java (96%) rename src/main/java/com/minelittlepony/unicopia/{equine => entity}/player/Pony.java (78%) rename src/main/java/com/minelittlepony/unicopia/{util => entity/player}/dummy/DummyClientPlayerEntity.java (97%) rename src/main/java/com/minelittlepony/unicopia/{util => entity/player}/dummy/DummyPlayerEntity.java (90%) rename src/main/java/com/minelittlepony/unicopia/{util => entity/player}/dummy/DummyServerPlayerEntity.java (95%) delete mode 100644 src/main/java/com/minelittlepony/unicopia/equine/player/PlayerInventory.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/equine/player/PlayerPageStats.java rename src/main/java/com/minelittlepony/unicopia/{world => }/item/AppleItem.java (91%) rename src/main/java/com/minelittlepony/unicopia/{world => }/item/PredicatedBlockItem.java (96%) rename src/main/java/com/minelittlepony/unicopia/{world => }/item/RottenAppleItem.java (78%) create mode 100644 src/main/java/com/minelittlepony/unicopia/item/UItems.java rename src/main/java/com/minelittlepony/unicopia/{world => }/item/VanillaOverrides.java (73%) rename src/main/java/com/minelittlepony/unicopia/{world => }/item/ZapAppleItem.java (91%) rename src/main/java/com/minelittlepony/unicopia/{ => item}/toxin/Toxic.java (95%) rename src/main/java/com/minelittlepony/unicopia/{ => item}/toxin/ToxicHolder.java (75%) rename src/main/java/com/minelittlepony/unicopia/{ => item}/toxin/ToxicItem.java (97%) rename src/main/java/com/minelittlepony/unicopia/{ => item}/toxin/Toxicity.java (98%) rename src/main/java/com/minelittlepony/unicopia/{ => item}/toxin/Toxics.java (98%) rename src/main/java/com/minelittlepony/unicopia/{ => item}/toxin/Toxin.java (98%) rename src/main/java/com/minelittlepony/unicopia/{ => item}/toxin/UEffects.java (95%) rename src/main/java/com/minelittlepony/unicopia/{ => item}/toxin/UFoodComponents.java (96%) delete mode 100644 src/main/java/com/minelittlepony/unicopia/magic/AffineItem.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/magic/CastResult.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/magic/DispenceableSpell.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/magic/Dispensable.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/magic/EtherialListener.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/magic/HeldSpell.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/magic/Useable.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/magic/spell/AbstractLinkedSpell.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/magic/spell/ChangelingTrapSpell.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/magic/spell/ChargingSpell.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/magic/spell/DarknessSpell.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/magic/spell/FlameSpell.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/magic/spell/GlowingSpell.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/magic/spell/PortalSpell.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/magic/spell/package-info.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/mixin/CriterionsRegistry.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/mixin/MixinEntityContextImpl.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/mixin/MixinFallingBlock.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/mixin/MixinFarmlandBlock.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/mixin/MixinHoeItem.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/mixin/MixinStructureFeature.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/mixin/MixinStructuresConfig.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/mixin/Walker.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/mixin/client/DefaultTexturesRegistry.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/mixin/client/MixinMinecraftClient.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/network/MsgSpawnRainbow.java rename src/main/java/com/minelittlepony/unicopia/{particles => particle}/DiskParticleEffect.java (97%) rename src/main/java/com/minelittlepony/unicopia/{particles => particle}/MagicParticleEffect.java (98%) rename src/main/java/com/minelittlepony/unicopia/{particles => particle}/ParticleEmitter.java (98%) rename src/main/java/com/minelittlepony/unicopia/{particles => particle}/ParticleHandle.java (95%) rename src/main/java/com/minelittlepony/unicopia/{particles => particle}/ParticleSource.java (96%) rename src/main/java/com/minelittlepony/unicopia/{particles => particle}/ParticleSpawner.java (80%) rename src/main/java/com/minelittlepony/unicopia/{particles => particle}/ParticleUtils.java (95%) rename src/main/java/com/minelittlepony/unicopia/{particles => particle}/SphereParticleEffect.java (98%) rename src/main/java/com/minelittlepony/unicopia/{particles => particle}/UParticles.java (95%) rename src/main/java/com/minelittlepony/unicopia/{world/entity => projectile}/MagicProjectileEntity.java (87%) rename src/main/java/com/minelittlepony/unicopia/{util => }/projectile/Projectile.java (88%) rename src/main/java/com/minelittlepony/unicopia/{util => }/projectile/ProjectileUtil.java (96%) delete mode 100644 src/main/java/com/minelittlepony/unicopia/util/HoeUtil.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/util/OreReplacer.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/util/WorldHelper.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/util/projectile/Tossable.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/TossableItem.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/UnicopiaWorld.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/advancement/AbstractCriterion.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/advancement/AdvancementPredicate.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/advancement/BOHDeathCriterion.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/block/AbstractDoorBlock.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/block/ChiselledChitinBlock.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/block/ChitinBlock.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/block/Covering.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/block/DiamondDoorBlock.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/block/DutchDoorBlock.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/block/FruitLeavesBlock.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/block/GemTorchBlock.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/block/HiveWallBlock.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/block/SlimeDripBlock.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/block/SlimeLayerBlock.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/block/SmartSlabBlock.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/block/SmartStairsBlock.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/block/StickPlantBlock.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/block/TallCropBlock.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/block/UBlocks.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/block/UMaterials.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/block/WallGemTorchBlock.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/block/gas/CloudAnvilBlock.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/block/gas/CloudBlock.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/block/gas/CloudDoorBlock.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/block/gas/CloudFarmlandBlock.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/block/gas/CloudFenceBlock.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/block/gas/CloudInteractionContext.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/block/gas/CloudSlabBlock.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/block/gas/CloudSoilBlock.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/block/gas/CloudStairsBlock.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/block/gas/CoverableCloudBlock.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/block/gas/Gas.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/block/gas/GasState.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/block/gas/PillarCloudBlock.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/client/UWorldClient.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/client/gui/BagOfHoldingScreen.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/client/gui/SpellBookScreen.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/client/gui/UScreens.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/client/package-info.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/client/render/ButterflyEntityRenderer.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/client/render/CloudEntityRenderer.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/client/render/CucoonEntityRenderer.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/client/render/RainbowEntityRenderer.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/client/render/RenderLayers.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/client/render/SpearEntityRenderer.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/client/render/SpellbookEntityRender.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/client/render/SpellcastEntityRenderer.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/client/render/model/ButterflyEntityModel.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/client/render/model/CloudEntityModel.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/client/render/model/CucoonEntityModel.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/client/render/model/GemEntityModel.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/client/render/model/SpellbookModel.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/container/BagOfHoldingContainer.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/container/BagOfHoldingInventory.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/container/HeavyInventory.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/container/SpellBookContainer.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/container/SpellbookResultSlot.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/container/UContainers.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/entity/ButterflyEntity.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/entity/CloudEntity.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/entity/ConstructionCloudEntity.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/entity/CucoonEntity.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/entity/FollowCasterGoal.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/entity/RacingCloudEntity.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/entity/RainbowEntity.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/entity/SpearEntity.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/entity/SpellbookEntity.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/entity/SpellcastEntity.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/entity/UEntities.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/entity/WildCloudEntity.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/item/AlicornAmuletItem.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/item/BagOfHoldingItem.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/item/CastableMagicItem.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/item/CloudPlacerItem.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/item/CursedMagicGemItem.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/item/EnchantedStaffItem.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/item/ExtendedShearsItem.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/item/MagicGemItem.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/item/MossItem.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/item/RottenTomatoItem.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/item/SpearItem.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/item/SpellbookItem.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/item/StaffItem.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/item/StickItem.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/item/SugaryItem.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/item/TomatoItem.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/item/TomatoSeedsItem.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/item/UItems.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/recipe/Pattern.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/recipe/ShapedSpecialRecipe.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/recipe/ShapelessSpecialRecipe.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/recipe/SpellBookRecipe.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/recipe/URecipes.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/recipe/Utils.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/CompoundCondition.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/IConditionFactory.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/IPageUnlockListener.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/IUnlockCondition.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/IUnlockEvent.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/Page.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/PageInstance.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/PageOwner.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/PageState.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/PageStateCondition.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/Pages.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/SpellCraftingEvent.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/ChoicePredicate.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/DamagePredicate.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/EnchantmentPredicate.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/PotionPredicate.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/Predicate.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/PredicateSerializer.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/PredicatedIngredient.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/SpellPredicate.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/StackPredicate.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/TagPredicate.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/ToxicityPredicate.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/structure/CloudDungeonFeature.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/structure/CustomSaplingGenerator.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/structure/RuinFeature.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/structure/StructureFeatureBuilder.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/structure/StructureRegistry.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/world/structure/UStructures.java delete mode 100644 src/main/resources/assets/unicopia/advancements/bag_of_holding.json delete mode 100644 src/main/resources/assets/unicopia/advancements/bag_of_holding_2.json delete mode 100644 src/main/resources/assets/unicopia/advancements/bag_of_holding_3.json delete mode 100644 src/main/resources/assets/unicopia/advancements/first_staff.json delete mode 100644 src/main/resources/assets/unicopia/advancements/just_a_stick.json delete mode 100644 src/main/resources/assets/unicopia/advancements/just_the_beginning.json delete mode 100644 src/main/resources/assets/unicopia/blockstates/alfalfa_crops.json delete mode 100644 src/main/resources/assets/unicopia/blockstates/apple_leaves.json delete mode 100644 src/main/resources/assets/unicopia/blockstates/apple_sapling.json delete mode 100644 src/main/resources/assets/unicopia/blockstates/bakery_door.json delete mode 100644 src/main/resources/assets/unicopia/blockstates/chiseled_chitin_shell_block.json delete mode 100644 src/main/resources/assets/unicopia/blockstates/chiseled_marble_block.json delete mode 100644 src/main/resources/assets/unicopia/blockstates/chitin_shell_block.json delete mode 100644 src/main/resources/assets/unicopia/blockstates/chitin_shell_slab.json delete mode 100644 src/main/resources/assets/unicopia/blockstates/chitin_shell_stairs.json delete mode 100644 src/main/resources/assets/unicopia/blockstates/cloud_anvil.json delete mode 100644 src/main/resources/assets/unicopia/blockstates/cloud_block.json delete mode 100644 src/main/resources/assets/unicopia/blockstates/cloud_farmland.json delete mode 100644 src/main/resources/assets/unicopia/blockstates/cloud_fence.json delete mode 100644 src/main/resources/assets/unicopia/blockstates/cloud_slab.json delete mode 100644 src/main/resources/assets/unicopia/blockstates/cloud_stairs.json delete mode 100644 src/main/resources/assets/unicopia/blockstates/cloudsdale_tomato_plant.json delete mode 100644 src/main/resources/assets/unicopia/blockstates/dense_cloud_block.json delete mode 100644 src/main/resources/assets/unicopia/blockstates/dense_cloud_pillar.json delete mode 100644 src/main/resources/assets/unicopia/blockstates/dense_cloud_slab.json delete mode 100644 src/main/resources/assets/unicopia/blockstates/dense_cloud_stairs.json delete mode 100644 src/main/resources/assets/unicopia/blockstates/diamond_door.json delete mode 100644 src/main/resources/assets/unicopia/blockstates/enchanted_cloud_block.json delete mode 100644 src/main/resources/assets/unicopia/blockstates/enchanted_cloud_slab.json delete mode 100644 src/main/resources/assets/unicopia/blockstates/enchanted_cloud_stairs.json delete mode 100644 src/main/resources/assets/unicopia/blockstates/enchanted_torch.json delete mode 100644 src/main/resources/assets/unicopia/blockstates/enchanted_wall_torch.json delete mode 100644 src/main/resources/assets/unicopia/blockstates/flower_pot.json delete mode 100644 src/main/resources/assets/unicopia/blockstates/hive_wall_block.json delete mode 100644 src/main/resources/assets/unicopia/blockstates/library_door.json delete mode 100644 src/main/resources/assets/unicopia/blockstates/misted_glass_door.json delete mode 100644 src/main/resources/assets/unicopia/blockstates/slime_drip.json delete mode 100644 src/main/resources/assets/unicopia/blockstates/slime_layer.json delete mode 100644 src/main/resources/assets/unicopia/blockstates/smooth_marble_block.json delete mode 100644 src/main/resources/assets/unicopia/blockstates/smooth_marble_slab.json delete mode 100644 src/main/resources/assets/unicopia/blockstates/stick.json delete mode 100644 src/main/resources/assets/unicopia/blockstates/sugar_block.json delete mode 100644 src/main/resources/assets/unicopia/blockstates/tomato_plant.json delete mode 100644 src/main/resources/assets/unicopia/models/block/alfalfa_crops/shaft.json delete mode 100644 src/main/resources/assets/unicopia/models/block/alfalfa_crops/stage0.json delete mode 100644 src/main/resources/assets/unicopia/models/block/alfalfa_crops/stage1.json delete mode 100644 src/main/resources/assets/unicopia/models/block/alfalfa_crops/stage2.json delete mode 100644 src/main/resources/assets/unicopia/models/block/alfalfa_crops/stage3.json delete mode 100644 src/main/resources/assets/unicopia/models/block/alfalfa_crops/stage4.json delete mode 100644 src/main/resources/assets/unicopia/models/block/apple_leaves.json delete mode 100644 src/main/resources/assets/unicopia/models/block/apple_leaves_heavy.json delete mode 100644 src/main/resources/assets/unicopia/models/block/apple_sapling.json delete mode 100644 src/main/resources/assets/unicopia/models/block/chiseled_chitin_shell_block.json delete mode 100644 src/main/resources/assets/unicopia/models/block/chiseled_marble_block.json delete mode 100644 src/main/resources/assets/unicopia/models/block/chitin_shell_block.json delete mode 100644 src/main/resources/assets/unicopia/models/block/chitin_shell_block_covered.json delete mode 100644 src/main/resources/assets/unicopia/models/block/chitin_shell_block_snow.json delete mode 100644 src/main/resources/assets/unicopia/models/block/chitin_shell_inner_stairs.json delete mode 100644 src/main/resources/assets/unicopia/models/block/chitin_shell_inner_stairs_covered.json delete mode 100644 src/main/resources/assets/unicopia/models/block/chitin_shell_inner_stairs_top.json delete mode 100644 src/main/resources/assets/unicopia/models/block/chitin_shell_inner_stairs_top_covered.json delete mode 100644 src/main/resources/assets/unicopia/models/block/chitin_shell_outer_stairs.json delete mode 100644 src/main/resources/assets/unicopia/models/block/chitin_shell_outer_stairs_covered.json delete mode 100644 src/main/resources/assets/unicopia/models/block/chitin_shell_outer_stairs_top.json delete mode 100644 src/main/resources/assets/unicopia/models/block/chitin_shell_outer_stairs_top_covered.json delete mode 100644 src/main/resources/assets/unicopia/models/block/chitin_shell_slab.json delete mode 100644 src/main/resources/assets/unicopia/models/block/chitin_shell_slab_top.json delete mode 100644 src/main/resources/assets/unicopia/models/block/chitin_shell_slab_top_covered.json delete mode 100644 src/main/resources/assets/unicopia/models/block/chitin_shell_slab_top_snow.json delete mode 100644 src/main/resources/assets/unicopia/models/block/chitin_shell_stairs.json delete mode 100644 src/main/resources/assets/unicopia/models/block/chitin_shell_stairs_covered.json delete mode 100644 src/main/resources/assets/unicopia/models/block/chitin_shell_stairs_top.json delete mode 100644 src/main/resources/assets/unicopia/models/block/chitin_shell_stairs_top_covered.json delete mode 100644 src/main/resources/assets/unicopia/models/block/cloud_anvil.json delete mode 100644 src/main/resources/assets/unicopia/models/block/cloud_block.json delete mode 100644 src/main/resources/assets/unicopia/models/block/cloud_cube.json delete mode 100644 src/main/resources/assets/unicopia/models/block/cloud_fence_inventory.json delete mode 100644 src/main/resources/assets/unicopia/models/block/cloud_fence_post.json delete mode 100644 src/main/resources/assets/unicopia/models/block/cloud_fence_side.json delete mode 100644 src/main/resources/assets/unicopia/models/block/cloud_inner_stairs.json delete mode 100644 src/main/resources/assets/unicopia/models/block/cloud_outer_stairs.json delete mode 100644 src/main/resources/assets/unicopia/models/block/cloud_slab.json delete mode 100644 src/main/resources/assets/unicopia/models/block/cloud_slab_top.json delete mode 100644 src/main/resources/assets/unicopia/models/block/cloud_stairs.json delete mode 100644 src/main/resources/assets/unicopia/models/block/dense_cloud_block.json delete mode 100644 src/main/resources/assets/unicopia/models/block/dense_cloud_inner_stairs.json delete mode 100644 src/main/resources/assets/unicopia/models/block/dense_cloud_outer_stairs.json delete mode 100644 src/main/resources/assets/unicopia/models/block/dense_cloud_pillar.json delete mode 100644 src/main/resources/assets/unicopia/models/block/dense_cloud_slab.json delete mode 100644 src/main/resources/assets/unicopia/models/block/dense_cloud_slab_top.json delete mode 100644 src/main/resources/assets/unicopia/models/block/dense_cloud_stairs.json delete mode 100644 src/main/resources/assets/unicopia/models/block/door/bakery_bottom.json delete mode 100644 src/main/resources/assets/unicopia/models/block/door/bakery_bottom_rh.json delete mode 100644 src/main/resources/assets/unicopia/models/block/door/bakery_top.json delete mode 100644 src/main/resources/assets/unicopia/models/block/door/bakery_top_rh.json delete mode 100644 src/main/resources/assets/unicopia/models/block/door/bottom.json delete mode 100644 src/main/resources/assets/unicopia/models/block/door/bottom_rh.json delete mode 100644 src/main/resources/assets/unicopia/models/block/door/diamond_bottom.json delete mode 100644 src/main/resources/assets/unicopia/models/block/door/diamond_bottom_rh.json delete mode 100644 src/main/resources/assets/unicopia/models/block/door/diamond_top.json delete mode 100644 src/main/resources/assets/unicopia/models/block/door/diamond_top_rh.json delete mode 100644 src/main/resources/assets/unicopia/models/block/door/library_bottom.json delete mode 100644 src/main/resources/assets/unicopia/models/block/door/library_bottom_rh.json delete mode 100644 src/main/resources/assets/unicopia/models/block/door/library_top.json delete mode 100644 src/main/resources/assets/unicopia/models/block/door/library_top_rh.json delete mode 100644 src/main/resources/assets/unicopia/models/block/door/mist_bottom.json delete mode 100644 src/main/resources/assets/unicopia/models/block/door/mist_bottom_rh.json delete mode 100644 src/main/resources/assets/unicopia/models/block/door/mist_top.json delete mode 100644 src/main/resources/assets/unicopia/models/block/door/mist_top_rh.json delete mode 100644 src/main/resources/assets/unicopia/models/block/door/top.json delete mode 100644 src/main/resources/assets/unicopia/models/block/door/top_rh.json delete mode 100644 src/main/resources/assets/unicopia/models/block/enchanted_cloud_block.json delete mode 100644 src/main/resources/assets/unicopia/models/block/enchanted_cloud_block_covered.json delete mode 100644 src/main/resources/assets/unicopia/models/block/enchanted_cloud_inner_stairs.json delete mode 100644 src/main/resources/assets/unicopia/models/block/enchanted_cloud_inner_stairs_covered.json delete mode 100644 src/main/resources/assets/unicopia/models/block/enchanted_cloud_inner_stairs_top.json delete mode 100644 src/main/resources/assets/unicopia/models/block/enchanted_cloud_inner_stairs_top_covered.json delete mode 100644 src/main/resources/assets/unicopia/models/block/enchanted_cloud_outer_stairs.json delete mode 100644 src/main/resources/assets/unicopia/models/block/enchanted_cloud_outer_stairs_covered.json delete mode 100644 src/main/resources/assets/unicopia/models/block/enchanted_cloud_outer_stairs_top.json delete mode 100644 src/main/resources/assets/unicopia/models/block/enchanted_cloud_outer_stairs_top_covered.json delete mode 100644 src/main/resources/assets/unicopia/models/block/enchanted_cloud_slab.json delete mode 100644 src/main/resources/assets/unicopia/models/block/enchanted_cloud_slab_top.json delete mode 100644 src/main/resources/assets/unicopia/models/block/enchanted_cloud_slab_top_covered.json delete mode 100644 src/main/resources/assets/unicopia/models/block/enchanted_cloud_stairs.json delete mode 100644 src/main/resources/assets/unicopia/models/block/enchanted_cloud_stairs_covered.json delete mode 100644 src/main/resources/assets/unicopia/models/block/enchanted_cloud_stairs_top.json delete mode 100644 src/main/resources/assets/unicopia/models/block/enchanted_cloud_stairs_top_covered.json delete mode 100644 src/main/resources/assets/unicopia/models/block/enchanted_torch.json delete mode 100644 src/main/resources/assets/unicopia/models/block/enchanted_torch_lit.json delete mode 100644 src/main/resources/assets/unicopia/models/block/enchanted_wall_torch.json delete mode 100644 src/main/resources/assets/unicopia/models/block/enchanted_wall_torch_lit.json delete mode 100644 src/main/resources/assets/unicopia/models/block/farmland/dry.json delete mode 100644 src/main/resources/assets/unicopia/models/block/farmland/wet.json delete mode 100644 src/main/resources/assets/unicopia/models/block/hive_dying.json delete mode 100644 src/main/resources/assets/unicopia/models/block/hive_growing.json delete mode 100644 src/main/resources/assets/unicopia/models/block/hive_stable.json delete mode 100644 src/main/resources/assets/unicopia/models/block/slime_drip/bulb_stage0.json delete mode 100644 src/main/resources/assets/unicopia/models/block/slime_drip/bulb_stage1.json delete mode 100644 src/main/resources/assets/unicopia/models/block/slime_drip/bulb_stage2.json delete mode 100644 src/main/resources/assets/unicopia/models/block/slime_drip/bulb_stage3.json delete mode 100644 src/main/resources/assets/unicopia/models/block/slime_drip/tail_stage0.json delete mode 100644 src/main/resources/assets/unicopia/models/block/slime_drip/tail_stage1.json delete mode 100644 src/main/resources/assets/unicopia/models/block/slime_drip/tail_stage2.json delete mode 100644 src/main/resources/assets/unicopia/models/block/slime_drip/tail_stage3.json delete mode 100644 src/main/resources/assets/unicopia/models/block/slime_layer/layer_10.json delete mode 100644 src/main/resources/assets/unicopia/models/block/slime_layer/layer_12.json delete mode 100644 src/main/resources/assets/unicopia/models/block/slime_layer/layer_14.json delete mode 100644 src/main/resources/assets/unicopia/models/block/slime_layer/layer_2.json delete mode 100644 src/main/resources/assets/unicopia/models/block/slime_layer/layer_4.json delete mode 100644 src/main/resources/assets/unicopia/models/block/slime_layer/layer_6.json delete mode 100644 src/main/resources/assets/unicopia/models/block/slime_layer/layer_8.json delete mode 100644 src/main/resources/assets/unicopia/models/block/smooth_marble_block.json delete mode 100644 src/main/resources/assets/unicopia/models/block/smooth_marble_slab.json delete mode 100644 src/main/resources/assets/unicopia/models/block/smooth_marble_slab_top.json delete mode 100644 src/main/resources/assets/unicopia/models/block/sugar_block.json delete mode 100644 src/main/resources/assets/unicopia/models/block/tomato_plant/stage0.json delete mode 100644 src/main/resources/assets/unicopia/models/block/tomato_plant/stage1.json delete mode 100644 src/main/resources/assets/unicopia/models/block/tomato_plant/stage2.json delete mode 100644 src/main/resources/assets/unicopia/models/block/tomato_plant/stage3.json delete mode 100644 src/main/resources/assets/unicopia/models/block/tomato_plant/stage4.json delete mode 100644 src/main/resources/assets/unicopia/models/block/torch_tall.json delete mode 100644 src/main/resources/assets/unicopia/models/block/torch_tall_wall.json delete mode 100644 src/main/resources/assets/unicopia/models/item/alfalfa_leaves.json delete mode 100644 src/main/resources/assets/unicopia/models/item/alfalfa_seeds.json delete mode 100644 src/main/resources/assets/unicopia/models/item/alicorn_amulet.json delete mode 100644 src/main/resources/assets/unicopia/models/item/apple_cider.json delete mode 100644 src/main/resources/assets/unicopia/models/item/apple_leaves.json delete mode 100644 src/main/resources/assets/unicopia/models/item/apple_seeds.json delete mode 100644 src/main/resources/assets/unicopia/models/item/bag_of_holding.json delete mode 100644 src/main/resources/assets/unicopia/models/item/bakery_door.json delete mode 100644 src/main/resources/assets/unicopia/models/item/boop_o_roops.json delete mode 100644 src/main/resources/assets/unicopia/models/item/burned_juice.json delete mode 100644 src/main/resources/assets/unicopia/models/item/butterfly_spawn_egg.json delete mode 100644 src/main/resources/assets/unicopia/models/item/cereal.json delete mode 100644 src/main/resources/assets/unicopia/models/item/chiseled_chitin_shell_block.json delete mode 100644 src/main/resources/assets/unicopia/models/item/chiseled_marble_block.json delete mode 100644 src/main/resources/assets/unicopia/models/item/chitin_shell.json delete mode 100644 src/main/resources/assets/unicopia/models/item/chitin_shell_block.json delete mode 100644 src/main/resources/assets/unicopia/models/item/chitin_shell_slab.json delete mode 100644 src/main/resources/assets/unicopia/models/item/chitin_shell_stairs.json delete mode 100644 src/main/resources/assets/unicopia/models/item/cloud_anvil.json delete mode 100644 src/main/resources/assets/unicopia/models/item/cloud_block.json delete mode 100644 src/main/resources/assets/unicopia/models/item/cloud_farmland.json delete mode 100644 src/main/resources/assets/unicopia/models/item/cloud_fence.json delete mode 100644 src/main/resources/assets/unicopia/models/item/cloud_matter.json delete mode 100644 src/main/resources/assets/unicopia/models/item/cloud_slab.json delete mode 100644 src/main/resources/assets/unicopia/models/item/cloud_spawn_egg.json delete mode 100644 src/main/resources/assets/unicopia/models/item/cloud_stairs.json delete mode 100644 src/main/resources/assets/unicopia/models/item/cloudsdale_tomato.json delete mode 100644 src/main/resources/assets/unicopia/models/item/construction_cloud_spawner.json delete mode 100644 src/main/resources/assets/unicopia/models/item/corrupted_gem.json delete mode 100644 src/main/resources/assets/unicopia/models/item/cucoon.json delete mode 100644 src/main/resources/assets/unicopia/models/item/daffodil_daisy_sandwich.json delete mode 100644 src/main/resources/assets/unicopia/models/item/dense_cloud_block.json delete mode 100644 src/main/resources/assets/unicopia/models/item/dense_cloud_pillar.json delete mode 100644 src/main/resources/assets/unicopia/models/item/dense_cloud_slab.json delete mode 100644 src/main/resources/assets/unicopia/models/item/dense_cloud_stairs.json delete mode 100644 src/main/resources/assets/unicopia/models/item/dew_drop.json delete mode 100644 src/main/resources/assets/unicopia/models/item/diamond_door.json delete mode 100644 src/main/resources/assets/unicopia/models/item/enchanted_cloud_block.json delete mode 100644 src/main/resources/assets/unicopia/models/item/enchanted_cloud_slab.json delete mode 100644 src/main/resources/assets/unicopia/models/item/enchanted_cloud_stairs.json delete mode 100644 src/main/resources/assets/unicopia/models/item/enchanted_torch.json delete mode 100644 src/main/resources/assets/unicopia/models/item/gem.json delete mode 100644 src/main/resources/assets/unicopia/models/item/handheld_staff.json delete mode 100644 src/main/resources/assets/unicopia/models/item/hay_burger.json delete mode 100644 src/main/resources/assets/unicopia/models/item/hay_fries.json delete mode 100644 src/main/resources/assets/unicopia/models/item/hive_wall_block.json delete mode 100644 src/main/resources/assets/unicopia/models/item/juice.json delete mode 100644 src/main/resources/assets/unicopia/models/item/library_door.json delete mode 100644 src/main/resources/assets/unicopia/models/item/meadow_brook_staff.json delete mode 100644 src/main/resources/assets/unicopia/models/item/misted_glass_door.json delete mode 100644 src/main/resources/assets/unicopia/models/item/moss.json delete mode 100644 src/main/resources/assets/unicopia/models/item/mug.json delete mode 100644 src/main/resources/assets/unicopia/models/item/racing_cloud_spawner.json delete mode 100644 src/main/resources/assets/unicopia/models/item/remembrance_staff.json delete mode 100644 src/main/resources/assets/unicopia/models/item/rotten_cloudsdale_tomato.json delete mode 100644 src/main/resources/assets/unicopia/models/item/rotten_tomato.json delete mode 100644 src/main/resources/assets/unicopia/models/item/salad.json delete mode 100644 src/main/resources/assets/unicopia/models/item/slime_layer.json delete mode 100644 src/main/resources/assets/unicopia/models/item/smooth_marble_block.json delete mode 100644 src/main/resources/assets/unicopia/models/item/smooth_marble_slab.json delete mode 100644 src/main/resources/assets/unicopia/models/item/spear.json delete mode 100644 src/main/resources/assets/unicopia/models/item/spellbook.json delete mode 100644 src/main/resources/assets/unicopia/models/item/sugar_block.json delete mode 100644 src/main/resources/assets/unicopia/models/item/tomato.json delete mode 100644 src/main/resources/assets/unicopia/models/item/tomato_seeds.json delete mode 100644 src/main/resources/assets/unicopia/models/item/wheat_worms.json delete mode 100644 src/main/resources/assets/unicopia/models/item/wild_cloud_spawner.json delete mode 100644 src/main/resources/assets/unicopia/sounds/cicada/cicada_4.ogg delete mode 100644 src/main/resources/assets/unicopia/sounds/cicada/cicada_5.ogg delete mode 100644 src/main/resources/assets/unicopia/sounds/cicada/cicada_6.ogg delete mode 100644 src/main/resources/assets/unicopia/sounds/insect/insect_1.ogg delete mode 100644 src/main/resources/assets/unicopia/sounds/insect/insect_2.ogg delete mode 100644 src/main/resources/assets/unicopia/sounds/insect/insect_3.ogg delete mode 100644 src/main/resources/assets/unicopia/sounds/slime/advance.ogg delete mode 100644 src/main/resources/assets/unicopia/sounds/slime/retract.ogg delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/alfalfa/shaft.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/alfalfa/stage_0.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/alfalfa/stage_1.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/alfalfa/stage_2.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/alfalfa/stage_3.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/alfalfa/stage_4.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/bakery_door_lower.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/bakery_door_upper.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/chiseled_cloud.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/chiseled_marble_block_side.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/chitin_block_bottom.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/chitin_block_chissled_full.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/chitin_block_chissled_half.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/chitin_block_covered.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/chitin_block_snow_covered.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/chitin_block_spike.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/chitin_block_top.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/chitin_block_uncovered.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/chitin_shell_slab_side_uncovered.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/cloud_block.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/cloud_farmland_dry.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/cloud_farmland_wet.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/dense_cloud_block.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/dense_cloud_pillar.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/dense_cloud_pillar_end.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/diamond_door_lower.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/diamond_door_upper.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/diamond_door_upper.png.mcmeta delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/enchanted_cloud_block.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/enchanted_cloud_block_bottom.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/enchanted_cloud_block_top.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/enchanted_cloud_slab_side.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/enchanted_torch.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/enchanted_torch_lit.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/hive_dying.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/hive_end.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/hive_growing.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/hive_growing.png.mcmeta delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/hive_stable.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/leaves_apple.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/library_door_lower.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/library_door_upper.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/misted_glass_door_lower.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/misted_glass_door_upper.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/sapling_apple.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/slime_bulb.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/slime_tail.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/smooth_marble_block.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/stick.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/sugar_block.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/tomato_plant/stage_1.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/tomato_plant/stage_2.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/tomato_plant/stage_3.png delete mode 100644 src/main/resources/assets/unicopia/textures/blocks/tomato_plant/stage_4.png delete mode 100644 src/main/resources/assets/unicopia/textures/entity/butterfly/blue.png delete mode 100644 src/main/resources/assets/unicopia/textures/entity/butterfly/brimstone.png delete mode 100644 src/main/resources/assets/unicopia/textures/entity/butterfly/butterfly.png delete mode 100644 src/main/resources/assets/unicopia/textures/entity/butterfly/green.png delete mode 100644 src/main/resources/assets/unicopia/textures/entity/butterfly/hedylidae.png delete mode 100644 src/main/resources/assets/unicopia/textures/entity/butterfly/lime.png delete mode 100644 src/main/resources/assets/unicopia/textures/entity/butterfly/lycaenidae.png delete mode 100644 src/main/resources/assets/unicopia/textures/entity/butterfly/magenta.png delete mode 100644 src/main/resources/assets/unicopia/textures/entity/butterfly/monarch.png delete mode 100644 src/main/resources/assets/unicopia/textures/entity/butterfly/nymphalidae.png delete mode 100644 src/main/resources/assets/unicopia/textures/entity/butterfly/pink.png delete mode 100644 src/main/resources/assets/unicopia/textures/entity/butterfly/purple.png delete mode 100644 src/main/resources/assets/unicopia/textures/entity/butterfly/red.png delete mode 100644 src/main/resources/assets/unicopia/textures/entity/butterfly/white_monarch.png delete mode 100644 src/main/resources/assets/unicopia/textures/entity/butterfly/yellow.png delete mode 100644 src/main/resources/assets/unicopia/textures/entity/cloud_spawner.png delete mode 100644 src/main/resources/assets/unicopia/textures/entity/clouds.png delete mode 100644 src/main/resources/assets/unicopia/textures/entity/clouds_storm.png delete mode 100644 src/main/resources/assets/unicopia/textures/entity/cucoon.png delete mode 100644 src/main/resources/assets/unicopia/textures/entity/enchanting_table_book.png delete mode 100644 src/main/resources/assets/unicopia/textures/entity/enchanting_table_book_blue.png delete mode 100644 src/main/resources/assets/unicopia/textures/entity/gem.png delete mode 100644 src/main/resources/assets/unicopia/textures/entity/projectiles/spear.png delete mode 100644 src/main/resources/assets/unicopia/textures/environment/rainbow.png delete mode 100644 src/main/resources/assets/unicopia/textures/gui/container/book.png delete mode 100644 src/main/resources/assets/unicopia/textures/item/alfalfa_leaves.png delete mode 100644 src/main/resources/assets/unicopia/textures/item/alfalfa_seeds.png delete mode 100644 src/main/resources/assets/unicopia/textures/item/alicorn_amulet.png delete mode 100644 src/main/resources/assets/unicopia/textures/item/apple_cider.png delete mode 100644 src/main/resources/assets/unicopia/textures/item/apple_seeds.png delete mode 100644 src/main/resources/assets/unicopia/textures/item/apple_zap.png delete mode 100644 src/main/resources/assets/unicopia/textures/item/bag_of_holding.png delete mode 100644 src/main/resources/assets/unicopia/textures/item/bakery_door.png delete mode 100644 src/main/resources/assets/unicopia/textures/item/boop_o_roops.png delete mode 100644 src/main/resources/assets/unicopia/textures/item/burned_juice.png delete mode 100644 src/main/resources/assets/unicopia/textures/item/cereal.png delete mode 100644 src/main/resources/assets/unicopia/textures/item/chitin_shell.png delete mode 100644 src/main/resources/assets/unicopia/textures/item/cloud_matter.png delete mode 100644 src/main/resources/assets/unicopia/textures/item/cooked_zap_apple.png delete mode 100644 src/main/resources/assets/unicopia/textures/item/corrupted_gem.png delete mode 100644 src/main/resources/assets/unicopia/textures/item/corrupted_gem_overlay.png delete mode 100644 src/main/resources/assets/unicopia/textures/item/cucoon.png delete mode 100644 src/main/resources/assets/unicopia/textures/item/daffodil_daisy_sandwich.png delete mode 100644 src/main/resources/assets/unicopia/textures/item/dew_drop.png delete mode 100644 src/main/resources/assets/unicopia/textures/item/diamond_door.png delete mode 100644 src/main/resources/assets/unicopia/textures/item/empty_gem_slot.png delete mode 100644 src/main/resources/assets/unicopia/textures/item/gem.png delete mode 100644 src/main/resources/assets/unicopia/textures/item/gem_overlay.png delete mode 100644 src/main/resources/assets/unicopia/textures/item/hay_burger.png delete mode 100644 src/main/resources/assets/unicopia/textures/item/hay_fries.png delete mode 100644 src/main/resources/assets/unicopia/textures/item/juice.png delete mode 100644 src/main/resources/assets/unicopia/textures/item/library_door.png delete mode 100644 src/main/resources/assets/unicopia/textures/item/meadow_brook_staff.png delete mode 100644 src/main/resources/assets/unicopia/textures/item/misted_glass_door.png delete mode 100644 src/main/resources/assets/unicopia/textures/item/moss.png delete mode 100644 src/main/resources/assets/unicopia/textures/item/mug.png delete mode 100644 src/main/resources/assets/unicopia/textures/item/remembrance_staff.png delete mode 100644 src/main/resources/assets/unicopia/textures/item/rotten_tomato.png delete mode 100644 src/main/resources/assets/unicopia/textures/item/salad.png delete mode 100644 src/main/resources/assets/unicopia/textures/item/spellbook.png delete mode 100644 src/main/resources/assets/unicopia/textures/item/tomato.png delete mode 100644 src/main/resources/assets/unicopia/textures/item/tomato_seeds.png delete mode 100644 src/main/resources/assets/unicopia/textures/item/wheat_worms.png delete mode 100644 src/main/resources/assets/unicopia/textures/item/wooden_spear.png delete mode 100644 src/main/resources/assets/unicopia/textures/items/alicorn_amulet_overlay.png delete mode 100644 src/main/resources/assets/unicopia/textures/models/armor/alicorn_amulet.png delete mode 100644 src/main/resources/assets/unicopia/textures/pages/chapter_1_gems.png delete mode 100644 src/main/resources/assets/unicopia/textures/pages/preface.png delete mode 100644 src/main/resources/data/minecraft/tags/blocks/anvil.json delete mode 100644 src/main/resources/data/minecraft/tags/blocks/climbable.json delete mode 100644 src/main/resources/data/minecraft/tags/blocks/doors.json delete mode 100644 src/main/resources/data/minecraft/tags/blocks/fences.json delete mode 100644 src/main/resources/data/minecraft/tags/blocks/leaves.json delete mode 100644 src/main/resources/data/minecraft/tags/blocks/slabs.json delete mode 100644 src/main/resources/data/minecraft/tags/blocks/stairs.json delete mode 100644 src/main/resources/data/minecraft/tags/blocks/wooden_doors.json delete mode 100644 src/main/resources/data/minecraft/tags/items/anvil.json delete mode 100644 src/main/resources/data/minecraft/tags/items/doors.json delete mode 100644 src/main/resources/data/minecraft/tags/items/fences.json delete mode 100644 src/main/resources/data/minecraft/tags/items/leaves.json delete mode 100644 src/main/resources/data/minecraft/tags/items/slabs.json delete mode 100644 src/main/resources/data/minecraft/tags/items/stairs.json delete mode 100644 src/main/resources/data/minecraft/tags/items/wooden_doors.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/alfalfa_crops.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/apple_leaves.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/apple_sapling.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/bakery_door.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/chiseled_chitin_shell_block.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/chiseled_marble_block.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/chitin_block.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/chitin_shell_block.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/chitin_shell_slab.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/chitin_shell_stairs.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/cloud_anvil.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/cloud_block.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/cloud_farmland.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/cloud_fence.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/cloud_slab.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/cloud_stairs.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/cloudsdale_tomato_plant.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/dense_cloud_block.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/dense_cloud_pillar.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/dense_cloud_slab.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/dense_cloud_stairs.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/diamond_door.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/enchanted_cloud_block.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/enchanted_cloud_slab.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/enchanted_cloud_stairs.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/enchanted_torch.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/enchanted_wall_torch.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/hive_wall_block.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/library_door.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/misted_glass_door.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/slime_drip.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/slime_layer.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/smooth_marble_block.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/smooth_marble_slab.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/stick.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/sugar_block.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/tomato_plant.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/entities/cloud.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/entities/racing_cloud.json delete mode 100644 src/main/resources/data/unicopia/loot_tables/entities/wild_cloud.json delete mode 100644 src/main/resources/data/unicopia/pages/chapter_1_gems.json delete mode 100644 src/main/resources/data/unicopia/pages/preface.json delete mode 100644 src/main/resources/data/unicopia/recipes/apple_cider.json delete mode 100644 src/main/resources/data/unicopia/recipes/apple_seeds.json delete mode 100644 src/main/resources/data/unicopia/recipes/bag_of_holding.json delete mode 100644 src/main/resources/data/unicopia/recipes/bakery_door.json delete mode 100644 src/main/resources/data/unicopia/recipes/boop_o_roops.json delete mode 100644 src/main/resources/data/unicopia/recipes/burned_juice.json delete mode 100644 src/main/resources/data/unicopia/recipes/cereal.json delete mode 100644 src/main/resources/data/unicopia/recipes/chiseled_chitin_shell_block.json delete mode 100644 src/main/resources/data/unicopia/recipes/chiseled_marble_block.json delete mode 100644 src/main/resources/data/unicopia/recipes/chitin_shell.json delete mode 100644 src/main/resources/data/unicopia/recipes/chitin_shell_block.json delete mode 100644 src/main/resources/data/unicopia/recipes/chitin_shell_block_to_chitin_shell.json delete mode 100644 src/main/resources/data/unicopia/recipes/chitin_shell_slab.json delete mode 100644 src/main/resources/data/unicopia/recipes/chitin_shell_stairs.json delete mode 100644 src/main/resources/data/unicopia/recipes/cloud_anvil.json delete mode 100644 src/main/resources/data/unicopia/recipes/cloud_block.json delete mode 100644 src/main/resources/data/unicopia/recipes/cloud_block_to_cloud_matter.json delete mode 100644 src/main/resources/data/unicopia/recipes/cloud_fence.json delete mode 100644 src/main/resources/data/unicopia/recipes/cloud_slab.json delete mode 100644 src/main/resources/data/unicopia/recipes/cloud_stairs.json delete mode 100644 src/main/resources/data/unicopia/recipes/construction_cloud_spawner.json delete mode 100644 src/main/resources/data/unicopia/recipes/cooked_zap_apple.json delete mode 100644 src/main/resources/data/unicopia/recipes/cucoon.json delete mode 100644 src/main/resources/data/unicopia/recipes/daffodil_daisy_sandwich_safe.json delete mode 100644 src/main/resources/data/unicopia/recipes/daffodil_daisy_sandwich_toxic.json delete mode 100644 src/main/resources/data/unicopia/recipes/dense_cloud_block.json delete mode 100644 src/main/resources/data/unicopia/recipes/dense_cloud_pillar.json delete mode 100644 src/main/resources/data/unicopia/recipes/dense_cloud_slab.json delete mode 100644 src/main/resources/data/unicopia/recipes/dense_cloud_stairs.json delete mode 100644 src/main/resources/data/unicopia/recipes/diamond_door.json delete mode 100644 src/main/resources/data/unicopia/recipes/enchanted_cloud_block.json delete mode 100644 src/main/resources/data/unicopia/recipes/enchanted_cloud_slab.json delete mode 100644 src/main/resources/data/unicopia/recipes/enchanted_cloud_stairs.json delete mode 100644 src/main/resources/data/unicopia/recipes/enchanted_torch.json delete mode 100644 src/main/resources/data/unicopia/recipes/enchantments/alicorn_amulet.json delete mode 100644 src/main/resources/data/unicopia/recipes/enchantments/awkward.json delete mode 100644 src/main/resources/data/unicopia/recipes/enchantments/charge.json delete mode 100644 src/main/resources/data/unicopia/recipes/enchantments/fire.json delete mode 100644 src/main/resources/data/unicopia/recipes/enchantments/flame.json delete mode 100644 src/main/resources/data/unicopia/recipes/enchantments/ice.json delete mode 100644 src/main/resources/data/unicopia/recipes/enchantments/inferno.json delete mode 100644 src/main/resources/data/unicopia/recipes/enchantments/light.json delete mode 100644 src/main/resources/data/unicopia/recipes/enchantments/music_disc_crusade.json delete mode 100644 src/main/resources/data/unicopia/recipes/enchantments/music_disc_funk.json delete mode 100644 src/main/resources/data/unicopia/recipes/enchantments/music_disc_pet.json delete mode 100644 src/main/resources/data/unicopia/recipes/enchantments/music_disc_popular.json delete mode 100644 src/main/resources/data/unicopia/recipes/enchantments/music_disc_shuffle.json delete mode 100644 src/main/resources/data/unicopia/recipes/enchantments/necromancy.json delete mode 100644 src/main/resources/data/unicopia/recipes/enchantments/pilon.json delete mode 100644 src/main/resources/data/unicopia/recipes/enchantments/portal.json delete mode 100644 src/main/resources/data/unicopia/recipes/enchantments/repulsion.json delete mode 100644 src/main/resources/data/unicopia/recipes/enchantments/reveal.json delete mode 100644 src/main/resources/data/unicopia/recipes/enchantments/shield.json delete mode 100644 src/main/resources/data/unicopia/recipes/enchantments/siphon.json delete mode 100644 src/main/resources/data/unicopia/recipes/enchantments/suffering.json delete mode 100644 src/main/resources/data/unicopia/recipes/enchantments/vortex.json delete mode 100644 src/main/resources/data/unicopia/recipes/flim_flam_cider.json delete mode 100644 src/main/resources/data/unicopia/recipes/gem.json delete mode 100644 src/main/resources/data/unicopia/recipes/gem_repair.json delete mode 100644 src/main/resources/data/unicopia/recipes/hay_burger_safe.json delete mode 100644 src/main/resources/data/unicopia/recipes/hay_burger_toxic.json delete mode 100644 src/main/resources/data/unicopia/recipes/hay_fries.json delete mode 100644 src/main/resources/data/unicopia/recipes/juice.json delete mode 100644 src/main/resources/data/unicopia/recipes/library_door.json delete mode 100644 src/main/resources/data/unicopia/recipes/meadow_brook_staff.json delete mode 100644 src/main/resources/data/unicopia/recipes/misted_glass_door.json delete mode 100644 src/main/resources/data/unicopia/recipes/moss_to_green_dye.json delete mode 100644 src/main/resources/data/unicopia/recipes/mug.json delete mode 100644 src/main/resources/data/unicopia/recipes/racing_cloud_spawner.json delete mode 100644 src/main/resources/data/unicopia/recipes/remembrance_staff.json delete mode 100644 src/main/resources/data/unicopia/recipes/salad_fair.json delete mode 100644 src/main/resources/data/unicopia/recipes/salad_lethal.json delete mode 100644 src/main/resources/data/unicopia/recipes/salad_safe.json delete mode 100644 src/main/resources/data/unicopia/recipes/salad_severe.json delete mode 100644 src/main/resources/data/unicopia/recipes/slime_ball.json delete mode 100644 src/main/resources/data/unicopia/recipes/slime_layer.json delete mode 100644 src/main/resources/data/unicopia/recipes/smooth_marble_block.json delete mode 100644 src/main/resources/data/unicopia/recipes/smooth_marble_slab.json delete mode 100644 src/main/resources/data/unicopia/recipes/spellbook.json delete mode 100644 src/main/resources/data/unicopia/recipes/sugar_block.json delete mode 100644 src/main/resources/data/unicopia/recipes/sugar_block_to_sugar.json delete mode 100644 src/main/resources/data/unicopia/recipes/tomato_seeds.json delete mode 100644 src/main/resources/data/unicopia/recipes/trick_green_apple.json delete mode 100644 src/main/resources/data/unicopia/recipes/trick_red_apple.json delete mode 100644 src/main/resources/data/unicopia/recipes/trick_sour_apple.json delete mode 100644 src/main/resources/data/unicopia/recipes/trick_sweet_apple.json delete mode 100644 src/main/resources/data/unicopia/recipes/trick_zap_apple.json delete mode 100644 src/main/resources/data/unicopia/recipes/water_bottle.json delete mode 100644 src/main/resources/data/unicopia/recipes/water_bucket.json delete mode 100644 src/main/resources/data/unicopia/recipes/wild_cloud_spawner.json delete mode 100644 src/main/resources/data/unicopia/structures/cloud/center.nbt delete mode 100644 src/main/resources/data/unicopia/structures/cloud/huge_ruin/four.nbt delete mode 100644 src/main/resources/data/unicopia/structures/cloud/huge_ruin/one.nbt delete mode 100644 src/main/resources/data/unicopia/structures/cloud/huge_ruin/three.nbt delete mode 100644 src/main/resources/data/unicopia/structures/cloud/huge_ruin/two.nbt delete mode 100644 src/main/resources/data/unicopia/structures/cloud/island.nbt delete mode 100644 src/main/resources/data/unicopia/structures/cloud/large_ruin.nbt delete mode 100644 src/main/resources/data/unicopia/structures/cloud/ruin_segment.nbt delete mode 100644 src/main/resources/data/unicopia/structures/cloud/small.nbt delete mode 100644 src/main/resources/data/unicopia/structures/ground/temple_with_book.nbt delete mode 100644 src/main/resources/data/unicopia/structures/ground/temple_without_book.nbt delete mode 100644 src/main/resources/data/unicopia/structures/ground/tower.nbt delete mode 100644 src/main/resources/data/unicopia/structures/ground/wizard_tower_blue.nbt delete mode 100644 src/main/resources/data/unicopia/structures/ground/wizard_tower_red.nbt delete mode 100644 src/main/resources/data/unicopia/tags/items/apple_bloom_spirit.json delete mode 100644 src/main/resources/data/unicopia/tags/items/cursed_artefacts.json delete mode 100644 src/main/resources/data/unicopia/tags/items/dark_elementals.json delete mode 100644 src/main/resources/data/unicopia/tags/items/death_elementals.json delete mode 100644 src/main/resources/data/unicopia/tags/items/fire_elementals.json delete mode 100644 src/main/resources/data/unicopia/tags/items/fresh_tomatoes.json delete mode 100644 src/main/resources/data/unicopia/tags/items/hammerspace_immune.json delete mode 100644 src/main/resources/data/unicopia/tags/items/harmonic_elementals.json delete mode 100644 src/main/resources/data/unicopia/tags/items/ice_elementals.json delete mode 100644 src/main/resources/data/unicopia/tags/items/knowledge_elementals.json delete mode 100644 src/main/resources/data/unicopia/tags/items/life_elementals.json delete mode 100644 src/main/resources/data/unicopia/tags/items/light_elementals.json delete mode 100644 src/main/resources/data/unicopia/tags/items/rotting_elementals.json delete mode 100644 src/main/resources/data/unicopia/tags/items/scootaloo_spirit.json delete mode 100644 src/main/resources/data/unicopia/tags/items/shards.json delete mode 100644 src/main/resources/data/unicopia/tags/items/shells.json delete mode 100644 src/main/resources/data/unicopia/tags/items/sight_elementals.json delete mode 100644 src/main/resources/data/unicopia/tags/items/sound_elementals.json delete mode 100644 src/main/resources/data/unicopia/tags/items/sweetie_belle_spirit.json delete mode 100644 src/main/resources/data/unicopiamc/loot_tables/blocks/clay.json delete mode 100644 src/main/resources/data/unicopiamc/loot_tables/blocks/dirt.json delete mode 100644 src/main/resources/data/unicopiamc/loot_tables/blocks/grass.json delete mode 100644 src/main/resources/data/unicopiamc/loot_tables/blocks/grass_block.json delete mode 100644 src/main/resources/data/unicopiamc/loot_tables/blocks/grass_path.json delete mode 100644 src/main/resources/data/unicopiamc/loot_tables/blocks/large_fern.json delete mode 100644 src/main/resources/data/unicopiamc/loot_tables/blocks/stone.json delete mode 100644 src/main/resources/data/unicopiamc/loot_tables/blocks/tall_grass.json delete mode 100644 unicopia notes.txt diff --git a/book.xcf b/book.xcf deleted file mode 100644 index af80aa83b2afd1a157d2bf8bbf9f1d9060dcabbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 623381 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

IMH%C&tIgC)%ebV;f5y5qp z+K9p=vsq*bgZo_~2VH*w%IxBRAvNVp*BQGL z6tm|EHh>H(#7pG^F@^*)4(r)w4iN+c#Jj)_z-tamzA)o!{UwYf#`mB%o7Dq)vROIL z6lAagrFyTzQwF&5kvO6yR6Nc&Ym)MYvY?M(OTy1-uu@M;9E_9BMKHhb71XvcJ@Y$e zw)gM5ipwtTU~H-^#h{scMu2Xl|L6)7`s*tSPrQH3#4r5fn26u)Pz+y*S#O|cp6M_% zqqqN|8q_p97E8oLFQXG%7W<0i>f+#fyjRhhNlI|Gv5}fDF{a0Uv$)zOa@gk=- zUA@2nN=ocKm=c16l+H#C4TtYssRFFZ25eEVV9y7%wqw;Q%D$@m_x5~>jnf1AijgyP>sX%da0Kc&a>;)GD@>NGP*ri)neGPjKo21#q%4+^)urZqL=Aai&R# zo>KoR9BvBKERO^P`HD{&+t4vWdTW~Z?bl#tWn?*6k!{Mr27n6in_hs+f@7uG;g7+k zV30Ljp&+mp5|_Rg2L&Z4fJrkn8b!_#drJMQ;vYh;QNShe5GQX~e#k4yL8=rztlX)o z#Eg+O!ENY#fBkA)IZbf63c4-j&buLNz#WHKcT`a#VDtI{kA&D=t`J0;0c9}MNsA#Z zVKF+Z`#eyd-SHYJ3(*g_u8Ae9+(P^1Cs3&F_Q3k3LlgO(Hp6efc*>!*r7;vSilpl zWRT&hs$Wr^hnZJJk2`bg_eXGaqz*%d) z?UJupDC#+{yYC5cb)6XVss3+L!bW^#Jm5y3HV)6SzB2~L-%m#O>KB%W%!MLKn}+<= z!*qjuT{8@narBmVY8Jr~R;=#QH?}L5IMYa430=~NSczev06mmLa86NEi&h8~y?#Bb zr!iHB0xRebeB9;+ilemlOJORYhEi zE-MlLRAd6PZJJ^>8lCmB^>I)cGSNku7JPS+5A2p{)&~z$WT31}tO(!WEvp$#Y7@hv zGZ9B%Sk=4k321?b&B}FX)vtilbELU~?y-Y%#2e3FKro#}1Q?$NM$y~dPJz@_j z_R;VX9GR!u(OQY?0yOj*1+E<3N~BmzIpP!W1`V*{;!Q28p$OCP!q|HKDEJC9BiML9 zLF7L5B_R^;hC)_&B|I>mA$$Ji#N_1p2vM8vt3~dzC;LZ#hGk;nSBlACY5(*B#a*~o zW(t%)j^g-vCHLoX{Klm=r}o9|IHGsJ?g%1U@DD>`gfN9iYp=q9ByOQi@ed~LP7;%V z33eLpA`6D2L!IO)Nf2Op)@DVnwxF0=Q?M@gOy)myVv-?(33UmL|2E$G$9(<)R`^9D3SS@#z<>_>XEU8vp6 zfwVXV*c-;pG$&miI8P!ny)5taltXC-F*BU}P*6sNwhqtXQmCwzOh5uT$PDdhV8laK zQawk=0i*R5<(WS?q3%O%W>wabh!agIHgykN^BOr^`6j38P z{D1QR7mmHm*C)X%pAklHgj>eQAhiM?Vuqq;vdB;2*k#2IzQHW&n}P->xG4`#iSFEx zct$gzaje44!#v1q=SIACu7)I^y^AX~F)u=a({~7?(H+HJYusCgYiwwYJ+MN74lbtU zqbYw@NeBrU4~Zytnh2f*N)M$7Nr1>H<@nASd^gBFT9D(MD)zZkbT7l#b~G1XY&E|4 z2itR?E6H$*`HLwY&(yY(I^NzL+i{M z0RZR~0^k?afzIQdw$E6x3Sh6lP@rJ5g+xid_Qlaq}l+ke1EJT`vZRQtKXK z7rzg4zbBT7HuE;|8j&-z{}cRp&t9^r6JuPo;C%p_It!lZEF7QZbCFKcAbgN4cKxuqr8gEPc_GVD z_JUvUnx{R#+J5D)c^db%_~Y%jk8hXhs}SPdG;8)Oi7SQ@c$`@o#0Bbhm$81}aaQbR zTo>)lzV?}dQ;=R&A;{}M2iHE~vT6UiXYw*H3rFQqnVWGL)FA=+>z>Z%3;FRjK^_qC z?*hIH`3W|@#Wp|$d9%-Tbv&`TjY=OTYj|Vhr5t0 zC_pQ#om2Ra17V2E!5|Cp;1y~Ll`3jKqHsM~=mxp4G=@NoITYxQVicoexfLUD zkr=`M({X@uV^Fc8%3}_i`k|08NE{9Z8L{2PIz+i05~EPW)++RrLPc?J4)ta+&{2SL z#CnAZ1>dvu&`6I(jxTs#p)^(_UV$D3_LquYKI&49d4|F`1UZ_7ckJlzJ17r2ea=DI z=N=3)-Z&5UZhMNpckCSK?~{E_zwDF!i9SSDA<~USI(-3CM6rSI#iL7LYhrMJUBp<( z3ol{7c9^>Oef@n&*5xp<`F=#2=rO9QzVB%^zC**8ra<Ri6;10c#%Exm# zdM2EPlptx!D8;(lU&&T7lF;R7ji3_-x-@}-){$jY0kL)7C9z5vxReOa zoZO9b6ux39RUUXrPop$3JD4+D&i3Zao-^B-otrcJ--+Nq15h(7f5X3NB1nat3N|l6 z5?4etm{oX_Bt(PsVgrZc9~n$IZj}x#W#dQ5$PybrIM_vF&XK_+CgdY=4at9GFtOu1 zNAV+riIIHJiH-~=RR5HE5R>>Eq|8urWH32mnW(|(h-IR!pd*9He;gT1j#wtJ75~3# zne?AH7uUDo5|?IND+DBAHOLjHlkpc<& zPP}JzGj7*exf0hM;mVuU%@xgATxEkyn^!xlJwPK>VbWdAE1P6fh8JG(%Asb7t8UDF zV9m*9X%l*rzP}RNht-{IE4byBS<98lRr<;ymFFaJaMJf0m#bUUct;;EAZ)5^3RbRi zSK<03-UNjrvy=W~1#UB3x-7X2hhAa>GVdV6F_|lIRT2_0i8twvWlP*8g{8cokT>#q z$V*)#$BX=Ul~TZDBa{Ap$^Af$VSsXwynn=07jEPu`c9?<~kKT(oF0tLZKoLW6k!9`|uGRpEqxo`3H= zXP&&zn~#E>g>sQ|zqeRjCh0EA;oe8oO{M#%`|h2WnCIU&AC(IhE=nwN7Rx2hQeIZb z3pFQ+p%cC{Z|=SK;@`ac?wc>?2MZRu3!VEV+B%9-b(yT#@!!68uAJ-MEAMmWCl?e{ zBUKt?WvZppB&%x6JZ33TL8Rw z1vO+9b+T`pWOIXg_a*L=^9u`fhIy5e_YF4rD;4=`zj^OH&OH)^-{+#}?1F_%$>xlx zJlPs3%=B^ZR_=?cQCuXD-m;qE0^QBsE~3fIJo!cY&c>pfrHqb+^2`@-FYryY9L>akrc+ z@6D5VBp*2ojH)i)1W+C|T-~AzyzB0}?{e=7zJHe!heSn**Ee+Iz__}iyqiw}7QQ&| zF2ebD641YsB|3Axd*=~O&fi-O2WmjNphWKr^9U#JM2XS>X6~6wMgzqi4auGo!wjVw zmJEJj9*T0~fId(o?{!eoJuJ|GEz^BVT@pvQ&)nOAgQWr{4@AGr- zx-$_g)G_pz_w8Vxjzbo!+s3^<{^#f3nY=TP>Y}zufN5d??C_}J)q@J`9u!EhyY9TZ z;%<-3Chyy>3R|STba;PVJp-jiqNAn5C; zvld4vmzcE};vHUu1q+~W8Blq*chB5=&_8yfT!ki5#TKfWwLRsg90O>(@yn(+7J-(s zYv{gVs*0U-*wGerXts+az@LaB(v!u33m~))4=FozWp$YjYI-+&@-~3Zk3e;YEMgaX z(YTGyfF|xjf7G~91C)~fOLmhgtZNai0K=xWjyPNnqX+5dR+`W`MC{E7ZrP_xEk`!f7vJLkVr4y*4pVp|M{yRl-A9uvL9YGqG$B}~bFyhF2+_@fy zYl7}2)t7NxRU?Hdj)){=qNBiz@z_EP0~kdEQk?_M{sl_bSSo0&NZi2aq$P_pWvcGw zf8jn3z!=>~L-Y&uLyn12s73}@Z|yYfO53;d90WD|5u zMSMcK=}O&7)vdlbAIgTDx7!eqf(oQJeS){EYRap+cA}LEKL+w%=Uz3KO14pT3YLaT z$XBgKX}nxeV^(&^&SXc96-}|G*)KttBSjpH`(*9`%WhED%OIT+NdHR}&6s(BUCF8+g=6esm6B98xWOQWgNN#jwgn1-&B@I$EzG`xQK07i7nYcO=pi))D>By+Rx<1u8nFr1* zSR>OSbQB_9y~^5^)X55?S(K{MB|2jDo{%f#bGgijgHlmD)4VYqqiou(mtArB6_-1g zSE0m2M9fx<&KN!L1Y~8e`{w#fla~hh+?X6*$(*0bW)c~hO=i5@z=q8eHhT{(`M2-M z?>YYwd@nySpJXbBFPZc5!;d^x`52ZmJXYB9qs_d-R^l$wu~^HHcd^(*rIdLG<-4e8 zVfcrS$;Tv8^BLUo7+`Sy53f#Lmro*nMcymqnX!gR=CT0U^4Mcr6j;S$Ii%-Rqs}^= z8pU8uiLQ&P&`3Uq|5?zM#}bbPTOO-;%p(kLmS2}(t&)5t027svN2MOy!V(HmNi2tz za@JL$R&0rCa6&=pcBtHSW7u?EL=|&)bi)&WD05EU8v+U(qQJatEpe6dx^-Ac zqtM~x`+;!ef?~}-gU*7%;gGJdE?40ZHB}fPR`OZWi~q~qP*iu;+EHAA;)x?g16%-% z8`>=}a*-^!P(YPYKC(%WpERULB#})NC4eMcK)zlTTah0ikgBahFiN((_(PDJyePNi zNfFXdK`ElJrYsNiv1kUotIHhoSRYVp8c76!Ar(z@3lD`ebsa+lvxP;DaY;&<-_PRs zk9Aee!#im@LEfGG?;_{hWKAI?6qk?0^Avzot1FmMeXC+p-YvYA{qo6BW~h6a;^ z&X6-GhrH~s);}m8%x!+~!ObW7eMKA{s(IT@Don`pQqgjAN`%wr8j>jFy51MjR+5`xu z`HxgqW#A<>B*7KoEFC=JC%G9Sm{i06nrtd3X)8xywiB>&z>R3=jezFK&BP`&7ENs* zS%8v2r^bmYx}aFC2$~-p(4Yevt5M--C5mxD2!ONt`5ai2Jf>R<1|?2esNyXx+et{% zQk0}f0oVaQ1_*q{0QFG9?&c6dmDy2M-G1EDJ8;(3@ z5o^|TqQtIlw|f}55V#9LoWW0H9huwC+5#T+*bXQF*!3m=$Kr%FUEM4m|75pZE4$Mh_`c3_D;mh`j|1E^M~YGRj%!ce}06)1$O zYIEChiaOF`-4<4_J*(AvE`=wBh&7#VXAYDkF%l@! zBQnOc;kIM6ERD1ePuNHs;kaRuKs;L4m1cDoMgZ6sh%asv|jFLz*F2 zGMJ&Fqe8brrpC8t*)51y7nMO(Sa$|s6_#EB2pm_m=QU!I>8y$SQ-UM{!X$1T^CHvO2Bn;niolF^o#_hf@up2N~R7lF;e3nSqosA;wcnI4#{_^uEWAA zI$Qv#X0Tt6q7qu*v9~L7F!>txG$vQ8CbsReQ=0~Ge0wu;uE1rX{b+fZj@ zr`n>*qkPejwpF8=SgfIfQt+x_s4N67%SG?*BrY{1rG%{~WCj}5I=ML1v{vp@1Kj_^-kX5gc@<~E=UeXWR%@3Rj4fNT z)z~Z!*x+CmV~jyf!hpfHOl+1I!fs4RCio%w{~4rbvM_kju3pqFsTXytwMzzU8G8a) zBm|Ox@e;|n1+wK$Yp=Jv@BY7U)j8kNYB466d1msbAF1!X-}$P}TBoW`opY+FDUgE7 z!jKb)wqh}2*qH+gvG|u2OzG_qB_;;PwJ0hv>>N=t3 zjrH1Dt|D`K`RJxhugob=rZJ1H=?pu9b|@RTizs3OlPfBXl;y`bR@F^*5i~v&22B9C z#BayTQRV>FCfp#{lI^8rk_bTTCFw`MGcQy^R7xkQF|-}Fw!#@ya8s_PS5A;B2}m!- zxW3{NpCrzrwOF04H6S>U4|-SV0RR(GIk?2-8*&pI>gP1C?WHy+YQ46VLm*_ptC~~< zS#P#LOHGU_%G@d>3x+5|iku_dn)Y$rJh9~|5~q^CMX-YINlL6~&#}0uC`z=9!V4R+ zgcFrghw2eH6hif=-nbeGdl$|DGSP7h+AC~{sd7 z+svp&OOP2K*0DBx@V{N*VaW2n^%GMbj8ba8U3#!pS|{k=E+=38PaoLLH4f+h;6o9$ z{>Y89bllmb^*7%%>!$L}(x&^%53FA@XG!IwtZedOYBEes22776#ZOI!|Co{i5jb!g z)4U2|WWt=l8{93EHwig`R0MiQ>I88CSF~;CfeXhX!=+e>a}(~O!Q;egL~2Kv^+w!P z?{8~HQ2N%!Haz1pXsL}CwdjoK<2j-Ji{npy$x zw;>(~DzY;x!gxv|P9k~#brNx;hgNKu;dg({hXUqp@nH|zzGLs#0z8$lj)j4!u+2X6 zJ|2O0>T3df+lo8({275gTvfx%9Xs_Au(0lL-?4MAzJ;wjzkSCp3)@>pA>NMSu06J( zt=o6_JBmAZ>m&CC@VINY;%=?zBavsDg8HTQ%whFZ%{Z5Jt4{p-eP?x#9D0|zV&(DI z{Zs!sX5sCCMo6St=I72gwewY-j+6vP)}J`*e^g=5=XEiQbI^IGcHXKPyTjD*BU3G! z>HP8TD!POE9UFppP?LlTpnq|C1LrqF)6K1-Q@ow|T|0NP8-X)PjDR%GP#sE>h|qBcLlpj9DrHoz=UW3WoxAwX+vD9|#%nNidP|1@0AaGw z9b`d(tl5>{y?4)E1!33%@O;`=b%%(V0VoTgJ$o$>J*y*L^0v(O%#Q3Xe|J%^!9=U) znEEWmb5u+`t@W1PyEQ632iYfr(%lB+j^ zmtasFMQQGy2T6Ol`i}Hqdxgy@VX!b(CHE@aimi$5p&g1n<$c6}F+Q;A9y$O+yH{U? z*vaBn>2~yKfcXLnvM3=I_!SOrfKCX7B=<;OFz-o~Q9ASTcNajc53v-!@oZx_BmLcZ z5T3q+Z5UXrSV@U1*i+gqSlp4~n*fwhU}JXg3HOx0rw!E%NhIN}%I-Zt+M9TzNNms8 zuHAc34ZO>kqc--I4ds!DkXQtnQ|e%1OL4)j%x-@#%gUJNY`_5K`)0od#QfSFynlp28tAZ%`kpjkygxc!0 zAz-WgE()?|g4Pq%y4&dCW_|pFFDlIxMXg0qbP>suPN@D75yp|DsJ`n}4ae`+CR-c* zVeA{x%n6z?r{Esuo>r|6bX+L-Z9&_y)u`bzsdV&1UW~5BR}=JiqMjfc*9dr8rl{*k zc~-@C-{=JZPT}{u7Hue;f3%`6{I;VqRPsSzBKkw#j38g?`T`1UE(q{`EmkW?W}$vtxlz^r zwyZ7yFg9%!E@n{YR)Io5zcx6K!z#jWTbjKNTIaaN{CXN;UB)%o*GKR(4)diUHO|ri zDK*9hnmHF?zs}Y$DF}aNW6u1JhDd=Y7e<}A60;w!ix}Wae=^q0Tyru5b(3*YB!sI* zwn8kD(<4|(Xsds8TrSd7|JW!Cqh4X-qu9WL#)X*^HsYCISzZ?_tdBE(&3uFK&A??C zA_T1YAp&S6f>)8DfJxafD+96OnnS=G7ceWQky9kRAPB+*AR;bhZD0nX;6&B_B%TIQ zksyP>b0LUQcrL={cO$&O9AhLR7m6qjJILsaTHfJUjlI?gbCZB^E~3h0!K!i^$I5cT zVHcBS0eS{ZvDAkzACbj0y2@k$t87S5E9Xa@hFe7#mhUUIfWI(y75EFk7!nOB{6Y#N z1yk!o3crxTFLp5lJA(&d6f|fwe;3WIc!Qu`N+yx8i+)T(L0R+TIR4IGF!PB*FP47x zO+-LoLvFbP#Pf(uIyn{#KGfF52Tl_Z*pOTGu*yVD3qU83(d=RS;U~0 zR}D12*|^|(A{?_$LY^M*ER%@jv()>6(h4FHB68*Vc)-e{PN@Y1u>S&$e})v2$!kp% zjA}Z%>UG8iKVu}l*TzAq5H(Hd=CGq1$9N*bF&euP@tGO9YVaV)u%C8BWo*sbW+RD?7anEs+y9y|EfIILOC4^4&U!%`chs1LF1w?T8c zO!bvf$WBpHmeK9kYGc;6w&2}StBydzib~PehUjkVTS0-Q!2BtUPkns@3nL3psF z?FW<6u9-t~5|boh7Q&N+jbFm09VbiWFeF4S5iJ|YcIh0NUt@|SUQt@l@2&pP=O2Ch zOiVF`h9xPFMYbT|+VwNS>xz7iUddDN^YSkdrc5RQA`IEd0DVN4&}pJ3;g%Yze}}H- z&ln!Mij5I@IzsW9QuT(@N&tpkH&4WXX}9(tmW=)jVxyr!o*68r?LmmaX;;ut5r367 z7BQOZYk$1h{C@R2^NkJsiVl_jGPg5zbm17@%yiMnn1(!B3|rWH^9~>A$pg32tTVKLn%t9=>uXsatcCP?uQJe@`V(V z%4}f?=-vgGluTHF-kxIxD)|KaVRk42i5q;>!5Y9ek$GK*BB{ER)z_8T*qR}t{y!T28C*93eQ;9pr{t@+Ulk= zpt+#OSTC+OX@-H^4xOxi=A1{5T#yj6$~wqDsC|iCWvoj?Y@ZXc5}~S$8C%dhe5&(& zlpHDdIb|afecngUSru)mcYQ1}Aw0x>U?6d>hP=ecx4uoy24FI6U^4QTqdkCs_s}`J z>q}07ph-jQ6w(EF%VrKHI|OO- z%wW972n4lHxDIjO?3{UKz$zM28EP1`c{mXFt)P90ZARo886beVn)QPQqxDg6ukCqJ zN7&n}Ae+oy2h@7;k2;v>f2u8Wj34bdvSep#$g{BZ-vV(&dy`^;VD#E)#>)vpK)!Lf8*l?qjTJG;7AJ^?<>$3ExM? zm1JHTrC#-Ww@d_Yc9sLQ1QG{p~+hWS}g^WL1Sluoq;+FLvwruEpm2($+2>OaNZwRt4EU7 zQSy_F8Fc1>;Oc7iYM7PGi{v;|V-kF7q-{q3x;KNtRA~9P>;xX{)ieMsG-JAoxiX>; z%M9g!V}@eL5ux`=uvrmKwUASnn#v1&rcnAFjbL00P_Oz%kxpFr!Qe!3gwWYmp-};o zQw>HGR(7G1L{gWXrprBqEcVRfR;wYdv04m=`C>j_ijTC6szbSi%$_x5TZ1iyiQrfIM&aFE8A|l;~ zus98hj*$7y8m*w#MJ7g|I_n{o>)))^!q~wrZf9m3ah!qF_CL{Sy=snI-PY2G_B!sc zP*yR-sdCF}-v^K#mZ*_o|AgfkV zP*RA?hK1XwP^1dCBnqpc6WxNgs)}-I9j)`+q0ns#;6l=^HZ!G|l5RPSBE$7CEr^UA zX>I#FWUA^ApbFGRz^GivPi{7hqID4nFxHvX(PIRr7L!Sdh zDh87Zdmf$4ork5mA&s0y&gk{36QvTo5Z4nqn96td)skP3AOXt$zKiS*ocFp%mPNlaX8 zwH>uP08&b7%If?UFpLW^)EqZzZT}78UH zw4JM5{8H3uo(gmOlX4uAegOp}KhFWgS@^^1_I63br%S6%EH;@|a5h;x8cM>u!Pl;s$m?+oD6tE`Y{xDzuZFr7 zEfQg76S42C8bU4d@duc2BoI*pVQ6uN39Ha?-{%D<{Np8LWcL^KZ>fLV>GS&yrktF& zp(4)#_EgG4Z(|(nqC?cNx&CJ@?}b^Gm(L zZ_?skYX)`Bs#=z^JYHsA);Xz47b(G+7x79bohnph$~<>M8{%tWL;mc~@B{xnv?`%m zU1mn@M2g=zYarfPbvb$$oBS>{FX^oKbhPsoS@bS7c{SxtVz684UuMcb|0&rbW(Yrf z<@0m$`6+Z;dGqh#b6}I%QLSEXIo15F*aUsayKhMl<)~MwWPgSwaF!ogSGsgS~iWb(f9N_{uz$tn2h1^VIZX2J8 zT*g!c+%bs7+Y8Y^bG2kG&ogD#la{cPcY9T+YNoEzm{<_&AaduTtc+y_DCw{e?I|() zMQbh&ClR2o(4H3!l80`SRGRA&shQL?tNeFl9ND{r_`vH+x+;jMPgM*q6tTB#E#NvV zPkg5OD_HjDJ$D(ju)lMg!Il}t6#9?vFmJ4~{SmFI6scyN0X#HMI3u^^RxuG%?a+my zBWGF=K*G)r4pWD&6LW4=5ViT3Y9K7yS;lFngw;`v;nv=bwXtJ(F{-K}M0N9lM1t*@ zXN*ysc*dM``@)VTTJ*rYOr?a#JVHntxzZ8sj$#9|v~c~wE&OtXg(@aUN#9JrDVL?uYjH!S3sasTy?xCfTjG?6iP zlV^yP;SFjC$42q~*O~kRJ%sQ!lfND9L7Q+0My%ZOQ+Bz=4#zvf1EO1yT zy!3&xPNWrFrK_d>rDtH*=b8h@#(w^OcM?8x`r<>+Et%@Y&=ZFpQ{mwPbj>rby8-M! zGAX#xjF^V-45-3G_KhWm(EKU`o){Su+(1U`g509cjKo}IJ_>(Pgdcm^(1zfKkqI2L zywTyUB^yw?f(*!uKfi`3{G&;rZ75v*sf zet)(40RXAhz>VBO#}$Mr0Bgj)k?}^q{^W}NzrG%5Vl4n^r&c6EwfNbCeec8y#<2-e zJg1}46O9K;J+c588mD8=5MMAhUIgU@mRHV2B+|eP`|?F5AF8&4hM?Q=O1>5dqhKSc zlX4xnFk%=kWkJk1m~=w7!K{b}s>&EyzT68!9(v4}eN~t^lyBfL*a2kkig;4@z#LZq zm*h)*yz0kCXBZRyG|~~M8*->Q%Rv4Vmt+*VEOMJhJU)$NKU8fo=ISr&BQ$8ooD@yA zzuY;cG1fy)E%|0Rcs^Gb?!XjqyI|2tQ|PwiF(WLZg;t&i#vLNS`8p~*s`eaFwZ|^n zbOs$r@WMP>iU0920^jsa(2MMY6Jwc{Ws0?dl8%lTvDvP1c2eLA#nwFA)tk zYE>dbGm_M)Jabah-D*E#XM%=`S_Ly>4kuMEo9b5lr(s#uGn3ZG;*Duxkg$YV1~^7$ zDC-ZOE00a_1k2fO6DZD`Gf&tn#ke=m~IOin2}0{ZB(1A2mQ>)q1lbAz`O#g zNl|t@u7DEx4cSbn{iaGxrp#6Tajtge6{Z5AiXMgK9|VeC4P=qzSD$xhIPGz~l&A!b zY;GLj3O};BTb5|mE;kQ!)E&kcrK%LfQr(HoF{^Bm=&ewsd4zLP#At*dBZzsfX9=t@ zEa*VHBG8n$1cyLNJn&Qu7Ichbgdrd}gFE^FW(BK9Mbb}LWQ;Hf1Z!@8kvlff!mRd0 zfhVW!bWp*yYE0fP$FN0g7i7lS+jYc!b5zwQdkoLobbkDIK+a%n0;Tw+-V@3ab;UAA zkB{I1k_!)HethT^i_~lJ>vQ&34kFK8tI3!?t25g<4Hgg|7{Y@)Trz5h{5_AOL*g?+ zKX>apJF7AObY`0(yv`jOiiDUSe$uJTMpH)M z=Ac`R+N9Jj&9zRdilrwHg$dBachetdQmpdqW`4X+1FeY%2e3A@3e(q5fgkW}CKPBa z@yMa=O79x<5C!c!v6FQ;R*^?^s3)B3#wJOMHqhBmMH@6H=W|k~bYy45wL>48gDKiD z(FP3}1+fzvaxtq+-tEQ)=5UHMj7ex#QnU`?7T@ah{fh%E6KrJ zZNs?P3_Us7?qe&o5-|@%73Yzij999tYiq|$yashBBEE4w|NdD)`VgW019<)Om=K|8eFztbaxzT!($-Sa1&WjX9rhQJ* z=EkaGtr@+>TC90QueisUUVK+B21&XTd4U;J0h+LOCl{s1zi{}UEdeD?>tVt>?uyfg zoF+>iOPIV<6K+hX2uB7Sl|Wf=%r!7az)LYrESCjhYQFJozUqyU(E`|xy;3*D9Eh1L z(MbZ3a=@yJaVj!dfJ_`?B_dXa3H};mj(`rUj zGpzImZS?jh#twcGXY(xK3CTg*wD)X~uEZyD8ipQTx0xML-vwwr?%?p^4H9pc@iLmo zD>$=b@_V%@4&RCq2~36DD%yEF1Enc%k4zt9+;czsFMv<&$~Olr7dsP~U0r=#=@4B! zhF_l$1Fqr;B`jx7Mcv31^R)|T-eOxV_ae>lnEV;&3Ml3EcIk`XUsd}S zkN^7SloFg1;VH7xT?lfGKIxRoT@cZeEP~BpB`>IVTm*+O39scTP%eIvMv6k(k?3To zRRfV$tEWQeAy-`POFrbPuy{mk*vfxFEl%2%t)(FjB~oec#Xe)4XxGP8?6g_33CutH z@!~c?M6ppgPSgc5mPpA{S1(6v+%z3oj&m}Z%4M>k3zgtJm0Rb+ws<-*`KCXSs7FPU z3P3-kd{WSJ7hBf)3uxO%*W!Py+D7vJQgZ@g8vhec5u8N76um7=4zf#YjU%JwZqCGX zlJg|#&fLV{d`6^f=5OGeM3 zG4m(dQ7kE4Bm~5LVXwL%@q3OL9ooCV@)dG^)hY_ANTDa)59kHvgP^92I}8-F6o=-S zXwTmn-bjMp?fdFM-gfPQEQ-QVSP=hU{dY>C`zF?hzwTp7xg`e&feN7_9Ch|I_YH() zKg~ixva5_V_{&afa^C>Iv${8n{D)P_&3oN5ER$SEOL)oYOzxYn|FpU{L_>#a4o^PD$7PupOz?Ly~3J#vnGJSH~isR}|<{32-M5F3fdm=#QnSvg$@~Z>xG#>Wn zkN0=agE}&-1FA}lQUJ{X6+OFw0mY3d-qaP5Air^sWC3^-htfWCZ;w6rT7u4qZ`{dq z#QW?H{|kpPNE1DBSmOXZPFSG;{yD1&rC4#GdVyCxY8Qr<_k)qDSs-KjlSx3dOCePq zfoRnS%k@!ty?%nNtz;4qIfluV-f0ImYLW-|z^l#NJBt79$lyS~*Y6FK`v>~7{gtuO zjFMOOO25U+X~ddV8ZVbhW&A;HNakzb7R!7&G2h?tvNF*Bzxi!Ys+3DXX|kHR!e2Rv zUk*}zHX#T1Iw$?zKQMsau3^8~5`1(y`bYZie>F_ME6c~oh9$pTL{UW@roTKUfvzQL zab@t-v{U2#r%v^s>hHI&kLJh60u2aU8Nz@RQE}3XkjGyhE&SWw`iL@IizvgBW_;$C zs8jTEI!M=d)pR%;wV{yX?|W(^zJZ0+@yxq*LmU;-_FvPnmJB^z=cgVN}u# zpjFaI>B7(abnxlfPfOR#{&M;AyPufz1Rnn6PXErzSMIF4v;4)LAI)8AZSg z#Rf#<0gi-tK~xwYkz`Uhw+@9gc};_?6ibn4G7QQTY?+pZ&VP2j)W>TYATXg3 zdxlj)kR4?20U^u2a*Y`IY%B6^YHn&-Pajl8R)<}S;69A9RyP6qbFEEmtW-VjR0NRH z;6;d!NDQxs;fSPPU;KPqv-A$UbaLQ0avISFam4^WJq>>1^BY>wm+VZmQwD%BbMgrL zhDcw%GXz@0Bh}#8;0AboU@zk8>Bjs9#8X1vfX0}D8YV!Gd|@N9l@4s%=xrQfLs=8X zi1N0~Oyyks!Y1Szw2g0Q+q4Pvi5~H7fWkCj34m>3TYe+@P3TL4F;%(|mu(hChVhZm z@g;aq!G^_&FSesq8`v;Ly3*nivyM^R2%U4o0%LYyP73tK4Q=c*ogxg6hnA(G)#E_% zOC8A9N3&2}3(d%Y4tmVy%_BY)x*0h6rA{Dh0*OmFC{{*EB%M3=cmh-WQYT>jO}Pk| z^pr{0S|Cr}0Z0U3Vs}VAgz^Ykvt>+)&cOjDfh1wh@y;&1MF7e~RvLsY%FM!T zJ|kRq3*v&J9g-lE~>`pp*;%K?K0CIv4PkKmSt#Afg1h_ptM@jZ4uBs z*O#;4*rD|*Sl&QeTGyI`fj zF%5HJ3&AAG-*OI;$~{aeU9gf-N+(IE+45@l_FPnY!UJ-W0$+ukaB^hQr}KIl%uXsY7z;r1$|f;p$$LibjB#cN5C~(l#q+kz02qUh`kO0VF(7$JOo+{QDMeP^}7&Xjcype8v7%AJOIj{Te3IenwEeLU<5 zzD`&K!()(OglCmv{dR9tW#gve813r;HXFS047W3Aj}OMm<3ocmbq{%iBSV8jgM&ju zgSnsVx<7Nj!u#W5G55!?f*6B^KI8}gh#%wnLuDX)gC)iF#{Ds@DhP>nheegOi#IkZ zsd%B~jsp*6rjSc`JMOuXi+JE33los36z+{zT(vzZ+K-F2*yUu|T>MCtemm@B(IZ+k zGjK(t4w<-I)=&#oG@qU9k6AqS2JyV1I){SSlj4NZRP>rFDHudaK?04<#r$EG^!R%!10m#_6uU+R$sYn?f z@`r-qnxWF@PdNdSm2-ngG&G;DFg~nTI8=iIe!7zgId3G$`6C{_^SO~h?r?eoMQlCx z4`45;zchG!D`S-Jn9fKD*_}!F@!ZHT5C(xz;x|TOV0`#Ef^Y2EyJz|y1X{}OtmH=g zsDKg>06a$ELEw?J21-N6ckP*-fcA3bk=%$URq}F`;eil)S|tZQI&@+e^T+>bDI{+s zmm9HvLjwVDioi*f5$vf%IG$~CgfcS3=CV2tXO#6~ISHfymCB=XEXE(HIGi$?!p0YY zvUd*xlC6JSyEy?ZPyv(zrhj+Ar5$kVrZ7NtLCMdKQ}3lS_3$(f z2Ps8sm!vA~CN?KG5{?vylw{8Y2_j{87V#zD0`9wBEes5@-E;QT?Dd8U!$U*E!$aOs zCHg3me9-?SB`_IK_pvS8W^F6&T>k%jBl8W+4@diUoXA={WqZL;VQ~0($L6k?U8SvG zS^UAw2Mdy!P)lZTR5=PiiBclytj)!3e|EzyOTr}usisUQQ~~2ERRBlz51_Ez$h`K2pMq!p+NQrh4H3xm)Q_vB-mtj z4Z(aez|+C}!Dv)C&iKdS@of`R@Ms7-ko7=UlK~`@5v@zQfN|F+8O#4rUv$c}3H1O6 zM#Jn!FmM#Vq<;a8AEI@n>LJY|vGGqHz+F{2fn>n6R#HiHw*Y|*UH{omV<{0hDa(#L zz{7!@8&06HOP~O0t=KzgXA*v7D8u;>4tc|+q2ZBXf7lxdhbtq)-f%H@qP=_b%*~~( zLWHH~k34q-#}S?@9eM7#BRrFEBs@}iUO$2(#f^T+9@!V2lrjPukyf_*)E~@;J$qi?aS;dKE!WtpZ8E% zzJrIneR-xm^uU(PmP+rI8iz6Zpn&qj15oK9!27_f-B)1-IHv6PQ}+8Q`~5(HI}cO#`zibVl>L5S%6>m(zn`+- z>#_l79XEG%b=Kf)PZ=ln0-W0M+ehW-9?qBXaOOBqisJMcwg_r_y{#4jC+B!-FV7=` z7SC%h@(3YPM~UfU4#gD|YeFrxu<;m+hl_FOlBYgV z+VrS2i)Tw?r+DpSil(RTHV1lAb4G6&6-3EhX_N^i`SyHnhy!BdTiFxnbK4V9le|ql z4~h2Z!NkotOcmmoYhK}bRx!~7wGpVEu$21v3Xc9t<&HC!H5eOa9pda^=nk2Bo6-J> zknCFYYqGI8t%zf(A&!Jjijn2GBX8RtJ)z0tjk70*_u2=UKmSWxClJ{gv0h5m%Mlod z&ch+kbk&Zbv1m4%A#FLmAP>hX(>MbO95x>fDw2>R!kUP1aw3AzhEO7pQ%l9>O(?|T zAb(U0Q%8?_j=K}+JfT?-`f%NON(-?F=rNvJ#o0a_APr9g9v5K1dL84;U7>MkP)Xdw zSx=k0FOyXB#(CJhok;G0ZCNJ7S-lk!H;x;oz=Mv0jvPpmhuTxXoC#y>ZYe)>pq@SS z8nOzh$yo#>D_oQ+WTL~dXA=&Pj_}KX3OXtTB~Zm4kPo(;-OD4GVdsdH%3M&ppmUsK zr}LY{I0M%dl5p%D!1cJ z>JfHEwuBw-p1E@3vWP}?bxuRMQhY&k^fnhIOTTB@mYF>`9=y2>W?92Ij}Ovd*d1`h zaf}o>fPKv4)d(4$?w$ZA^Lx(i3A=F|*rKokWpDz2a|s!P$(@JSIn4Jik{terGE8_v z9dTB^hy6LDXF8@jkCksmmxRnpJ_5Oh!KChN&pZVwFe_39fY^&@4F|c>+2x}%dBC~0 zdlrwsqimi<4LKqJ5&|v*)#n&`9J=o5n`^ri62m~A)P>sn80WA{+WPL#z##>cC>M)WQPcrc2|;_Pb%9n5x+71njl z=^PgTybrVsgt3uxvOec_dN>)4jt@95WPoPi)%l%1&J&{}{jM3P`FWkwJ8-L^hm;2?=Xo7oPYH4tRYvZbMowz;%&U$_aiO4c|ywmgS=zjuv?H;GR%+l!{Guwl1av)?z zstL$DIC}|MmSN@G^E=LIXP^4$2APF2VWBaAg7F%N=eP51ZD-iww-dwbz^JffOxsQE zuWA>fszv@@d!?h@Ysb`*f2>p3ab7!{N=YttU=;_DE&7a5tZaKn231qZv1!&O87~q% zCO+N^h@H?v{748;le0JRK(e+#IXVedrZsa0YE3&1D$iwpG8QOD$3jS(^`&N%X)i%JI>zkz#WJhJpo;}Da$D`gAJ?09FU%k-qvms z3YDU!5o9`a99ByDepCB2DK^|BV~dZVBimV&DxfX$EfW;oMvPe~vPi`UeGeYZE~y1^ zmQdraunU;dQ>yCCY|o%~q;xycA-ORr0Zh8ikSscC?k_*Ee#x9Am5(B--oMX>?ER&^ zi8kyk?`@14gomc&L+Z`Hmxn!ZMfa8;Xo=eMjndM;xMj)ACH^g!m}wvUT~oWHe9PY; z<~P6Z`TxQ9v?Y~qp&9n;-zRaVYCT1%QhJ36=GXytxcB9Pn=ON_h}7vKmp8ZGpN$0s zLE)B}pr}$KeIYW2X@0dqG|^?JLyjZXyMz^m7eodog%@l@ET05!C30l=QGsJn(;{x0 zP6o&TstPy^0LC&!@X;2N&JwTM5YV)h;mDVyO8MHD+kRU?5 zUugZJf+N6d@>bu1dponcg5BkPS|P-9nq56A-dF)n$Eb+UK~K27lE07qiQp#@uB~pe z2rj~yp{TSNvm%I+%dmJ$%K^E2l>dgKBPqJtLD{Wb!N8S%f}OB`>Tzg=;(Qez8x zhfj5$k0Qh^E@HRXC>Zp+Ef~JV$m}A<#m4Uqwg%{n%#HwqT7Hme0n!MUMVc3-g-8n| zO`*bGO{qaE%MTDQgOmVxwLA1VE6>C!e|I+C*Wfus9wFZI8GZ`@AA(Z#eYtl_FYcd8 zT4{%%(4Yu<4pGC>j_(kORzNn~+fkNh-o)m!KH=(T7x3G`&)B*Hxxw|w)%H+*>Jhs&Rs#&&EjZ~20`$^>1( z=F*n0_|O4su;f4e$DMq|buDT=of%4aU+1vJKz}D zp6UCizC(S_7=zc(9P$p0#z|nQPxtj5`lWdq>E%9t7Wzyd07LV4zr>e0hz~qJ^NVK= zAxZ@vmi@BtUlJ(?4)r~8sPEvi1AT`Mn8yfnpzi=j_z*_q(9aC&w2U8u`}8y0Oe*Cm zR0yw7J@bo0eNP+I5<*N+K}*rM*H?J}-R=^O_Z@062Z;D&U*9%Vtj{2W$qcek5z<)c^53p;|gNGhBj~_bp)RTt}9R&I_=vkX$p6ToRr)QADhUC#vd|P8GzwGn+ zia+Y>J8;N9R56FL{O}G{`t*^b81z-11|5$*)AtjD4*Q8&>c7VR{Cqb`hMqZ`$sI}Kt7S}ihsWss~{pA<13SH&FXQjY@<$%cVzUDwKiSSPrntIaZ! z5OQ;bFv{xbkh`RU)D#e-GVnr-HK=L{zJ-uiUo`CK5G95vg_(ian?Q@QP9-sO!Xl&f z-@-6p*o~5e5QoqON3j4rR2h@56@-j7uZ|}jBN(U-fl0>z2I%?ym~_+wFzF=5873W~ z!BVqjEP~^Z+LYYZgT1L+d-U*4oOFnBKo|)^g7!NBWD;szl#BE~vhn~yWxug1VQm8Gt4 zTqsOU9A~Ipf{;eA5Ms;=4FMeeB&8{}MM+VhAzBa-l2rLu_Z?$Hvb`+|!iI423#yELqrum> zJj4Tot|90R*Mf+eir6UA%(zBDJ%GBx5nL)F@`+SLWTQbd5i~`EvGv_T&7 z0>5$*u{1QUa*|Un@KMaavgV~EtBQj8F;b>RK8eCd>c}wq*@RHY!!`nzhRD^TqVSOp ztJb`jU{A)y@6#x`5st=>jBye?3FBp>tHCP7VB(5&!o@(kz+6y;$w!>aWfKeup?q9i zH4T>=no~CJnu~x0@}~?FcXL3ExDrrZU^NYboROGomVZS&DTHr5h6u7`jw3PUA(H(7woUy|$#{4|_Ml~_i5mu|)i`;ffyM4Uk4DmF z-b4w*xf}&rM4)aNN275*m-;uSXRI5nf93b3=u=Q44U`ySCsr?))B#!{lT!B$v`MI~ z(X~(M^L6H!vnV=YsnoYLc%6~xi4yY)F}Uqak95j<^8ze9pU?nTZaPPz0&gV@qC~TD z;~NQt*GMhSGE*#D5$L{nJ_C@w15;~h*q{pFzcs)(R(cZHyP)6pSUS>k|?saSli1yx=oa*u)Zl+GhrmrinF^jJItC zj)rN3Z25kQQb}7`{8@9j6Qg77d5Mk+tN345mwfG`7$cFpSSkV7A^n=f7)w#Xa*qqj zKm0x*jjJ!Gql*$3m{CWw6rv0>4nd13yB9_EM|u0I*HK^*LId(vPF6Fpe&#J%$HFy( zI@uP&<>$@cg{ZQRSVMgL1e*Ob<(f0hI1RN1>xxU&GK&=IRA&Evrcg_P_dFY$3)i7%2XJ+Unn?m9Qoj6{G5e|@K}kvYQe=nxgN-Da(7iCv zoc@&vNa+Bai$#(MN|88{+#DGZ1xz$AJ`QJ16pfP47+)7qSuw{Xie#*Y39;$pu!}`0 zk;$U)xJo8tvTNe#L|Ky%2H;YJf@h7ata#7M=82;XHj#h!8H4AjWn7bB9@5abH74gM zMMz^vNo774ixI6rRwrnsR9;V}DZz0OvfdI4BA{DMEE^MxpC%SOzTp?t#s2FbfmIZr zsh*sP@6scOuQN--ugYo^FR|WSYW`sYH6ZYPTFbUk>L-v)k<#5+YV>W#AQU7)0|^|fVgW}lSPP0da|WO@00RMff(C)Yo5p3E#@!qJ^yC zCG}o?1r{aq@}l}n0U;S&Y!(X0{6&i{Vh!t|do8Me3o{`0eAckOw5T3}U2E9G8aBd# zF>2U@8up+<-6P93BgMc|c=u-3uajqcjbR!b&%!zHg~soBRuXXor42s-+}+dKMSvc2 zOHX%KJ75YeIA+V!CSK36PSZ&!g0>6P@}8bX*086t3`Gog_q3Q6LiF@3M(Ow@WfDKLp5J~+ZPhhvLQ4N#yc9xFNLdw!Y{_#@zo zy6%X0A{J{CW{+ElFh*x0F8GLLi=RE%hrrFT+_b8L)gL0wO7^Cg1_0Fc;@eF@SASQV zLe_9a_fAvLMH*gdPhgS4cD>z<+DbzF{w^M*NZRj~W~h@vFawfI?#;5C!2*VY7!S8= zP-~b-xwIt*y4;Lw`F3GTVH!zetB8eWD9w{mX;pQhe`uxIm&|S`Er&yMbOJkeS}>Rl z+sGkNt`&>m3OJ8BI)N2C{TM+#wNqS)IN%V8;53mWR<)y+l58!36N%q6PA(!W)XIzt z6-7uRN!gnws-uyreZ&!vEQ7)cVpsLAU!H-YFhq7NWmObwXxN}u>Izd#8RK9VPTr$t z>Fi5QXYhVg{T{_!9X`|4oA^8>g+t@|ItiT5A z4OkI5;EDRz3Ud?C`GhBvH0Re#19<-d9p4RZ(%ofneE>IQdV0E8L_ppc_P#syzv{=WQJb3&`XYs(;8$I8G z8aVa>vE|gPgH{BK78b20lZiqz)E6TCyT)l*2dx|y+gP;bbi&!GYZvh#jvf9Q(X+6V zZ-p_|XGcu5D0LFrtyWR_rFCx-bqi&ZEnI<35y)aH>d0zA6$!!`@NhdcZkde28u$~# zkYWu8as7eENB3U}&HUv2Cm*remv4UUQcoGHtf^9(r zqJf~@F{dXYajY_WSe`>}-!QI<7+KG_vYz)g1Py1Iapp#74@`)EFF9o_=0uAdu6sQ= z(mZoz!%VIJLhuh9w5Z2H3-S}HUa0*1dRD$3m4`~j$}a*d!j^q~d6B6P@vB08Y#gj7 z$;13bUj137f6=AP6imtTGSqs^DQC!LSUK9o$^++_9AFim%+0Gu#hs3p!^oa*ju7wrufn*hpuFm1Z?s=Fb#p@?H5rcVzra+`%)B6l)RT+_qfQB~q%4%*Yx zvP___>_L=w&@dV41mT&O8l0(Fb1ac!fMfNuwCv0!*rlTNCsK^vH=yLqm}gVRhU5%j zwfcdD(QYRecXpCU8t0h`&P?*eP$^o(15)9_8$`acK9?F#~{&YJ525f6IX;I^6p3J5yT9`2{*XxwNnHBk_MbmC z>#@o&7+2)0fBcm@XWUu(3ZhHTx#MzExn;>L+zVO)quHGQOTOpbbh(*xqxWz8tlV_t ztXGhUcN3wmHIsRW)yI^qR(sYyx)rp%<#0bG2Bof z;06dynoVb;*cH5H4wnkJ4IBW%+mPYG$e<1T&@iA1#AdlC@3n^;{S97QwpH$q@jNB& zVu_7?wkce+e&>$u+i-DVtIrT!Fu8T$U?pH%S_2>eR4lD?Ou2R;wAq?P!6n6oUqvv$ z?D{g|6Z-4D7Kouww}dTTbI_D;ZfS06YJoT^f4ZqTZ1$SUh-2tA7a7hFsg+MPg-u=~ zLNjI%WfF*=Y7F@#AATbeZb#5Yf88)cN+KR3KO2d6``U1AY0bK|Yy34Heym-`BK~kS z9?PrOt_d}9EfVveK;X;Ot5%1r$5*aigP@sfkXZP{%2g{@uJTp|E64GJ@0sbxSJtld zR#jH63RYciN*@PIu(GlOALUg9Mr}U6B3v=He8tL@E0(WZvC?08Id-+~TOKa=SCp2o zAS4s+UG6Wh+_%D8QNC~a3V#KmMn87XefQma-}2@6F8A;b03K3LeC(ck@3~iB+_(I` z`;fy5)T8vVd+xb6xYxU{a_@cKeTC&fV{-YnyYKbyElNh2`^r(8hqQa|BSrz4EME@L zvD@yx=kB}jMdlt7??u)q7Ud!N9;V_yJ{)v`$#>u5-;+ZsKv8REQe-Ab9bqc+K&sU4 zw!81XC%9+i?o=L?+wRWX?cJM4?Un{0N2n~&qqp6|%CmHTMFs;@{1{91SJZ+6NFk-$ zP#y2S5_`j29;`r+R2i8?SHEr6+bY*m-I&IYI`>hi19#x6dfXa4%$v-Bq+N;^YRo`V ziAhwK3wk%>$~c9oIELx~^l`W@vJL?8&1R_1E%#|t#u9L}&Mn|kcBKy~ah)dpH4Ul_ z0(2m>gv8HasEAM_OW5!i0Rl%L!~}z5?2z~#Wd!HQ0E|H>0trSzAHEEB@z6d5yYRLY zdJzkh5jt!*iZK_>1I~V#zeK;N!H)oc5_m%bYRCsebbO8RaRLp$!6GEih5g~}%P|NB z3qqYd2G+31wlLO;g$P=${D7}8)C|!@031aO(V!&WJ_aH2AF8v_F@W{JmRShI7=<#) zFhq%j(l~ox@xi@&_w3E?9fc=G{Ce;%Rwzmtsp=G&9jKQaZypZ1@`$e z>gPQYvRJJsE6E11cC!_x@_kolZLu^U%gh4ev33>`twl>%w}8EY-_nlo;Ua*dGF_jP z*i@B*=7Z51Qk z;Pu%$AgP9U50~-Ed*od0Tl)@U&+c{|Iydh462?cULf(0g%!^-Xn?2hrta0My;NO1l zVfpvHhadhPew_8a(j$96eDj=}aRUB33}Uv&XJ|5yA7||;-QV-x_s@AhXzM%CtMlU2 zGB6|_n}DB#7h4p3T(jD{=ln$4caa5XKAD#P4xU|^=f<$iID-IeuZoi@-_=S<^%Cg? z)=a~-v1YacsIMfV6|as{nXTX_s#W=pCS4GNA!*^6o@{aR2b*a|;|StRKN0*A3_=DZ}fSg+gWl=G}l9 zX=)}E^R><06kvd*>%@t!c-p1+<`BM#-;J{cSJr^Qymj2u@>_Di<5Xjhz!5pHw1)2mS{eID0rs5AD_5aY zf;B#H2JP4Z3EPXp-cS?|V4-1B!(c@jrFkoZRkkR$tqh{X7~tAF2TpnA7z^v!B1pa< zWmZ;Jt@c)jYy7qBj$xq^@=KN!fNS8;J^F%83Izc>U_{8QsjOYcu^vF}*nfhf)uRJ* z*x<`4tPINV)?zEqXRo)AG8}hBFN~ucw1&mxxvzxg1S>;~6p=i1IdRG|Ey-<%Q8^GH zhY6EJx(&NBVFH7cRM5u2SEUjzI1CQ8DTdwW!PsI8h(i=;?T7~^>UiCt3=>E~%3@I= z_KYyND_4<@FhHOqzY!amQai5=2*RWVL+Ta)0ozHd!c{)$fb)t(?r61)5)g$#+C$EQ z{Zt(0!q!xX;S52kEP*JbR7}OTAuU14l<)-{;*z~aAHyGjvb}XRN}|e<3W9*iR|H{8 z0XV$1lG#^QuL;&<}CieDJT@ucBa3! z7Qi}}$rim01;UbgD++1}i4~rP1_n*oAtpB@?3luKz8lRO!@;aonCqN;AwXpkHHXsQ zaPG5VTw$*Ts9!CCnXK^uSGTUVG1JV=WncQuW?b%|&|^lkkdchTigo!5ld1n=^% zExqeK=W&SF&OwE0NO9k)fyvgxbG9)922*PJRxJ|dtg8cV*j$#US?gvr)-;#@JKxM$ zHxqAAuslt}QKMd>AQvm56%m6|oX#&h)N3_0c( z`HE;balB1x~o`2}|j4>vfg5MK)?ebID@ zB+ta?^T-}ynRGX^9!lOe`0J$$mzI`&y$0#_Vv3xYxYjvvPP=oalWKZ*=Jz-4w|o8? zp0i6zA6;?_ZWsOT|8abX{fzU&7Wo*A-40StTknL7AyC|`E(=As@DcSvAN}nfoKKc^ zeJ$Y4|3#Vl@}=kD8rpYF#d#OP2@xKo$AvX|96B5Q3<2luhqDNJ5kNAJX-e|BdPo$) zeF656c>za~;Xo88DtX+V1A7iLU{cES;EAg93z|48iu(uFy`XhAFnSngS0>z<&YI^w zP}Ms)tO)+B+ljR20bJBcU#iB*+Ux%j)#N?c)Ok^p_Cw%Rlh>|sQztb2KYSU8at8+` z>Tw#mJdpNFpoEF@GrSyIYx+kCtXC^iSZN;x5tg1d?(Zj-Ua3f8O>|b^(Al&Y009Rp(LEI!(gW2Z3 z2EIrLIPERh>2VK5j{#$BqkGQBQ}>+RxdZ54@hRfRlsxEZ#15}sYd-y+vpu2^n&;ec zVGNMHqlNn!*0soFH=PUgG&3LU^_V*^%%K$mk=q%hUOSqBNnds5dE{Di%pDpQJfRQV z%@C@$H~c1Eb&l}t>Eeh&a67}|xdBBtyDK<3d#Ien)R=yEh*(M`rQpWcJFL4AH>5b7 zmAL0Tj+5nb?jmbmb_a=ZEkj*F@HUrt9Ek?j-F0@?pyhxD_HOk|F-9`FRbRp#4UoW3 zlmu`co}43Na=5j}U%Wj3YQ2nucbu-|BxA;1qsKcEi@ipVYdd_xa%(}=oQodjUHUrw z;RxC7=@dBZ<@LVlX6Rk18#x*C99;{m544!Wu%~z^{Q#T-9NS||Z?#%)o=n}x$(X-) zE@~Y4u)f4}--#R6rf4G9G=RY5OJ2}%EQZJ;^ze=OU<9rSS{;u3cwK~AcN z=2xd*=Bi%AcVt3(^~atlB<&|}=wwX)Y1g^xoZB1V@P;Y9uoJ#d~+&6M<5#xVS*HWvE%*S^Xw%s zWI!6hWys`BF?VmUZh}7(xWPK3#|H0Jkqo1bQ-@h=J$%%eT=g3@?8e$}R^j%8F3ED$ zxze%bT$ciWy{f~OX57mT9}!AX!3H`TO3S-g%^`ye%u{c~Kv~)l!g~CwA0M4zO!(8+ zxMbs$8)Cq4OG>cf3-|R>{yRpqkwT-{k2irx)n5lon<&U4=Smj3y2iP4q5J5xrw$CY zQ(hE$FmVT+odlwALaW~it)F3x>UrposyhI9CD0D03MGtVLRJkxR>jViAV6wO&VOsQ zdX*2?wY+wol1f3^EeAToX)U-bUJJ)IOZ^7n3-HEqyZFE&GkB-ExE_mqS!K-e2_EW| zCwS(By}T6NX99!Z6*4S9BIj12c}m9Zv1qs~KX4jJ%mRMOtFD6VbPi}&qK05@>Zn>) zaNGgltyN;c7%Z|=Jb3j8-KV2_(q0U8FWuzFQmH0JjPEP~k&_y%#Ik_oT_@!l7 z92G^bs({+72c-uta_)z|u^%fR zDj>L}xPY^mpLFd5XCJrAGd}rTYsN@Kh97(eSF}pU0W_+7n4iVN6dus1^yV;rC`-UK z*o0J}It27wLSksYpAenHULAH+mA)azg^3_1#DyXcQfe4`d)Sbu#NWV3LYPRwP#a@u zq5Mk}-cig|OH{o5sBd%?$jT;kjRcZj9~Od|3@ITNVx&QLaX4{lGAb=J&xnc<>lg63 zMiC*3g}pPJ@L@5M5Etm00IueodLga`_yJx_C0Arfr0w$7oLC5!dOrY(L|%5!77~F^ zS&jwuR`|=`e}R&STi(FMNVPw9l5ZU&;*OrW+NIJ-$4(O#JQj>{yg&AoZzP*wASD&7!wu3KSqOU>9iR*&V_vfEdO3Sd%BK_fwF0rg z1g3HfX!_QPug?34(!x6RNaBL9$S|m5p(6j zI4?&kS(Eb0=@^znlbhC8zaMv~bv5z_=sVuDt}#aZlVx>@Dje+0JRwXAJ%Oc9RcPlYw1A%p4CPsCK78_&V7_uB$kyK8FM5#z|oS{txD+c1}Ih7ND3+{ zz}k`{>zT*8^^z@T74_}4vmWM!lP+P2dmEQ2%xNsuneMroO$J7eyNimj#8BapH-RM}ehC4s^5#{aPa8u~ zyU0ZUBnUz$%Wx7XLQR@O2eZNitP!82q?j>`4}DbAR9aZwG)^K-sTRwbDz8b;i6m7@ z}~e4WNf+Q-<1%qxvl5Df!On#2Nn3d|t6e*hClI2l}}4E#h;7U~jiEn+9X;{aCI zkVlLJwN+Tjh9@;!Aj|`mPNz}SnqgS4+-f5=?E~{`%O|c_dHi+aku~~3wx}BC%U?JQ zF@OOUyJ=$nhmnQrsPotw{UACimZ~PiK)mE|oFHTREYFA>x<)^UEM)ORFhSSL{@@TgI690 zM#7{Q?L66S3Ae<@RD#*vEdeljsP+!hl_MqB`f=Dg~l zkUVwSdFDiNHn^>&2s++WAT<2#KZClTh$lh3uVhh@tM<7FPzms-UH`l7frZh6+%3^% z2|veF7*FtY6Ru^2iAA~k0rV&-b!cc~o3KxW3#3DP7hpWy4&a;3@YU7F;dp3t-`Rfw z_%~zipD=B~?&~(+@Y5NkaL;t!>z*+tGC5rdb2rxm(H zI^|+>iK)=NevWM2hHl}ojqBV$Kv!`9);b<$s|?}RJcH6f^7Cp+J9PGc#b zSoSgN%i=ewWnJ=3YS~7&KtlnXF<>NOrVVc2E(?Wy86%1zp507rz>)PBiM{EK+*a=)?*XC5G z1dHa@UpV`W>t_4RuE(F{1o0jKbq`1o#{%2{*k=w(%ngz*B5Tc%Wd?R&u+@{`4#3lS zJHbC>jd|9w1vhN&87LTchZbA-ah^zKKHsBhADij^R4a%YAlk`t!}RkufoGqnV22Tt|0`>+ea;!N`TZ2<{qiC>bN1PLeY>r1eZ92JnRfxtz^at2eLE+hw%f!! zGQ@ckb8!bvT6woRcMQi+^8z)aQEM{rCLYCQ9(nYEu#Pn%QQ?f2c@&*0AN>+<0!J&4 z_Wzj_vX$a!JUYVaw_oB-{K=z_O0Tp5R8f2Qkw^X zuqMjr!pm7XM!FQ_A2_pTWqu;uE+T2fI zxl$Hh5JqSBZJv%34qvSZj3SPo&F%vFjEo3EW2-b;-qmJ?^F5e-B#x_~ z@Hb2tTwBr7u1oUNFgkbeDH`dAe*vuu(LoCgiKn`P76=nI{M9Prk--!w@(W> zx%EZqjM{DMAeXbkz{0QW8rt;flW=-t(T9BP1#3#aVF^~5!02T_^z4|wfIz9`jNAAR)CxN5M3)(2FiUN38GZa9qS z)knU-a;=YIm2tgbfyh_5?-98^y%qWX&c4RV}X%r-u=p7O7ncv(G69=2TD$6Sb2-F>$=A zC;Hn&vbAFrR?*kwXRrL98t0qXR}>Q$+a^=iyNl z_(d6C!xxa;KY0{oFO|^dXoE7E4}alHK$u7H5KWI%9z7Twg@{AMB;XLfb5z1}AbJ_J z8OKmGd1gU;DmcYl%B^bfM8Qcq-y*hzUfe=?h(gi+EpD4uhbe_8C^2SlKKIMn?RPwO z&526F4yI1+A5vOEZ94j+&;zXL2jeeM4krnfef=7ZB@6&@L3C-tuzq9qII#wUq9F+^ zDuY)>%|N5qj%7F5X=E3V>WKaBfS&paIR#)VHXbG1*aYJ}-_BZF| zc4BrL5p4&JyE3#FbaM~hMKh@Ak%C=yT<38*f`3i#ugj>H5Q zOB3h5Cof%`JD=S{&>Vgwnng4NM*BhPe=-N8PI2OCbeo}0>+Yh&OT+;ent}%u4aFHI zcBgP?6W~W&|q zo4|IllzD$-x491r(u#T`q5GBAho=8r0lT`YPk4oWsI^{el~08TCnz>z$Otul=vm?E zniz#xvDz#dHO}W*Ud_HQib8m`oLs921)@{qay~gs7LhzLCL)x(bK9Rc3Ylqrr{L5)oBgLyo|nyJPKE|eH0ql9^T#}C zN^br?v)%Fu*4<9aZOvvgQrYP+k!kLnX!r?M*Nu?`^W1*LsgisY!2>Z~;Uo zP=&^=P2#~QTdB%829+^~jH1*H)Sqq~gT{zUH`W*XbA6GwcLQXmL|N=ll*O(opF}?k zyd)IghCxhfe7|OUm7^%=9owtm0@ZojAlFRRU4?fbEezONWw)2@hOCsdR^el+HrlAO ziXN<2WFfXed3DGdJ$8(ZTkwK%Ep~4sEfzy2(O|o#{Eobu>Lb@`3Gvrx>T)z~>cY43 z=r%~#kgOXvbm6T*gSBohd$kZagr%gL3m@%R&0Ki6k!n2#)mmVIadn#Y7&L2MyP;m) zpX=2ab8Mv=+O{AMNlWWGU?e2_d0M)Dx5(^}&y(I5H@@q7nhWb&V+>1u`fH)o5J?Z! zHpaL(oOvVK|6DYg8aNiPGB0kd1&%;3xZ#*upr{Oq76^4QS0%cpbjhPt(cGs|PmYlb zA=bCysT#E87?uL|=i|PuA;+QGh8!1%H_W@Zp@KOE9g&YDN=S`Uz)!{EsmOUt=-()yf8*=d zz)uJR@0Er(uS*A?^51ki+H&>+y_u%-`W6zHiwow8>99l(iCJMksQ>HfB5^W}o%5hr zl;PgP-`s5gIj@RSobX@i~@O|>qWh?HUzoz5kYvwO+zqex*cJY2H zH(j!#ebrrS?{1rOt!`X*?drSRJKOG9*}3K&x6S!*$Esy_+%_lfT-C93)ylP-Yp>&Lxc1F!ue>dW;^Hb(Z& zU)#BCP21heKHjl>HTJi6u36T;d|CVIwtGAHdwF~3(zWeNJKE-Sbk6@oJ5P9f`|6JQ zOO~zbSiEN0%FedsYgS?B;+4x+u4>b-`Ky-R-nQWKtKRa~tKa%l*jRAYm2X+NAZ}cW z;lHtV^_pdO+}pOiX3nd;*g>u@Y7s#3bDL z@}5s4Ne4pL$$!87S5G_f?cadyqq;y0ApJ9zz&7=+EZYooayarG#27Y(#o2u)-nf?# zWB>P|3;0$2XSJ3fWcUv#EQBfs`}9qn6l_2eOgXO*k;N7k1TZ zXvRqPM?RW`-_2HsaMwy5H$46Rq3ru_tJ!@a{ATvw<50xAVbFEi zpLbtx7TR&?f;R9Dm{-G$7qeS&5j`use>XqP^^I5b)Zq8=#r@;i8t#~tZNk?N&v|P6 zzg;$U_R4HDG$GvcY%JNE58Z?OA*2s2$vzgCN%Yog$Of0sI{k~;GCW~_bNk=z80mld z_veIcN;W=mKJ3#YVcM=UL)HvyUUtdS=LVix9F`z%Y#~sm@^koeGdJ+Le(NV6em_3T z@L6M@<@oNvrwt$OUv1lW;ky%`mH6Dl?aME}9H%IdF`n}$MaJggT5rLp5gFq>fQ+3p zgzrhn*g3tEkg??*Yu0qES_GoB7>g8CYyMjnUICJYM|M(W?k|1t?aF6F9!p=k z^ch!`y>#h^SyA?kr5~pB6y90((xn$y>DN>GjHREtH0?S5PknFM_gMO27MDF^d)a}d z(d_uoOzEXi8hc8=$I^3M`W{O!uG>lz$p287Tlz(op6t?mcxlwjSo$7IPhsgbQ<`g*ewfnIM|rMUn&g&7pVBX~H0G9G3&($I zO0R{|4^x`GmVS?=v7+>QJpRkD^urwgDJ+fQrKhm;!;~gIr76Ji=O3l#y7YT2J%yzg zS82p8J%y#I*_+DBGo_KDw1iZ8W=dmE>6s}#u(ZzpZ@`gCuddSQQ~HgU#C zzI5q1EWH*=qj>2{m!6r@mo81EN@Gvyfu-;9-|_X7zVz`IUQ1K^(yOra3oku|r7vB2 zxt3mBr3YT_o+|gP|Nqyi{(ksw`7ioC;Z%P=a&p%EIzG$s`FP=Y^#e#dxaG`H{m4It zYCFP8m-d9}@(b~~FH}4KIaEK2w9eJ<1Kjoah{L`RZ&G=`WW%6}D{BSJkRO&d+A1FF z%0^TmXQs>yWXd3iek(Suw$EFd;LPls4ROeD4X!YoKP9f|qaix1t#=iozs`Lr;^ z9C3cq-Kb8+ye3HkA3;J--xhIzdrdA)$=3>zba{`5_hZob!atUiphOZ=odg2kJnxW~ z@M{YFa!hkC2s;!ii~eEWb{z*$Nvtt&f{uFuKctn(F(!;NeS0W;@SZB3QZB$99L*2& zYDT5tClgeWy`agcyx7>fCoxjX53{n<(eq!dxzkZrQ^9K#Kuu1SyIh`q4NhUb7~nqf z#TvLFR#IW@1&+2FZ`|AzKAL?E;RE7$e`BR`>Wa}dUTe#W`JMZVe0j*az{`;;0-CLX z&;n$(o)y+*pK3!`#tGSgWLsHjonb4+g_wp|-A%W@n~mb$x+>q&WaEnkg{H_~tIl>Y zFb62Hu_+AC)`a7$6*&NhViH6KPTo~sB-G2S;Z+g?K7-pG`l=O?ZVHd56+^z0*J>aF zAz%O}!Y3`P^h{nhxG6kcs2?)I(VBrZfz9m>Zpp~sL}5Bgpmliw?CH$BL%Xn+Am9#U@BlNOWZ99kh$@aAxCzz^ZVh`qk4IAT1Z9wm zg-8x=wgsXI!gj3qlGUmQFlz-*$xDR-=X#m2rKKq*_Tb%~DOGvS%2TnL5ArrpFEqd<)tCVZWjtLU8~XlC)w`^PKKPXf16s8FXJ*JQ1s!W2%`RM(ShWj&75I z9|+U`B6wYMr#|0mt1Em%f(4o+c!?OSyw(NK&y)K!XN;uC5U|f`)8;k7rs<(^1U@0* zcIg2B0>SWi*KhIfO^=1&E=FNi)`St3mHAaH!SO}UfUXQnQ5n_)9>W%Eov@}12pqrg zi#28Ni(d<+tPD!(p}0&$reUF4d2LB8Hh8OJ66)hASz`qnR3+qBZvl_qx$w})8^X-3 z|A+$UeHTU)0#$K}#;GM=dI>49;8UoW?>Lm!9E=zSNI&k7%NHxVJBV=ARsR+5>(I&hnd*QM0=IrQS$>oStH8hNX2Llk}oD4Myojjpf zUtVFdEn*Xb1Z{*?&cPfG$`&3+!VN9m5CpAIXHxJ96O-3EZee0zWsAy6D5%7`N+{i% z<*|#WN`)NjuP`MH$2dh4#ABQyiXku3l0(yLA`(%%f@F!+h!6QYdB4-i9@W0m(YU6h)t4>?9x#z_C&y9VB$_-l@l7TtAnQ%;V3B!C4fnMB3L$% z3ImnPc(F=CYR&8+uOcOoNw6XyfpZ3VFm1OW5>iqLT_Mv5MnL*Cx2C-oTt>?4Q%zM_ zED2}a39NHe@l0dV9dg0LOilGtR$wj7VQ*bzBTx$?1y}ZasU4CYlb4X}Y6a4fsoIP< z&=~57(9v68gxu7p%*!gMK{A?s3>m34jP2fXGfs2_j3~)Qk9E^M{n$lksUdK1i;Gm@ z+z);<%lfbcdOGS2wZk`NjZi}G@| zj3X6jukCV5YqlryiO6b{lHgpRtwa(PhLxEh`gX<7Wh?7}B7Xuvu+ zsURX9zql3>OraJG#g3@c%@M>P&G{+N>hAH({ z!Zsx;3Kh=y_W1Ql9~SM&aNDW>E9;D9o?J>HPCCy~K^c$rf$X1S6BabZiPcRVL0nJ~ zM4=`&+DaiA+?*vERp8}o=PIv+L#%G{Ts! z>ZsCY42d$YsAJo~h^(f<;FIsfVp#G5T61VM6vB^M;nPG`0ZO#sz4U3F1O-4reW`+d zt<^ku8|4|ue8;F0IWHW(KpH$n#Rzq#t!W(E=_p3TVi!MFyfI>aUq(CSIV1(Tq>th-+c*P9I7>uljJyt>` zWAXHMmq~yh{VswCF6;&_c>RnbYdUK33(BEyeA%f&OW5NbT1+GfUPGh6nSjzRzI0WP z3Vt%OcKlQM@avILE(!fC8Tmsr6E?c28>4Ip_$a zD6{=s%(j#`k~SPl|MP;`MU&1U#~($QX_$vPAq0!Q&XyyXg9I5xFc{$Kg^*ekj$w>f z?u9kXu%Re})LCy1I<^>oKt7sW3UTQK_pHX7gN`eT9KSxP41#%4S^-cs-5gd#F-@CQ z){jw_eN-3@#2VU>tu+JnqZ(P{jJ!k3PA3*#Zb=x6vYMSnVho9lpn%$7em44a8@-66 zMY)kM8z(V^f>`_k_-A~|bCO~DGWm;|^_BCyjLB9vxg86xd>JV>Ypp&^cwvk=zlj3Jg%pi%zfb2}y&)o6<( zMp%p3^_=@B0-^9zOvGME_G;0SQK4&g zwkQkuUX(%ky#_h)2XUTlTZjdrMhG!+Wop>%a*CmaBFXb|17tLH@`s5jfP@?>A_~3} z5+jg1DQMIRA0nYl4@X@(G4^8A1#pxEkJbqu!zQ0-ir_G16P(=8fC_?x<+c#cV&xpMZ~u6arikMQ2b^;8*ss4a+H8WyD*;_@|c0)|DvB zeiOE|_>u}D_vajkoTqYEf$P)|l3C$sjRq{vg4vJxSZJ$ghead^Xt{!22UJ)d%#a;`|GYPZeR9%wlL z%t2DI_4 zG|{+1o*=ezg)5i{}jG_E4Od@-rNn@&+mrI zJPf%h8?L}?aR}eaei@8ls2|DazdUpzuzfsqHLr`G_bcv$*fkKI7KX!Kk}|4b1(nN{ zG<+9~gX_X49nDXQE-OcGXP3$oU79MQw+Z7s7+qE_BRSJlDG7f?nj$yNkzJIvQ5bT7 zjbVoh%`PQH?gwX`&#o>)v>NLNpB<)ex#CUak* zD1%?b9F*su&6o}TwWtgnA?eh@{W!9S6;`!z56sFWnF##gm+ysR;q!-IzD~k2hPSwj z)YLf_&srMbAg+&QXg)szsh*`+lX>-_Ki*phA$YT42sHuGi>{%(CvQupV+CS)o|1wLCq+9R(nwXv|Lvld7Hlqoda z8Zwg+I5cE>T++}dL(m023E%3ftP4A}^sUaHX=_R~F2YmqhQehNWYj=S!8|q!#{eh5 zx@JOQq$++1jzrbDPt|MvOBfs>UB|QQV%5KT#6?|<;c~?J_$60D`3=60eH43i#hDTW zyq|;9;yF>cQ*{@!vzoP)rDiL0i%-or5WZdb1XKaX=Tdz5kEKgc7)JhaAFCkYUu7Bo z@WT=$bK2zJ?aMlsw5_?bqiyl3dsnYPF`&+lw&m?>)-)(w0y_n!L+c-bLjGIUU#j3m zRa$V3MukgG!G07jslFB8lN2tgo?TbCL?2hP5MECerpaE=vc(;3%R1ZI+wN(A<*NA# zGJi$;^0xNdmn~nm=H9k7E8A9etX|pKzNVw?o@Hz9Y-{hlx2^r|yO%HPSki_n+NZr}7Z0VhA+7>Q& zOL2d>T2lA)0E6%^t_y^{-t+ZP?fz|i{!e@!EF7=iGZd=-$7e(JcbY==GdG6nAN*dZ z-v8ZDeGqUDAvkTrEr7WRpI^hLld#d6Ew+Uv%Hq)2R`}h-LM(pacJSwb+fD4`Z;DH2 zgo&xB!>NuF_JZ3Vdzj@-j8I;REK0`hh#kxFKrdA#13wJmAF}M)uryo{wo*S(nNKNwp$Q%a^yQCCa(|>X zBn|L{{Hh>j=F+~T`CWRHbRYIeZ+tg?I7^N??Z<2LzIO=G;KlO?CI_HB1N=dI-i`kv zN5mL1Ggx@X;)%7O{09|dpqVimy2cuHQP@$`xy+Fv69MytscmlvJMfAUvq5YFfKy_a zNy8Xcqdp}eI2dNXPQ?woj>Pv?=r0~S$kvW3b`;0iOr||c&Y%JZ#+blLB*Pf{^@h6O z2$M~LPv>GvhV>_6G}9P}v_wD7r7|hrXjjdeygrOW>O{CXn-*P;+krkp0hF7NtY(AJ zaYgD+7d79Eg9yBH8B>3Xj9F;oYR19V(5H?jku4!U_kC3Zi$zY!yOgpa=6sqBMqJV%-Mh&r(5cv2NR1@qc2xqd4l)|#@9;y71;I! z5L^s^P|t$c={05;W(X09DDkBtE3`VZ1EHI^yA*I*1RJaA1db_4OBtG)Hf+nvb%Ss` zb0&!53$2GX7R1$wEOqF?D*##$B;6zgp=DUz2v~s-wE#(L3~V?mWTBrN`gBfWmU%U< zKw?GB3Y;7I5Gy|0`!67)K&`-BAV-yCn@9?$xT_d25CaDeC=GiT`yZO(&>Vi~ItC_5 zDY{9m?w6F2Pha`OZq%=Ae)2+`XGA-yw1z#dV{n3{8>K}$h~L15Au`N~-weEm3Oc2} z>MDl72_LXH2lpgFp>dk1-XQ_Xy$C^=gNniyH%F8>q@*%vSU7HKN;v4ssa%UZ1JxEO zC8v4@&`)V724UJ|vRlJ;S2W-nSbX|pub$(Qv`E%NJ`i(D;)I-b0|3E_{1({N3 z{5VXUdsm2p$#iS~j%PD3b&bgb2DDz3ojnE_dANq{+?2P8MkgR5*m+^dQ3`vwIZLp} z5G!Um(HKHJ#_L~%mdtoc&2v)TM4trNlJB1y`uS7#5q)-SNreO=89ttT5S>|^qroKX zcM$e+#i>fzV)6ptKQRrTg7}3sL-77&mp_v+nEzD}MjWsj_M5cP08$y5Tr(MzfF>e|gX__pp$T*{PLFR9i&`S85b@fg z`0LVObJ$F*^uz?k%>8)TVjwY7S~lH9;~2@=1V61C+GHqvo?VsiDlQSFAkL_wf!r0E z(WXQEAC(!y1Z^~QnhtvX+f(>pQ~#^XhRC!tuy>X&>@#%QX{4ADCSaA5w>$#&1DMmo z5M*%SfWSzzmz{(WM1g~9StE)W4{QmC+!o^ovN%{pAE8`op+R?CqD11}^09~2b|$2X z78|(ilv544P1Q%Lc*E&2t1M(THQ&T$!VQKhBSY6?lUQPagT%@6(fqt%He_D7RnF!i z@SxnO1$Hqt46_m~iqeAO#c)fZKWhGgxU9Sf%f)S^F!)SG^qB?pw#K}-uIfjH928tx zXup>SJw-`lM{Nv)FL~!5I%V)nG6MIhJnG4X4VOalrCnIe!#0bkR?PTYJe`RcCUCs! zl1RR~3+vee8OSUDkW1L6Z?Zm8HH+F7`}mx3g6eecH{rvL=0r|ih5dz9EyJgUiND5C zU%%CGP$UrN8wqS-P5by(G$R7IO!>2%ax>+*e9{(|xUGF%(!SnjgrfyJAK0Z@L8I$> zZ*g6lHMFbpnHm=IZZRXAE`MPw*mwp$U12K(n=M>)K>C_?V6gHR2tL#zqw$6cJHPa^ zSnje2J>1Er8lc=A5dxrw5=~*31z}qhlLtB(K}VVD0-*<_Ap@jk3BR_PN*jfdmMf)U zk7bK@!*~g~_VG!xuyj0xeVcQ1GG?5$jj!z(rffnTdXk=o-_8~!hbQ+HMVMW*lqrP-WCvkD&Gb1_Ml27Nxy%K#iKrz;4xHk>SX589gJnr( zh7e-cDpHF&b1FzGQ~h*X>oiEtl9R!O7F@BgOr1!l6;cVUtat?BCQShGhTRZjB*0>& z{bmi47J#Edwn1>zbR(;uaZ0xO!P*Mm4^c|k zWNtQ+oREIH=a=x;EjvX5&{C_k_M1KuO7{w^Kx+ZNflfiLZ*h=ZudjtcmxggHc?3U5 zn8B}#$^rA*7EFzDZ*V~)5iTZv9K&N`bTu3(qz8&rz=b=axY81K7@2U&k?154=sq4i zmO+pRcPzll;NeL$N|EysS4t2Bv?azq2qGCQ=Y2{@8c`}6h$;yHK@#R_phPWTYbde{ zK^ISk9xUVsI(6dp09N1>0_JJZuf~LnAShHs6J*&L{b-A914yP(w8hN85%sxRWJ^v* zfLIdt1T=ol7?auq0puaZEC|ERDziYiA?0B#3>Pw^UieK_Rr5&Sq?l1a z2aDmH~aL*Wx(E(19EZ)V_mV;vf6-7dA^IR{9+Ye^n zjgc{)5a?>DgK_SvVVh|cN{JjZjD>*C==}3C{3u;<4g58QWik)r`#-3CI*VQ>mC7f3xS$|&b7^X*k^njy?8$H^bItYoV zV>Kq7w1k*N8f_l%v{zotjTDHeAWB@68!51dY9(6LkxZPdUl-$5pMnp)==?q@ylhkJ z;nN{*V9vzKg~d{AW&tT43S^VQRF@6T|oNY1L?Hz{CwbL7lpJLg@ARgpFn9 zUrk)cfw}=+qLwU*rp0i|6T)F92w7%1S_t!&EjroozFq4aa;=k8on-M!`~In#Mzss! zTaga6;V(ni^y~8v9QBX~+zN1h7N zzqPLF4ES~2E_Ea-v=UrB3&>C?Q*gao&}W6cc)UUx0wCwP;naY#2r3B_vN@?`pIA7S zTeWMCrTXD%xQ;BzybgevsZYhrkd>Bbb>ed9YQ8RiXLx_Bbvc<|?+v2a&(?Rc~J1)XR=rTtTZM@$4O7Y24Zsgmoe}q1~`3HeGe}m7J`0(FH@HtzyLYR+l_W#4b%H{a;S#IDn z=bdef+gEkmu@-Sz2+mr%c7+6cEnc>yZS|ci?`aSn*954aRCL_G;#!D_Zx|g1!#$(p zn*ImACy9=0y00!e?)AsT9s31Ipc}&0R%uY&;*~4zUbSpB0@&_YwQ>c5=2k5G_?oq= zI@(s=(dK0sCutaV&0_QwTfS^X$LcjJJ3C%u@PY*x{HE6!Bxkf(y*t}iE$Qg&#EmUR z|Hjt<)UzWVZ^>&6lq&#%mM>nmcExLqwUaUglW~_FtL)BJb#yL4mq@fgl#s#OS1nt! zW_brM-gfsYya~n$zQ(EbHtc-2uj**O3#YsMwocR#wwjldymPsycjCg!RxNqcv9GdZ ziCkrE=UtsE?Z9JNnOJoDW}tm5YCo9zi;I_~uaE zdI>&P;&VNZ#^cq85mNTw{~=Vr`n#d}_n!*YZ+s+Fzm2H%f1MqwKlsB?eQHmrKKss4 zeQsu`K0iNHH@_oPUp_xnUy-xK2*v3yhOzbC-Qi4p^>o8oGKho}Pzr zEc8@*D(eq)2mH8?Bf|#W&!PL*1>Orz64v1muKgg+)Zg9ndF;o~?w%&O5itB7xQW(n zkQ3lYH5~2kc|d?L=z#!>1P0(rp?|&J5H7Ey9`sQg(ox+#>p4P49pZgH)YG#L=jy)y zA-{!Q}+kl@N_<$RFsy!1N+tf1=xE=6nMnB(;(bXQr)Zkng z%NK!T4?^8$fcxQKHQ*phQQ-#Py(xPyv}~^hhy9EV!2bW4byNFhEjWu20LMJ%h5fs$ z;X*A6#~=ViSpDXzzt4Ue`^KRJF&?EFhAYp_T8Ac`Q^M9l2?XflqG6d<(I(m={TT!r zy0ItxY_^pp=U#OYBG=NB%w`TpDh&n4K(T`Y0i@BdEDW5B= z)wrVP8b5uQ;Q_w~SgV1M=nF7>s)nHu6#fhfWouy)yE}V{aFzw1=C#hIWg^iY zo^suw5?+X!begLdO)@(DR2NSQKkzwDyupbQ0a;S*F;RCUj8CkK|5X3-guG~u5v5!V zG6;ZDxw4>_>r3@{9CC9Er*@{#WW&-*I`Knpi%|en3jM!kyb0tkRpHZ14CIy=h4_I_ znLBl%+@+d9)CS_3Z7SH>T{-Z`3^y2X zDCn@-W^%>b)Qng^BD&gH9uF_SHFuXxM*&8%B3M27g`hvOniE2`=Z(r5ae%DxjbJiZ z{XK88?-RlSFr4)py1O@kCEA8DL!e;ysBlNb6s!kx7(~7SnGSjASP!^JrKcAxr>Fb# zyk^{R4jEY{DC$Gq-M`F+Q_sMC_);d?61Edi7?FOj z<2~31_Xwux%o7j&0Lamh^Hz}6Zk!f@q~NYcjQy@x=sHN&eg>rSTY>z%Kq3^wcrwsa z*AJ;4TC6S`vJQW_6xH{3e`i{)>nm7+J-RVKAbpm=H{@E>>J1Lr$m8G zGH{3k!l_%8U1O5Smch6%P#85VOg)wEad7;UnS*J6BaGt}!c^1URYA^2*rw>yIBI`( z_>o!XKxZ3Sb+EF7S$06^QE43ws%{dkSt^rkV@?5iDRDwbP$9NMA0V8-C;3Z$zBxqm7eywxIczevzBRY(2r$&$fD6Szu#1)ep05NSfhkr47&}Pw5j3L3f9YYf%D>#CYM(Xo3z z&nFzmec^BSefT@E9!fU+aN&FMUe1@la7=MU&4Qn0Ha@@yE~%P4AH44Oocc%~EGLu4 zP{O9|SzZT#t{x7J{IpkApLGkeFY99{w;3;Yi#!%qS^#JmzZk;+Kr-yOa*!D2tHV}| z@N*Z(LF#qADD736HYN1ivhalh!N%jI8$uv!&DnFlLSo$XBp`@(k}8zJRW3eJ6x$*H zL5;$Kn8PWjLnU7v&EZu?|9nZDpT|=}##HgW8TzEG3&h+x;#+k|FljuM`?R|%J7k7| z<{RHD9@awa^yxAB6|1-?is6^Ia-ySkVv9*)!>Un1qVf3G=1^0ViIbRmS;c`Sb`as8 z1hv^~4m)MyqH9flHT_`xrIUr;kr(k}&Y2_-R`)9t=Ba2v8EqpsxTnzU>17EbQVRz9khPVl|K-hXQENwe;0o=HttIR0!;@r;{c6M6`cYPAsIQ5~7 zzFYz2e9u>Pwq;6q@(kGOY9#Jt$r{H4X^8Uo+PC!pq*l@fj4RiX*B$YNon;5Vb{T2@h*B0^iVse0ct$N}j)}v%>-GH;F;s5{B@799H9gd}rvo zBLmgY;BU;o`R2~C5pGa$dqw_k&k5V*9J$e;2LcT)0r^C)s^{4Ydw@w8e2+M|0e6gh zs(GVyfA9|69x#jt>E7^rcsfIM3EppCSoVmu+<8~F6LsMASShehj}Dp=${ z1E%Li*jVAH5)LG#^sSO<3Jj4$VmxwCSM4CL<)!rDPN~lU*rhQZxrx!0I^>+ksBY*A zIt;b-i?Q9R>bcA;*h5@{P#haGT_*p!N*k7$F#V6xQgrsjpy97b^_m3z$TBQ6{P zP)+|B0P5^<#|@q+M+JSN`iuBrJP)-uEkkhF@xVMcO<^b1H_ACh$wvapwB(1Wa7YqT zECBJv+n=G5Y*EbZ~ zudlo34scak3Y6EHq%$K7;4b5S40|Bl7k`q$LLl0}(tptCBk;h6@OhjkKbOltQ^OV* z6Y%up#XY<;Jm=@-A^0bXL7)~rh!j{a#)5vBHZW4IO0#|<7`2=XS#p&{-WJka&~h&- z52?c(xui+}lhhW-z@`oCF4X@$EGTed8URT7xtIqT02+$-Ubi12t%3Bn5o5 zU^Lwv)MP?q`J^BRYCS@V2a-a5zr^}1!aDTzEtK1}Yz7W4%80=Xex4hKRE{B8+P}qX zUyy9M(q^`9;IKumVo?K!on3)s6|I%PVV7d6VV?^yc;&@P1i;}`WT`Vj+oS-8Q|YA6 zD~(~C72t3#ht#$90eP@l0S;Sasgw_JPSaK}BC^^^Aguu&s{Eija61ci*?WmBHO7ljCLp4ohbTE>e0p0RrzSHtTr<&3)Bf#Tt;V|OOn{bU;M%^`gZY) zU*~};gKYGipL|bj0Lkx17?p=(Rl7$)@o3c@6sv9z$i7B%4U^`BRe55l9YQCcL->%k;cMH+(kEVLT0ne-hN3%3FHY=8=ey1$_F zL!Sc>0c8|D#fL$=c@6Bu#(jP^vKt+@3%jZHg0#m_EgZcAH;C9TSbs4RnjB-YCK!sf zUjRK+>yJtFF?51YKMLkY!Vl|H&lqgpcsU-Y1%^=R>6*&m;YNnxHYQi393Y`fZcKuZ zuPflp@IsLVNFH@@W^k98@PIwUb0be~H;Pdg&|Q=}5Pyl_^)VM1qJED!#BD+` z-~t}38stWQt7y5kL%6M!^6vt2=aea0eVl8cLAcU>udrm94@t+47;*7}5+d_e0Iw-& z;@4Ju;TOpge(?)fPUZ+9EdTzoXAP!P5z{09#Ma#;U7IvZus98=^PGLUiQ*(?ESZQa zMoxUNHF~9RN;c-^DS^CR1_{W^nMjRt?8VK}))?hAk0QM}oD(AHylrRGq(7!j?D82& z2$6K!28w%zUpgOBU)DG@v{q@WjfcrAEE+F9Y;j}GqN~{`>eY`TX8u`KH?(lfbe$74 z31tYP*)2dC*^!-25*%O*B6$65h|!!I?BUlb9*3x9zey?C1?<#dp@@)FJXMtYXDYQj z>3d=9`QBcLxYfq3%63nc*&X`*|IgbNvVG!fDAI7CtP4oKbD?Ah@7b@$^Dt`foy z0@T$qq!b^nC_WUvNaOMRVw`+4UVCNZIl4|>E6x8*7K-H3Fil@2Ckrw`^%^qjg39-- zvuq1cvEVSS$(&|c_7I*|smk}F;wMZV1Jy8KJbD^{fgDD~EX;(AmP9K}&mCyxP>C8O z=8!M*TWQ;{#h5st?kx~N?y3Q@*peEclqA*zS&dD1dd-cxth38crKlNP{`4 z*=sMoxYyn))=k|T!@3cJ$HZ9ijf~)pJn=XdPWgv!8B{ukMMDOHFOns!9qB{}YI1Uj zpJ}>=W?(si;86@dUx%wU0>VApsM~D7pPb0T#7f3s&P?QC?mIny zDjJW{Bn#=pqyuPwrc;Wyn85o|Zp9f=fVdV+Tn423n>^(mcG1Ya)ZQYOa!6M!;hZ+X zn)j{#;)I*!lbkHGX+)mFe zv(e{hMHE9zg9gC_mlvxVTWD@`c)2DFyOFNDO9^vMgk5k%hf4@GX+(A!r&Xf>M=I>H zBCj~R}qXoAG`oR;)2tVK&E%~tb!SV~|rJMQi4a+|8uV5y*w6-|t1-KMaHrxn8 zGKHT$r}oo5F!86F(Cw#N$J=V^W409=esoRUpo;|717f=w5g3NKrc&WG2+l9DV0Q5jEq$AO#APg312qwq3V{?4N zdiGUiur-=H5*q07o`$u52F2cj1M;*b58^FJk|AFaI9t4ZWK&+<+?K zu@?Y`U7McTv>9?1eyn?`_eaT|=QsC0v$^+$bfQWY_&Y#DnZ}{b&u!ZLQtxwelR9W<-R8~T;4||lKLfnW z^>GAVAYb20xF$TI`0B;B{Lo9lV8&ODH@o@i@bu=*&po?&^9wk|CcJUm6E^kses>f0 z@PT&W?eS=GIDD(O_xa7$%@bjBEB|0&_v+6o?x?AE;zcZ-{!P8#33!Y6b6@h*4 zRy+Z0Z?Nm)i$Fkt0x+rCeR4#hk(Hp%64;J$sQZC#yn&GiB0Q-5x+J=RryQWo>y9{r zyGGQP0t^s!R+MGGWnh40phV>sZ%NH&aSu-@J{FXAz)rQriTH}Dwq4|8b=Kg7V3 z?`atO5D(*3XQ;;-onaJas(1PMo3R;rrm={~X}`M8Gbj1^-M711bXR zL+qRea~rwPt0Usk9ALMb2zg`4w$CA4CpCL@=Eo&; zPyBZ*V;OZPnh)D{)DshhW;#aHI7DoO zQ{?GN~J3gKGe4=o? zy8UlLbr1Tt9lR}6k3JWw!{_mM7jQm)!gtl8ya3iz?V_*%uG3=c1n$8KB}=ik2@C34 zCa}OFNle}xUPP5iqKl$MkQ-o)3cIV|Xqhb3DB1#Vi-1KhOA>dq&v;!l0&;^?PN^aJ zs|hQykTUWFW9C6#FtY}R(hLd+Y6;!eu+JGBUy)nL)Q74b6f=uDqQ_O6s1&-VpLV`zH0oakKnBlT1tC4Y|ypslB0qGToTud^c zJVi-x#{+u%(oihG*2KYCR`|Th>o1>~lbe?DV>y2>3mK+l1G5xXAZgh^FRkR(f6TOf zSJoMoLXQbCi?2z1zOYCZ52$mFT4eZXG;uQx&_hJT?5l!!G`kbbJaZTg7gE-*0q@Oe zFjl4|9UbC<2Prt|}_50@4A&8ngXkmi4{-OF+unKofD2AhA?q-gMzWi!|RH zbGUXR40KFcEj%C%oVT8cizI7HWB}=`31|Q{Rl~lHsD|faO1lNCH*k)5I0K^jZPILS;JcTp$2|KOkAf$>YVHlR!8EV|JyU%4EfSv1BZxZ9Xt8dA=P958#1pomKQ)4XH0YB~`@^f+{ zPpv;J4{|^cU5gA>Jb<&tLgX2$Rod5oeoi!}&?pQm=!IcWquwRV@epDbVWXr?Sk1rl z!j2g1E+LL)@D<}O;_5BHz59?P?15IYZVpYi7lzXjDo8Wzh2ek&uH(#N_yj$JL?S`w zcc3cUAqiMdA`^K~ji>X%E{jqJDP-Llx27`E5OG0>c+R8KJq%Gohg6XcVT>&&5y)-y z4LK!>-j&dsFNs8&NMs9ko6K{UTf&b#VbyWHC`qKhuyz@Z>j49R^|V#T^P(J){DM{) zd-%Loxi8}R2}$O%m1n3!d|eN^pdjp>a_J^Mm{B$qL~=Bacnx}+3n~$g9VX%NcOkJk zJmU$gj?_g-A^FArl1Z=t%K9q)LS|EpjxJ*;{xQafb@i=^2MAn)@PKo}1P$G-$I4Ge ztqe;8j66oL=mEo$BcK%;!LXjj5DnOdidIR|Ea z$xSN6R4K1}YNwQR9S4{UkutXBpA~WNP z#1(6CHoA@AePAsv(k-k->JC_o*AWdY2*jKWR2BAbX%vEG;d)ph&*a5g5>5M9sYh6i zm~)Q=Nfhi!qOHJju^LgoX%7r0PDU-uSp~Ve*)+!yRwF=S{62V+E5*Qo+PMS`wmHLU zL;;r=;E`&>&JXi>!sL-L##m!u456X*u`GjLVX092V8)yLjjS{X>tJE4-Fkk z1z+e|Dnc8$ %`L75DmAt)Zjrts|K4keiE&dCyN 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 z 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 uf_q0dPf5q$=*O-&4N9yItTys?(_o_#nq(% diff --git a/gradle.properties b/gradle.properties index 852bac6c..bb79b8a9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,20 +3,20 @@ org.gradle.daemon=false # Fabric Properties # check these on https://modmuss50.me/fabric.html - minecraft_version=1.16-rc1 - yarn_mappings=1.16-rc1+build.4:v2 - loader_version=0.8.8+build.202 - fabric_version=0.12.5+build.367-1.16 + minecraft_version=1.16.2 + yarn_mappings=1.16.2+build.19:v2 + loader_version=0.9.1+build.205 + fabric_version=0.18.0+build.397-1.16 # Mod Properties group=com.minelittlepony displayname=Unicopia authors=Sollace description=Magical Abilities for Mine Little Pony! - version=0.4 + version=1 release=SNAPSHOT # Dependencies modmenu_version=1.12.+ - minelp_version=4.1-1.16-rc1-1.16 - kirin_version=1.6.4-1.16-rc1-1.16 + minelp_version=4.2.1-1.16.2-SNAPSHOT + kirin_version=1.7.1-1.16.2-SNAPSHOT diff --git a/rainbow.svg b/rainbow.svg deleted file mode 100644 index 4f03bf9e..00000000 --- a/rainbow.svg +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - diff --git a/src/main/java/com/minelittlepony/unicopia/AwaitTickQueue.java b/src/main/java/com/minelittlepony/unicopia/AwaitTickQueue.java index 2bfe8422..db21fdde 100644 --- a/src/main/java/com/minelittlepony/unicopia/AwaitTickQueue.java +++ b/src/main/java/com/minelittlepony/unicopia/AwaitTickQueue.java @@ -8,6 +8,7 @@ import java.util.Queue; import java.util.function.Consumer; import java.util.stream.Collectors; +import net.minecraft.server.world.ServerWorld; import net.minecraft.world.World; public class AwaitTickQueue { @@ -22,13 +23,11 @@ public class AwaitTickQueue { } } - static void tick(World world) { - if (!world.isClient) { - synchronized (LOCKER) { - final Queue tasks = new ArrayDeque<>(); - PENDING_TASKS = PENDING_TASKS.stream().filter(e -> e.tick(world, tasks)).collect(Collectors.toList()); - tasks.forEach(e -> e.run(world)); - } + static void tick(ServerWorld world) { + synchronized (LOCKER) { + final Queue tasks = new ArrayDeque<>(); + PENDING_TASKS = PENDING_TASKS.stream().filter(e -> e.tick(world, tasks)).collect(Collectors.toList()); + tasks.forEach(e -> e.run(world)); } } diff --git a/src/main/java/com/minelittlepony/unicopia/EquinePredicates.java b/src/main/java/com/minelittlepony/unicopia/EquinePredicates.java index 23da6658..dda26dbc 100644 --- a/src/main/java/com/minelittlepony/unicopia/EquinePredicates.java +++ b/src/main/java/com/minelittlepony/unicopia/EquinePredicates.java @@ -2,37 +2,18 @@ package com.minelittlepony.unicopia; import java.util.function.Predicate; -import com.minelittlepony.unicopia.equine.Ponylike; -import com.minelittlepony.unicopia.world.block.gas.Gas; -import com.minelittlepony.unicopia.world.entity.CloudEntity; +import com.minelittlepony.unicopia.entity.Equine; import net.minecraft.entity.Entity; -import net.minecraft.entity.ItemEntity; -import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.BlockItem; public interface EquinePredicates { - Predicate IS_CLOUD = e -> e instanceof CloudEntity; Predicate IS_PLAYER = e -> e instanceof PlayerEntity; - Predicate IS_VALID_ITEM = entity -> entity instanceof ItemEntity && entity.isAlive() && entity.age > 1; - Predicate RACE_INTERACT_WITH_CLOUDS = entity -> Ponylike.of(entity).getSpecies().canInteractWithClouds(); + Predicate RACE_INTERACT_WITH_CLOUDS = entity -> Equine.of(entity).getSpecies().canInteractWithClouds(); - Predicate PLAYER_UNICORN = IS_PLAYER.and(entity -> Ponylike.of(entity).getSpecies().canCast()); - Predicate PLAYER_CHANGELING = IS_PLAYER.and(entity -> Ponylike.of(entity).getSpecies() == Race.CHANGELING); + Predicate PLAYER_UNICORN = IS_PLAYER.and(entity -> Equine.of(entity).getSpecies().canCast()); + Predicate PLAYER_CHANGELING = IS_PLAYER.and(entity -> Equine.of(entity).getSpecies() == Race.CHANGELING); Predicate PLAYER_PEGASUS = IS_PLAYER.and(entity -> ((PlayerEntity)entity).abilities.creativeMode || RACE_INTERACT_WITH_CLOUDS.test(entity)); - Predicate ITEM_INTERACT_WITH_CLOUDS = IS_VALID_ITEM.and(RACE_INTERACT_WITH_CLOUDS.or(e -> { - return CloudEntity.getFeatherEnchantStrength(((ItemEntity)e).getStack()) > 0 - || (((ItemEntity)e).getStack().getItem() instanceof BlockItem - && ((BlockItem)((ItemEntity)e).getStack().getItem()).getBlock() instanceof Gas); - })); - - Predicate ENTITY_INTERACT_WITH_CLOUDS = PLAYER_PEGASUS.or(ITEM_INTERACT_WITH_CLOUDS); - Predicate ENTITY_WALK_ON_CLOUDS = entity -> entity instanceof LivingEntity && CloudEntity.getFeatherEnchantStrength((LivingEntity)entity) > 0; - - Predicate ENTITY_INTERACT_WITH_CLOUD_BLOCKS = IS_CLOUD.or(PLAYER_PEGASUS).or(ENTITY_WALK_ON_CLOUDS).or(ITEM_INTERACT_WITH_CLOUDS).or(entity -> { - return entity != null && EquinePredicates.ENTITY_INTERACT_WITH_CLOUD_BLOCKS.test(entity.getVehicle()); - }); } diff --git a/src/main/java/com/minelittlepony/unicopia/InAnimate.java b/src/main/java/com/minelittlepony/unicopia/InAnimate.java deleted file mode 100644 index bb118483..00000000 --- a/src/main/java/com/minelittlepony/unicopia/InAnimate.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.minelittlepony.unicopia; - -/** - * This interface is for any entities that are categorised as inanimated, - * or part of a terrain effect. - * - * These typically can't be interacted with by players unless under certain cirumstances. - * - */ -public interface InAnimate { - boolean canInteract(Race race); -} diff --git a/src/main/java/com/minelittlepony/unicopia/InteractionManager.java b/src/main/java/com/minelittlepony/unicopia/InteractionManager.java index c18ac647..71f00626 100644 --- a/src/main/java/com/minelittlepony/unicopia/InteractionManager.java +++ b/src/main/java/com/minelittlepony/unicopia/InteractionManager.java @@ -3,8 +3,8 @@ package com.minelittlepony.unicopia; import javax.annotation.Nonnull; import javax.annotation.Nullable; -import com.minelittlepony.unicopia.util.dummy.DummyPlayerEntity; -import com.minelittlepony.unicopia.util.dummy.DummyServerPlayerEntity; +import com.minelittlepony.unicopia.entity.player.dummy.DummyPlayerEntity; +import com.minelittlepony.unicopia.entity.player.dummy.DummyServerPlayerEntity; import com.mojang.authlib.GameProfile; import net.minecraft.entity.Entity; diff --git a/src/main/java/com/minelittlepony/unicopia/TreeType.java b/src/main/java/com/minelittlepony/unicopia/TreeType.java index a1e4cf80..ce3a22ba 100644 --- a/src/main/java/com/minelittlepony/unicopia/TreeType.java +++ b/src/main/java/com/minelittlepony/unicopia/TreeType.java @@ -2,8 +2,8 @@ package com.minelittlepony.unicopia; import java.util.stream.Collectors; +import com.minelittlepony.unicopia.item.UItems; import com.minelittlepony.unicopia.util.Weighted; -import com.minelittlepony.unicopia.world.item.UItems; import java.util.Arrays; import java.util.HashSet; diff --git a/src/main/java/com/minelittlepony/unicopia/UEntities.java b/src/main/java/com/minelittlepony/unicopia/UEntities.java new file mode 100644 index 00000000..05f01fee --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/UEntities.java @@ -0,0 +1,25 @@ +package com.minelittlepony.unicopia; + +import com.minelittlepony.unicopia.projectile.MagicProjectileEntity; + +import net.fabricmc.fabric.api.object.builder.v1.entity.FabricEntityTypeBuilder; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityDimensions; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.SpawnGroup; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; + +public interface UEntities { + + EntityType THROWN_ITEM = register("thrown_item", FabricEntityTypeBuilder.create(SpawnGroup.MISC, MagicProjectileEntity::new) + .trackable(100, 2) + .dimensions(EntityDimensions.fixed(0.25F, 0.25F))); + + static EntityType register(String name, FabricEntityTypeBuilder builder) { + EntityType type = builder.build(); + return Registry.register(Registry.ENTITY_TYPE, new Identifier("unicopia", name), type); + } + + static void bootstrap() {} +} diff --git a/src/main/java/com/minelittlepony/unicopia/UTags.java b/src/main/java/com/minelittlepony/unicopia/UTags.java index 1ae8e324..c3cb6779 100644 --- a/src/main/java/com/minelittlepony/unicopia/UTags.java +++ b/src/main/java/com/minelittlepony/unicopia/UTags.java @@ -6,35 +6,9 @@ import net.minecraft.tag.Tag; import net.minecraft.util.Identifier; public interface UTags { - Tag CURSED_ARTEFACTS = register("cursed_artefacts"); - Tag HAMMERPACE_IMMUNE = register("hammerspace_immune"); Tag APPLES = register("apples"); - Tag FRESH_TOMATOES = register("fresh_tomatoes"); Tag FESH_APPLES = register("fresh_apples"); - Tag SHARDS = register("shards"); - Tag SHELLS = register("shells"); - - Tag FIRE_ELEMENTALS = register("fire_elementals"); - Tag ICE_ELEMENTALS = register("ice_elementals"); - - Tag LIGHT_ELEMENTALS = register("light_elementals"); - Tag DARK_ELEMENTALS = register("dark_elementals"); - - Tag LIFE_ELEMENTALS = register("life_elementals"); - Tag ROTTING_ELEMENTALS = register("rotting_elementals"); - Tag BLOOD_ELEMENTALS = register("death_elementals"); - - Tag UNALIGNED = register("harmonic_elementals"); - - Tag SIGHT_ELEMENTALS = register("sight_elementals"); - Tag SOUND_ELEMENTALS = register("sound_elementals"); - Tag MAGIC_ENERGIC = register("knowledge_elementals"); - - Tag APPLE_BLOOM_SPIRIT = register("apple_bloom_spirit"); - Tag SCOOTALOO_SPIRIT = register("scootaloo_spirit"); - Tag SWEETIE_BELLE_SPIRIT = register("sweetie_belle_spirit"); - Tag NON_TOXIC = register("non_toxic"); Tag FAIRLY_TOXIC = register("fairly_toxic"); Tag SEVERELY_TOXIC = register("severely_toxic"); diff --git a/src/main/java/com/minelittlepony/unicopia/Unicopia.java b/src/main/java/com/minelittlepony/unicopia/Unicopia.java index 5b7127b1..580c2c08 100644 --- a/src/main/java/com/minelittlepony/unicopia/Unicopia.java +++ b/src/main/java/com/minelittlepony/unicopia/Unicopia.java @@ -1,13 +1,13 @@ package com.minelittlepony.unicopia; import net.fabricmc.api.ModInitializer; -import net.fabricmc.fabric.api.event.world.WorldTickCallback; +import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import com.minelittlepony.unicopia.command.Commands; +import com.minelittlepony.unicopia.item.UItems; import com.minelittlepony.unicopia.network.Channel; -import com.minelittlepony.unicopia.world.UnicopiaWorld; public class Unicopia implements ModInitializer { @@ -32,8 +32,8 @@ public class Unicopia implements ModInitializer { UTags.bootstrap(); Commands.bootstrap(); - WorldTickCallback.EVENT.register(AwaitTickQueue::tick); + ServerTickEvents.END_WORLD_TICK.register(AwaitTickQueue::tick); - UnicopiaWorld.bootstrap(); + UItems.bootstrap(); } } diff --git a/src/main/java/com/minelittlepony/unicopia/ability/Abilities.java b/src/main/java/com/minelittlepony/unicopia/ability/Abilities.java index a0766682..7bd91b83 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/Abilities.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/Abilities.java @@ -25,13 +25,9 @@ public interface Abilities { // pegasus / bat / alicorn / changeling Ability CARRY = register(new CarryAbility(), "carry", AbilitySlot.PASSIVE); - // pegasus / alicorn - Ability CLOUD = register(new PegasusCloudInteractionAbility(), "cloud", AbilitySlot.TERTIARY); - // changeling Ability DISGUISE = register(new ChangelingDisguiseAbility(), "disguise", AbilitySlot.PRIMARY); Ability FEED = register(new ChangelingFeedAbility(), "feed", AbilitySlot.SECONDARY); - //Ability TRAP = register(new ChangelingTrapAbility(), "trap", AbilitySlot.TERTIARY); static > T register(T power, String name, AbilitySlot slot) { Identifier id = new Identifier("unicopia", name); diff --git a/src/main/java/com/minelittlepony/unicopia/ability/Ability.java b/src/main/java/com/minelittlepony/unicopia/ability/Ability.java index 64410d5d..c6428de8 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/Ability.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/Ability.java @@ -4,7 +4,7 @@ import javax.annotation.Nullable; import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.ability.data.Hit; -import com.minelittlepony.unicopia.equine.player.Pony; +import com.minelittlepony.unicopia.entity.player.Pony; import net.minecraft.world.World; diff --git a/src/main/java/com/minelittlepony/unicopia/ability/AbilityDispatcher.java b/src/main/java/com/minelittlepony/unicopia/ability/AbilityDispatcher.java index 1c55cf0e..d6b8db40 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/AbilityDispatcher.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/AbilityDispatcher.java @@ -6,7 +6,7 @@ import java.util.Optional; import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.ability.data.Hit; -import com.minelittlepony.unicopia.equine.player.Pony; +import com.minelittlepony.unicopia.entity.player.Pony; import com.minelittlepony.unicopia.network.MsgPlayerAbility; import com.minelittlepony.unicopia.network.Channel; import com.minelittlepony.unicopia.util.NbtSerialisable; diff --git a/src/main/java/com/minelittlepony/unicopia/ability/CarryAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/CarryAbility.java index 15dd457a..978cd5b2 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/CarryAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/CarryAbility.java @@ -2,7 +2,7 @@ package com.minelittlepony.unicopia.ability; import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.ability.data.Hit; -import com.minelittlepony.unicopia.equine.player.Pony; +import com.minelittlepony.unicopia.entity.player.Pony; import com.minelittlepony.unicopia.util.VecHelper; import net.minecraft.entity.Entity; diff --git a/src/main/java/com/minelittlepony/unicopia/ability/ChangelingDisguiseAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/ChangelingDisguiseAbility.java index 9b732fb0..c43e0b4c 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/ChangelingDisguiseAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/ChangelingDisguiseAbility.java @@ -3,12 +3,10 @@ package com.minelittlepony.unicopia.ability; import javax.annotation.Nullable; -import com.minelittlepony.unicopia.InAnimate; -import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.ability.data.Hit; -import com.minelittlepony.unicopia.equine.player.Pony; -import com.minelittlepony.unicopia.magic.spell.DisguiseSpell; -import com.minelittlepony.unicopia.particles.UParticles; +import com.minelittlepony.unicopia.ability.magic.spell.DisguiseSpell; +import com.minelittlepony.unicopia.entity.player.Pony; +import com.minelittlepony.unicopia.particle.UParticles; import com.minelittlepony.unicopia.util.VecHelper; import net.minecraft.block.BlockState; @@ -59,8 +57,7 @@ public class ChangelingDisguiseAbility extends ChangelingFeedAbility { .orElse(looked); } - if (looked instanceof LightningEntity - || (looked instanceof InAnimate && !((InAnimate)looked).canInteract(Race.CHANGELING))) { + if (looked instanceof LightningEntity) { looked = null; } } diff --git a/src/main/java/com/minelittlepony/unicopia/ability/ChangelingFeedAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/ChangelingFeedAbility.java index 5d944ba0..fdda34e7 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/ChangelingFeedAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/ChangelingFeedAbility.java @@ -7,9 +7,9 @@ import javax.annotation.Nullable; import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.ability.data.Hit; -import com.minelittlepony.unicopia.equine.player.Pony; -import com.minelittlepony.unicopia.particles.ParticleUtils; -import com.minelittlepony.unicopia.particles.UParticles; +import com.minelittlepony.unicopia.entity.player.Pony; +import com.minelittlepony.unicopia.particle.ParticleUtils; +import com.minelittlepony.unicopia.particle.UParticles; import com.minelittlepony.unicopia.util.MagicalDamageSource; import com.minelittlepony.unicopia.util.VecHelper; @@ -117,7 +117,7 @@ public class ChangelingFeedAbility implements Ability { } public float drainFrom(PlayerEntity changeling, LivingEntity living) { - DamageSource d = MagicalDamageSource.causePlayerDamage("feed", changeling); + DamageSource d = MagicalDamageSource.create("feed", changeling); float damage = living.getHealth()/2; diff --git a/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyGrowAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyGrowAbility.java index 2614ecb3..11c769cc 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyGrowAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyGrowAbility.java @@ -3,8 +3,8 @@ package com.minelittlepony.unicopia.ability; import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.ability.data.Hit; import com.minelittlepony.unicopia.ability.data.Pos; -import com.minelittlepony.unicopia.equine.player.Pony; -import com.minelittlepony.unicopia.particles.MagicParticleEffect; +import com.minelittlepony.unicopia.entity.player.Pony; +import com.minelittlepony.unicopia.particle.MagicParticleEffect; import com.minelittlepony.unicopia.util.VecHelper; import net.minecraft.block.BlockState; diff --git a/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyStompAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyStompAbility.java index 3c664f76..f9121ba1 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyStompAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/EarthPonyStompAbility.java @@ -11,7 +11,7 @@ import com.minelittlepony.unicopia.TreeTraverser; import com.minelittlepony.unicopia.TreeType; import com.minelittlepony.unicopia.ability.data.Hit; import com.minelittlepony.unicopia.ability.data.Multi; -import com.minelittlepony.unicopia.equine.player.Pony; +import com.minelittlepony.unicopia.entity.player.Pony; import com.minelittlepony.unicopia.util.MagicalDamageSource; import com.minelittlepony.unicopia.util.PosHelper; import com.minelittlepony.unicopia.util.VecHelper; @@ -109,7 +109,7 @@ public class EarthPonyStompAbility implements Ability { player.addVelocity(0, -(ppos.getSquaredDistance(pos)), 0); - iplayer.getWorld().getEntities(player, areaOfEffect.offset(iplayer.getOriginVector())).forEach(i -> { + iplayer.getWorld().getOtherEntities(player, areaOfEffect.offset(iplayer.getOriginVector())).forEach(i -> { double dist = Math.sqrt(pos.getSquaredDistance(i.getBlockPos())); if (dist <= rad + 3) { @@ -119,7 +119,7 @@ public class EarthPonyStompAbility implements Ability { -(player.getY() - i.getY() - 2) / force + (dist < 1 ? dist : 0), -(player.getZ() - i.getZ()) / force); - DamageSource damage = MagicalDamageSource.causePlayerDamage("smash", player); + DamageSource damage = MagicalDamageSource.create("smash", player); double amount = (4 * player.getAttributeInstance(EntityAttributes.GENERIC_ATTACK_DAMAGE).getValue()) / (float)dist; diff --git a/src/main/java/com/minelittlepony/unicopia/ability/FlightPredicate.java b/src/main/java/com/minelittlepony/unicopia/ability/FlightPredicate.java index fb96ece0..ac635a5e 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/FlightPredicate.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/FlightPredicate.java @@ -1,6 +1,6 @@ package com.minelittlepony.unicopia.ability; -import com.minelittlepony.unicopia.equine.player.Pony; +import com.minelittlepony.unicopia.entity.player.Pony; /** * Predicate for abilities to control whether a player can fly. diff --git a/src/main/java/com/minelittlepony/unicopia/ability/HeightPredicate.java b/src/main/java/com/minelittlepony/unicopia/ability/HeightPredicate.java index c3fe5420..12aa6c9e 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/HeightPredicate.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/HeightPredicate.java @@ -1,6 +1,6 @@ package com.minelittlepony.unicopia.ability; -import com.minelittlepony.unicopia.equine.player.Pony; +import com.minelittlepony.unicopia.entity.player.Pony; /** * Predicate for abilities to control what the player's physical height is. diff --git a/src/main/java/com/minelittlepony/unicopia/ability/PegasusCloudInteractionAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/PegasusCloudInteractionAbility.java deleted file mode 100644 index 4555ded5..00000000 --- a/src/main/java/com/minelittlepony/unicopia/ability/PegasusCloudInteractionAbility.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.minelittlepony.unicopia.ability; - -import java.util.Optional; - -import com.minelittlepony.unicopia.Race; -import com.minelittlepony.unicopia.ability.data.Hit; -import com.minelittlepony.unicopia.ability.data.Numeric; -import com.minelittlepony.unicopia.equine.player.Pony; -import com.minelittlepony.unicopia.particles.MagicParticleEffect; -import com.minelittlepony.unicopia.particles.UParticles; -import com.minelittlepony.unicopia.util.VecHelper; - -import net.minecraft.entity.Entity; - -public class PegasusCloudInteractionAbility implements Ability { - - @Override - public int getWarmupTime(Pony player) { - return 10; - } - - @Override - public int getCooldownTime(Pony player) { - return 5; - } - - @Override - public boolean canUse(Race race) { - return race.canInteractWithClouds(); - } - - @Override - public Numeric tryActivate(Pony player) { - return findTarget(player).map(cloud -> { - Numeric data = new Numeric(player.getOwner().inventory.selectedSlot + 1); - cloud.handlePegasusInteration(data.type); - - return data; - }).orElse(null); - } - - @Override - public Hit.Serializer getSerializer() { - return Numeric.SERIALIZER; - } - - @Override - public void apply(Pony player, Numeric data) { - findTarget(player).ifPresent(cloud -> { - cloud.handlePegasusInteration(data.type); - }); - } - - protected Optional findTarget(Pony player) { - if (player.getOwner().hasVehicle() && player.getOwner().getVehicle() instanceof Interactable) { - return Optional.ofNullable((Interactable)player.getOwner().getVehicle()); - } - - Entity e = VecHelper.getLookedAtEntity(player.getOwner(), 18); - - if (e instanceof Interactable) { - return Optional.of((Interactable)e); - } - - return Optional.empty(); - } - - @Override - public void preApply(Pony player, AbilitySlot slot) { - player.spawnParticles(MagicParticleEffect.UNICORN, 10); - } - - @Override - public void postApply(Pony player, AbilitySlot slot) { - player.spawnParticles(UParticles.RAIN_DROPS, 5); - } - - public interface Interactable { - void handlePegasusInteration(int interationType); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/ability/UnicornCastingAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/UnicornCastingAbility.java index 8bfaf966..a6fb24d6 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/UnicornCastingAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/UnicornCastingAbility.java @@ -3,10 +3,10 @@ package com.minelittlepony.unicopia.ability; import com.google.common.collect.Streams; import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.ability.data.Hit; -import com.minelittlepony.unicopia.equine.player.Pony; -import com.minelittlepony.unicopia.magic.spell.ShieldSpell; -import com.minelittlepony.unicopia.magic.spell.SpellRegistry; -import com.minelittlepony.unicopia.particles.MagicParticleEffect; +import com.minelittlepony.unicopia.ability.magic.spell.ShieldSpell; +import com.minelittlepony.unicopia.ability.magic.spell.SpellRegistry; +import com.minelittlepony.unicopia.entity.player.Pony; +import com.minelittlepony.unicopia.particle.MagicParticleEffect; /** * A magic casting ability for unicorns. diff --git a/src/main/java/com/minelittlepony/unicopia/ability/UnicornTeleportAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/UnicornTeleportAbility.java index 8d5ade01..af72a25b 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/UnicornTeleportAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/UnicornTeleportAbility.java @@ -3,8 +3,8 @@ package com.minelittlepony.unicopia.ability; import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.ability.data.Hit; import com.minelittlepony.unicopia.ability.data.Pos; -import com.minelittlepony.unicopia.equine.player.Pony; -import com.minelittlepony.unicopia.particles.MagicParticleEffect; +import com.minelittlepony.unicopia.entity.player.Pony; +import com.minelittlepony.unicopia.particle.MagicParticleEffect; import com.minelittlepony.unicopia.util.VecHelper; import net.minecraft.block.Block; diff --git a/src/main/java/com/minelittlepony/unicopia/magic/Affine.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/Affine.java similarity index 79% rename from src/main/java/com/minelittlepony/unicopia/magic/Affine.java rename to src/main/java/com/minelittlepony/unicopia/ability/magic/Affine.java index df90885a..d6fe1da0 100644 --- a/src/main/java/com/minelittlepony/unicopia/magic/Affine.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/Affine.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.magic; +package com.minelittlepony.unicopia.ability.magic; /** * Interface for things that have an affine alignment. diff --git a/src/main/java/com/minelittlepony/unicopia/magic/Affinity.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/Affinity.java similarity index 96% rename from src/main/java/com/minelittlepony/unicopia/magic/Affinity.java rename to src/main/java/com/minelittlepony/unicopia/ability/magic/Affinity.java index 2e1e7369..6bc2aea9 100644 --- a/src/main/java/com/minelittlepony/unicopia/magic/Affinity.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/Affinity.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.magic; +package com.minelittlepony.unicopia.ability.magic; import net.minecraft.text.Text; import net.minecraft.text.TranslatableText; diff --git a/src/main/java/com/minelittlepony/unicopia/magic/AttachableSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/AttachableSpell.java similarity index 92% rename from src/main/java/com/minelittlepony/unicopia/magic/AttachableSpell.java rename to src/main/java/com/minelittlepony/unicopia/ability/magic/AttachableSpell.java index eb543d8e..346a5b90 100644 --- a/src/main/java/com/minelittlepony/unicopia/magic/AttachableSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/AttachableSpell.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.magic; +package com.minelittlepony.unicopia.ability.magic; /** * A magic effect that does something when attached to an entity. diff --git a/src/main/java/com/minelittlepony/unicopia/magic/Caster.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/Caster.java similarity index 80% rename from src/main/java/com/minelittlepony/unicopia/magic/Caster.java rename to src/main/java/com/minelittlepony/unicopia/ability/magic/Caster.java index e8ab5801..08393c72 100644 --- a/src/main/java/com/minelittlepony/unicopia/magic/Caster.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/Caster.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.magic; +package com.minelittlepony.unicopia.ability.magic; import java.util.Optional; import java.util.UUID; @@ -6,10 +6,9 @@ import java.util.stream.Stream; import javax.annotation.Nullable; -import com.minelittlepony.unicopia.AwaitTickQueue; import com.minelittlepony.unicopia.Owned; import com.minelittlepony.unicopia.network.EffectSync; -import com.minelittlepony.unicopia.particles.ParticleSource; +import com.minelittlepony.unicopia.particle.ParticleSource; import com.minelittlepony.unicopia.util.VecHelper; import net.minecraft.entity.Entity; @@ -128,31 +127,18 @@ public interface Caster extends Owned, Levelled, Affi default boolean subtractEnergyCost(double amount) { getOwner().damage(DamageSource.MAGIC, (int)amount/2); - return getOwner().getHealth() > 0; } default Stream> findAllSpellsInRange(double radius) { - return CasterUtils.findAllSpellsInRange(this, radius); + return CasterUtils.findInRange(this, radius); } default Stream> findAllSpellsInRange(Box bb) { - return CasterUtils.findAllSpellsInRange(this, bb); + return CasterUtils.findInRange(this, bb); } default Stream findAllEntitiesInRange(double radius) { return VecHelper.findAllEntitiesInRange(getEntity(), getWorld(), getOrigin(), radius); } - - default void notifyNearbySpells(Spell sender, BlockPos origin, double radius, int newState) { - AwaitTickQueue.scheduleTask(getWorld(), w -> { - VecHelper.findAllEntitiesInRange(getEntity(), getWorld(), origin, radius) - .filter(i -> i instanceof EtherialListener) - .forEach(i -> ((EtherialListener)i).onNearbySpellChange(this, sender, newState)); - }, 0); - } - - default void notifyNearbySpells(Spell sender, double radius, int newState) { - notifyNearbySpells(sender, getOrigin(), radius, newState); - } } diff --git a/src/main/java/com/minelittlepony/unicopia/magic/CasterUtils.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/CasterUtils.java similarity index 58% rename from src/main/java/com/minelittlepony/unicopia/magic/CasterUtils.java rename to src/main/java/com/minelittlepony/unicopia/ability/magic/CasterUtils.java index 57686623..7ed4a1af 100644 --- a/src/main/java/com/minelittlepony/unicopia/magic/CasterUtils.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/CasterUtils.java @@ -1,14 +1,12 @@ -package com.minelittlepony.unicopia.magic; +package com.minelittlepony.unicopia.ability.magic; import java.util.Optional; import java.util.stream.Stream; import javax.annotation.Nullable; -import com.google.common.collect.Streams; import com.minelittlepony.unicopia.EquinePredicates; -import com.minelittlepony.unicopia.ducks.PonyContainer; -import com.minelittlepony.unicopia.magic.spell.SpellRegistry; +import com.minelittlepony.unicopia.entity.PonyContainer; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; @@ -20,7 +18,7 @@ public class CasterUtils { /** * Finds all surrounding spells withing range from the given caster. */ - public static Stream> findAllSpellsInRange(Caster source, double radius) { + public static Stream> findInRange(Caster source, double radius) { BlockPos origin = source.getOrigin(); @@ -29,7 +27,7 @@ public class CasterUtils { Box bb = new Box(begin, end); - return source.getWorld().getEntities(source.getEntity(), bb, e -> + return source.getWorld().getOtherEntities(source.getEntity(), bb, e -> !e.removed && (e instanceof Caster || e instanceof PlayerEntity) ).stream().filter(e -> { double dist = e.squaredDistanceTo(origin.getX(), origin.getY(), origin.getZ()); @@ -42,30 +40,13 @@ public class CasterUtils { .map(Optional::get); } - static Stream> findAllSpellsInRange(Caster source, Box bb) { - return source.getWorld().getEntities(source.getEntity(), bb, e -> !e.removed && (e instanceof Caster || EquinePredicates.PLAYER_UNICORN.test(e))).stream() + static Stream> findInRange(Caster source, Box bb) { + return source.getWorld().getOtherEntities(source.getEntity(), bb, e -> !e.removed && (e instanceof Caster || EquinePredicates.PLAYER_UNICORN.test(e))).stream() .map(CasterUtils::toCaster) .filter(o -> o.isPresent() && o.get() != source) .map(Optional::get); } - static Optional toMagicEffect(Class type, @Nullable Entity entity) { - return toCaster(entity) - .filter(Caster::hasSpell) - .map(caster -> caster.getSpell(type, false)) - .filter(e -> !e.isDead()); - } - - /** - * Determines if the passed in entity is holding the named effect. - * By holding that meant the effect must be attached to the caster associated with the entity. - */ - public static boolean isHoldingEffect(String effectName, Entity entity) { - return Streams.stream(entity.getArmorItems()) - .map(SpellRegistry::getKeyFromStack) - .anyMatch(s -> s.equals(effectName)); - } - /** * Attempts to convert the passed entity into a caster using all the known methods. */ diff --git a/src/main/java/com/minelittlepony/unicopia/magic/Levelled.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/Levelled.java similarity index 91% rename from src/main/java/com/minelittlepony/unicopia/magic/Levelled.java rename to src/main/java/com/minelittlepony/unicopia/ability/magic/Levelled.java index a02fd85a..2be67b2d 100644 --- a/src/main/java/com/minelittlepony/unicopia/magic/Levelled.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/Levelled.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.magic; +package com.minelittlepony.unicopia.ability.magic; /** * Object with levelling capabilities. diff --git a/src/main/java/com/minelittlepony/unicopia/magic/Magical.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/Magical.java similarity index 74% rename from src/main/java/com/minelittlepony/unicopia/magic/Magical.java rename to src/main/java/com/minelittlepony/unicopia/ability/magic/Magical.java index 52d85551..99d8d24c 100644 --- a/src/main/java/com/minelittlepony/unicopia/magic/Magical.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/Magical.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.magic; +package com.minelittlepony.unicopia.ability.magic; /** * Any entities with magical abilities. diff --git a/src/main/java/com/minelittlepony/unicopia/magic/Spell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/Spell.java similarity index 95% rename from src/main/java/com/minelittlepony/unicopia/magic/Spell.java rename to src/main/java/com/minelittlepony/unicopia/ability/magic/Spell.java index a12769b4..2204db0c 100644 --- a/src/main/java/com/minelittlepony/unicopia/magic/Spell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/Spell.java @@ -1,6 +1,6 @@ -package com.minelittlepony.unicopia.magic; +package com.minelittlepony.unicopia.ability.magic; -import com.minelittlepony.unicopia.magic.spell.SpellRegistry; +import com.minelittlepony.unicopia.ability.magic.spell.SpellRegistry; import com.minelittlepony.unicopia.util.NbtSerialisable; import net.minecraft.entity.projectile.ProjectileEntity; diff --git a/src/main/java/com/minelittlepony/unicopia/magic/Suppressable.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/Suppressable.java similarity index 90% rename from src/main/java/com/minelittlepony/unicopia/magic/Suppressable.java rename to src/main/java/com/minelittlepony/unicopia/ability/magic/Suppressable.java index 1f72249b..0327bbb7 100644 --- a/src/main/java/com/minelittlepony/unicopia/magic/Suppressable.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/Suppressable.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.magic; +package com.minelittlepony.unicopia.ability.magic; /** * Magic effects that can be suppressed by other nearby effects. diff --git a/src/main/java/com/minelittlepony/unicopia/magic/ThrowableSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/ThrowableSpell.java similarity index 65% rename from src/main/java/com/minelittlepony/unicopia/magic/ThrowableSpell.java rename to src/main/java/com/minelittlepony/unicopia/ability/magic/ThrowableSpell.java index 0dc1955f..fd17459a 100644 --- a/src/main/java/com/minelittlepony/unicopia/magic/ThrowableSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/ThrowableSpell.java @@ -1,28 +1,43 @@ -package com.minelittlepony.unicopia.magic; +package com.minelittlepony.unicopia.ability.magic; import javax.annotation.Nullable; -import com.minelittlepony.unicopia.magic.spell.SpellRegistry; -import com.minelittlepony.unicopia.util.projectile.Projectile; -import com.minelittlepony.unicopia.util.projectile.Tossable; -import com.minelittlepony.unicopia.world.entity.MagicProjectileEntity; -import com.minelittlepony.unicopia.world.entity.UEntities; -import com.minelittlepony.unicopia.world.item.UItems; +import com.minelittlepony.unicopia.UEntities; +import com.minelittlepony.unicopia.ability.magic.spell.SpellRegistry; +import com.minelittlepony.unicopia.projectile.MagicProjectileEntity; +import com.minelittlepony.unicopia.projectile.Projectile; +import net.minecraft.block.BlockState; import net.minecraft.entity.Entity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; import net.minecraft.sound.SoundCategory; import net.minecraft.sound.SoundEvent; import net.minecraft.sound.SoundEvents; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; /** * Magic effects that can be thrown. */ -public interface ThrowableSpell extends Spell, Tossable> { +public interface ThrowableSpell extends Spell { - @Override + /** + * Called once the projectile lands either hitting the ground or an entity. + */ + void onImpact(Caster caster, BlockPos pos, BlockState state); + + /** + * The amount of damage to be dealt when the projectile collides with an entity. + */ + default int getThrowDamage(Caster stack) { + return 0; + } + + /** + * The sound made when thrown. + */ default SoundEvent getThrowSound(Caster caster) { return SoundEvents.ITEM_CHORUS_FRUIT_TELEPORT; } @@ -31,7 +46,7 @@ public interface ThrowableSpell extends Spell, Tossable> { * Gets the appearance to be used when projecting this spell. */ default ItemStack getCastAppearance(Caster caster) { - Item item = getAffinity() == Affinity.BAD ? UItems.CORRUPTED_GEM : UItems.GEM; + Item item = getAffinity() == Affinity.BAD ? Items.MAGMA_CREAM : Items.SNOWBALL; return SpellRegistry.instance().enchantStack(new ItemStack(item), getName()); } diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/AbstractRangedAreaSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/AbstractRangedAreaSpell.java similarity index 83% rename from src/main/java/com/minelittlepony/unicopia/magic/spell/AbstractRangedAreaSpell.java rename to src/main/java/com/minelittlepony/unicopia/ability/magic/spell/AbstractRangedAreaSpell.java index d11278a2..28b995d8 100644 --- a/src/main/java/com/minelittlepony/unicopia/magic/spell/AbstractRangedAreaSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/AbstractRangedAreaSpell.java @@ -1,7 +1,7 @@ -package com.minelittlepony.unicopia.magic.spell; +package com.minelittlepony.unicopia.ability.magic.spell; -import com.minelittlepony.unicopia.magic.AttachableSpell; -import com.minelittlepony.unicopia.magic.Caster; +import com.minelittlepony.unicopia.ability.magic.AttachableSpell; +import com.minelittlepony.unicopia.ability.magic.Caster; public abstract class AbstractRangedAreaSpell extends AbstractSpell implements AttachableSpell { diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/AbstractSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/AbstractSpell.java similarity index 86% rename from src/main/java/com/minelittlepony/unicopia/magic/spell/AbstractSpell.java rename to src/main/java/com/minelittlepony/unicopia/ability/magic/spell/AbstractSpell.java index f4bd2fee..962e78cb 100644 --- a/src/main/java/com/minelittlepony/unicopia/magic/spell/AbstractSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/AbstractSpell.java @@ -1,7 +1,7 @@ -package com.minelittlepony.unicopia.magic.spell; +package com.minelittlepony.unicopia.ability.magic.spell; -import com.minelittlepony.unicopia.magic.Caster; -import com.minelittlepony.unicopia.magic.Spell; +import com.minelittlepony.unicopia.ability.magic.Caster; +import com.minelittlepony.unicopia.ability.magic.Spell; import net.minecraft.nbt.CompoundTag; diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/AttractiveSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/AttractiveSpell.java similarity index 76% rename from src/main/java/com/minelittlepony/unicopia/magic/spell/AttractiveSpell.java rename to src/main/java/com/minelittlepony/unicopia/ability/magic/spell/AttractiveSpell.java index 654a2ff6..15ec58aa 100644 --- a/src/main/java/com/minelittlepony/unicopia/magic/spell/AttractiveSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/AttractiveSpell.java @@ -1,16 +1,14 @@ -package com.minelittlepony.unicopia.magic.spell; +package com.minelittlepony.unicopia.ability.magic.spell; import java.util.List; import java.util.stream.Collectors; import javax.annotation.Nullable; -import com.minelittlepony.unicopia.equine.player.Pony; -import com.minelittlepony.unicopia.magic.Affinity; -import com.minelittlepony.unicopia.magic.Caster; -import com.minelittlepony.unicopia.magic.EtherialListener; -import com.minelittlepony.unicopia.magic.Spell; -import com.minelittlepony.unicopia.particles.MagicParticleEffect; +import com.minelittlepony.unicopia.ability.magic.Affinity; +import com.minelittlepony.unicopia.ability.magic.Caster; +import com.minelittlepony.unicopia.entity.player.Pony; +import com.minelittlepony.unicopia.particle.MagicParticleEffect; import com.minelittlepony.unicopia.util.MagicalDamageSource; import com.minelittlepony.unicopia.util.NbtSerialisable; import com.minelittlepony.unicopia.util.VecHelper; @@ -24,7 +22,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; -public class AttractiveSpell extends ShieldSpell implements EtherialListener { +public class AttractiveSpell extends ShieldSpell { @Nullable private BlockPos homingPos; @@ -102,22 +100,6 @@ public class AttractiveSpell extends ShieldSpell implements EtherialListener { target.setVelocity(x, y, z); } - @Override - public void onNearbySpellChange(Caster source, Spell effect, int newState) { - if (effect instanceof ChargingSpell && !isDead()) { - if (newState == ADDED) { - if (homingPos == null) { - homingPos = source.getOrigin(); - } - setDirty(true); - } else if (homingPos.equals(source.getOrigin())) { - setDead(); - setDirty(true); - source.notifyNearbySpells(this, 5, REMOVED); - } - } - } - @Override public void toNBT(CompoundTag compound) { super.toNBT(compound); diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/AwkwardSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/AwkwardSpell.java similarity index 69% rename from src/main/java/com/minelittlepony/unicopia/magic/spell/AwkwardSpell.java rename to src/main/java/com/minelittlepony/unicopia/ability/magic/spell/AwkwardSpell.java index 761fbaa9..e32b9850 100644 --- a/src/main/java/com/minelittlepony/unicopia/magic/spell/AwkwardSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/AwkwardSpell.java @@ -1,25 +1,16 @@ -package com.minelittlepony.unicopia.magic.spell; +package com.minelittlepony.unicopia.ability.magic.spell; import java.util.ArrayList; import java.util.List; -import javax.annotation.Nullable; - -import com.minelittlepony.unicopia.magic.Affinity; -import com.minelittlepony.unicopia.magic.CastResult; -import com.minelittlepony.unicopia.magic.CasterUtils; -import com.minelittlepony.unicopia.magic.Caster; -import com.minelittlepony.unicopia.magic.ThrowableSpell; -import com.minelittlepony.unicopia.magic.Useable; +import com.minelittlepony.unicopia.ability.magic.Affinity; +import com.minelittlepony.unicopia.ability.magic.Caster; +import com.minelittlepony.unicopia.ability.magic.ThrowableSpell; import com.minelittlepony.unicopia.util.shape.Sphere; import com.mojang.brigadier.StringReader; import com.mojang.brigadier.exceptions.CommandSyntaxException; import net.minecraft.block.BlockState; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.item.ItemUsageContext; import net.minecraft.particle.ParticleEffect; import net.minecraft.particle.ParticleType; import net.minecraft.particle.ParticleTypes; @@ -28,9 +19,8 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; import net.minecraft.util.registry.Registry; -import net.minecraft.world.World; -public class AwkwardSpell extends AbstractSpell implements ThrowableSpell, Useable { +public class AwkwardSpell extends AbstractSpell implements ThrowableSpell { @Override public String getName() { @@ -86,16 +76,4 @@ public class AwkwardSpell extends AbstractSpell implements ThrowableSpell, Useab // noop } - @Override - public CastResult onUse(ItemUsageContext context, Affinity affinity) { - return CastResult.PLACE; - } - - @Override - public CastResult onUse(ItemStack stack, Affinity affinity, PlayerEntity player, World world, @Nullable Entity hitEntity) { - - CasterUtils.toCaster(player).ifPresent(this::toss); - - return CastResult.NONE; - } } diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/DisguiseSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/DisguiseSpell.java similarity index 95% rename from src/main/java/com/minelittlepony/unicopia/magic/spell/DisguiseSpell.java rename to src/main/java/com/minelittlepony/unicopia/ability/magic/spell/DisguiseSpell.java index 9af146a1..bf665f5c 100644 --- a/src/main/java/com/minelittlepony/unicopia/magic/spell/DisguiseSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/DisguiseSpell.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.magic.spell; +package com.minelittlepony.unicopia.ability.magic.spell; import java.util.UUID; @@ -10,16 +10,16 @@ import com.minelittlepony.unicopia.Owned; import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.ability.FlightPredicate; import com.minelittlepony.unicopia.ability.HeightPredicate; -import com.minelittlepony.unicopia.equine.player.Pony; -import com.minelittlepony.unicopia.magic.Affinity; -import com.minelittlepony.unicopia.magic.CasterUtils; -import com.minelittlepony.unicopia.magic.AttachableSpell; -import com.minelittlepony.unicopia.magic.Caster; -import com.minelittlepony.unicopia.magic.Spell; -import com.minelittlepony.unicopia.magic.Suppressable; -import com.minelittlepony.unicopia.particles.MagicParticleEffect; -import com.minelittlepony.unicopia.particles.UParticles; -import com.minelittlepony.unicopia.util.projectile.ProjectileUtil; +import com.minelittlepony.unicopia.ability.magic.Affinity; +import com.minelittlepony.unicopia.ability.magic.AttachableSpell; +import com.minelittlepony.unicopia.ability.magic.Caster; +import com.minelittlepony.unicopia.ability.magic.CasterUtils; +import com.minelittlepony.unicopia.ability.magic.Spell; +import com.minelittlepony.unicopia.ability.magic.Suppressable; +import com.minelittlepony.unicopia.entity.player.Pony; +import com.minelittlepony.unicopia.particle.MagicParticleEffect; +import com.minelittlepony.unicopia.particle.UParticles; +import com.minelittlepony.unicopia.projectile.ProjectileUtil; import com.mojang.authlib.GameProfile; import net.minecraft.block.entity.SkullBlockEntity; @@ -234,9 +234,9 @@ public class DisguiseSpell extends AbstractSpell implements AttachableSpell, Sup to.prevY = from.prevY; to.prevZ = from.prevZ; - to.trackedX = from.trackedX; - to.trackedY = from.trackedY; - to.trackedZ = from.trackedZ; + to.chunkX = from.chunkX; + to.chunkY = from.chunkY; + to.chunkZ = from.chunkZ; to.lastRenderX = from.lastRenderX; to.lastRenderY = from.lastRenderY; @@ -550,7 +550,7 @@ public class DisguiseSpell extends AbstractSpell implements AttachableSpell, Sup } static abstract class PlayerAccess extends PlayerEntity { - public PlayerAccess() { super(null, null, null); } + public PlayerAccess() { super(null, null, 0, null); } static TrackedData getModelBitFlag() { return PLAYER_MODEL_PARTS; } diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/FireSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/FireSpell.java similarity index 74% rename from src/main/java/com/minelittlepony/unicopia/magic/spell/FireSpell.java rename to src/main/java/com/minelittlepony/unicopia/ability/magic/spell/FireSpell.java index 4d5b523c..685a43ec 100644 --- a/src/main/java/com/minelittlepony/unicopia/magic/spell/FireSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/FireSpell.java @@ -1,18 +1,13 @@ -package com.minelittlepony.unicopia.magic.spell; - -import javax.annotation.Nullable; +package com.minelittlepony.unicopia.ability.magic.spell; import com.minelittlepony.unicopia.EquinePredicates; -import com.minelittlepony.unicopia.magic.Affinity; -import com.minelittlepony.unicopia.magic.CastResult; -import com.minelittlepony.unicopia.magic.Caster; -import com.minelittlepony.unicopia.magic.DispenceableSpell; -import com.minelittlepony.unicopia.magic.Magical; -import com.minelittlepony.unicopia.magic.Useable; +import com.minelittlepony.unicopia.ability.magic.Affinity; +import com.minelittlepony.unicopia.ability.magic.Caster; +import com.minelittlepony.unicopia.ability.magic.Magical; +import com.minelittlepony.unicopia.block.state.StateMaps; import com.minelittlepony.unicopia.util.MagicalDamageSource; import com.minelittlepony.unicopia.util.PosHelper; import com.minelittlepony.unicopia.util.VecHelper; -import com.minelittlepony.unicopia.util.blockstate.StateMaps; import com.minelittlepony.unicopia.util.shape.Shape; import com.minelittlepony.unicopia.util.shape.Sphere; @@ -26,22 +21,18 @@ import net.minecraft.entity.ItemEntity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.item.ItemUsageContext; import net.minecraft.particle.ParticleTypes; import net.minecraft.sound.SoundCategory; import net.minecraft.sound.SoundEvents; import net.minecraft.tag.BlockTags; -import net.minecraft.util.math.BlockPointer; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; /** * Simple fire spell that triggers an effect when used on a block. */ -public class FireSpell extends AbstractRangedAreaSpell implements Useable, DispenceableSpell { +public class FireSpell extends AbstractRangedAreaSpell { private static final Shape VISUAL_EFFECT_RANGE = new Sphere(false, 0.5); private static final Shape EFFECT_RANGE = new Sphere(false, 4); @@ -63,7 +54,10 @@ public class FireSpell extends AbstractRangedAreaSpell implements Useable, Dispe @Override public boolean update(Caster source) { - return false; + return PosHelper.getAllInRegionMutable(source.getOrigin(), EFFECT_RANGE).reduce(false, + (r, i) -> applyBlocks(source.getWorld(), i), + (a, b) -> a || b) + || applyEntities(null, source.getWorld(), source.getOrigin()); } @Override @@ -73,47 +67,6 @@ public class FireSpell extends AbstractRangedAreaSpell implements Useable, Dispe }); } - @Override - public CastResult onUse(ItemUsageContext context, Affinity affinity) { - boolean result = false; - - PlayerEntity player = context.getPlayer(); - BlockPos pos = context.getBlockPos(); - - if (player == null || player.isSneaking()) { - result = applyBlocks(context.getWorld(), pos); - } else { - result = PosHelper.getAllInRegionMutable(pos, EFFECT_RANGE).reduce(result, - (r, i) -> applyBlocks(context.getWorld(), i), - (a, b) -> a || b); - } - - if (!result) { - result = applyEntities(player, context.getWorld(), pos); - } - - return result ? CastResult.DEFAULT : CastResult.NONE; - } - - @Override - public CastResult onUse(ItemStack stack, Affinity affinity, PlayerEntity player, World world, @Nullable Entity hitEntity) { - if (hitEntity == null) { - return CastResult.NONE; - } - - return applyEntitySingle(player, world, hitEntity) ? CastResult.DEFAULT : CastResult.NONE; - } - - @Override - public CastResult onDispenced(BlockPos pos, Direction facing, BlockPointer source, Affinity affinity) { - pos = pos.offset(facing, 4); - - return CastResult.cancelled(PosHelper.getAllInRegionMutable(pos, EFFECT_RANGE).reduce(false, - (r, i) -> applyBlocks(source.getWorld(), i), - (a, b) -> a || b) - || applyEntities(null, source.getWorld(), pos)); - } - protected boolean applyBlocks(World world, BlockPos pos) { BlockState state = world.getBlockState(pos); Block id = state.getBlock(); @@ -189,7 +142,7 @@ public class FireSpell extends AbstractRangedAreaSpell implements Useable, Dispe } protected DamageSource getDamageCause(Entity target, LivingEntity attacker) { - return MagicalDamageSource.causeMobDamage("fire", attacker); + return MagicalDamageSource.create("fire", attacker); } /** diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/GenericSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/GenericSpell.java similarity index 76% rename from src/main/java/com/minelittlepony/unicopia/magic/spell/GenericSpell.java rename to src/main/java/com/minelittlepony/unicopia/ability/magic/spell/GenericSpell.java index 8b0a7d4f..f7293849 100644 --- a/src/main/java/com/minelittlepony/unicopia/magic/spell/GenericSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/GenericSpell.java @@ -1,11 +1,11 @@ -package com.minelittlepony.unicopia.magic.spell; +package com.minelittlepony.unicopia.ability.magic.spell; import java.util.function.Supplier; -import com.minelittlepony.unicopia.magic.Affinity; -import com.minelittlepony.unicopia.magic.Caster; -import com.minelittlepony.unicopia.magic.Spell; -import com.minelittlepony.unicopia.particles.MagicParticleEffect; +import com.minelittlepony.unicopia.ability.magic.Affinity; +import com.minelittlepony.unicopia.ability.magic.Caster; +import com.minelittlepony.unicopia.ability.magic.Spell; +import com.minelittlepony.unicopia.particle.MagicParticleEffect; public class GenericSpell extends AbstractSpell { diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/IceSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/IceSpell.java similarity index 54% rename from src/main/java/com/minelittlepony/unicopia/magic/spell/IceSpell.java rename to src/main/java/com/minelittlepony/unicopia/ability/magic/spell/IceSpell.java index 182faca6..f695c09e 100644 --- a/src/main/java/com/minelittlepony/unicopia/magic/spell/IceSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/IceSpell.java @@ -1,19 +1,13 @@ -package com.minelittlepony.unicopia.magic.spell; +package com.minelittlepony.unicopia.ability.magic.spell; -import javax.annotation.Nullable; - -import com.minelittlepony.unicopia.magic.Affinity; -import com.minelittlepony.unicopia.magic.CastResult; -import com.minelittlepony.unicopia.magic.Caster; -import com.minelittlepony.unicopia.magic.DispenceableSpell; -import com.minelittlepony.unicopia.magic.Useable; +import com.minelittlepony.unicopia.ability.magic.Affinity; +import com.minelittlepony.unicopia.ability.magic.Caster; +import com.minelittlepony.unicopia.block.state.StateMaps; import com.minelittlepony.unicopia.util.MagicalDamageSource; import com.minelittlepony.unicopia.util.PosHelper; import com.minelittlepony.unicopia.util.VecHelper; -import com.minelittlepony.unicopia.util.blockstate.StateMaps; import com.minelittlepony.unicopia.util.shape.Shape; import com.minelittlepony.unicopia.util.shape.Sphere; -import com.minelittlepony.unicopia.world.block.UMaterials; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -21,18 +15,14 @@ import net.minecraft.block.Blocks; import net.minecraft.block.Material; import net.minecraft.block.PlantBlock; import net.minecraft.entity.Entity; +import net.minecraft.entity.LivingEntity; import net.minecraft.entity.TntEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.item.ItemUsageContext; import net.minecraft.particle.ParticleTypes; import net.minecraft.tag.BlockTags; -import net.minecraft.util.math.BlockPointer; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; import net.minecraft.world.World; -public class IceSpell extends AbstractRangedAreaSpell implements Useable, DispenceableSpell { +public class IceSpell extends AbstractRangedAreaSpell { private final int rad = 3; private final Shape effect_range = new Sphere(false, rad); @@ -54,65 +44,38 @@ public class IceSpell extends AbstractRangedAreaSpell implements Useable, Dispen @Override public boolean update(Caster source) { - return false; + LivingEntity owner = source.getOwner(); + + PosHelper.getAllInRegionMutable(source.getOrigin(), effect_range) + .forEach(i -> applyBlockSingle(owner, source.getWorld(), i)); + + return applyEntities(source.getOwner(), source.getWorld(), source.getOrigin()); } @Override public void render(Caster source) { } - @Override - public CastResult onDispenced(BlockPos pos, Direction facing, BlockPointer source, Affinity affinity) { - return applyBlocks(null, source.getWorld(), pos.offset(facing, rad)) ? CastResult.NONE : CastResult.DEFAULT; - } - - @Override - public CastResult onUse(ItemUsageContext context, Affinity affinity) { - if (context.getPlayer() != null && context.getPlayer().isSneaking()) { - applyBlockSingle(context.getPlayer(), context.getWorld(), context.getBlockPos()); - } else { - applyBlocks(context.getPlayer(), context.getWorld(), context.getBlockPos()); - } - - return CastResult.DEFAULT; - } - - @Override - public CastResult onUse(ItemStack stack, Affinity affinity, PlayerEntity player, World world, @Nullable Entity hitEntity) { - if (hitEntity != null && applyEntitySingle(player, hitEntity)) { - return CastResult.DEFAULT; - } - - return CastResult.NONE; - } - - private boolean applyBlocks(PlayerEntity owner, World world, BlockPos pos) { - - PosHelper.getAllInRegionMutable(pos, effect_range).forEach(i -> applyBlockSingle(owner, world, i)); - - return applyEntities(owner, world, pos); - } - - protected boolean applyEntities(PlayerEntity owner, World world, BlockPos pos) { + protected boolean applyEntities(LivingEntity owner, World world, BlockPos pos) { return VecHelper.findAllEntitiesInRange(owner, world, pos, 3).filter(i -> applyEntitySingle(owner, i) ).count() > 0; } - protected boolean applyEntitySingle(PlayerEntity owner, Entity e) { + protected boolean applyEntitySingle(LivingEntity owner, Entity e) { if (e instanceof TntEntity) { e.remove(); e.getEntityWorld().setBlockState(e.getBlockPos(), Blocks.TNT.getDefaultState()); } else if (e.isOnFire()) { e.extinguish(); } else { - e.damage(MagicalDamageSource.causePlayerDamage("cold", owner), 2); + e.damage(MagicalDamageSource.create("cold", owner), 2); } return true; } - private void applyBlockSingle(PlayerEntity owner, World world, BlockPos pos) { + private void applyBlockSingle(Entity owner, World world, BlockPos pos) { BlockState state = world.getBlockState(pos); Block id = state.getBlock(); @@ -120,7 +83,7 @@ public class IceSpell extends AbstractRangedAreaSpell implements Useable, Dispen if (!state.equals(converted)) { world.setBlockState(pos, converted, 3); - } else if (state.getMaterial() != UMaterials.CLOUD && world.isTopSolid(pos, owner) + } else if (world.isTopSolid(pos, owner) || (id == Blocks.SNOW) || state.isIn(BlockTags.LEAVES)) { incrementIce(world, pos.up()); diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/InfernoSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/InfernoSpell.java similarity index 78% rename from src/main/java/com/minelittlepony/unicopia/magic/spell/InfernoSpell.java rename to src/main/java/com/minelittlepony/unicopia/ability/magic/spell/InfernoSpell.java index 4b552b21..df1a2189 100644 --- a/src/main/java/com/minelittlepony/unicopia/magic/spell/InfernoSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/InfernoSpell.java @@ -1,10 +1,9 @@ -package com.minelittlepony.unicopia.magic.spell; +package com.minelittlepony.unicopia.ability.magic.spell; -import com.minelittlepony.unicopia.magic.Affinity; -import com.minelittlepony.unicopia.magic.CastResult; -import com.minelittlepony.unicopia.magic.Caster; +import com.minelittlepony.unicopia.ability.magic.Affinity; +import com.minelittlepony.unicopia.ability.magic.Caster; +import com.minelittlepony.unicopia.block.state.StateMaps; import com.minelittlepony.unicopia.util.MagicalDamageSource; -import com.minelittlepony.unicopia.util.blockstate.StateMaps; import com.minelittlepony.unicopia.util.shape.Shape; import com.minelittlepony.unicopia.util.shape.Sphere; @@ -12,7 +11,6 @@ import net.minecraft.block.BlockState; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.damage.DamageSource; -import net.minecraft.item.ItemUsageContext; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; @@ -33,11 +31,6 @@ public class InfernoSpell extends FireSpell { return 0xF00F00; } - @Override - public CastResult onUse(ItemUsageContext context, Affinity affinity) { - return CastResult.PLACE; - } - @Override public boolean update(Caster source) { World w = source.getWorld(); @@ -78,8 +71,8 @@ public class InfernoSpell extends FireSpell { @Override protected DamageSource getDamageCause(Entity target, LivingEntity attacker) { if (attacker != null && attacker.getUuid().equals(target.getUuid())) { - return MagicalDamageSource.causeMobDamage("fire.own", null); + return MagicalDamageSource.create("fire.own", null); } - return MagicalDamageSource.causeMobDamage("fire", attacker); + return MagicalDamageSource.create("fire", attacker); } } diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/NecromancySpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/NecromancySpell.java similarity index 94% rename from src/main/java/com/minelittlepony/unicopia/magic/spell/NecromancySpell.java rename to src/main/java/com/minelittlepony/unicopia/ability/magic/spell/NecromancySpell.java index 2ce0741a..5ff49b04 100644 --- a/src/main/java/com/minelittlepony/unicopia/magic/spell/NecromancySpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/NecromancySpell.java @@ -1,10 +1,10 @@ -package com.minelittlepony.unicopia.magic.spell; +package com.minelittlepony.unicopia.ability.magic.spell; import java.util.List; import com.google.common.collect.Lists; -import com.minelittlepony.unicopia.magic.Affinity; -import com.minelittlepony.unicopia.magic.Caster; +import com.minelittlepony.unicopia.ability.magic.Affinity; +import com.minelittlepony.unicopia.ability.magic.Caster; import com.minelittlepony.unicopia.util.VecHelper; import com.minelittlepony.unicopia.util.WorldEvent; import com.minelittlepony.unicopia.util.shape.Shape; diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/RevealingSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/RevealingSpell.java similarity index 80% rename from src/main/java/com/minelittlepony/unicopia/magic/spell/RevealingSpell.java rename to src/main/java/com/minelittlepony/unicopia/ability/magic/spell/RevealingSpell.java index 3a95a683..e2945a29 100644 --- a/src/main/java/com/minelittlepony/unicopia/magic/spell/RevealingSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/RevealingSpell.java @@ -1,9 +1,9 @@ -package com.minelittlepony.unicopia.magic.spell; +package com.minelittlepony.unicopia.ability.magic.spell; -import com.minelittlepony.unicopia.magic.Affinity; -import com.minelittlepony.unicopia.magic.Caster; -import com.minelittlepony.unicopia.magic.Suppressable; -import com.minelittlepony.unicopia.particles.MagicParticleEffect; +import com.minelittlepony.unicopia.ability.magic.Affinity; +import com.minelittlepony.unicopia.ability.magic.Caster; +import com.minelittlepony.unicopia.ability.magic.Suppressable; +import com.minelittlepony.unicopia.particle.MagicParticleEffect; import com.minelittlepony.unicopia.util.shape.Shape; import com.minelittlepony.unicopia.util.shape.Sphere; @@ -11,7 +11,9 @@ import net.minecraft.sound.SoundCategory; import net.minecraft.sound.SoundEvents; import net.minecraft.util.math.Vec3d; - +/** + * A spell for revealing changelings. + */ public class RevealingSpell extends AbstractSpell { @Override diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/ScorchSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/ScorchSpell.java similarity index 83% rename from src/main/java/com/minelittlepony/unicopia/magic/spell/ScorchSpell.java rename to src/main/java/com/minelittlepony/unicopia/ability/magic/spell/ScorchSpell.java index e112ff7f..0280941f 100644 --- a/src/main/java/com/minelittlepony/unicopia/magic/spell/ScorchSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/ScorchSpell.java @@ -1,14 +1,14 @@ -package com.minelittlepony.unicopia.magic.spell; +package com.minelittlepony.unicopia.ability.magic.spell; import javax.annotation.Nullable; -import com.minelittlepony.unicopia.magic.Affinity; -import com.minelittlepony.unicopia.magic.Caster; -import com.minelittlepony.unicopia.magic.ThrowableSpell; -import com.minelittlepony.unicopia.particles.MagicParticleEffect; +import com.minelittlepony.unicopia.ability.magic.Affinity; +import com.minelittlepony.unicopia.ability.magic.Caster; +import com.minelittlepony.unicopia.ability.magic.ThrowableSpell; +import com.minelittlepony.unicopia.block.state.StateMaps; +import com.minelittlepony.unicopia.particle.MagicParticleEffect; +import com.minelittlepony.unicopia.projectile.Projectile; import com.minelittlepony.unicopia.util.PosHelper; -import com.minelittlepony.unicopia.util.blockstate.StateMaps; -import com.minelittlepony.unicopia.util.projectile.Projectile; import com.minelittlepony.unicopia.util.shape.Sphere; import net.minecraft.block.BlockState; diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/ShieldSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/ShieldSpell.java similarity index 88% rename from src/main/java/com/minelittlepony/unicopia/magic/spell/ShieldSpell.java rename to src/main/java/com/minelittlepony/unicopia/ability/magic/spell/ShieldSpell.java index 2c24cf80..2d0049c7 100644 --- a/src/main/java/com/minelittlepony/unicopia/magic/spell/ShieldSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/ShieldSpell.java @@ -1,19 +1,18 @@ -package com.minelittlepony.unicopia.magic.spell; +package com.minelittlepony.unicopia.ability.magic.spell; import java.util.List; import java.util.stream.Collectors; import com.minelittlepony.unicopia.EquinePredicates; -import com.minelittlepony.unicopia.equine.player.Pony; -import com.minelittlepony.unicopia.magic.Affinity; -import com.minelittlepony.unicopia.magic.AttachableSpell; -import com.minelittlepony.unicopia.magic.Caster; -import com.minelittlepony.unicopia.particles.MagicParticleEffect; -import com.minelittlepony.unicopia.particles.ParticleHandle; -import com.minelittlepony.unicopia.particles.SphereParticleEffect; -import com.minelittlepony.unicopia.util.projectile.ProjectileUtil; +import com.minelittlepony.unicopia.ability.magic.Affinity; +import com.minelittlepony.unicopia.ability.magic.AttachableSpell; +import com.minelittlepony.unicopia.ability.magic.Caster; +import com.minelittlepony.unicopia.entity.player.Pony; +import com.minelittlepony.unicopia.particle.MagicParticleEffect; +import com.minelittlepony.unicopia.particle.ParticleHandle; +import com.minelittlepony.unicopia.particle.SphereParticleEffect; +import com.minelittlepony.unicopia.projectile.ProjectileUtil; import com.minelittlepony.unicopia.util.shape.Sphere; -import com.minelittlepony.unicopia.world.entity.SpellcastEntity; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; @@ -76,7 +75,7 @@ public class ShieldSpell extends AbstractRangedAreaSpell implements AttachableSp } public double getDrawDropOffRange(Caster source) { - float multiplier = (source.getOwner() instanceof SpellcastEntity || source.getOwner().isSneaking() ? 1 : 2); + float multiplier = (source.getOwner().isSneaking() ? 1 : 2); return (4 + (source.getCurrentLevel() * 2)) / multiplier; } diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/SiphoningSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/SiphoningSpell.java similarity index 91% rename from src/main/java/com/minelittlepony/unicopia/magic/spell/SiphoningSpell.java rename to src/main/java/com/minelittlepony/unicopia/ability/magic/spell/SiphoningSpell.java index a5cd7080..1e0feea2 100644 --- a/src/main/java/com/minelittlepony/unicopia/magic/spell/SiphoningSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/SiphoningSpell.java @@ -1,12 +1,12 @@ -package com.minelittlepony.unicopia.magic.spell; +package com.minelittlepony.unicopia.ability.magic.spell; import java.util.List; import java.util.stream.Collectors; import com.minelittlepony.unicopia.Race; -import com.minelittlepony.unicopia.equine.player.Pony; -import com.minelittlepony.unicopia.magic.Affinity; -import com.minelittlepony.unicopia.magic.Caster; +import com.minelittlepony.unicopia.ability.magic.Affinity; +import com.minelittlepony.unicopia.ability.magic.Caster; +import com.minelittlepony.unicopia.entity.player.Pony; import com.minelittlepony.unicopia.util.MagicalDamageSource; import com.minelittlepony.unicopia.util.shape.Sphere; @@ -17,6 +17,9 @@ import net.minecraft.particle.ParticleTypes; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; +/** + * A spell that pulls health from other entities and delivers it to the caster. + */ public class SiphoningSpell extends AbstractRangedAreaSpell { @Override @@ -102,7 +105,7 @@ public class SiphoningSpell extends AbstractRangedAreaSpell { return MagicalDamageSource.create("drain"); } - return MagicalDamageSource.causeMobDamage("drain", actor); + return MagicalDamageSource.create("drain", actor); } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/SpellRegistry.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/SpellRegistry.java similarity index 70% rename from src/main/java/com/minelittlepony/unicopia/magic/spell/SpellRegistry.java rename to src/main/java/com/minelittlepony/unicopia/ability/magic/spell/SpellRegistry.java index 7ff9c7d8..0254e2a7 100644 --- a/src/main/java/com/minelittlepony/unicopia/magic/spell/SpellRegistry.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/SpellRegistry.java @@ -1,9 +1,8 @@ -package com.minelittlepony.unicopia.magic.spell; +package com.minelittlepony.unicopia.ability.magic.spell; import java.util.HashMap; import java.util.HashSet; import java.util.Map; -import java.util.Optional; import java.util.Set; import java.util.function.Supplier; @@ -11,12 +10,8 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; -import com.minelittlepony.unicopia.magic.Affinity; -import com.minelittlepony.unicopia.magic.DispenceableSpell; -import com.minelittlepony.unicopia.magic.HeldSpell; -import com.minelittlepony.unicopia.magic.Spell; -import com.minelittlepony.unicopia.magic.Useable; - +import com.minelittlepony.unicopia.ability.magic.Affinity; +import com.minelittlepony.unicopia.ability.magic.Spell; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; @@ -38,16 +33,10 @@ public class SpellRegistry { register(AttractiveSpell::new); register(NecromancySpell::new); register(SiphoningSpell::new); - register(ChargingSpell::new); register(IceSpell::new); - register(PortalSpell::new); register(AwkwardSpell::new); register(InfernoSpell::new); register(RevealingSpell::new); - register(DarknessSpell::new); - register(FlameSpell::new); - register(GlowingSpell::new); - register(ChangelingTrapSpell::new); register(ScorchSpell::new); register(DisguiseSpell::new); } @@ -89,25 +78,6 @@ public class SpellRegistry { return compound; } - private Optional> getEntryFromStack(ItemStack stack) { - return Optional.ofNullable(entries.get(getKeyFromStack(stack))); - } - - @Nullable - public DispenceableSpell getDispenseActionFrom(ItemStack stack) { - return getEntryFromStack(stack).map(Entry::dispensable).orElse(null); - } - - @Nullable - public Useable getUseActionFrom(ItemStack stack) { - return getEntryFromStack(stack).map(Entry::useable).orElse(null); - } - - @Nullable - public HeldSpell getHeldFrom(ItemStack stack) { - return getEntryFromStack(stack).map(Entry::holdable).orElse(null); - } - @Nullable public Spell getSpellFrom(ItemStack stack) { return getSpellFromName(getKeyFromStack(stack)); @@ -178,10 +148,6 @@ public class SpellRegistry { final int color; - final boolean canDispense; - final boolean canUse; - final boolean canHold; - final Affinity affinity; Entry(Supplier factory) throws Exception { @@ -189,9 +155,6 @@ public class SpellRegistry { this.factory = factory; this.color = inst.getTint(); - this.canDispense = inst instanceof DispenceableSpell; - this.canUse = inst instanceof Useable; - this.canHold = inst instanceof HeldSpell; this.affinity = inst.getAffinity(); if (inst.isCraftable()) { @@ -203,30 +166,6 @@ public class SpellRegistry { entries.put(inst.getName(), this); } - Useable useable() { - if (!canUse) { - return null; - } - - return (Useable)create(); - } - - HeldSpell holdable() { - if (!canHold) { - return null; - } - - return (HeldSpell)create(); - } - - DispenceableSpell dispensable() { - if (!canDispense) { - return null; - } - - return (DispenceableSpell)create(); - } - T create() { try { return factory.get(); diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/package-info.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/package-info.java new file mode 100644 index 00000000..deb8e9e9 --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/package-info.java @@ -0,0 +1 @@ +package com.minelittlepony.unicopia.ability.magic.spell; \ No newline at end of file diff --git a/src/main/java/com/minelittlepony/unicopia/util/blockstate/BlockStateConverter.java b/src/main/java/com/minelittlepony/unicopia/block/state/BlockStateConverter.java similarity index 93% rename from src/main/java/com/minelittlepony/unicopia/util/blockstate/BlockStateConverter.java rename to src/main/java/com/minelittlepony/unicopia/block/state/BlockStateConverter.java index bf27d86f..6705a0e0 100644 --- a/src/main/java/com/minelittlepony/unicopia/util/blockstate/BlockStateConverter.java +++ b/src/main/java/com/minelittlepony/unicopia/block/state/BlockStateConverter.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.util.blockstate; +package com.minelittlepony.unicopia.block.state; import javax.annotation.Nonnull; import javax.annotation.Nullable; diff --git a/src/main/java/com/minelittlepony/unicopia/util/blockstate/BlockStateMap.java b/src/main/java/com/minelittlepony/unicopia/block/state/BlockStateMap.java similarity index 96% rename from src/main/java/com/minelittlepony/unicopia/util/blockstate/BlockStateMap.java rename to src/main/java/com/minelittlepony/unicopia/block/state/BlockStateMap.java index 6e0a79ca..0f5720d7 100644 --- a/src/main/java/com/minelittlepony/unicopia/util/blockstate/BlockStateMap.java +++ b/src/main/java/com/minelittlepony/unicopia/block/state/BlockStateMap.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.util.blockstate; +package com.minelittlepony.unicopia.block.state; import java.util.ArrayList; import java.util.function.Predicate; diff --git a/src/main/java/com/minelittlepony/unicopia/util/blockstate/ReversableBlockStateConverter.java b/src/main/java/com/minelittlepony/unicopia/block/state/ReversableBlockStateConverter.java similarity index 69% rename from src/main/java/com/minelittlepony/unicopia/util/blockstate/ReversableBlockStateConverter.java rename to src/main/java/com/minelittlepony/unicopia/block/state/ReversableBlockStateConverter.java index b25b3ccd..16d8c4a8 100644 --- a/src/main/java/com/minelittlepony/unicopia/util/blockstate/ReversableBlockStateConverter.java +++ b/src/main/java/com/minelittlepony/unicopia/block/state/ReversableBlockStateConverter.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.util.blockstate; +package com.minelittlepony.unicopia.block.state; public interface ReversableBlockStateConverter extends BlockStateConverter { BlockStateConverter getInverse(); diff --git a/src/main/java/com/minelittlepony/unicopia/util/blockstate/ReversableBlockStateMap.java b/src/main/java/com/minelittlepony/unicopia/block/state/ReversableBlockStateMap.java similarity index 89% rename from src/main/java/com/minelittlepony/unicopia/util/blockstate/ReversableBlockStateMap.java rename to src/main/java/com/minelittlepony/unicopia/block/state/ReversableBlockStateMap.java index cc4d667e..0d50c198 100644 --- a/src/main/java/com/minelittlepony/unicopia/util/blockstate/ReversableBlockStateMap.java +++ b/src/main/java/com/minelittlepony/unicopia/block/state/ReversableBlockStateMap.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.util.blockstate; +package com.minelittlepony.unicopia.block.state; class ReversableBlockStateMap extends BlockStateMap implements ReversableBlockStateConverter { private static final long serialVersionUID = 6154365988455383098L; diff --git a/src/main/java/com/minelittlepony/unicopia/util/blockstate/StateMapping.java b/src/main/java/com/minelittlepony/unicopia/block/state/StateMapping.java similarity index 98% rename from src/main/java/com/minelittlepony/unicopia/util/blockstate/StateMapping.java rename to src/main/java/com/minelittlepony/unicopia/block/state/StateMapping.java index 4204f441..c92371c0 100644 --- a/src/main/java/com/minelittlepony/unicopia/util/blockstate/StateMapping.java +++ b/src/main/java/com/minelittlepony/unicopia/block/state/StateMapping.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.util.blockstate; +package com.minelittlepony.unicopia.block.state; import java.util.function.Function; import java.util.function.Predicate; diff --git a/src/main/java/com/minelittlepony/unicopia/util/blockstate/StateMaps.java b/src/main/java/com/minelittlepony/unicopia/block/state/StateMaps.java similarity index 98% rename from src/main/java/com/minelittlepony/unicopia/util/blockstate/StateMaps.java rename to src/main/java/com/minelittlepony/unicopia/block/state/StateMaps.java index 62abbcb3..c1e79395 100644 --- a/src/main/java/com/minelittlepony/unicopia/util/blockstate/StateMaps.java +++ b/src/main/java/com/minelittlepony/unicopia/block/state/StateMaps.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.util.blockstate; +package com.minelittlepony.unicopia.block.state; import net.minecraft.block.Blocks; import net.minecraft.block.FarmlandBlock; diff --git a/src/main/java/com/minelittlepony/unicopia/client/ClientInteractionManager.java b/src/main/java/com/minelittlepony/unicopia/client/ClientInteractionManager.java index d5bfb429..9f948daf 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/ClientInteractionManager.java +++ b/src/main/java/com/minelittlepony/unicopia/client/ClientInteractionManager.java @@ -6,8 +6,8 @@ import javax.annotation.Nullable; import com.minelittlepony.unicopia.InteractionManager; import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.Unicopia; -import com.minelittlepony.unicopia.equine.player.Pony; -import com.minelittlepony.unicopia.util.dummy.DummyClientPlayerEntity; +import com.minelittlepony.unicopia.entity.player.Pony; +import com.minelittlepony.unicopia.entity.player.dummy.DummyClientPlayerEntity; import com.mojang.authlib.GameProfile; import net.minecraft.client.MinecraftClient; @@ -55,6 +55,6 @@ public class ClientInteractionManager extends InteractionManager { @Override public int getViewMode() { - return MinecraftClient.getInstance().options.perspective; + return MinecraftClient.getInstance().options.getPerspective().ordinal(); } } diff --git a/src/main/java/com/minelittlepony/unicopia/client/KeyBindingsHandler.java b/src/main/java/com/minelittlepony/unicopia/client/KeyBindingsHandler.java index 9195e3ec..037614cf 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/KeyBindingsHandler.java +++ b/src/main/java/com/minelittlepony/unicopia/client/KeyBindingsHandler.java @@ -8,7 +8,7 @@ import java.util.Set; import org.lwjgl.glfw.GLFW; import com.minelittlepony.unicopia.ability.AbilitySlot; -import com.minelittlepony.unicopia.equine.player.Pony; +import com.minelittlepony.unicopia.entity.player.Pony; import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; import net.minecraft.client.MinecraftClient; diff --git a/src/main/java/com/minelittlepony/unicopia/client/URenderers.java b/src/main/java/com/minelittlepony/unicopia/client/URenderers.java index 58a1e710..aca098ad 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/URenderers.java +++ b/src/main/java/com/minelittlepony/unicopia/client/URenderers.java @@ -1,13 +1,16 @@ package com.minelittlepony.unicopia.client; +import com.minelittlepony.unicopia.UEntities; import com.minelittlepony.unicopia.client.particle.ChangelingMagicParticle; import com.minelittlepony.unicopia.client.particle.DiskParticle; import com.minelittlepony.unicopia.client.particle.MagicParticle; import com.minelittlepony.unicopia.client.particle.RaindropsParticle; import com.minelittlepony.unicopia.client.particle.SphereParticle; -import com.minelittlepony.unicopia.particles.UParticles; -import com.minelittlepony.unicopia.world.client.UWorldClient; +import com.minelittlepony.unicopia.particle.UParticles; + import net.fabricmc.fabric.api.client.particle.v1.ParticleFactoryRegistry; +import net.fabricmc.fabric.api.client.rendereregistry.v1.EntityRendererRegistry; +import net.minecraft.client.render.entity.FlyingItemEntityRenderer; public interface URenderers { static void bootstrap() { @@ -17,6 +20,6 @@ public interface URenderers { ParticleFactoryRegistry.getInstance().register(UParticles.SPHERE, SphereParticle::new); ParticleFactoryRegistry.getInstance().register(UParticles.DISK, DiskParticle::new); - UWorldClient.bootstrap(); + EntityRendererRegistry.INSTANCE.register(UEntities.THROWN_ITEM, (manager, context) -> new FlyingItemEntityRenderer<>(manager, context.getItemRenderer())); } } diff --git a/src/main/java/com/minelittlepony/unicopia/client/UnicopiaClient.java b/src/main/java/com/minelittlepony/unicopia/client/UnicopiaClient.java index fe532216..ac85a265 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/UnicopiaClient.java +++ b/src/main/java/com/minelittlepony/unicopia/client/UnicopiaClient.java @@ -1,34 +1,12 @@ package com.minelittlepony.unicopia.client; -import static com.minelittlepony.unicopia.EquinePredicates.PLAYER_UNICORN; - -import javax.annotation.Nullable; - import com.minelittlepony.unicopia.InteractionManager; import com.minelittlepony.unicopia.Race; -import com.minelittlepony.unicopia.ducks.Colourful; -import com.minelittlepony.unicopia.magic.spell.SpellRegistry; -import com.minelittlepony.unicopia.mixin.client.DefaultTexturesRegistry; import com.minelittlepony.unicopia.network.Channel; import com.minelittlepony.unicopia.network.MsgRequestCapabilities; -import com.minelittlepony.unicopia.world.block.UBlocks; -import com.minelittlepony.unicopia.world.container.SpellbookResultSlot; -import com.minelittlepony.unicopia.world.item.UItems; - import net.fabricmc.api.ClientModInitializer; -import net.fabricmc.fabric.api.client.rendering.v1.ColorProviderRegistry; -import net.fabricmc.fabric.api.event.client.ClientTickCallback; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.color.world.BiomeColors; -import net.minecraft.client.color.world.GrassColors; -import net.minecraft.client.texture.SpriteAtlasTexture; -import net.minecraft.client.util.SpriteIdentifier; +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.BlockItem; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.BlockRenderView; public class UnicopiaClient implements ClientModInitializer { @@ -43,49 +21,20 @@ public class UnicopiaClient implements ClientModInitializer { URenderers.bootstrap(); - ClientTickCallback.EVENT.register(this::tick); - DefaultTexturesRegistry.getDefaultTextures().add(new SpriteIdentifier(SpriteAtlasTexture.BLOCK_ATLAS_TEX, SpellbookResultSlot.EMPTY_GEM_SLOT)); + ClientTickEvents.END_CLIENT_TICK.register(client -> { + PlayerEntity player = client.player; - ColorProviderRegistry.ITEM.register((stack, tint) -> { - return getLeavesColor(((BlockItem)stack.getItem()).getBlock().getDefaultState(), null, null, tint); - }, UItems.APPLE_LEAVES); - ColorProviderRegistry.BLOCK.register(UnicopiaClient::getLeavesColor, UBlocks.APPLE_LEAVES); - ColorProviderRegistry.ITEM.register((stack, tint) -> { - if (PLAYER_UNICORN.test(MinecraftClient.getInstance().player)) { - return SpellRegistry.instance().getSpellTintFromStack(stack); + if (player != null && !player.removed) { + Race newRace = InteractionManager.instance().getPreferredRace(); + + if (newRace != lastPreferredRace) { + lastPreferredRace = newRace; + + Channel.REQUEST_CAPABILITIES.send(new MsgRequestCapabilities(lastPreferredRace)); + } } - return 0xFFFFFF; - }, UItems.GEM, UItems.CORRUPTED_GEM); + + keyboard.tick(client); + }); } - - private void tick(MinecraftClient client) { - PlayerEntity player = client.player; - - if (player != null && !player.removed) { - Race newRace = InteractionManager.instance().getPreferredRace(); - - if (newRace != lastPreferredRace) { - lastPreferredRace = newRace; - - Channel.REQUEST_CAPABILITIES.send(new MsgRequestCapabilities(lastPreferredRace)); - } - } - - keyboard.tick(client); - } - - private static int getLeavesColor(BlockState state, @Nullable BlockRenderView world, @Nullable BlockPos pos, int tint) { - Block block = state.getBlock(); - - if (block instanceof Colourful) { - return ((Colourful)block).getCustomTint(state, tint); - } - - if (world != null && pos != null) { - return BiomeColors.getGrassColor(world, pos); - } - - return GrassColors.getColor(0.5D, 1); - } - } diff --git a/src/main/java/com/minelittlepony/unicopia/world/client/gui/SettingsScreen.java b/src/main/java/com/minelittlepony/unicopia/client/gui/SettingsScreen.java similarity index 93% rename from src/main/java/com/minelittlepony/unicopia/world/client/gui/SettingsScreen.java rename to src/main/java/com/minelittlepony/unicopia/client/gui/SettingsScreen.java index e62129e6..97a5c51b 100644 --- a/src/main/java/com/minelittlepony/unicopia/world/client/gui/SettingsScreen.java +++ b/src/main/java/com/minelittlepony/unicopia/client/gui/SettingsScreen.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.world.client.gui; +package com.minelittlepony.unicopia.client.gui; import com.minelittlepony.common.client.gui.GameGui; import com.minelittlepony.common.client.gui.element.Button; diff --git a/src/main/java/com/minelittlepony/unicopia/world/client/gui/UHud.java b/src/main/java/com/minelittlepony/unicopia/client/gui/UHud.java similarity index 95% rename from src/main/java/com/minelittlepony/unicopia/world/client/gui/UHud.java rename to src/main/java/com/minelittlepony/unicopia/client/gui/UHud.java index 909cf77f..9b299643 100644 --- a/src/main/java/com/minelittlepony/unicopia/world/client/gui/UHud.java +++ b/src/main/java/com/minelittlepony/unicopia/client/gui/UHud.java @@ -1,9 +1,9 @@ -package com.minelittlepony.unicopia.world.client.gui; +package com.minelittlepony.unicopia.client.gui; import com.minelittlepony.unicopia.ability.Abilities; import com.minelittlepony.unicopia.ability.AbilityDispatcher; import com.minelittlepony.unicopia.ability.AbilitySlot; -import com.minelittlepony.unicopia.equine.player.Pony; +import com.minelittlepony.unicopia.entity.player.Pony; import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.MinecraftClient; @@ -24,7 +24,7 @@ public class UHud extends DrawableHelper { private final MinecraftClient client = MinecraftClient.getInstance(); - public void render(InGameHud hud, float tickDelta) { + public void render(InGameHud hud, MatrixStack matrices, float tickDelta) { if (client.player == null || client.player.isSpectator()) { return; @@ -36,8 +36,6 @@ public class UHud extends DrawableHelper { int x = 104 + (scaledWidth - 50) / 2; int y = 20 + scaledHeight - 70; - MatrixStack matrices = new MatrixStack(); - RenderSystem.enableAlphaTest(); RenderSystem.enableBlend(); diff --git a/src/main/java/com/minelittlepony/unicopia/client/particle/DiskParticle.java b/src/main/java/com/minelittlepony/unicopia/client/particle/DiskParticle.java index c966a202..516ea1b5 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/particle/DiskParticle.java +++ b/src/main/java/com/minelittlepony/unicopia/client/particle/DiskParticle.java @@ -1,6 +1,6 @@ package com.minelittlepony.unicopia.client.particle; -import com.minelittlepony.unicopia.particles.SphereParticleEffect; +import com.minelittlepony.unicopia.particle.SphereParticleEffect; import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.Camera; diff --git a/src/main/java/com/minelittlepony/unicopia/client/particle/MagicParticle.java b/src/main/java/com/minelittlepony/unicopia/client/particle/MagicParticle.java index 92ffd84f..252e2f9a 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/particle/MagicParticle.java +++ b/src/main/java/com/minelittlepony/unicopia/client/particle/MagicParticle.java @@ -1,6 +1,6 @@ package com.minelittlepony.unicopia.client.particle; -import com.minelittlepony.unicopia.particles.MagicParticleEffect; +import com.minelittlepony.unicopia.particle.MagicParticleEffect; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; diff --git a/src/main/java/com/minelittlepony/unicopia/client/particle/SphereParticle.java b/src/main/java/com/minelittlepony/unicopia/client/particle/SphereParticle.java index 958c519b..10636631 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/particle/SphereParticle.java +++ b/src/main/java/com/minelittlepony/unicopia/client/particle/SphereParticle.java @@ -10,11 +10,11 @@ import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.world.ClientWorld; import net.minecraft.util.math.MathHelper; -import com.minelittlepony.unicopia.magic.Caster; -import com.minelittlepony.unicopia.particles.ParticleHandle.Attachment; -import com.minelittlepony.unicopia.particles.ParticleHandle.Link; -import com.minelittlepony.unicopia.world.client.render.RenderLayers; -import com.minelittlepony.unicopia.particles.SphereParticleEffect; +import com.minelittlepony.unicopia.ability.magic.Caster; +import com.minelittlepony.unicopia.client.render.RenderLayers; +import com.minelittlepony.unicopia.particle.SphereParticleEffect; +import com.minelittlepony.unicopia.particle.ParticleHandle.Attachment; +import com.minelittlepony.unicopia.particle.ParticleHandle.Link; import com.minelittlepony.common.util.Color; public class SphereParticle extends Particle implements Attachment { diff --git a/src/main/java/com/minelittlepony/unicopia/client/render/RenderLayers.java b/src/main/java/com/minelittlepony/unicopia/client/render/RenderLayers.java new file mode 100644 index 00000000..7d9f116b --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/client/render/RenderLayers.java @@ -0,0 +1,25 @@ +package com.minelittlepony.unicopia.client.render; + +import net.minecraft.client.render.RenderLayer; +import net.minecraft.client.render.VertexFormat; +import net.minecraft.client.render.VertexFormats; + +public final class RenderLayers extends RenderLayer { + + private RenderLayers(String name, VertexFormat vertexFormat, int drawMode, int expectedBufferSize, + boolean hasCrumbling, boolean translucent, Runnable startAction, Runnable endAction) { + super(name, vertexFormat, drawMode, expectedBufferSize, hasCrumbling, translucent, startAction, endAction); + } + + private static final RenderLayer MAGIC = of("mlp_magic_glow", VertexFormats.POSITION_COLOR_TEXTURE_LIGHT_NORMAL, 7, 256, RenderLayer.MultiPhaseParameters.builder() + .texture(NO_TEXTURE) + .writeMaskState(COLOR_MASK) + .transparency(LIGHTNING_TRANSPARENCY) + .lightmap(DISABLE_LIGHTMAP) + .cull(DISABLE_CULLING) + .build(false)); + + public static RenderLayer magic() { + return MAGIC; + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/world/client/render/WorldRenderDelegate.java b/src/main/java/com/minelittlepony/unicopia/client/render/WorldRenderDelegate.java similarity index 91% rename from src/main/java/com/minelittlepony/unicopia/world/client/render/WorldRenderDelegate.java rename to src/main/java/com/minelittlepony/unicopia/client/render/WorldRenderDelegate.java index 09252c58..8c298838 100644 --- a/src/main/java/com/minelittlepony/unicopia/world/client/render/WorldRenderDelegate.java +++ b/src/main/java/com/minelittlepony/unicopia/client/render/WorldRenderDelegate.java @@ -1,6 +1,6 @@ -package com.minelittlepony.unicopia.world.client.render; +package com.minelittlepony.unicopia.client.render; -import com.minelittlepony.unicopia.equine.player.Pony; +import com.minelittlepony.unicopia.entity.player.Pony; import net.minecraft.client.MinecraftClient; import net.minecraft.client.util.math.MatrixStack; @@ -38,7 +38,7 @@ public class WorldRenderDelegate { } private void flipAngles(Entity entity) { - if (MinecraftClient.getInstance().options.perspective > 0) { + if (!MinecraftClient.getInstance().options.getPerspective().isFirstPerson()) { entity.prevYaw *= -1; entity.yaw *= -1; diff --git a/src/main/java/com/minelittlepony/unicopia/command/Commands.java b/src/main/java/com/minelittlepony/unicopia/command/Commands.java index 87ea6387..ba88927f 100644 --- a/src/main/java/com/minelittlepony/unicopia/command/Commands.java +++ b/src/main/java/com/minelittlepony/unicopia/command/Commands.java @@ -12,6 +12,7 @@ public class Commands { GravityCommand.register(dispatcher); DisguiseCommand.register(dispatcher); }); + @SuppressWarnings("deprecation") Object game = FabricLoader.getInstance().getGameInstance(); if (game instanceof MinecraftServer) { ((MinecraftServer)game).setFlightEnabled(true); diff --git a/src/main/java/com/minelittlepony/unicopia/command/DisguiseCommand.java b/src/main/java/com/minelittlepony/unicopia/command/DisguiseCommand.java index 42e0cc5e..8edb3280 100644 --- a/src/main/java/com/minelittlepony/unicopia/command/DisguiseCommand.java +++ b/src/main/java/com/minelittlepony/unicopia/command/DisguiseCommand.java @@ -2,15 +2,15 @@ package com.minelittlepony.unicopia.command; import java.util.function.Function; -import com.minelittlepony.unicopia.equine.player.Pony; -import com.minelittlepony.unicopia.magic.spell.DisguiseSpell; +import com.minelittlepony.unicopia.ability.magic.spell.DisguiseSpell; +import com.minelittlepony.unicopia.entity.player.Pony; import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.mojang.brigadier.exceptions.SimpleCommandExceptionType; -import net.minecraft.command.arguments.EntitySummonArgumentType; -import net.minecraft.command.arguments.NbtCompoundTagArgumentType; +import net.minecraft.command.argument.EntitySummonArgumentType; +import net.minecraft.command.argument.NbtCompoundTagArgumentType; import net.minecraft.command.suggestion.SuggestionProviders; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; diff --git a/src/main/java/com/minelittlepony/unicopia/command/GravityCommand.java b/src/main/java/com/minelittlepony/unicopia/command/GravityCommand.java index 6ac7408c..b590e1d0 100644 --- a/src/main/java/com/minelittlepony/unicopia/command/GravityCommand.java +++ b/src/main/java/com/minelittlepony/unicopia/command/GravityCommand.java @@ -1,12 +1,12 @@ package com.minelittlepony.unicopia.command; -import com.minelittlepony.unicopia.equine.player.Pony; +import com.minelittlepony.unicopia.entity.player.Pony; import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.arguments.FloatArgumentType; import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.brigadier.exceptions.CommandSyntaxException; -import net.minecraft.command.arguments.EntityArgumentType; +import net.minecraft.command.argument.EntityArgumentType; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.server.command.CommandManager; import net.minecraft.server.command.ServerCommandSource; diff --git a/src/main/java/com/minelittlepony/unicopia/command/SpeciesCommand.java b/src/main/java/com/minelittlepony/unicopia/command/SpeciesCommand.java index 98e778f9..35483595 100644 --- a/src/main/java/com/minelittlepony/unicopia/command/SpeciesCommand.java +++ b/src/main/java/com/minelittlepony/unicopia/command/SpeciesCommand.java @@ -1,11 +1,11 @@ package com.minelittlepony.unicopia.command; import com.minelittlepony.unicopia.Race; -import com.minelittlepony.unicopia.equine.player.Pony; +import com.minelittlepony.unicopia.entity.player.Pony; import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.builder.LiteralArgumentBuilder; -import net.minecraft.command.arguments.EntityArgumentType; +import net.minecraft.command.argument.EntityArgumentType; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.server.command.CommandManager; import net.minecraft.server.command.ServerCommandSource; diff --git a/src/main/java/com/minelittlepony/unicopia/ducks/Colourful.java b/src/main/java/com/minelittlepony/unicopia/ducks/Colourful.java deleted file mode 100644 index 28943649..00000000 --- a/src/main/java/com/minelittlepony/unicopia/ducks/Colourful.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.minelittlepony.unicopia.ducks; - -import net.minecraft.block.BlockState; - -@FunctionalInterface -public interface Colourful { - int getCustomTint(BlockState state, int tint); -} diff --git a/src/main/java/com/minelittlepony/unicopia/ducks/Farmland.java b/src/main/java/com/minelittlepony/unicopia/ducks/Farmland.java deleted file mode 100644 index a157c051..00000000 --- a/src/main/java/com/minelittlepony/unicopia/ducks/Farmland.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.minelittlepony.unicopia.ducks; - -import net.minecraft.block.BlockState; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -public interface Farmland { - /** - * Gets the state used to represent this block as a piece of dirt. - */ - BlockState getDirtState(BlockState state, World world, BlockPos pos); -} diff --git a/src/main/java/com/minelittlepony/unicopia/ducks/PickedItemSupplier.java b/src/main/java/com/minelittlepony/unicopia/ducks/PickedItemSupplier.java deleted file mode 100644 index 3f4f34ee..00000000 --- a/src/main/java/com/minelittlepony/unicopia/ducks/PickedItemSupplier.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.minelittlepony.unicopia.ducks; - -import net.minecraft.item.ItemStack; - -public interface PickedItemSupplier { - ItemStack getPickedStack(); -} diff --git a/src/main/java/com/minelittlepony/unicopia/equine/Creature.java b/src/main/java/com/minelittlepony/unicopia/entity/Creature.java similarity index 84% rename from src/main/java/com/minelittlepony/unicopia/equine/Creature.java rename to src/main/java/com/minelittlepony/unicopia/entity/Creature.java index a8208f46..2c59953f 100644 --- a/src/main/java/com/minelittlepony/unicopia/equine/Creature.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/Creature.java @@ -1,12 +1,12 @@ -package com.minelittlepony.unicopia.equine; +package com.minelittlepony.unicopia.entity; import com.minelittlepony.unicopia.Race; -import com.minelittlepony.unicopia.magic.Affinity; -import com.minelittlepony.unicopia.magic.Affine; -import com.minelittlepony.unicopia.magic.AttachableSpell; -import com.minelittlepony.unicopia.magic.Caster; -import com.minelittlepony.unicopia.magic.Spell; -import com.minelittlepony.unicopia.magic.spell.SpellRegistry; +import com.minelittlepony.unicopia.ability.magic.Affine; +import com.minelittlepony.unicopia.ability.magic.Affinity; +import com.minelittlepony.unicopia.ability.magic.AttachableSpell; +import com.minelittlepony.unicopia.ability.magic.Caster; +import com.minelittlepony.unicopia.ability.magic.Spell; +import com.minelittlepony.unicopia.ability.magic.spell.SpellRegistry; import com.minelittlepony.unicopia.network.EffectSync; import net.minecraft.entity.LivingEntity; @@ -15,7 +15,7 @@ import net.minecraft.entity.data.TrackedData; import net.minecraft.entity.data.TrackedDataHandlerRegistry; import net.minecraft.nbt.CompoundTag; -public class Creature implements Ponylike, Caster { +public class Creature implements Equine, Caster { private static final TrackedData EFFECT = DataTracker.registerData(LivingEntity.class, TrackedDataHandlerRegistry.TAG_COMPOUND); diff --git a/src/main/java/com/minelittlepony/unicopia/equine/EntityPhysics.java b/src/main/java/com/minelittlepony/unicopia/entity/EntityPhysics.java similarity index 94% rename from src/main/java/com/minelittlepony/unicopia/equine/EntityPhysics.java rename to src/main/java/com/minelittlepony/unicopia/entity/EntityPhysics.java index 3a4177e3..16118b06 100644 --- a/src/main/java/com/minelittlepony/unicopia/equine/EntityPhysics.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/EntityPhysics.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.equine; +package com.minelittlepony.unicopia.entity; import com.minelittlepony.unicopia.Owned; import com.minelittlepony.unicopia.util.Copieable; @@ -16,7 +16,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; -public class EntityPhysics & Owned> implements Physics, Copieable> { +public class EntityPhysics & Owned> implements Physics, Copieable> { private float gravity = 1; diff --git a/src/main/java/com/minelittlepony/unicopia/equine/Ponylike.java b/src/main/java/com/minelittlepony/unicopia/entity/Equine.java similarity index 83% rename from src/main/java/com/minelittlepony/unicopia/equine/Ponylike.java rename to src/main/java/com/minelittlepony/unicopia/entity/Equine.java index 44ea620a..14298366 100644 --- a/src/main/java/com/minelittlepony/unicopia/equine/Ponylike.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/Equine.java @@ -1,16 +1,15 @@ -package com.minelittlepony.unicopia.equine; +package com.minelittlepony.unicopia.entity; import javax.annotation.Nullable; import com.minelittlepony.unicopia.Race; -import com.minelittlepony.unicopia.ducks.PonyContainer; import com.minelittlepony.unicopia.util.NbtSerialisable; import net.minecraft.entity.Entity; import net.minecraft.entity.projectile.ProjectileEntity; import net.minecraft.util.Tickable; -public interface Ponylike extends NbtSerialisable, Tickable { +public interface Equine extends NbtSerialisable, Tickable { Race getSpecies(); Physics getPhysics(); @@ -55,7 +54,7 @@ public interface Ponylike extends NbtSerialisable, Tickable { } @Nullable - static > T of(Entity entity) { + static > T of(Entity entity) { return PonyContainer.of(entity) .map(PonyContainer::get) .orElse(null); diff --git a/src/main/java/com/minelittlepony/unicopia/ducks/IItemEntity.java b/src/main/java/com/minelittlepony/unicopia/entity/IItemEntity.java similarity index 53% rename from src/main/java/com/minelittlepony/unicopia/ducks/IItemEntity.java rename to src/main/java/com/minelittlepony/unicopia/entity/IItemEntity.java index 1b5af94f..4376c29f 100644 --- a/src/main/java/com/minelittlepony/unicopia/ducks/IItemEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/IItemEntity.java @@ -1,6 +1,4 @@ -package com.minelittlepony.unicopia.ducks; - -import com.minelittlepony.unicopia.equine.ItemImpl; +package com.minelittlepony.unicopia.entity; public interface IItemEntity extends PonyContainer { diff --git a/src/main/java/com/minelittlepony/unicopia/equine/ItemImpl.java b/src/main/java/com/minelittlepony/unicopia/entity/ItemImpl.java similarity index 93% rename from src/main/java/com/minelittlepony/unicopia/equine/ItemImpl.java rename to src/main/java/com/minelittlepony/unicopia/entity/ItemImpl.java index b670b7f5..4dff99bc 100644 --- a/src/main/java/com/minelittlepony/unicopia/equine/ItemImpl.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/ItemImpl.java @@ -1,8 +1,7 @@ -package com.minelittlepony.unicopia.equine; +package com.minelittlepony.unicopia.entity; import com.minelittlepony.unicopia.Owned; import com.minelittlepony.unicopia.Race; -import com.minelittlepony.unicopia.ducks.IItemEntity; import net.minecraft.entity.ItemEntity; import net.minecraft.entity.data.DataTracker; @@ -12,7 +11,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.util.ActionResult; -public class ItemImpl implements Ponylike, Owned { +public class ItemImpl implements Equine, Owned { private static final TrackedData ITEM_RACE = DataTracker.registerData(ItemEntity.class, TrackedDataHandlerRegistry.INTEGER); private final ItemEntity owner; diff --git a/src/main/java/com/minelittlepony/unicopia/equine/Physics.java b/src/main/java/com/minelittlepony/unicopia/entity/Physics.java similarity index 92% rename from src/main/java/com/minelittlepony/unicopia/equine/Physics.java rename to src/main/java/com/minelittlepony/unicopia/entity/Physics.java index 08d5923d..4439c049 100644 --- a/src/main/java/com/minelittlepony/unicopia/equine/Physics.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/Physics.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.equine; +package com.minelittlepony.unicopia.entity; import com.minelittlepony.unicopia.util.NbtSerialisable; diff --git a/src/main/java/com/minelittlepony/unicopia/ducks/PonyContainer.java b/src/main/java/com/minelittlepony/unicopia/entity/PonyContainer.java similarity index 65% rename from src/main/java/com/minelittlepony/unicopia/ducks/PonyContainer.java rename to src/main/java/com/minelittlepony/unicopia/entity/PonyContainer.java index 2437dd4b..2c028e78 100644 --- a/src/main/java/com/minelittlepony/unicopia/ducks/PonyContainer.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/PonyContainer.java @@ -1,18 +1,17 @@ -package com.minelittlepony.unicopia.ducks; +package com.minelittlepony.unicopia.entity; import java.util.Optional; import javax.annotation.Nullable; -import com.minelittlepony.unicopia.equine.Ponylike; -import com.minelittlepony.unicopia.magic.Caster; +import com.minelittlepony.unicopia.ability.magic.Caster; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; -public interface PonyContainer> { +public interface PonyContainer> { - Ponylike create(); + Equine create(); T get(); @@ -28,7 +27,7 @@ public interface PonyContainer> { } @SuppressWarnings("unchecked") - static > Optional> of(Entity entity) { + static > Optional> of(Entity entity) { if (entity instanceof PonyContainer) { return Optional.of(((PonyContainer)entity)); } diff --git a/src/main/java/com/minelittlepony/unicopia/equine/Trap.java b/src/main/java/com/minelittlepony/unicopia/entity/Trap.java similarity index 71% rename from src/main/java/com/minelittlepony/unicopia/equine/Trap.java rename to src/main/java/com/minelittlepony/unicopia/entity/Trap.java index 6c3ea867..56ad9f1b 100644 --- a/src/main/java/com/minelittlepony/unicopia/equine/Trap.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/Trap.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.equine; +package com.minelittlepony.unicopia.entity; import net.minecraft.entity.Entity; diff --git a/src/main/java/com/minelittlepony/unicopia/equine/player/Aeronautics.java b/src/main/java/com/minelittlepony/unicopia/entity/player/Aeronautics.java similarity index 96% rename from src/main/java/com/minelittlepony/unicopia/equine/player/Aeronautics.java rename to src/main/java/com/minelittlepony/unicopia/entity/player/Aeronautics.java index 6363f8fd..494171f5 100644 --- a/src/main/java/com/minelittlepony/unicopia/equine/player/Aeronautics.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/Aeronautics.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.equine.player; +package com.minelittlepony.unicopia.entity.player; import net.minecraft.util.math.Vec3d; diff --git a/src/main/java/com/minelittlepony/unicopia/equine/player/MagicReserves.java b/src/main/java/com/minelittlepony/unicopia/entity/player/MagicReserves.java similarity index 94% rename from src/main/java/com/minelittlepony/unicopia/equine/player/MagicReserves.java rename to src/main/java/com/minelittlepony/unicopia/entity/player/MagicReserves.java index fea2c3a0..8aa04df0 100644 --- a/src/main/java/com/minelittlepony/unicopia/equine/player/MagicReserves.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/MagicReserves.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.equine.player; +package com.minelittlepony.unicopia.entity.player; public interface MagicReserves { /** diff --git a/src/main/java/com/minelittlepony/unicopia/equine/player/ManaContainer.java b/src/main/java/com/minelittlepony/unicopia/entity/player/ManaContainer.java similarity index 94% rename from src/main/java/com/minelittlepony/unicopia/equine/player/ManaContainer.java rename to src/main/java/com/minelittlepony/unicopia/entity/player/ManaContainer.java index 38364a96..088a5675 100644 --- a/src/main/java/com/minelittlepony/unicopia/equine/player/ManaContainer.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/ManaContainer.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.equine.player; +package com.minelittlepony.unicopia.entity.player; public class ManaContainer implements MagicReserves { private final Pony pony; diff --git a/src/main/java/com/minelittlepony/unicopia/equine/player/Motion.java b/src/main/java/com/minelittlepony/unicopia/entity/player/Motion.java similarity index 85% rename from src/main/java/com/minelittlepony/unicopia/equine/player/Motion.java rename to src/main/java/com/minelittlepony/unicopia/entity/player/Motion.java index cc5808f3..d56af216 100644 --- a/src/main/java/com/minelittlepony/unicopia/equine/player/Motion.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/Motion.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.equine.player; +package com.minelittlepony.unicopia.entity.player; /** * Interface for controlling flight. diff --git a/src/main/java/com/minelittlepony/unicopia/equine/player/PlayerAttributes.java b/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerAttributes.java similarity index 92% rename from src/main/java/com/minelittlepony/unicopia/equine/player/PlayerAttributes.java rename to src/main/java/com/minelittlepony/unicopia/entity/player/PlayerAttributes.java index b130f2c2..a459e819 100644 --- a/src/main/java/com/minelittlepony/unicopia/equine/player/PlayerAttributes.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerAttributes.java @@ -1,10 +1,8 @@ -package com.minelittlepony.unicopia.equine.player; +package com.minelittlepony.unicopia.entity.player; import java.util.UUID; import com.minelittlepony.unicopia.Race; -import com.minelittlepony.unicopia.mixin.Walker; - import net.minecraft.entity.attribute.ClampedEntityAttribute; import net.minecraft.entity.attribute.EntityAttribute; import net.minecraft.entity.attribute.EntityAttributeInstance; @@ -28,8 +26,6 @@ class PlayerAttributes { PlayerEntity entity = pony.getOwner(); Race race = pony.getSpecies(); - ((Walker)entity.abilities).setWalkSpeed(0.1F - (float)pony.getInventory().getCarryingWeight()); - toggleAttribute(entity, EntityAttributes.GENERIC_ATTACK_DAMAGE, EARTH_PONY_STRENGTH, race.canUseEarth()); toggleAttribute(entity, EntityAttributes.GENERIC_KNOCKBACK_RESISTANCE, EARTH_PONY_STRENGTH, race.canUseEarth()); toggleAttribute(entity, EntityAttributes.GENERIC_MOVEMENT_SPEED, PEGASUS_SPEED, race.canFly()); diff --git a/src/main/java/com/minelittlepony/unicopia/equine/player/PlayerCamera.java b/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerCamera.java similarity index 97% rename from src/main/java/com/minelittlepony/unicopia/equine/player/PlayerCamera.java rename to src/main/java/com/minelittlepony/unicopia/entity/player/PlayerCamera.java index 17f6748e..ee0718a3 100644 --- a/src/main/java/com/minelittlepony/unicopia/equine/player/PlayerCamera.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerCamera.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.equine.player; +package com.minelittlepony.unicopia.entity.player; import com.minelittlepony.common.util.animation.MotionCompositor; diff --git a/src/main/java/com/minelittlepony/unicopia/equine/player/PlayerDimensions.java b/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerDimensions.java similarity index 96% rename from src/main/java/com/minelittlepony/unicopia/equine/player/PlayerDimensions.java rename to src/main/java/com/minelittlepony/unicopia/entity/player/PlayerDimensions.java index de9ccff4..8266e05c 100644 --- a/src/main/java/com/minelittlepony/unicopia/equine/player/PlayerDimensions.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerDimensions.java @@ -1,7 +1,7 @@ -package com.minelittlepony.unicopia.equine.player; +package com.minelittlepony.unicopia.entity.player; import com.minelittlepony.unicopia.ability.HeightPredicate; -import com.minelittlepony.unicopia.magic.Spell; +import com.minelittlepony.unicopia.ability.magic.Spell; import net.minecraft.entity.EntityDimensions; import net.minecraft.entity.EntityPose; diff --git a/src/main/java/com/minelittlepony/unicopia/equine/player/PlayerPhysics.java b/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerPhysics.java similarity index 96% rename from src/main/java/com/minelittlepony/unicopia/equine/player/PlayerPhysics.java rename to src/main/java/com/minelittlepony/unicopia/entity/player/PlayerPhysics.java index 66140588..5137b57e 100644 --- a/src/main/java/com/minelittlepony/unicopia/equine/player/PlayerPhysics.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerPhysics.java @@ -1,13 +1,13 @@ -package com.minelittlepony.unicopia.equine.player; +package com.minelittlepony.unicopia.entity.player; import java.util.Random; import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.USounds; import com.minelittlepony.unicopia.ability.FlightPredicate; -import com.minelittlepony.unicopia.equine.EntityPhysics; -import com.minelittlepony.unicopia.magic.Spell; -import com.minelittlepony.unicopia.particles.MagicParticleEffect; +import com.minelittlepony.unicopia.ability.magic.Spell; +import com.minelittlepony.unicopia.entity.EntityPhysics; +import com.minelittlepony.unicopia.particle.MagicParticleEffect; import com.minelittlepony.unicopia.util.NbtSerialisable; import com.minelittlepony.unicopia.util.MutableVector; @@ -42,15 +42,6 @@ public class PlayerPhysics extends EntityPhysics implements Tickable, Moti dimensions = new PlayerDimensions(pony, this); } - @Override - public float getGravityModifier() { - float modifier = super.getGravityModifier(); - - modifier *= (1 + pony.getInventory().getCarryingWeight() * 3); - - return modifier; - } - private boolean checkCanFly() { if (pony.getOwner().abilities.creativeMode || pony.getOwner().isSpectator()) { return true; diff --git a/src/main/java/com/minelittlepony/unicopia/equine/player/Pony.java b/src/main/java/com/minelittlepony/unicopia/entity/player/Pony.java similarity index 78% rename from src/main/java/com/minelittlepony/unicopia/equine/player/Pony.java rename to src/main/java/com/minelittlepony/unicopia/entity/player/Pony.java index 1d00ac4a..0ea10c9b 100644 --- a/src/main/java/com/minelittlepony/unicopia/equine/player/Pony.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/Pony.java @@ -1,30 +1,26 @@ -package com.minelittlepony.unicopia.equine.player; +package com.minelittlepony.unicopia.entity.player; import javax.annotation.Nullable; import com.minelittlepony.unicopia.InteractionManager; import com.minelittlepony.unicopia.Race; -import com.minelittlepony.unicopia.UTags; import com.minelittlepony.unicopia.ability.AbilityDispatcher; -import com.minelittlepony.unicopia.ducks.PonyContainer; -import com.minelittlepony.unicopia.equine.Physics; -import com.minelittlepony.unicopia.equine.Ponylike; -import com.minelittlepony.unicopia.equine.Trap; -import com.minelittlepony.unicopia.magic.AffineItem; -import com.minelittlepony.unicopia.magic.Affinity; -import com.minelittlepony.unicopia.magic.AttachableSpell; -import com.minelittlepony.unicopia.magic.Caster; -import com.minelittlepony.unicopia.magic.HeldSpell; -import com.minelittlepony.unicopia.magic.Spell; -import com.minelittlepony.unicopia.magic.spell.SpellRegistry; +import com.minelittlepony.unicopia.ability.magic.Affinity; +import com.minelittlepony.unicopia.ability.magic.AttachableSpell; +import com.minelittlepony.unicopia.ability.magic.Caster; +import com.minelittlepony.unicopia.ability.magic.Spell; +import com.minelittlepony.unicopia.ability.magic.spell.SpellRegistry; +import com.minelittlepony.unicopia.entity.Physics; +import com.minelittlepony.unicopia.entity.PonyContainer; +import com.minelittlepony.unicopia.entity.Equine; +import com.minelittlepony.unicopia.entity.Trap; +import com.minelittlepony.unicopia.item.toxin.Toxicity; +import com.minelittlepony.unicopia.item.toxin.Toxin; import com.minelittlepony.unicopia.network.Channel; import com.minelittlepony.unicopia.network.EffectSync; import com.minelittlepony.unicopia.network.MsgPlayerCapabilities; import com.minelittlepony.unicopia.network.Transmittable; -import com.minelittlepony.unicopia.toxin.Toxicity; -import com.minelittlepony.unicopia.toxin.Toxin; import com.minelittlepony.unicopia.util.Copieable; -import com.minelittlepony.unicopia.world.recipe.enchanting.PageOwner; import com.minelittlepony.common.util.animation.LinearInterpolator; import com.minelittlepony.common.util.animation.Interpolator; import com.mojang.authlib.GameProfile; @@ -43,13 +39,11 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.packet.s2c.play.EntityPassengersSetS2CPacket; import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.text.TranslatableText; -import net.minecraft.util.Hand; import net.minecraft.util.Unit; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; -public class Pony implements Caster, Ponylike, Transmittable, Copieable { +public class Pony implements Caster, Equine, Transmittable, Copieable { private static final TrackedData RACE = DataTracker.registerData(PlayerEntity.class, TrackedDataHandlerRegistry.INTEGER); static final TrackedData ENERGY = DataTracker.registerData(PlayerEntity.class, TrackedDataHandlerRegistry.FLOAT); @@ -57,16 +51,13 @@ public class Pony implements Caster, Ponylike, Trans private static final TrackedData EFFECT = DataTracker.registerData(PlayerEntity.class, TrackedDataHandlerRegistry.TAG_COMPOUND); private static final TrackedData HELD_EFFECT = DataTracker.registerData(PlayerEntity.class, TrackedDataHandlerRegistry.TAG_COMPOUND); - private final PlayerPageStats pageStates = new PlayerPageStats(this); private final AbilityDispatcher powers = new AbilityDispatcher(this); private final PlayerPhysics gravity = new PlayerPhysics(this); private final PlayerAttributes attributes = new PlayerAttributes(); private final PlayerCamera camera = new PlayerCamera(this); - private final PlayerInventory inventory = new PlayerInventory(this); private final MagicReserves mana; private final EffectSync effectDelegate = new EffectSync(this, EFFECT); - private final EffectSync heldEffectDelegate = new EffectSync(this, HELD_EFFECT); private final Interpolator interpolator = new LinearInterpolator(); @@ -124,24 +115,6 @@ public class Pony implements Caster, Ponylike, Trans this.invisible = invisible; } - @Nullable - public HeldSpell getHeldSpell(ItemStack stack) { - - if (!getSpecies().canCast()) { - heldEffectDelegate.set(null); - return null; - } - - HeldSpell heldEffect = heldEffectDelegate.get(HeldSpell.class, true); - - if (heldEffect == null || !heldEffect.getName().equals(SpellRegistry.getKeyFromStack(stack))) { - heldEffect = SpellRegistry.instance().getHeldFrom(stack); - heldEffectDelegate.set(heldEffect); - } - - return heldEffect; - } - @Override public Affinity getAffinity() { return Affinity.NEUTRAL; @@ -165,10 +138,6 @@ public class Pony implements Caster, Ponylike, Trans return powers; } - public PageOwner getPages() { - return pageStates; - } - @Override public Physics getPhysics() { return gravity; @@ -214,7 +183,6 @@ public class Pony implements Caster, Ponylike, Trans } powers.tick(); - inventory.tick(); return false; } @@ -237,16 +205,6 @@ public class Pony implements Caster, Ponylike, Trans } } - ItemStack stack = entity.getStackInHand(Hand.MAIN_HAND); - - HeldSpell effect = getHeldSpell(stack); - - if (effect != null) { - Affinity affinity = stack.getItem() instanceof AffineItem ? ((AffineItem)stack.getItem()).getAffinity(stack) : Affinity.NEUTRAL; - - effect.updateInHand(this, affinity); - } - mana.addExertion(-10); mana.addEnergy(-1); @@ -312,25 +270,9 @@ public class Pony implements Caster, Ponylike, Trans } public Either trySleep(BlockPos pos) { - - if (getInventory().matches(UTags.CURSED_ARTEFACTS)) { - if (!isClient()) { - entity.sendMessage(new TranslatableText("tile.bed.youAreAMonster"), true); - } - return Either.left(SleepFailureReason.OTHER_PROBLEM); - } - - if (findAllSpellsInRange(10).anyMatch(c -> c instanceof Pony && ((Pony)c).getInventory().matches(UTags.CURSED_ARTEFACTS))) { - return Either.left(SleepFailureReason.NOT_SAFE); - } - return Either.right(Unit.INSTANCE); } - public PlayerInventory getInventory() { - return inventory; - } - public void onEat(ItemStack stack) { if (getSpecies() == Race.CHANGELING) { Toxin.POISON.afflict(getOwner(), Toxicity.SAFE, stack); @@ -349,8 +291,6 @@ public class Pony implements Caster, Ponylike, Trans if (effect != null) { compound.put("effect", SpellRegistry.toNBT(effect)); } - - pageStates.toNBT(compound); } @Override @@ -363,15 +303,12 @@ public class Pony implements Caster, Ponylike, Trans if (compound.contains("effect")) { effectDelegate.set(SpellRegistry.instance().createEffectFromNBT(compound.getCompound("effect"))); } - - pageStates.fromNBT(compound); } @Override public void copyFrom(Pony oldPlayer) { setSpell(oldPlayer.getSpell()); setSpecies(oldPlayer.getSpecies()); - pageStates.copyFrom(oldPlayer.pageStates); setDirty(); } diff --git a/src/main/java/com/minelittlepony/unicopia/util/dummy/DummyClientPlayerEntity.java b/src/main/java/com/minelittlepony/unicopia/entity/player/dummy/DummyClientPlayerEntity.java similarity index 97% rename from src/main/java/com/minelittlepony/unicopia/util/dummy/DummyClientPlayerEntity.java rename to src/main/java/com/minelittlepony/unicopia/entity/player/dummy/DummyClientPlayerEntity.java index d1841d59..40a94b49 100644 --- a/src/main/java/com/minelittlepony/unicopia/util/dummy/DummyClientPlayerEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/dummy/DummyClientPlayerEntity.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.util.dummy; +package com.minelittlepony.unicopia.entity.player.dummy; import javax.annotation.Nonnull; diff --git a/src/main/java/com/minelittlepony/unicopia/util/dummy/DummyPlayerEntity.java b/src/main/java/com/minelittlepony/unicopia/entity/player/dummy/DummyPlayerEntity.java similarity index 90% rename from src/main/java/com/minelittlepony/unicopia/util/dummy/DummyPlayerEntity.java rename to src/main/java/com/minelittlepony/unicopia/entity/player/dummy/DummyPlayerEntity.java index 5c2d9bfa..68177f14 100644 --- a/src/main/java/com/minelittlepony/unicopia/util/dummy/DummyPlayerEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/dummy/DummyPlayerEntity.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.util.dummy; +package com.minelittlepony.unicopia.entity.player.dummy; import com.minelittlepony.unicopia.InteractionManager; import com.minelittlepony.unicopia.Owned; @@ -14,7 +14,7 @@ public class DummyPlayerEntity extends PlayerEntity implements Owned dependencies = Maps.newHashMap(); - - private final Pony player; - - private double carryingWeight; - - PlayerInventory(Pony player) { - this.player = player; - } - - /** - * Reinforces a players dependency on a certain magical artifact. - * A dependency will slowly drop over time if not reinforced - * - * Bad things might happen when it's removed. - */ - public synchronized void enforceDependency(AffineItem item) { - if (dependencies.containsKey(item)) { - dependencies.get(item).reinforce(); - } else { - dependencies.put(item, new Entry(item)); - } - } - - /** - * Returns how long the player has been wearing the given item. - */ - public synchronized int getTicksAttached(AffineItem item) { - if (dependencies.containsKey(item)) { - return dependencies.get(item).ticksAttached; - } - - return 0; - } - - /** - * Returns how dependent the player has become on the given item. - * - * Zero means not dependent at all / not wearing. - */ - public synchronized float getNeedfulness(AffineItem item) { - if (dependencies.containsKey(item)) { - return dependencies.get(item).needfulness; - } - - return 0; - } - - @Override - public synchronized void tick() { - carryingWeight = HeavyInventory.getContentsTotalWorth(player.getOwner().inventory, false); - - Iterator> iterator = dependencies.entrySet().iterator(); - - while (iterator.hasNext()) { - Map.Entry entry = iterator.next(); - - Entry item = entry.getValue(); - - item.tick(); - - if (item.needfulness <= 0.001) { - iterator.remove(); - } - } - } - - /** - * Checks if the player is wearing the specified magical artifact. - */ - public boolean isWearing(AffineItem item) { - for (ItemStack i : player.getOwner().getArmorItems()) { - if (!i.isEmpty() && i.getItem() == item) { - return true; - } - } - - return item.alwaysActive(); - } - - public boolean matches(Tag tag) { - for (ItemStack i : player.getOwner().getArmorItems()) { - if (!i.isEmpty() && i.getItem().isIn(tag)) { - return true; - } - } - - return false; - } - - public double getCarryingWeight() { - return carryingWeight / 100000D; - } - - @Override - public void toNBT(CompoundTag compound) { - ListTag items = new ListTag(); - - for (Entry entry : dependencies.values()) { - items.add(entry.toNBT()); - } - - compound.put("dependencies", items); - compound.putDouble("weight", carryingWeight); - } - - @Override - public void fromNBT(CompoundTag compound) { - dependencies.clear(); - - compound.getList("dependencies", 10).forEach(res -> { - Entry entry = new Entry(); - - entry.fromNBT((CompoundTag)res); - - if (entry.item != null) { - dependencies.put(entry.item, entry); - } - }); - carryingWeight = compound.getDouble("weight"); - } - - class Entry implements Tickable, NbtSerialisable { - int ticksAttached = 0; - - float needfulness = 1; - - AffineItem item; - - Entry() { - - } - - Entry(AffineItem key) { - this.item = key; - } - - void reinforce() { - needfulness = Math.min(30, needfulness + 1); - } - - @Override - public void tick() { - if (isWearing(item)) { - ticksAttached ++; - needfulness *= 0.9F; - } else if (ticksAttached > 0) { - item.onRemoved(player, needfulness); - needfulness = 0; - } - } - - @Override - public void toNBT(CompoundTag compound) { - compound.putInt("ticksAttached", ticksAttached); - compound.putFloat("needfulness", needfulness); - compound.putString("item", Registry.ITEM.getId(((Item)item)).toString()); - } - - @Override - public void fromNBT(CompoundTag compound) { - ticksAttached = compound.getInt("ticksAttached"); - needfulness = compound.getFloat("needfulness"); - - Item item = Registry.ITEM.get(new Identifier(compound.getString("item"))); - - this.item = item instanceof AffineItem ? (AffineItem)item : null; - } - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/equine/player/PlayerPageStats.java b/src/main/java/com/minelittlepony/unicopia/equine/player/PlayerPageStats.java deleted file mode 100644 index e92491ba..00000000 --- a/src/main/java/com/minelittlepony/unicopia/equine/player/PlayerPageStats.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.minelittlepony.unicopia.equine.player; - -import java.util.HashMap; -import java.util.Map; - -import com.minelittlepony.unicopia.util.Copieable; -import com.minelittlepony.unicopia.util.NbtSerialisable; -import com.minelittlepony.unicopia.world.recipe.enchanting.PageOwner; -import com.minelittlepony.unicopia.world.recipe.enchanting.PageState; - -import net.minecraft.nbt.CompoundTag; -import net.minecraft.util.Identifier; - -public class PlayerPageStats implements NbtSerialisable, Copieable, PageOwner { - private final Map pageStates = new HashMap<>(); - - private final Pony pony; - - PlayerPageStats(Pony pony) { - this.pony = pony; - } - - @Override - public Map getPageStates() { - return pageStates; - } - - @Override - public void sendCapabilities(boolean full) { - pony.sendCapabilities(full); - } - - @Override - public void copyFrom(PlayerPageStats other) { - pageStates.clear(); - pageStates.putAll(other.pageStates); - } - - @Override - public void toNBT(CompoundTag compound) { - if (!pageStates.isEmpty()) { - CompoundTag pages = new CompoundTag(); - boolean written = false; - - for (Map.Entry entry : pageStates.entrySet()) { - if (entry.getValue() != PageState.LOCKED) { - pages.putString(entry.getKey().toString(), entry.getValue().name()); - written = true; - } - } - - if (written) { - compound.put("pageStates", pages); - } - } - } - - @Override - public void fromNBT(CompoundTag compound) { - pageStates.clear(); - if (compound.contains("pageStates")) { - CompoundTag pages = compound.getCompound("pageStates"); - - pages.getKeys().forEach(key -> { - PageState state = PageState.of(pages.getString(key)); - - if (state != PageState.LOCKED) { - pageStates.put(new Identifier(key), state); - } - }); - } - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/item/AppleItem.java b/src/main/java/com/minelittlepony/unicopia/item/AppleItem.java similarity index 91% rename from src/main/java/com/minelittlepony/unicopia/world/item/AppleItem.java rename to src/main/java/com/minelittlepony/unicopia/item/AppleItem.java index c03c918d..5721528c 100644 --- a/src/main/java/com/minelittlepony/unicopia/world/item/AppleItem.java +++ b/src/main/java/com/minelittlepony/unicopia/item/AppleItem.java @@ -1,11 +1,12 @@ -package com.minelittlepony.unicopia.world.item; +package com.minelittlepony.unicopia.item; import java.util.List; import javax.annotation.Nullable; -import com.minelittlepony.unicopia.ducks.IItemEntity; -import com.minelittlepony.unicopia.equine.ItemImpl; -import com.minelittlepony.unicopia.toxin.Toxicity; +import com.minelittlepony.unicopia.entity.IItemEntity; +import com.minelittlepony.unicopia.entity.ItemImpl; +import com.minelittlepony.unicopia.item.toxin.Toxicity; + import net.minecraft.client.item.TooltipContext; import net.minecraft.entity.EntityType; import net.minecraft.entity.ItemEntity; diff --git a/src/main/java/com/minelittlepony/unicopia/world/item/PredicatedBlockItem.java b/src/main/java/com/minelittlepony/unicopia/item/PredicatedBlockItem.java similarity index 96% rename from src/main/java/com/minelittlepony/unicopia/world/item/PredicatedBlockItem.java rename to src/main/java/com/minelittlepony/unicopia/item/PredicatedBlockItem.java index 98d3f2b3..660cbc75 100644 --- a/src/main/java/com/minelittlepony/unicopia/world/item/PredicatedBlockItem.java +++ b/src/main/java/com/minelittlepony/unicopia/item/PredicatedBlockItem.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.world.item; +package com.minelittlepony.unicopia.item; import java.util.function.Predicate; diff --git a/src/main/java/com/minelittlepony/unicopia/world/item/RottenAppleItem.java b/src/main/java/com/minelittlepony/unicopia/item/RottenAppleItem.java similarity index 78% rename from src/main/java/com/minelittlepony/unicopia/world/item/RottenAppleItem.java rename to src/main/java/com/minelittlepony/unicopia/item/RottenAppleItem.java index 049c833c..e5e6c43f 100644 --- a/src/main/java/com/minelittlepony/unicopia/world/item/RottenAppleItem.java +++ b/src/main/java/com/minelittlepony/unicopia/item/RottenAppleItem.java @@ -1,6 +1,6 @@ -package com.minelittlepony.unicopia.world.item; +package com.minelittlepony.unicopia.item; -import com.minelittlepony.unicopia.ducks.IItemEntity; +import com.minelittlepony.unicopia.entity.IItemEntity; import net.fabricmc.fabric.api.registry.FuelRegistry; import net.minecraft.util.ActionResult; diff --git a/src/main/java/com/minelittlepony/unicopia/item/UItems.java b/src/main/java/com/minelittlepony/unicopia/item/UItems.java new file mode 100644 index 00000000..ae86f9ca --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/item/UItems.java @@ -0,0 +1,52 @@ +package com.minelittlepony.unicopia.item; + +import com.minelittlepony.unicopia.USounds; +import com.minelittlepony.unicopia.item.toxin.Toxics; +import com.minelittlepony.unicopia.item.toxin.UFoodComponents; + +import net.minecraft.item.Item; +import net.minecraft.item.Item.Settings; +import net.minecraft.item.ItemGroup; +import net.minecraft.item.BlockItem; +import net.minecraft.item.FoodComponents; +import net.minecraft.item.MusicDiscItem; +import net.minecraft.sound.SoundEvent; +import net.minecraft.util.Identifier; +import net.minecraft.util.Rarity; +import net.minecraft.util.registry.Registry; + +public interface UItems { + + AppleItem GREEN_APPLE = register("green_apple", new AppleItem(new Item.Settings().group(ItemGroup.FOOD).food(FoodComponents.APPLE))); + AppleItem SWEET_APPLE = register("sweet_apple", new AppleItem(new Item.Settings().group(ItemGroup.FOOD).food(FoodComponents.APPLE))); + AppleItem SOUR_APPLE = register("sour_apple", new AppleItem(new Item.Settings().group(ItemGroup.FOOD).food(FoodComponents.APPLE))); + + ZapAppleItem ZAP_APPLE = register("zap_apple", new ZapAppleItem(new Item.Settings().group(ItemGroup.FOOD).food(UFoodComponents.ZAP_APPLE))); + + AppleItem ROTTEN_APPLE = register("rotten_apple", new RottenAppleItem(new Item.Settings().group(ItemGroup.FOOD).food(FoodComponents.APPLE))); + AppleItem COOKED_ZAP_APPLE = register("cooked_zap_apple", new AppleItem(new Item.Settings().group(ItemGroup.FOOD).food(FoodComponents.APPLE))); + + Item MUSIC_DISC_CRUSADE = register("music_disc_crusade", USounds.RECORD_CRUSADE); + Item MUSIC_DISC_PET = register("music_disc_pet", USounds.RECORD_PET); + Item MUSIC_DISC_POPULAR = register("music_disc_popular", USounds.RECORD_POPULAR); + Item MUSIC_DISC_FUNK = register("music_disc_funk", USounds.RECORD_FUNK); + + static T register(String name, T item) { + if (item instanceof BlockItem) { + ((BlockItem)item).appendBlocks(Item.BLOCK_ITEMS, item); + } + return Registry.register(Registry.ITEM, new Identifier("unicopia", name), item); + } + + static MusicDiscItem register(String name, SoundEvent sound) { + return register(name, new MusicDiscItem(1, sound, new Settings() + .maxCount(1) + .group(ItemGroup.MISC) + .rarity(Rarity.RARE) + ) {}); + } + + static void bootstrap() { + Toxics.bootstrap(); + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/world/item/VanillaOverrides.java b/src/main/java/com/minelittlepony/unicopia/item/VanillaOverrides.java similarity index 73% rename from src/main/java/com/minelittlepony/unicopia/world/item/VanillaOverrides.java rename to src/main/java/com/minelittlepony/unicopia/item/VanillaOverrides.java index 4d1d6aea..ea00c3cd 100644 --- a/src/main/java/com/minelittlepony/unicopia/world/item/VanillaOverrides.java +++ b/src/main/java/com/minelittlepony/unicopia/item/VanillaOverrides.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.world.item; +package com.minelittlepony.unicopia.item; import com.minelittlepony.unicopia.util.Registries; @@ -17,8 +17,6 @@ public final class VanillaOverrides { } static { - register("stick", new StickItem(new Item.Settings().group(ItemGroup.MATERIALS))); - register("shears", new ExtendedShearsItem(new Item.Settings().maxDamage(238).group(ItemGroup.TOOLS))); register("apple", new AppleItem(new Item.Settings().group(ItemGroup.FOOD).food(FoodComponents.APPLE))); } } \ No newline at end of file diff --git a/src/main/java/com/minelittlepony/unicopia/world/item/ZapAppleItem.java b/src/main/java/com/minelittlepony/unicopia/item/ZapAppleItem.java similarity index 91% rename from src/main/java/com/minelittlepony/unicopia/world/item/ZapAppleItem.java rename to src/main/java/com/minelittlepony/unicopia/item/ZapAppleItem.java index be2cc6e3..4fa96dd1 100644 --- a/src/main/java/com/minelittlepony/unicopia/world/item/ZapAppleItem.java +++ b/src/main/java/com/minelittlepony/unicopia/item/ZapAppleItem.java @@ -1,8 +1,8 @@ -package com.minelittlepony.unicopia.world.item; +package com.minelittlepony.unicopia.item; import com.minelittlepony.unicopia.UTags; -import com.minelittlepony.unicopia.toxin.Toxicity; +import com.minelittlepony.unicopia.item.toxin.Toxicity; import com.minelittlepony.unicopia.util.MagicalDamageSource; import com.minelittlepony.unicopia.util.VecHelper; @@ -61,7 +61,7 @@ public class ZapAppleItem extends AppleItem { if (w instanceof ServerWorld) { LightningEntity lightning = EntityType.LIGHTNING_BOLT.create(w); - lightning.positAfterTeleport(player.getX(), player.getY(), player.getZ()); + lightning.refreshPositionAfterTeleport(player.getX(), player.getY(), player.getZ()); w.spawnEntity(lightning); } @@ -78,9 +78,11 @@ public class ZapAppleItem extends AppleItem { public TypedActionResult onFedTo(ItemStack stack, PlayerEntity player, Entity e) { LightningEntity lightning = EntityType.LIGHTNING_BOLT.create(e.world); - lightning.positAfterTeleport(player.getX(), player.getY(), player.getZ()); + lightning.refreshPositionAfterTeleport(player.getX(), player.getY(), player.getZ()); - e.onStruckByLightning(lightning); + if (e.world instanceof ServerWorld) { + e.onStruckByLightning((ServerWorld)e.world, lightning); + } if (!player.abilities.creativeMode) { stack.decrement(1); diff --git a/src/main/java/com/minelittlepony/unicopia/toxin/Toxic.java b/src/main/java/com/minelittlepony/unicopia/item/toxin/Toxic.java similarity index 95% rename from src/main/java/com/minelittlepony/unicopia/toxin/Toxic.java rename to src/main/java/com/minelittlepony/unicopia/item/toxin/Toxic.java index f3b44285..6a28e5b8 100644 --- a/src/main/java/com/minelittlepony/unicopia/toxin/Toxic.java +++ b/src/main/java/com/minelittlepony/unicopia/item/toxin/Toxic.java @@ -1,10 +1,10 @@ -package com.minelittlepony.unicopia.toxin; +package com.minelittlepony.unicopia.item.toxin; import java.util.function.Function; import java.util.function.Supplier; import com.minelittlepony.unicopia.Race; -import com.minelittlepony.unicopia.equine.player.Pony; +import com.minelittlepony.unicopia.entity.player.Pony; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; diff --git a/src/main/java/com/minelittlepony/unicopia/toxin/ToxicHolder.java b/src/main/java/com/minelittlepony/unicopia/item/toxin/ToxicHolder.java similarity index 75% rename from src/main/java/com/minelittlepony/unicopia/toxin/ToxicHolder.java rename to src/main/java/com/minelittlepony/unicopia/item/toxin/ToxicHolder.java index 7e97ee89..ac5e37e2 100644 --- a/src/main/java/com/minelittlepony/unicopia/toxin/ToxicHolder.java +++ b/src/main/java/com/minelittlepony/unicopia/item/toxin/ToxicHolder.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.toxin; +package com.minelittlepony.unicopia.item.toxin; import net.minecraft.item.FoodComponent; diff --git a/src/main/java/com/minelittlepony/unicopia/toxin/ToxicItem.java b/src/main/java/com/minelittlepony/unicopia/item/toxin/ToxicItem.java similarity index 97% rename from src/main/java/com/minelittlepony/unicopia/toxin/ToxicItem.java rename to src/main/java/com/minelittlepony/unicopia/item/toxin/ToxicItem.java index 96c3f0f5..d427cc46 100644 --- a/src/main/java/com/minelittlepony/unicopia/toxin/ToxicItem.java +++ b/src/main/java/com/minelittlepony/unicopia/item/toxin/ToxicItem.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.toxin; +package com.minelittlepony.unicopia.item.toxin; import java.util.List; import java.util.function.Function; diff --git a/src/main/java/com/minelittlepony/unicopia/toxin/Toxicity.java b/src/main/java/com/minelittlepony/unicopia/item/toxin/Toxicity.java similarity index 98% rename from src/main/java/com/minelittlepony/unicopia/toxin/Toxicity.java rename to src/main/java/com/minelittlepony/unicopia/item/toxin/Toxicity.java index 8e9344c5..0dc76a50 100644 --- a/src/main/java/com/minelittlepony/unicopia/toxin/Toxicity.java +++ b/src/main/java/com/minelittlepony/unicopia/item/toxin/Toxicity.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.toxin; +package com.minelittlepony.unicopia.item.toxin; import java.util.Arrays; import java.util.Map; diff --git a/src/main/java/com/minelittlepony/unicopia/toxin/Toxics.java b/src/main/java/com/minelittlepony/unicopia/item/toxin/Toxics.java similarity index 98% rename from src/main/java/com/minelittlepony/unicopia/toxin/Toxics.java rename to src/main/java/com/minelittlepony/unicopia/item/toxin/Toxics.java index 571f8938..183268b7 100644 --- a/src/main/java/com/minelittlepony/unicopia/toxin/Toxics.java +++ b/src/main/java/com/minelittlepony/unicopia/item/toxin/Toxics.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.toxin; +package com.minelittlepony.unicopia.item.toxin; import net.minecraft.item.FoodComponent; import net.minecraft.item.Item; diff --git a/src/main/java/com/minelittlepony/unicopia/toxin/Toxin.java b/src/main/java/com/minelittlepony/unicopia/item/toxin/Toxin.java similarity index 98% rename from src/main/java/com/minelittlepony/unicopia/toxin/Toxin.java rename to src/main/java/com/minelittlepony/unicopia/item/toxin/Toxin.java index 837883ad..983fa16d 100644 --- a/src/main/java/com/minelittlepony/unicopia/toxin/Toxin.java +++ b/src/main/java/com/minelittlepony/unicopia/item/toxin/Toxin.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.toxin; +package com.minelittlepony.unicopia.item.toxin; import net.minecraft.entity.effect.StatusEffect; import net.minecraft.entity.effect.StatusEffectInstance; diff --git a/src/main/java/com/minelittlepony/unicopia/toxin/UEffects.java b/src/main/java/com/minelittlepony/unicopia/item/toxin/UEffects.java similarity index 95% rename from src/main/java/com/minelittlepony/unicopia/toxin/UEffects.java rename to src/main/java/com/minelittlepony/unicopia/item/toxin/UEffects.java index 09dab806..de5b30f4 100644 --- a/src/main/java/com/minelittlepony/unicopia/toxin/UEffects.java +++ b/src/main/java/com/minelittlepony/unicopia/item/toxin/UEffects.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.toxin; +package com.minelittlepony.unicopia.item.toxin; import com.minelittlepony.unicopia.util.CustomStatusEffect; import com.minelittlepony.unicopia.util.MagicalDamageSource; diff --git a/src/main/java/com/minelittlepony/unicopia/toxin/UFoodComponents.java b/src/main/java/com/minelittlepony/unicopia/item/toxin/UFoodComponents.java similarity index 96% rename from src/main/java/com/minelittlepony/unicopia/toxin/UFoodComponents.java rename to src/main/java/com/minelittlepony/unicopia/item/toxin/UFoodComponents.java index 7deb807c..bb634eb8 100644 --- a/src/main/java/com/minelittlepony/unicopia/toxin/UFoodComponents.java +++ b/src/main/java/com/minelittlepony/unicopia/item/toxin/UFoodComponents.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.toxin; +package com.minelittlepony.unicopia.item.toxin; import net.minecraft.item.FoodComponent; diff --git a/src/main/java/com/minelittlepony/unicopia/magic/AffineItem.java b/src/main/java/com/minelittlepony/unicopia/magic/AffineItem.java deleted file mode 100644 index 225bbe9f..00000000 --- a/src/main/java/com/minelittlepony/unicopia/magic/AffineItem.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.minelittlepony.unicopia.magic; - -import com.minelittlepony.unicopia.equine.player.Pony; - -import net.minecraft.item.ItemStack; - -public interface AffineItem extends Affine { - /** - * Gets the affinity of this magical artifact. Either good, bad, or unaligned. - * What this returns may have effects on the behaviour of certain spells and effects. - */ - default Affinity getAffinity(ItemStack stack) { - return getAffinity(); - } - - default void onRemoved(Pony player, float needfulness) { - - } - - boolean alwaysActive(); -} diff --git a/src/main/java/com/minelittlepony/unicopia/magic/CastResult.java b/src/main/java/com/minelittlepony/unicopia/magic/CastResult.java deleted file mode 100644 index 3990f1a1..00000000 --- a/src/main/java/com/minelittlepony/unicopia/magic/CastResult.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.minelittlepony.unicopia.magic; - -/** - * A type of action to perform after a spell has completed its handling. - */ -public enum CastResult { - /** - * No action. - */ - NONE, - /** - * Place block/gem into the world. - */ - PLACE, - /** - * Vanilla behaviour. - * In the case of dispensers the item will be ejected into the world. - * When right clicking a block the itemstack will be decremented. - */ - DEFAULT; - - public static CastResult cancelled(boolean cancelled) { - return cancelled ? NONE : DEFAULT; - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/magic/DispenceableSpell.java b/src/main/java/com/minelittlepony/unicopia/magic/DispenceableSpell.java deleted file mode 100644 index 05a90667..00000000 --- a/src/main/java/com/minelittlepony/unicopia/magic/DispenceableSpell.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.minelittlepony.unicopia.magic; - -import net.minecraft.util.math.BlockPointer; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; - -/** - * Represents an object with an action to perform when dispensed from a dispenser. - */ -public interface DispenceableSpell extends Spell { - - /** - * Called when dispensed. - * - * @param pos Block position in front of the dispenser - * @param facing Direction of the dispenser - * @param source The dispenser currently dispensing - * @param affinity The affinity of the casting artifact - * @return an ActionResult for the type of action to perform. - */ - CastResult onDispenced(BlockPos pos, Direction facing, BlockPointer source, Affinity affinity); -} diff --git a/src/main/java/com/minelittlepony/unicopia/magic/Dispensable.java b/src/main/java/com/minelittlepony/unicopia/magic/Dispensable.java deleted file mode 100644 index 40a2abc0..00000000 --- a/src/main/java/com/minelittlepony/unicopia/magic/Dispensable.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.minelittlepony.unicopia.magic; - -import java.util.Optional; - -import net.minecraft.block.Block; -import net.minecraft.block.DispenserBlock; -import net.minecraft.block.Material; -import net.minecraft.block.dispenser.DispenserBehavior; -import net.minecraft.block.dispenser.ItemDispenserBehavior; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ActionResult; -import net.minecraft.util.TypedActionResult; -import net.minecraft.util.math.BlockPointer; -import net.minecraft.util.math.Direction; - -public interface Dispensable { - /** - * Enables dispensing behaviours for this item. - */ - static DispenserBehavior setDispenseable(Item item, Dispensable action) { - ItemDispenserBehavior behaviour = new ItemDispenserBehavior() { - private ActionResult result; - @Override - protected ItemStack dispenseSilently(BlockPointer source, ItemStack stack) { - TypedActionResult result = action.dispenseStack(source, stack); - this.result = result.getResult(); - - if (this.result != ActionResult.SUCCESS) { - return super.dispenseSilently(source, stack); - } - - return result.getValue(); - } - - @Override - protected void playSound(BlockPointer pointer) { - if (result != ActionResult.PASS) { - super.playSound(pointer); - } - } - - @Override - protected void spawnParticles(BlockPointer pointer, Direction side) { - if (result != ActionResult.PASS) { - super.spawnParticles(pointer, side); - } - } - }; - DispenserBlock.registerBehavior(item, behaviour); - return behaviour; - } - - /** - * Called to dispense this stack. - */ - TypedActionResult dispenseStack(BlockPointer source, ItemStack stack); - - static Optional getBehavior(ItemStack stack) { - return Optional.ofNullable(DispenserAccess.INSTANCE.getBehaviorForItem(stack)); - } -} - -final class DispenserAccess extends DispenserBlock { - static final DispenserAccess INSTANCE = new DispenserAccess(); - private DispenserAccess() { - super(Block.Settings.of(Material.AIR)); - } - - @Override - public DispenserBehavior getBehaviorForItem(ItemStack stack) { - return super.getBehaviorForItem(stack); - } -} \ No newline at end of file diff --git a/src/main/java/com/minelittlepony/unicopia/magic/EtherialListener.java b/src/main/java/com/minelittlepony/unicopia/magic/EtherialListener.java deleted file mode 100644 index a2d0580d..00000000 --- a/src/main/java/com/minelittlepony/unicopia/magic/EtherialListener.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.minelittlepony.unicopia.magic; - -/** - * A change listener for when a magic spell is either placed or destroyed in the world. - */ -public interface EtherialListener { - int REMOVED = 0x0; - int ADDED = 0x1; - - /** - * Called when a nearby spell is added or removed. - * - * @param source The casting source of the sending spell - * @param effect The spell that dispatched the event - * @param state The new state - */ - void onNearbySpellChange(Caster source, Spell effect, int state); -} diff --git a/src/main/java/com/minelittlepony/unicopia/magic/HeldSpell.java b/src/main/java/com/minelittlepony/unicopia/magic/HeldSpell.java deleted file mode 100644 index 6e5dacf6..00000000 --- a/src/main/java/com/minelittlepony/unicopia/magic/HeldSpell.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.minelittlepony.unicopia.magic; - -import com.minelittlepony.unicopia.equine.player.Pony; - -/** - * Represents a passive spell that does something when held in the player's hand. - */ -public interface HeldSpell extends Spell { - /** - * Called every tick when held in a player's inventory. - * - * @param source The entity we are currently attached to. - */ - void updateInHand(Pony caster, Affinity affinity); -} diff --git a/src/main/java/com/minelittlepony/unicopia/magic/Useable.java b/src/main/java/com/minelittlepony/unicopia/magic/Useable.java deleted file mode 100644 index 0cac5823..00000000 --- a/src/main/java/com/minelittlepony/unicopia/magic/Useable.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.minelittlepony.unicopia.magic; - -import javax.annotation.Nullable; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.item.ItemUsageContext; -import net.minecraft.world.World; - -/** - * Interface for right-click actions. - * - */ -public interface Useable { - - /** - * Triggered when the player right clicks a block - * - * @param stack The current itemstack - * @param affinity The affinity of the casting artifact - * @param pony The player - * @param world The player's world - * @param pos The location clicked - * @param side The side of the block clicked - * @param hitX X offset inside the block - * @param hitY Y offset inside the block - * @param hitZ Z offset inside the block - * - * @return ActionResult for the type of action to perform - */ - CastResult onUse(ItemUsageContext context, Affinity affinity); - - /** - * Triggered when the player right clicks - * - * @param stack The current itemstack - * @param affinity The affinity of the casting artifact - * @param player The player - * @param world The player's world - * @param hitEntity The entity in focus, if any - * - * @return ActionResult for the type of action to perform - */ - CastResult onUse(ItemStack stack, Affinity affinity, PlayerEntity player, World world, @Nullable Entity hitEntity); -} diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/AbstractLinkedSpell.java b/src/main/java/com/minelittlepony/unicopia/magic/spell/AbstractLinkedSpell.java deleted file mode 100644 index 3e60c1e3..00000000 --- a/src/main/java/com/minelittlepony/unicopia/magic/spell/AbstractLinkedSpell.java +++ /dev/null @@ -1,112 +0,0 @@ -package com.minelittlepony.unicopia.magic.spell; - -import java.util.UUID; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import com.minelittlepony.unicopia.magic.Caster; -import com.minelittlepony.unicopia.world.entity.SpellcastEntity; - -import net.minecraft.entity.Entity; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Box; - -public abstract class AbstractLinkedSpell extends AbstractSpell { - - protected boolean searching = true; - - @Nullable - private UUID targettedEntityId; - - @Nullable - private SpellcastEntity targettedEntity; - - protected void setTarget(@Nonnull SpellcastEntity e) { - searching = false; - targettedEntity = e; - targettedEntityId = e.getUuid(); - setDirty(true); - } - - public boolean hasTarget() { - if (targettedEntity != null && targettedEntity.removed) { - targettedEntity = null; - targettedEntityId = null; - searching = true; - setDirty(true); - } - - return targettedEntityId != null; - } - - @Nullable - protected SpellcastEntity getTarget(Caster source) { - if (targettedEntity == null && targettedEntityId != null) { - Entity e = ((ServerWorld)source.getWorld()).getEntity(targettedEntityId); - - if (e instanceof SpellcastEntity) { - setTarget((SpellcastEntity)e); - } - } - - if (targettedEntity != null && targettedEntity.removed) { - targettedEntity = null; - targettedEntityId = null; - searching = true; - setDirty(true); - } - - return targettedEntity; - } - - @Override - public boolean update(Caster source) { - - if (source.getWorld() instanceof ServerWorld) { - if (searching) { - searchForTarget(source); - } else { - getTarget(source); - } - } - - return !isDead(); - } - - protected void searchForTarget(Caster source) { - BlockPos origin = source.getOrigin(); - - source.getWorld().getEntities(source.getEntity(), getSearchArea(source), e -> { - return e instanceof SpellcastEntity && canTargetEntity((SpellcastEntity)e); - }).stream() - .sorted((a, b) -> (int)(a.getBlockPos().getSquaredDistance(origin) - b.getBlockPos().getSquaredDistance(origin))) - .findFirst() - .map(SpellcastEntity.class::cast) - .ifPresent(this::setTarget); - } - - protected abstract Box getSearchArea(Caster source); - - protected abstract boolean canTargetEntity(SpellcastEntity e); - - @Override - public void toNBT(CompoundTag compound) { - super.toNBT(compound); - - if (targettedEntityId != null) { - compound.putUuid("target", targettedEntityId); - } - } - - @Override - public void fromNBT(CompoundTag compound) { - super.fromNBT(compound); - - if (compound.contains("target")) { - targettedEntityId = compound.getUuid("target"); - } - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/ChangelingTrapSpell.java b/src/main/java/com/minelittlepony/unicopia/magic/spell/ChangelingTrapSpell.java deleted file mode 100644 index a32c2dab..00000000 --- a/src/main/java/com/minelittlepony/unicopia/magic/spell/ChangelingTrapSpell.java +++ /dev/null @@ -1,233 +0,0 @@ -package com.minelittlepony.unicopia.magic.spell; - -import java.util.Optional; - -import com.minelittlepony.unicopia.USounds; -import com.minelittlepony.unicopia.magic.Affinity; -import com.minelittlepony.unicopia.magic.CasterUtils; -import com.minelittlepony.unicopia.magic.Magical; -import com.minelittlepony.unicopia.magic.AttachableSpell; -import com.minelittlepony.unicopia.magic.Caster; -import com.minelittlepony.unicopia.magic.ThrowableSpell; -import com.minelittlepony.unicopia.util.WorldEvent; -import com.minelittlepony.unicopia.world.block.UBlocks; -import com.minelittlepony.unicopia.world.entity.CucoonEntity; -import com.minelittlepony.unicopia.world.entity.UEntities; - -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.entity.Entity; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.effect.StatusEffectInstance; -import net.minecraft.entity.effect.StatusEffects; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.AutomaticItemPlacementContext; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.NbtHelper; -import net.minecraft.particle.ParticleTypes; -import net.minecraft.sound.SoundEvent; -import net.minecraft.sound.SoundEvents; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; - -public class ChangelingTrapSpell extends AbstractSpell implements ThrowableSpell, AttachableSpell { - - private BlockPos previousTrappedPosition; - - private int struggleCounter = 10; - - @Override - public String getName() { - return "changeling_trap"; - } - - @Override - public int getTint() { - return 0x88FF88; - } - - @Override - public boolean isCraftable() { - return false; - } - - @Override - public SoundEvent getThrowSound(Caster caster) { - return USounds.SLIME_RETRACT; - } - - @Override - public ItemStack getCastAppearance(Caster caster) { - return new ItemStack(Items.SLIME_BALL); - } - - private boolean checkStruggleCondition(Caster caster) { - return !caster.getOrigin().equals(previousTrappedPosition) - || (!(caster.getOwner() instanceof PlayerEntity) && caster.getWorld().random.nextInt(20) == 0); - } - - @Override - public boolean updateOnPerson(Caster caster) { - LivingEntity entity = caster.getOwner(); - - if (entity.getVelocity().y > 0) { - entity.playSound(SoundEvents.BLOCK_SLIME_BLOCK_HIT, 1, 1); - } - - BlockPos origin = caster.getOrigin(); - - if (previousTrappedPosition == null) { - previousTrappedPosition = origin; - - setDirty(true); - } - - if (caster.isLocal()) { - if (checkStruggleCondition(caster)) { - previousTrappedPosition = origin; - struggleCounter--; - WorldEvent.play(WorldEvent.DESTROY_BLOCK, caster.getWorld(), origin, Blocks.SLIME_BLOCK.getDefaultState()); - - setDirty(true); - } - - BlockState state = caster.getWorld().getBlockState(origin); - BlockState slimeState = UBlocks.SLIME_LAYER.getDefaultState(); - - if (slimeState.canPlaceAt(caster.getWorld(), origin)) { - if (caster.getWorld().isAir(origin) || (state.getBlock() != UBlocks.SLIME_LAYER && state.canReplace(new AutomaticItemPlacementContext(caster.getWorld(), origin, Direction.DOWN, new ItemStack(UBlocks.SLIME_LAYER), Direction.UP)))) { - caster.getWorld().setBlockState(origin, slimeState); - } - } - } - - double yMotion = entity.getVelocity().y; - - if (!entity.isOnGround() && yMotion > 0) { - yMotion = 0; - } - entity.setVelocity(0, yMotion, 0); - - entity.forwardSpeed = 0; - entity.sidewaysSpeed = 0; - entity.limbAngle = 0; - entity.limbDistance = 0; - entity.lastLimbDistance = 0; - - entity.setPos(Math.floor(entity.getX()) + 0.4, entity.getY(), Math.floor(entity.getZ()) + 0.4); - - entity.hurtTime = 2; - entity.horizontalCollision = true; - entity.verticalCollision = true; - - if (entity instanceof PlayerEntity) { - ((PlayerEntity)entity).abilities.flying = false; - } - - StatusEffectInstance SLIME_REGEN = new StatusEffectInstance(StatusEffects.REGENERATION, 0); - - entity.addStatusEffect(SLIME_REGEN); - - if (caster.isLocal()) { - if (struggleCounter <= 0) { - onDestroyed(caster); - setDirty(true); - - WorldEvent.play(WorldEvent.DESTROY_BLOCK, caster.getWorld(), origin, Blocks.SLIME_BLOCK.getDefaultState()); - } - } - - return !entity.hasVehicle() && struggleCounter > 0; - } - - @Override - public boolean update(Caster source) { - return !source.getEntity().hasVehicle(); - } - - @Override - public void render(Caster source) { - source.spawnParticles(ParticleTypes.DRIPPING_LAVA, 1); - } - - @Override - public void renderOnPerson(Caster source) { - render(source); - } - - @Override - public Affinity getAffinity() { - return Affinity.BAD; - } - - public void enforce(Caster caster) { - struggleCounter = 10; - - if (caster.isLocal() && caster.getWorld().random.nextInt(3) == 0) { - onDestroyed(caster); - - CucoonEntity cucoon = UEntities.CUCOON.create(caster.getWorld()); - cucoon.copyPositionAndRotation(caster.getEntity()); - - caster.getWorld().spawnEntity(cucoon); - } - - setDirty(true); - } - - protected void entrap(Caster e) { - - ChangelingTrapSpell existing = e.getSpell(ChangelingTrapSpell.class, true); - - if (existing == null) { - e.setSpell(copy()); - } else { - existing.enforce(e); - } - - e.spawnParticles(ParticleTypes.DRIPPING_LAVA, 20); - } - - protected boolean canAffect(Entity e) { - return !(e instanceof Magical) - && e instanceof LivingEntity - && !e.hasVehicle(); - } - - @Override - public void onImpact(Caster caster, BlockPos pos, BlockState state) { - if (caster.isLocal()) { - caster.findAllEntitiesInRange(5) - .filter(this::canAffect) - .filter(e -> e != caster.getOwner()) - .map(e -> CasterUtils.toCaster(e)) - .filter(Optional::isPresent) - .map(Optional::get) - .forEach(this::entrap); - } - } - - @Override - public void toNBT(CompoundTag compound) { - super.toNBT(compound); - - if (previousTrappedPosition != null) { - compound.put("previousTrappedPosition", NbtHelper.fromBlockPos(previousTrappedPosition)); - } - compound.putInt("struggle", struggleCounter); - } - - @Override - public void fromNBT(CompoundTag compound) { - super.fromNBT(compound); - - previousTrappedPosition = null; - struggleCounter = compound.getInt("struggle"); - - if (compound.contains("previousTrappedPosition")) { - previousTrappedPosition = NbtHelper.toBlockPos(compound.getCompound("previousTrappedPosition")); - } - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/ChargingSpell.java b/src/main/java/com/minelittlepony/unicopia/magic/spell/ChargingSpell.java deleted file mode 100644 index 98c97f67..00000000 --- a/src/main/java/com/minelittlepony/unicopia/magic/spell/ChargingSpell.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.minelittlepony.unicopia.magic.spell; - -import com.minelittlepony.unicopia.magic.Affinity; -import com.minelittlepony.unicopia.magic.Caster; -import com.minelittlepony.unicopia.magic.EtherialListener; -import com.minelittlepony.unicopia.magic.Spell; -import com.minelittlepony.unicopia.particles.MagicParticleEffect; -import com.minelittlepony.unicopia.util.shape.Shape; -import com.minelittlepony.unicopia.world.entity.SpellcastEntity; -import com.minelittlepony.unicopia.util.shape.Line; - -import net.minecraft.util.math.Box; -import net.minecraft.util.math.Vec3d; - -public class ChargingSpell extends AbstractLinkedSpell implements EtherialListener { - - private static final Box searchArea = new Box(-15, -15, -15, 15, 15, 15); - - @Override - public String getName() { - return "charge"; - } - - @Override - public Affinity getAffinity() { - return Affinity.GOOD; - } - - @Override - public int getTint() { - return 0x7272B7; - } - - @Override - protected boolean canTargetEntity(SpellcastEntity e) { - return e.hasSpell(); - } - - @Override - protected Box getSearchArea(Caster source) { - return searchArea.offset(source.getOriginVector()); - } - - @Override - public void render(Caster source) { - if (source.getWorld().random.nextInt(4 + source.getCurrentLevel() * 4) == 0) { - SpellcastEntity target = getTarget(source); - - if (target != null) { - Vec3d start = source.getEntity().getPos(); - - Shape line = new Line(start, target.getPos()); - - source.spawnParticles(line, (int)line.getVolumeOfSpawnableSpace(), pos -> { - source.addParticle(new MagicParticleEffect(getTint()), pos.add(start), Vec3d.ZERO); - }); - } - } - } - - @Override - public boolean update(Caster source) { - super.update(source); - - if (!searching) { - SpellcastEntity target = getTarget(source); - - if (target != null && !target.overLevelCap() && source.getCurrentLevel() > 0) { - source.addLevels(-1); - target.addLevels(1); - } - } - - return !isDead(); - } - - @Override - public void onPlaced(Caster caster) { - caster.notifyNearbySpells(this, 12, ADDED); - } - - @Override - public void onDestroyed(Caster caster) { - super.onDestroyed(caster); - caster.notifyNearbySpells(this, 12, REMOVED); - } - - @Override - public void onNearbySpellChange(Caster source, Spell effect, int newState) { - if (effect instanceof AttractiveSpell && !isDead()) { - setDead(); - setDirty(true); - source.notifyNearbySpells(this, 12, newState); - } - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/DarknessSpell.java b/src/main/java/com/minelittlepony/unicopia/magic/spell/DarknessSpell.java deleted file mode 100644 index 2f5f43ca..00000000 --- a/src/main/java/com/minelittlepony/unicopia/magic/spell/DarknessSpell.java +++ /dev/null @@ -1,259 +0,0 @@ -package com.minelittlepony.unicopia.magic.spell; - -import java.util.Random; -import java.util.function.Consumer; - -import com.minelittlepony.unicopia.magic.Affinity; -import com.minelittlepony.unicopia.magic.CasterUtils; -import com.minelittlepony.unicopia.particles.SphereParticleEffect; -import com.minelittlepony.unicopia.magic.Caster; -import com.minelittlepony.unicopia.util.MagicalDamageSource; -import com.minelittlepony.unicopia.util.PosHelper; -import com.minelittlepony.unicopia.util.shape.Shape; -import com.minelittlepony.unicopia.util.shape.Sphere; -import com.minelittlepony.unicopia.world.entity.SpellcastEntity; - -import net.minecraft.block.BlockState; -import net.minecraft.block.Fertilizable; -import net.minecraft.entity.Entity; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.ai.goal.FleeEntityGoal; -import net.minecraft.entity.effect.StatusEffectInstance; -import net.minecraft.entity.effect.StatusEffects; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.sound.SoundCategory; -import net.minecraft.sound.SoundEvent; -import net.minecraft.sound.SoundEvents; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Box; -import net.minecraft.util.math.Vec3d; - -public class DarknessSpell extends AbstractLinkedSpell { - - private static final Box searchArea = new Box(-5, -5, -5, 5, 5, 5); - - final SoundEvent[] scarySounds = new SoundEvent[] { - SoundEvents.AMBIENT_CAVE, - SoundEvents.ENTITY_GHAST_SCREAM, - SoundEvents.ENTITY_ZOMBIE_AMBIENT, - SoundEvents.ENTITY_GHAST_AMBIENT, - SoundEvents.ENTITY_SKELETON_AMBIENT, - SoundEvents.ENTITY_SKELETON_SHOOT, - SoundEvents.ENTITY_ENDER_DRAGON_GROWL, - SoundEvents.ENTITY_ENDERMAN_SCREAM, - SoundEvents.ENTITY_ZOMBIE_VILLAGER_AMBIENT - }; - - @Override - public String getName() { - return "darkness"; - } - - @Override - public int getTint() { - return 0x000000; - } - - @Override - public boolean allowAI() { - return true; - } - - @Override - public void onPlaced(Caster caster) { - if (caster.getEntity() instanceof SpellcastEntity) { - SpellcastEntity living = (SpellcastEntity)caster.getEntity(); - - living.getGoals().add(1, new FleeEntityGoal<>(living, PlayerEntity.class, 3, 4, 4)); - living.setPos(living.getX(), living.getY(), living.getZ()); - } - } - - @Override - public boolean update(Caster source) { - super.update(source); - - int soundChance = 15; - - int radius = 7 + (source.getCurrentLevel() * 3); - - if (hasTarget()) { - soundChance *= 10; - - Vec3d vel = source.getEntity().getVelocity(); - source.getEntity().setVelocity(vel.x, vel.y - 0.01, vel.z); - - applyBlocks(source, radius); - applyEntities(source, radius, e -> applyLight(source, e)); - } else { - applyEntities(source, radius, e -> applyDark(source, e)); - } - - if (source.getWorld().random.nextInt(soundChance) == 0) { - source.getWorld().playSound(null, source.getOrigin(), - getSoundEffect(source.getWorld().random), SoundCategory.AMBIENT, - 0.2F + source.getWorld().random.nextFloat(), 0.3F); - } - - - return !isDead(); - } - - private void applyBlocks(Caster source, int radius) { - PosHelper.getAllInRegionMutable(source.getOrigin(), new Sphere(false, radius)).filter(pos -> { - if (source.getWorld().random.nextInt(500) == 0) { - BlockState state = source.getWorld().getBlockState(pos); - - if (state.getBlock() instanceof Fertilizable) { - Fertilizable growable = (Fertilizable)state.getBlock(); - - if (growable.canGrow(source.getWorld(), source.getWorld().random, pos, state)) { - if (source.getWorld() instanceof ServerWorld) { - growable.grow((ServerWorld)source.getWorld(), source.getWorld().random, pos, state); - } - return true; - } - } - } - - return false; - }).findFirst(); - } - - private void applyEntities(Caster source, int radius, Consumer consumer) { - source.findAllEntitiesInRange(radius * 1.5F) - .filter(e -> e instanceof LivingEntity) - .map(LivingEntity.class::cast) - .forEach(consumer); - } - - private void applyLight(Caster source, LivingEntity entity) { - if (entity.getHealth() < entity.getMaxHealth()) { - entity.heal(1); - } - } - - private void applyDark(Caster source, LivingEntity entity) { - - if (isAreaOccupied(source, entity.getPos())) { - return; - } - - if (!isLightholder(entity)) { - entity.addStatusEffect(new StatusEffectInstance(StatusEffects.BLINDNESS, 100, 3)); - - Vec3d origin = source.getOriginVector(); - Vec3d to = entity.getPos(); - double distance = origin.distanceTo(to); - - if (entity.world.random.nextInt(30) == 0) { - double appliedForce = distance / 10 + entity.world.random.nextInt(3); - Vec3d force = origin.subtract(to).normalize().multiply(appliedForce); - - entity.addVelocity(force.x, force.y, force.z); - } - - if (distance < 3 && entity.world.random.nextInt(30) == 0) { - entity.damage(MagicalDamageSource.DARKNESS, 3); - } - - } else { - if (entity.hasStatusEffect(StatusEffects.BLINDNESS)) { - entity.removeStatusEffect(StatusEffects.BLINDNESS); - } - } - } - - public SoundEvent getSoundEffect(Random rand) { - - if (hasTarget()) { - return SoundEvents.BLOCK_NOTE_BLOCK_CHIME; - } - - return scarySounds[rand.nextInt(scarySounds.length)]; - } - - @Override - public void render(Caster source) { - int radius = 7 + (source.getCurrentLevel() * 3); - - boolean tamed = hasTarget(); - - int tint = tamed ? 0xFFFFFF : 0x000000; - - if (tamed) { - radius /= 3; - } - - Shape shape = new Sphere(false, radius); - - source.spawnParticles(shape, radius * 6, pos -> { - spawnSphere(source, pos, tint, searching ? 4 : 2); - }); - - source.findAllEntitiesInRange(radius * 1.5F).filter(this::isLightholder).forEach(e -> { - Vec3d pos = shape.computePoint(source.getWorld().random).add(e.getPos().add(0, e.getEyeHeight(e.getPose()), 0)); - - spawnSphere(source, pos, 0xFFFFFF, 1); - }); - } - - public boolean isLightholder(Entity e) { - if (e instanceof SpellcastEntity) { - return true; - } - - return e instanceof LivingEntity && CasterUtils.isHoldingEffect("light", e); - } - - public boolean isAreaOccupied(Caster source, Vec3d pos) { - if (source.getWorld().isAir(new BlockPos(pos).down())) { - return source.findAllSpellsInRange(100).anyMatch(spell -> { - ShieldSpell effect = spell.getSpell(ShieldSpell.class, false); - - if (effect != null) { - return pos.distanceTo(spell.getOriginVector()) <= effect.getDrawDropOffRange(spell); - } - - return false; - }); - } - - return false; - } - - public void spawnSphere(Caster source, Vec3d pos, int tint, int maxSize) { - if (isAreaOccupied(source, pos)) { - return; - } - - float size = source.getWorld().random.nextFloat() * maxSize; - - float particleSpeed = hasTarget() ? 0.3F : 0.5F; - - if (size > 0) { - double vX = (source.getWorld().random.nextFloat() - 0.5) * particleSpeed; - double vZ = (source.getWorld().random.nextFloat() - 0.5) * particleSpeed; - - source.getWorld().addParticle(new SphereParticleEffect(tint, 0.3F, (int)(size * 1000)), - pos.x, pos.y, pos.z, - vX, 0, vZ); - } - } - - @Override - public Affinity getAffinity() { - return Affinity.BAD; - } - - @Override - protected Box getSearchArea(Caster source) { - return searchArea.offset(source.getOriginVector()); - } - - @Override - protected boolean canTargetEntity(SpellcastEntity e) { - return e.hasSpell() && "light".equals(e.getSpell().getName()); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/FlameSpell.java b/src/main/java/com/minelittlepony/unicopia/magic/spell/FlameSpell.java deleted file mode 100644 index ec59ffda..00000000 --- a/src/main/java/com/minelittlepony/unicopia/magic/spell/FlameSpell.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.minelittlepony.unicopia.magic.spell; - -import com.minelittlepony.unicopia.equine.player.Pony; -import com.minelittlepony.unicopia.magic.Affinity; -import com.minelittlepony.unicopia.magic.Caster; -import com.minelittlepony.unicopia.magic.HeldSpell; - -import net.minecraft.entity.damage.DamageSource; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.sound.SoundEvents; - -public class FlameSpell extends AbstractSpell implements HeldSpell { - - @Override - public String getName() { - return "flame"; - } - - @Override - public Affinity getAffinity() { - return Affinity.NEUTRAL; - } - - @Override - public int getTint() { - return 0xFF5D00; - } - - @Override - public boolean update(Caster source) { - return false; - } - - @Override - public void render(Caster source) { - } - - @Override - public void updateInHand(Pony caster, Affinity affinity) { - PlayerEntity player = caster.getOwner(); - - if (player.age % 15 == 0) { - player.damage(DamageSource.ON_FIRE, 1); - player.playSound(SoundEvents.BLOCK_FIRE_AMBIENT, 0.5F, 1); - player.setOnFireFor(1); - } - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/GlowingSpell.java b/src/main/java/com/minelittlepony/unicopia/magic/spell/GlowingSpell.java deleted file mode 100644 index 3572e59f..00000000 --- a/src/main/java/com/minelittlepony/unicopia/magic/spell/GlowingSpell.java +++ /dev/null @@ -1,107 +0,0 @@ -package com.minelittlepony.unicopia.magic.spell; - -import com.minelittlepony.unicopia.equine.player.Pony; -import com.minelittlepony.unicopia.magic.Affinity; -import com.minelittlepony.unicopia.magic.Caster; -import com.minelittlepony.unicopia.magic.HeldSpell; - -import net.minecraft.nbt.CompoundTag; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.LightType; -import net.minecraft.world.World; -import net.minecraft.world.chunk.light.ChunkBlockLightProvider; -import net.minecraft.world.chunk.light.ChunkLightingView; - -public class GlowingSpell extends GenericSpell implements HeldSpell { - - private BlockPos lastPos; - private Caster source; - - public GlowingSpell() { - super("light", 0xF7FACB, Affinity.GOOD); - } - - @Override - public void onPlaced(Caster caster) { - this.source = caster; - } - - @Override - public void setDead() { - super.setDead(); - - if (lastPos != null) { - ChunkLightingView view = source.getWorld().getChunkManager().getLightingProvider().get(LightType.BLOCK); - - if (!(view instanceof ChunkBlockLightProvider)) { - return; - } - - ChunkBlockLightProvider provider = (ChunkBlockLightProvider)view; - - provider.checkBlock(lastPos); - } - } - - @Override - public void updateInHand(Pony caster, Affinity affinity) { - if (caster.getSpecies().canCast()) { - update(caster); - } - } - - @Override - public boolean update(Caster source) { - this.source = source; - - BlockPos pos = source.getOrigin().down(); - - World world = source.getWorld(); - - ChunkLightingView view = world.getChunkManager().getLightingProvider().get(LightType.BLOCK); - - if (!(view instanceof ChunkBlockLightProvider)) { - return true; - } - - - ChunkBlockLightProvider provider = (ChunkBlockLightProvider)view; - - if (lastPos != null && !lastPos.equals(pos)) { - provider.checkBlock(lastPos); - } - - lastPos = pos; - - int light = provider.getLightLevel(pos); - - if (light < 8) { - provider.addLightSource(pos, 8); - provider.checkBlock(pos); - } - - return true; - } - - @Override - public void toNBT(CompoundTag compound) { - super.toNBT(compound); - - if (compound.contains("lastX")) { - lastPos = new BlockPos(compound.getInt("lastX"), compound.getInt("lastY"), compound.getInt("lastZ")); - } else { - lastPos = null; - } - } - - @Override - public void fromNBT(CompoundTag compound) { - super.fromNBT(compound); - - if (lastPos != null) { - compound.putInt("lastX", lastPos.getX()); - compound.putInt("lastY", lastPos.getY()); - compound.putInt("lastZ", lastPos.getZ()); - } - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/PortalSpell.java b/src/main/java/com/minelittlepony/unicopia/magic/spell/PortalSpell.java deleted file mode 100644 index 3c3d67fe..00000000 --- a/src/main/java/com/minelittlepony/unicopia/magic/spell/PortalSpell.java +++ /dev/null @@ -1,338 +0,0 @@ -package com.minelittlepony.unicopia.magic.spell; - -import java.util.Locale; -import java.util.Optional; -import java.util.UUID; - -import javax.annotation.Nullable; - -import com.minelittlepony.unicopia.equine.player.Pony; -import com.minelittlepony.unicopia.magic.Affinity; -import com.minelittlepony.unicopia.magic.CastResult; -import com.minelittlepony.unicopia.magic.Caster; -import com.minelittlepony.unicopia.magic.Magical; -import com.minelittlepony.unicopia.magic.Spell; -import com.minelittlepony.unicopia.magic.Useable; -import com.minelittlepony.unicopia.particles.MagicParticleEffect; -import com.minelittlepony.unicopia.util.NbtSerialisable; -import com.minelittlepony.unicopia.util.shape.Shape; -import com.minelittlepony.unicopia.util.shape.Sphere; -import com.minelittlepony.unicopia.world.entity.SpellcastEntity; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.item.ItemUsageContext; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.sound.SoundCategory; -import net.minecraft.sound.SoundEvents; -import net.minecraft.util.math.Box; -import net.minecraft.util.math.Direction; -import net.minecraft.util.math.Vec3d; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -public class PortalSpell extends AbstractRangedAreaSpell implements Useable { - - private static final Shape portalZone_X = new Sphere(true, 1, 0, 2, 1); - private static final Shape portalZone_Y = new Sphere(true, 1, 2, 0, 2); - private static final Shape portalZone_Z = new Sphere(true, 1, 1, 2, 0); - - private static final Box TELEPORT_BOUNDS_VERT = new Box(-1, -0.5, -1, 1, 0.5, 1); - private static final Box TELEPORT_BOUNDS = new Box(-0.5, -0.5, -0.5, 0.5, 3, 0.5); - - @Nullable - private PortalSpell sibling = null; - - @Nullable - private BlockPos position = null; - - @Nullable - private BlockPos destinationPos = null; - - private Direction.Axis axis = Direction.Axis.Y; - - @Nullable - private UUID casterId; - - private World world; - - @Nullable - private UUID destinationId; - - @Override - public String getName() { - return "portal"; - } - - @Override - public int getTint() { - return 0x384CA8; - } - - @Override - public Affinity getAffinity() { - return Affinity.GOOD; - } - - @Override - public void setDead() { - super.setDead(); - - sibling = null; - destinationId = null; - destinationPos = null; - - getDestinationPortal().ifPresent(Spell::setDead); - } - - private PortalSpell bridge; - - @Override - public void onPlaced(Caster caster) { - world = caster.getWorld(); - casterId = caster.getUniqueId(); - position = caster.getOrigin(); - - if (sibling != null) { - sibling.destinationId = casterId; - sibling.destinationPos = position; - } - - if (bridge != null) { - bridge.onPlaced(caster); - } - } - - @Override - public CastResult onUse(ItemUsageContext context, Affinity affinity) { - position = context.getBlockPos().offset(context.getSide()); - axis = context.getPlayerFacing().getAxis(); - - Pony prop = Pony.of(context.getPlayer()); - - PortalSpell other = prop.getSpell(PortalSpell.class, true); - if (other != null) { - other.getActualInstance().setDestinationPortal(this); - - if (!context.getWorld().isClient) { - prop.setSpell(null); - } - } else { - if (!context.getWorld().isClient) { - bridge = (PortalSpell)copy(); - - prop.setSpell(bridge); - } - } - - return CastResult.PLACE; - } - - @Override - public CastResult onUse(ItemStack stack, Affinity affinity, PlayerEntity player, World world, @Nullable Entity hitEntity) { - return CastResult.NONE; - } - - public void setDestinationPortal(PortalSpell other) { - if (!getDestinationPortal().isPresent()) { - sibling = other; - other.sibling = this; - - destinationId = other.casterId; - other.destinationId = casterId; - - sibling.destinationPos = position; - destinationPos = sibling.position; - } - } - - @Override - public boolean update(Caster source) { - if (!source.getWorld().isClient) { - getDestinationPortal().ifPresent(dest -> - source.getWorld().getEntities(Entity.class, getTeleportBounds().offset(source.getOrigin()), null).stream() - .filter(this::canTeleport) - .forEach(i -> teleportEntity(source, dest, i))); - } - - return true; - } - - @Override - public void render(Caster source) { - source.spawnParticles(getPortalZone(), 10, pos -> { - source.addParticle(new MagicParticleEffect(getTint()), pos, Vec3d.ZERO); - }); - } - - public Shape getPortalZone() { - switch (axis) { - case X: return portalZone_X; - default: - case Y: return portalZone_Y; - case Z: return portalZone_Z; - } - } - - public Box getTeleportBounds() { - if (axis == Direction.Axis.Y) { - return TELEPORT_BOUNDS_VERT; - } - - return TELEPORT_BOUNDS; - } - - protected boolean canTeleport(Entity i) { - return !(i instanceof Magical) && i.netherPortalCooldown == 0; - } - - protected void teleportEntity(Caster source, PortalSpell dest, Entity i) { - Direction.Axis xi = i.getHorizontalFacing().getAxis(); - - if (axis != Direction.Axis.Y && xi != axis) { - return; - } - - Direction offset = i.getHorizontalFacing(); - - double destX = dest.position.getX() + (i.getX() - source.getOrigin().getX()); - double destY = dest.position.getY() + (i.getY() - source.getOrigin().getY()); - double destZ = dest.position.getZ() + (i.getZ() - source.getOrigin().getZ()); - - if (axis != Direction.Axis.Y) { - destX += offset.getOffsetX(); - destY++; - destZ += offset.getOffsetZ(); - } - - i.netherPortalCooldown = i.getDefaultNetherPortalCooldown(); - - i.getEntityWorld().playSound(null, i.getBlockPos(), SoundEvents.BLOCK_END_PORTAL_FRAME_FILL, SoundCategory.PLAYERS, 1, 1); - - if (dest.axis != axis) { - if (xi != dest.axis) { - i.updatePositionAndAngles(i.getX(), i.getY(), i.getZ(), i.yaw + 90, i.pitch); - } - } - - i.setPos(destX, destY, destZ); - i.getEntityWorld().playSound(null, i.getBlockPos(), SoundEvents.BLOCK_END_PORTAL_FRAME_FILL, SoundCategory.PLAYERS, 1, 1); - } - - /** - * Converts a possibly dead portal effect into a live one by forcing the owner entity to load. - */ - protected PortalSpell getActualInstance() { - if (world instanceof ServerWorld) { - Entity i = ((ServerWorld)world).getEntity(casterId); - - if (i == null) { - world.getChunk(position); - i = ((ServerWorld)world).getEntity(casterId); - } - - if (i instanceof SpellcastEntity) { - Spell effect = ((SpellcastEntity) i).getSpell(); - - if (effect instanceof PortalSpell) { - return (PortalSpell)effect; - } - } - } - - return this; - } - - /** - * Gets or loads the destination portal. - */ - public Optional getDestinationPortal() { - - if (isDead()) { - return Optional.empty(); - } - - Entity i = null; - - if (destinationId != null) { - i = ((ServerWorld)world).getEntity(destinationId); - - if (i == null && destinationPos != null) { - world.getChunk(destinationPos); - i = ((ServerWorld)world).getEntity(destinationId); - - if (i == null) { - setDead(); - - return Optional.empty(); - } - } - } - - if (i instanceof SpellcastEntity) { - Spell effect = ((SpellcastEntity) i).getSpell(); - - if (effect instanceof PortalSpell) { - sibling = (PortalSpell)effect; - } - } - - if (sibling != null && sibling.isDead()) { - setDead(); - } - - if (sibling != null && destinationPos == null) { - destinationPos = sibling.position; - } - - return Optional.ofNullable(sibling); - } - - @Override - public void toNBT(CompoundTag compound) { - super.toNBT(compound); - - if (destinationPos != null) { - compound.put("destination", NbtSerialisable.writeBlockPos(destinationPos)); - } - - if (casterId != null) { - compound.putUuid("casterId", casterId); - } - - if (destinationId != null) { - compound.putUuid("destinationId", destinationId); - } - - compound.putString("axis", axis.getName()); - } - - @Override - public void fromNBT(CompoundTag compound) { - super.fromNBT(compound); - - if (compound.contains("destination")) { - destinationPos = NbtSerialisable.readBlockPos(compound.getCompound("destination")); - } - - if (compound.contains("casterId")) { - casterId = compound.getUuid("casterId"); - } - - if (compound.contains("destinationId")) { - destinationId = compound.getUuid("destinationId"); - } - - if (compound.contains("axis")) { - axis = Direction.Axis.fromName(compound.getString("axis").toLowerCase(Locale.ROOT)); - - if (axis == null) { - axis = Direction.Axis.Y; - } - } else { - axis = Direction.Axis.Y; - } - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/magic/spell/package-info.java b/src/main/java/com/minelittlepony/unicopia/magic/spell/package-info.java deleted file mode 100644 index 22dd1a84..00000000 --- a/src/main/java/com/minelittlepony/unicopia/magic/spell/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package com.minelittlepony.unicopia.magic.spell; \ No newline at end of file diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/CriterionsRegistry.java b/src/main/java/com/minelittlepony/unicopia/mixin/CriterionsRegistry.java deleted file mode 100644 index 0fceea19..00000000 --- a/src/main/java/com/minelittlepony/unicopia/mixin/CriterionsRegistry.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.minelittlepony.unicopia.mixin; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Invoker; - -import net.minecraft.advancement.criterion.Criterion; -import net.minecraft.advancement.criterion.Criteria; - -@Mixin(Criteria.class) -public interface CriterionsRegistry { - @Invoker("register") - static > T register(T object) { - throw new NullPointerException("mixin y u fail"); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/MixinBlockItem.java b/src/main/java/com/minelittlepony/unicopia/mixin/MixinBlockItem.java index fff8692b..7a3eac5e 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/MixinBlockItem.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/MixinBlockItem.java @@ -8,8 +8,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import com.minelittlepony.unicopia.toxin.Toxic; -import com.minelittlepony.unicopia.toxin.ToxicHolder; + +import com.minelittlepony.unicopia.item.toxin.Toxic; +import com.minelittlepony.unicopia.item.toxin.ToxicHolder; import net.minecraft.client.item.TooltipContext; import net.minecraft.entity.LivingEntity; diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/MixinEntityContextImpl.java b/src/main/java/com/minelittlepony/unicopia/mixin/MixinEntityContextImpl.java deleted file mode 100644 index 6615847e..00000000 --- a/src/main/java/com/minelittlepony/unicopia/mixin/MixinEntityContextImpl.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.minelittlepony.unicopia.mixin; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import com.minelittlepony.unicopia.world.block.gas.CloudInteractionContext; - -import net.minecraft.block.EntityShapeContext; -import net.minecraft.entity.Entity; - -@Mixin(EntityShapeContext.class) -abstract class MixinEntityContextImpl implements CloudInteractionContext.Holder { - private CloudInteractionContext cloudContext; - - @Inject(method = "(Lnet/minecraft/entity/Entity;)V", at = @At("RETURN")) - private void onInit(Entity e, CallbackInfo into) { - cloudContext = CloudInteractionContext.of(e); - } - - @Override - public CloudInteractionContext getCloudInteractionContext() { - return cloudContext == null ? CloudInteractionContext.empty() : cloudContext; - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/MixinFallingBlock.java b/src/main/java/com/minelittlepony/unicopia/mixin/MixinFallingBlock.java deleted file mode 100644 index 90f400a3..00000000 --- a/src/main/java/com/minelittlepony/unicopia/mixin/MixinFallingBlock.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.minelittlepony.unicopia.mixin; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import com.minelittlepony.unicopia.world.block.gas.Gas; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.FallingBlock; - -@Mixin(FallingBlock.class) -abstract class MixinFallingBlock extends Block { - MixinFallingBlock() { super(null); } - @Inject(method = "canFallThrough(Lnet/minecraft/block/BlockState;)Z", - at = @At("HEAD"), - cancellable = true) - private static void onCanFallThrough(BlockState state, CallbackInfoReturnable info) { - if (state.getBlock() instanceof Gas) { - info.setReturnValue(!((Gas)state.getBlock()).isSupporting(state)); - } - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/MixinFarmlandBlock.java b/src/main/java/com/minelittlepony/unicopia/mixin/MixinFarmlandBlock.java deleted file mode 100644 index 889e64bf..00000000 --- a/src/main/java/com/minelittlepony/unicopia/mixin/MixinFarmlandBlock.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.minelittlepony.unicopia.mixin; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import com.minelittlepony.unicopia.ducks.Farmland; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.FarmlandBlock; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -@Mixin(FarmlandBlock.class) -abstract class MixinFarmlandBlock extends Block { - MixinFarmlandBlock() { super(null); } - @Inject( - method = "setToDirt(Lnet/minecraft/block/BlockState;Lnet/minecraft/world/World;Lnet/minecraft/util/math/BlockPos;)V", - at = @At("HEAD"), - cancellable = true) - private static void setToDirt(BlockState state, World world, BlockPos pos, CallbackInfo info) { - if (state.getBlock() instanceof Farmland) { - BlockState dirtState = ((Farmland)state.getBlock()).getDirtState(state, world, pos); - world.setBlockState(pos, pushEntitiesUpBeforeBlockChange(state, dirtState, world, pos)); - info.cancel(); - } - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/MixinHoeItem.java b/src/main/java/com/minelittlepony/unicopia/mixin/MixinHoeItem.java deleted file mode 100644 index 5f831760..00000000 --- a/src/main/java/com/minelittlepony/unicopia/mixin/MixinHoeItem.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.minelittlepony.unicopia.mixin; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import com.minelittlepony.unicopia.util.HoeUtil; - -import net.minecraft.block.BlockState; -import net.minecraft.item.HoeItem; -import net.minecraft.item.ItemUsageContext; -import net.minecraft.item.ToolItem; -import net.minecraft.util.ActionResult; - -@Mixin(HoeItem.class) -abstract class MixinHoeItem extends ToolItem { - MixinHoeItem() {super(null, null);} - @Inject(method = "useOnBlock(Lnet/minecraft/item/ItemUsageContext;)Lnet/minecraft/util/ActionResult;", - at = @At("HEAD"), - cancellable = true) - private void onUseOnBlock(ItemUsageContext context, CallbackInfoReturnable info) { - BlockState state = context.getWorld().getBlockState(context.getBlockPos()); - if (state.getBlock() instanceof HoeUtil.Tillable) { - if (!((HoeUtil.Tillable)state.getBlock()).canTill(context)) { - info.setReturnValue(ActionResult.PASS); - } - } - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/MixinItem.java b/src/main/java/com/minelittlepony/unicopia/mixin/MixinItem.java index b90a2af5..13cfe9b9 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/MixinItem.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/MixinItem.java @@ -3,7 +3,7 @@ package com.minelittlepony.unicopia.mixin; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; -import com.minelittlepony.unicopia.toxin.ToxicHolder; +import com.minelittlepony.unicopia.item.toxin.ToxicHolder; import net.minecraft.item.FoodComponent; import net.minecraft.item.Item; diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/MixinItemEntity.java b/src/main/java/com/minelittlepony/unicopia/mixin/MixinItemEntity.java index cd44896e..c8ee373f 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/MixinItemEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/MixinItemEntity.java @@ -6,8 +6,8 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import com.minelittlepony.unicopia.ducks.IItemEntity; -import com.minelittlepony.unicopia.equine.ItemImpl; +import com.minelittlepony.unicopia.entity.IItemEntity; +import com.minelittlepony.unicopia.entity.ItemImpl; import net.minecraft.entity.Entity; import net.minecraft.entity.ItemEntity; diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/MixinItems.java b/src/main/java/com/minelittlepony/unicopia/mixin/MixinItems.java index d4b28f95..938c9b0c 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/MixinItems.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/MixinItems.java @@ -4,7 +4,7 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.ModifyVariable; -import com.minelittlepony.unicopia.world.item.VanillaOverrides; +import com.minelittlepony.unicopia.item.VanillaOverrides; import net.minecraft.item.Item; import net.minecraft.item.Items; diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/MixinLivingEntity.java b/src/main/java/com/minelittlepony/unicopia/mixin/MixinLivingEntity.java index 5d20d6db..e5ff403e 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/MixinLivingEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/MixinLivingEntity.java @@ -8,9 +8,9 @@ import org.spongepowered.asm.mixin.injection.ModifyConstant; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import com.minelittlepony.unicopia.ducks.PonyContainer; -import com.minelittlepony.unicopia.equine.Creature; -import com.minelittlepony.unicopia.equine.Ponylike; +import com.minelittlepony.unicopia.entity.Creature; +import com.minelittlepony.unicopia.entity.PonyContainer; +import com.minelittlepony.unicopia.entity.Equine; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; @@ -18,19 +18,19 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.util.math.BlockPos; @Mixin(LivingEntity.class) -abstract class MixinLivingEntity extends Entity implements PonyContainer> { +abstract class MixinLivingEntity extends Entity implements PonyContainer> { - private Ponylike caster; + private Equine caster; private MixinLivingEntity() { super(null, null); } @Override - public Ponylike create() { + public Equine create() { return new Creature((LivingEntity)(Object)this); } @Override - public Ponylike get() { + public Equine get() { if (caster == null) { caster = create(); } diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/MixinPlayerEntity.java b/src/main/java/com/minelittlepony/unicopia/mixin/MixinPlayerEntity.java index 59e36ec2..f90aa406 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/MixinPlayerEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/MixinPlayerEntity.java @@ -7,9 +7,9 @@ import org.spongepowered.asm.mixin.injection.ModifyVariable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import com.minelittlepony.unicopia.ducks.PonyContainer; -import com.minelittlepony.unicopia.equine.Ponylike; -import com.minelittlepony.unicopia.equine.player.Pony; +import com.minelittlepony.unicopia.entity.PonyContainer; +import com.minelittlepony.unicopia.entity.Equine; +import com.minelittlepony.unicopia.entity.player.Pony; import com.mojang.datafixers.util.Either; import net.minecraft.entity.EntityDimensions; @@ -29,7 +29,7 @@ abstract class MixinPlayerEntity extends LivingEntity implements PonyContainer

create() { + public Equine create() { return new Pony((PlayerEntity)(Object)this); } diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/MixinProjectileEntity.java b/src/main/java/com/minelittlepony/unicopia/mixin/MixinProjectileEntity.java index c72f8093..a5241355 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/MixinProjectileEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/MixinProjectileEntity.java @@ -5,7 +5,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import com.minelittlepony.unicopia.ducks.PonyContainer; +import com.minelittlepony.unicopia.entity.PonyContainer; import net.minecraft.entity.Entity; import net.minecraft.entity.projectile.ProjectileEntity; diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/MixinServerPlayerEntity.java b/src/main/java/com/minelittlepony/unicopia/mixin/MixinServerPlayerEntity.java index 527eab1d..cd2f7091 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/MixinServerPlayerEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/MixinServerPlayerEntity.java @@ -5,8 +5,8 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import com.minelittlepony.unicopia.ducks.PonyContainer; -import com.minelittlepony.unicopia.equine.player.Pony; +import com.minelittlepony.unicopia.entity.PonyContainer; +import com.minelittlepony.unicopia.entity.player.Pony; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.screen.ScreenHandlerListener; @@ -14,7 +14,7 @@ import net.minecraft.server.network.ServerPlayerEntity; @Mixin(ServerPlayerEntity.class) abstract class MixinServerPlayerEntity extends PlayerEntity implements ScreenHandlerListener, PonyContainer { - MixinServerPlayerEntity() {super(null, null, null);} + MixinServerPlayerEntity() {super(null, null, 0, null);} @SuppressWarnings("unchecked") @Inject(method = "copyFrom(Lnet/minecraft/server/network/ServerPlayerEntity;Z)V", at = @At("HEAD")) diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/MixinStructureFeature.java b/src/main/java/com/minelittlepony/unicopia/mixin/MixinStructureFeature.java deleted file mode 100644 index ccc94d9d..00000000 --- a/src/main/java/com/minelittlepony/unicopia/mixin/MixinStructureFeature.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.minelittlepony.unicopia.mixin; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Invoker; -import net.minecraft.world.gen.GenerationStep; -import net.minecraft.world.gen.feature.StructureFeature; - -@Mixin(StructureFeature.class) -public interface MixinStructureFeature { - @Invoker("register") - static > F register(String name, F structureFeature, GenerationStep.Feature step) { - throw new NullPointerException("mixin y u fail"); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/MixinStructuresConfig.java b/src/main/java/com/minelittlepony/unicopia/mixin/MixinStructuresConfig.java deleted file mode 100644 index 5632acd6..00000000 --- a/src/main/java/com/minelittlepony/unicopia/mixin/MixinStructuresConfig.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.minelittlepony.unicopia.mixin; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; -import com.google.common.collect.ImmutableMap; -import net.minecraft.world.gen.chunk.StructureConfig; -import net.minecraft.world.gen.chunk.StructuresConfig; -import net.minecraft.world.gen.feature.StructureFeature; - -@Mixin(StructuresConfig.class) -public interface MixinStructuresConfig { - @Accessor("DEFAULT_STRUCTURES") - static void setDefaultConfigs(ImmutableMap, StructureConfig> map) { - - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/Walker.java b/src/main/java/com/minelittlepony/unicopia/mixin/Walker.java deleted file mode 100644 index f5f72a20..00000000 --- a/src/main/java/com/minelittlepony/unicopia/mixin/Walker.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.minelittlepony.unicopia.mixin; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -import net.minecraft.entity.player.PlayerAbilities; - -@Mixin(PlayerAbilities.class) -public interface Walker { - @Accessor("walkSpeed") - void setWalkSpeed(float speed); -} diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/client/DefaultTexturesRegistry.java b/src/main/java/com/minelittlepony/unicopia/mixin/client/DefaultTexturesRegistry.java deleted file mode 100644 index 44bac031..00000000 --- a/src/main/java/com/minelittlepony/unicopia/mixin/client/DefaultTexturesRegistry.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.minelittlepony.unicopia.mixin.client; - -import java.util.Set; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -import net.minecraft.client.render.model.ModelLoader; -import net.minecraft.client.util.SpriteIdentifier; - -@Mixin(ModelLoader.class) -public interface DefaultTexturesRegistry { - @Accessor("DEFAULT_TEXTURES") - static Set getDefaultTextures() { - return null; - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinCamera.java b/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinCamera.java index 720b0461..f3192d5b 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinCamera.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinCamera.java @@ -4,7 +4,7 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.ModifyVariable; -import com.minelittlepony.unicopia.equine.player.Pony; +import com.minelittlepony.unicopia.entity.player.Pony; import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.Camera; diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinEntityRenderDispatcher.java b/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinEntityRenderDispatcher.java index b9ca75ef..26ae9404 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinEntityRenderDispatcher.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinEntityRenderDispatcher.java @@ -5,9 +5,9 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import com.minelittlepony.unicopia.equine.player.Pony; -import com.minelittlepony.unicopia.magic.spell.DisguiseSpell; -import com.minelittlepony.unicopia.world.client.render.WorldRenderDelegate; +import com.minelittlepony.unicopia.ability.magic.spell.DisguiseSpell; +import com.minelittlepony.unicopia.client.render.WorldRenderDelegate; +import com.minelittlepony.unicopia.entity.player.Pony; import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.VertexConsumerProvider; diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinGameRenderer.java b/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinGameRenderer.java index 8589cc88..17ebc49b 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinGameRenderer.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinGameRenderer.java @@ -6,8 +6,8 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import com.minelittlepony.unicopia.equine.player.Pony; -import com.minelittlepony.unicopia.world.client.render.WorldRenderDelegate; +import com.minelittlepony.unicopia.client.render.WorldRenderDelegate; +import com.minelittlepony.unicopia.entity.player.Pony; import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.Camera; diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinInGameHud.java b/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinInGameHud.java index 1dab3cb8..ace01587 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinInGameHud.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinInGameHud.java @@ -5,14 +5,15 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import com.minelittlepony.unicopia.world.client.gui.UHud; +import com.minelittlepony.unicopia.client.gui.UHud; import net.minecraft.client.gui.hud.InGameHud; +import net.minecraft.client.util.math.MatrixStack; @Mixin(InGameHud.class) public class MixinInGameHud { - @Inject(method = "render(F)V", at = @At("HEAD")) - private void onRender(float tickDelta, CallbackInfo info) { - UHud.instance.render((InGameHud)(Object)this, tickDelta); + @Inject(method = "render(Lnet/minecraft/client/util/math/MatrixStack;F)V", at = @At("HEAD")) + private void onRender(MatrixStack stack, float tickDelta, CallbackInfo info) { + UHud.instance.render((InGameHud)(Object)this, stack, tickDelta); } } diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinItemModels.java b/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinItemModels.java index 0c62010e..f809099f 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinItemModels.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinItemModels.java @@ -4,7 +4,7 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.ModifyVariable; -import com.minelittlepony.unicopia.world.item.ZapAppleItem; +import com.minelittlepony.unicopia.item.ZapAppleItem; import net.minecraft.client.render.item.ItemModels; import net.minecraft.item.ItemStack; diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinKeyboardInput.java b/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinKeyboardInput.java index 8c53d82f..1d35bc4a 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinKeyboardInput.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinKeyboardInput.java @@ -5,7 +5,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import com.minelittlepony.unicopia.equine.player.Pony; +import com.minelittlepony.unicopia.entity.player.Pony; import net.minecraft.client.MinecraftClient; import net.minecraft.client.input.Input; diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinMinecraftClient.java b/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinMinecraftClient.java deleted file mode 100644 index e742ea2b..00000000 --- a/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinMinecraftClient.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.minelittlepony.unicopia.mixin.client; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -import com.minelittlepony.unicopia.ducks.PickedItemSupplier; - -import net.minecraft.client.MinecraftClient; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.item.SpawnEggItem; -import net.minecraft.util.Hand; -import net.minecraft.util.hit.EntityHitResult; - -@Mixin(MinecraftClient.class) -abstract class MixinMinecraftClient { - @Redirect(method = "doItemPick()V", - at = @At(value = "INVOKE", - target = "Lnet/minecraft/item/SpawnEggItem;forEntity(Lnet/minecraft/entity/EntityType;)Lnet/minecraft/item/SpawnEggItem;") - ) - private SpawnEggItem redirectSpawnEggForEntity(EntityType type) { - - MinecraftClient self = MinecraftClient.getInstance(); - - Entity entity = ((EntityHitResult)self.crosshairTarget).getEntity(); - - if (!(entity instanceof PickedItemSupplier)) { - return SpawnEggItem.forEntity(type); - } - - ItemStack pickedStack = ((PickedItemSupplier) entity).getPickedStack(); - - PlayerInventory inventory = self.player.inventory; - - int i = inventory.getSlotWithStack(pickedStack); - - if (self.player.abilities.creativeMode) { - inventory.addPickBlock(pickedStack); - self.interactionManager.clickCreativeStack(self.player.getStackInHand(Hand.MAIN_HAND), 36 + inventory.selectedSlot); - } else if (i != -1) { - if (PlayerInventory.isValidHotbarIndex(i)) { - inventory.selectedSlot = i; - } else { - self.interactionManager.pickFromInventory(i); - } - } - - return null; - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinMouse.java b/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinMouse.java index b8434e25..6bcdf6ec 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinMouse.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinMouse.java @@ -6,7 +6,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import com.minelittlepony.unicopia.equine.player.Pony; +import com.minelittlepony.unicopia.entity.player.Pony; import net.minecraft.client.MinecraftClient; import net.minecraft.client.Mouse; diff --git a/src/main/java/com/minelittlepony/unicopia/network/Channel.java b/src/main/java/com/minelittlepony/unicopia/network/Channel.java index 8824047f..2f5682a6 100644 --- a/src/main/java/com/minelittlepony/unicopia/network/Channel.java +++ b/src/main/java/com/minelittlepony/unicopia/network/Channel.java @@ -19,7 +19,6 @@ public interface Channel { SPacketType BROADCAST_CAPABILITIES = broadcast(PLAYER_CAPABILITIES, MsgPlayerCapabilities::new); - CPacketType SPAWN_RAINBOW = serverToClient(new Identifier("unicopia", "rainbow_entity"), MsgSpawnRainbow::new); CPacketType SPAWN_PROJECTILE = serverToClient(new Identifier("unicopia", "projectile_entity"), MsgSpawnProjectile::new); static void bootstrap() { } diff --git a/src/main/java/com/minelittlepony/unicopia/network/EffectSync.java b/src/main/java/com/minelittlepony/unicopia/network/EffectSync.java index 668d9a94..44ed76de 100644 --- a/src/main/java/com/minelittlepony/unicopia/network/EffectSync.java +++ b/src/main/java/com/minelittlepony/unicopia/network/EffectSync.java @@ -2,9 +2,9 @@ package com.minelittlepony.unicopia.network; import javax.annotation.Nullable; -import com.minelittlepony.unicopia.magic.Caster; -import com.minelittlepony.unicopia.magic.Spell; -import com.minelittlepony.unicopia.magic.spell.SpellRegistry; +import com.minelittlepony.unicopia.ability.magic.Caster; +import com.minelittlepony.unicopia.ability.magic.Spell; +import com.minelittlepony.unicopia.ability.magic.spell.SpellRegistry; import net.minecraft.entity.data.TrackedData; import net.minecraft.nbt.CompoundTag; diff --git a/src/main/java/com/minelittlepony/unicopia/network/MsgPlayerAbility.java b/src/main/java/com/minelittlepony/unicopia/network/MsgPlayerAbility.java index 34770952..59d80b6f 100644 --- a/src/main/java/com/minelittlepony/unicopia/network/MsgPlayerAbility.java +++ b/src/main/java/com/minelittlepony/unicopia/network/MsgPlayerAbility.java @@ -2,7 +2,7 @@ package com.minelittlepony.unicopia.network; import com.minelittlepony.unicopia.ability.Ability; import com.minelittlepony.unicopia.ability.data.Hit; -import com.minelittlepony.unicopia.equine.player.Pony; +import com.minelittlepony.unicopia.entity.player.Pony; import com.minelittlepony.unicopia.ability.Abilities; import net.fabricmc.fabric.api.network.PacketContext; diff --git a/src/main/java/com/minelittlepony/unicopia/network/MsgPlayerCapabilities.java b/src/main/java/com/minelittlepony/unicopia/network/MsgPlayerCapabilities.java index b5c1fd24..60806593 100644 --- a/src/main/java/com/minelittlepony/unicopia/network/MsgPlayerCapabilities.java +++ b/src/main/java/com/minelittlepony/unicopia/network/MsgPlayerCapabilities.java @@ -4,7 +4,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import com.minelittlepony.unicopia.Race; -import com.minelittlepony.unicopia.equine.player.Pony; +import com.minelittlepony.unicopia.entity.player.Pony; import io.netty.buffer.ByteBufInputStream; import io.netty.buffer.ByteBufOutputStream; diff --git a/src/main/java/com/minelittlepony/unicopia/network/MsgRequestCapabilities.java b/src/main/java/com/minelittlepony/unicopia/network/MsgRequestCapabilities.java index 07d88040..736c3580 100644 --- a/src/main/java/com/minelittlepony/unicopia/network/MsgRequestCapabilities.java +++ b/src/main/java/com/minelittlepony/unicopia/network/MsgRequestCapabilities.java @@ -1,7 +1,7 @@ package com.minelittlepony.unicopia.network; import com.minelittlepony.unicopia.Race; -import com.minelittlepony.unicopia.equine.player.Pony; +import com.minelittlepony.unicopia.entity.player.Pony; import net.fabricmc.fabric.api.network.PacketContext; import net.minecraft.network.PacketByteBuf; diff --git a/src/main/java/com/minelittlepony/unicopia/network/MsgSpawnRainbow.java b/src/main/java/com/minelittlepony/unicopia/network/MsgSpawnRainbow.java deleted file mode 100644 index 70c580e7..00000000 --- a/src/main/java/com/minelittlepony/unicopia/network/MsgSpawnRainbow.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.minelittlepony.unicopia.network; - -import com.minelittlepony.unicopia.world.entity.RainbowEntity; -import com.minelittlepony.unicopia.world.entity.UEntities; - -import net.fabricmc.fabric.api.network.PacketContext; -import net.minecraft.client.MinecraftClient; -import net.minecraft.entity.Entity; -import net.minecraft.network.PacketByteBuf; - -public class MsgSpawnRainbow implements Channel.Packet { - - private final int id; - - private final double x; - private final double y; - private final double z; - - public MsgSpawnRainbow(Entity entity) { - id = entity.getEntityId(); - x = entity.getX(); - y = entity.getY(); - z = entity.getZ(); - } - - MsgSpawnRainbow(PacketByteBuf buffer) { - id = buffer.readVarInt(); - x = buffer.readDouble(); - y = buffer.readDouble(); - z = buffer.readDouble(); - } - - @Override - public void toBuffer(PacketByteBuf buffer) { - buffer.writeVarInt(id); - buffer.writeDouble(x); - buffer.writeDouble(y); - buffer.writeDouble(z); - } - - @Override - public void handle(PacketContext context) { - MinecraftClient client = MinecraftClient.getInstance(); - - RainbowEntity entity = UEntities.RAINBOW.create(client.world); - entity.setPos(x, y, z); - entity.updateTrackedPosition(x, y, z); - entity.yaw = 0; - entity.pitch = 0; - entity.setEntityId(id); - client.world.addEntity(id, entity); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/particles/DiskParticleEffect.java b/src/main/java/com/minelittlepony/unicopia/particle/DiskParticleEffect.java similarity index 97% rename from src/main/java/com/minelittlepony/unicopia/particles/DiskParticleEffect.java rename to src/main/java/com/minelittlepony/unicopia/particle/DiskParticleEffect.java index 28b32742..da15239e 100644 --- a/src/main/java/com/minelittlepony/unicopia/particles/DiskParticleEffect.java +++ b/src/main/java/com/minelittlepony/unicopia/particle/DiskParticleEffect.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.particles; +package com.minelittlepony.unicopia.particle; import com.mojang.brigadier.StringReader; import com.mojang.brigadier.exceptions.CommandSyntaxException; diff --git a/src/main/java/com/minelittlepony/unicopia/particles/MagicParticleEffect.java b/src/main/java/com/minelittlepony/unicopia/particle/MagicParticleEffect.java similarity index 98% rename from src/main/java/com/minelittlepony/unicopia/particles/MagicParticleEffect.java rename to src/main/java/com/minelittlepony/unicopia/particle/MagicParticleEffect.java index d661d4d3..d55ac944 100644 --- a/src/main/java/com/minelittlepony/unicopia/particles/MagicParticleEffect.java +++ b/src/main/java/com/minelittlepony/unicopia/particle/MagicParticleEffect.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.particles; +package com.minelittlepony.unicopia.particle; import java.util.Locale; diff --git a/src/main/java/com/minelittlepony/unicopia/particles/ParticleEmitter.java b/src/main/java/com/minelittlepony/unicopia/particle/ParticleEmitter.java similarity index 98% rename from src/main/java/com/minelittlepony/unicopia/particles/ParticleEmitter.java rename to src/main/java/com/minelittlepony/unicopia/particle/ParticleEmitter.java index c3e08ab5..b5d30edd 100644 --- a/src/main/java/com/minelittlepony/unicopia/particles/ParticleEmitter.java +++ b/src/main/java/com/minelittlepony/unicopia/particle/ParticleEmitter.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.particles; +package com.minelittlepony.unicopia.particle; import java.util.EnumSet; import java.util.Random; diff --git a/src/main/java/com/minelittlepony/unicopia/particles/ParticleHandle.java b/src/main/java/com/minelittlepony/unicopia/particle/ParticleHandle.java similarity index 95% rename from src/main/java/com/minelittlepony/unicopia/particles/ParticleHandle.java rename to src/main/java/com/minelittlepony/unicopia/particle/ParticleHandle.java index 314e9e8f..14d1c97c 100644 --- a/src/main/java/com/minelittlepony/unicopia/particles/ParticleHandle.java +++ b/src/main/java/com/minelittlepony/unicopia/particle/ParticleHandle.java @@ -1,9 +1,10 @@ -package com.minelittlepony.unicopia.particles; +package com.minelittlepony.unicopia.particle; import java.util.Optional; import java.util.function.Consumer; -import com.minelittlepony.unicopia.magic.Caster; +import com.minelittlepony.unicopia.ability.magic.Caster; + import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.MinecraftClient; diff --git a/src/main/java/com/minelittlepony/unicopia/particles/ParticleSource.java b/src/main/java/com/minelittlepony/unicopia/particle/ParticleSource.java similarity index 96% rename from src/main/java/com/minelittlepony/unicopia/particles/ParticleSource.java rename to src/main/java/com/minelittlepony/unicopia/particle/ParticleSource.java index 365eee6b..a027529b 100644 --- a/src/main/java/com/minelittlepony/unicopia/particles/ParticleSource.java +++ b/src/main/java/com/minelittlepony/unicopia/particle/ParticleSource.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.particles; +package com.minelittlepony.unicopia.particle; import java.util.function.Consumer; diff --git a/src/main/java/com/minelittlepony/unicopia/particles/ParticleSpawner.java b/src/main/java/com/minelittlepony/unicopia/particle/ParticleSpawner.java similarity index 80% rename from src/main/java/com/minelittlepony/unicopia/particles/ParticleSpawner.java rename to src/main/java/com/minelittlepony/unicopia/particle/ParticleSpawner.java index a6e1c6ea..e19436e2 100644 --- a/src/main/java/com/minelittlepony/unicopia/particles/ParticleSpawner.java +++ b/src/main/java/com/minelittlepony/unicopia/particle/ParticleSpawner.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.particles; +package com.minelittlepony.unicopia.particle; import net.minecraft.particle.ParticleEffect; import net.minecraft.util.math.Vec3d; diff --git a/src/main/java/com/minelittlepony/unicopia/particles/ParticleUtils.java b/src/main/java/com/minelittlepony/unicopia/particle/ParticleUtils.java similarity index 95% rename from src/main/java/com/minelittlepony/unicopia/particles/ParticleUtils.java rename to src/main/java/com/minelittlepony/unicopia/particle/ParticleUtils.java index 05e621aa..16cfcfc5 100644 --- a/src/main/java/com/minelittlepony/unicopia/particles/ParticleUtils.java +++ b/src/main/java/com/minelittlepony/unicopia/particle/ParticleUtils.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.particles; +package com.minelittlepony.unicopia.particle; import com.minelittlepony.unicopia.util.shape.Shape; import com.minelittlepony.unicopia.util.shape.Sphere; diff --git a/src/main/java/com/minelittlepony/unicopia/particles/SphereParticleEffect.java b/src/main/java/com/minelittlepony/unicopia/particle/SphereParticleEffect.java similarity index 98% rename from src/main/java/com/minelittlepony/unicopia/particles/SphereParticleEffect.java rename to src/main/java/com/minelittlepony/unicopia/particle/SphereParticleEffect.java index 25f680d5..7faf8f43 100644 --- a/src/main/java/com/minelittlepony/unicopia/particles/SphereParticleEffect.java +++ b/src/main/java/com/minelittlepony/unicopia/particle/SphereParticleEffect.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.particles; +package com.minelittlepony.unicopia.particle; import java.util.Locale; diff --git a/src/main/java/com/minelittlepony/unicopia/particles/UParticles.java b/src/main/java/com/minelittlepony/unicopia/particle/UParticles.java similarity index 95% rename from src/main/java/com/minelittlepony/unicopia/particles/UParticles.java rename to src/main/java/com/minelittlepony/unicopia/particle/UParticles.java index 3aefbaec..62411bd4 100644 --- a/src/main/java/com/minelittlepony/unicopia/particles/UParticles.java +++ b/src/main/java/com/minelittlepony/unicopia/particle/UParticles.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.particles; +package com.minelittlepony.unicopia.particle; import net.fabricmc.fabric.api.particle.v1.FabricParticleTypes; import net.minecraft.particle.DefaultParticleType; diff --git a/src/main/java/com/minelittlepony/unicopia/world/entity/MagicProjectileEntity.java b/src/main/java/com/minelittlepony/unicopia/projectile/MagicProjectileEntity.java similarity index 87% rename from src/main/java/com/minelittlepony/unicopia/world/entity/MagicProjectileEntity.java rename to src/main/java/com/minelittlepony/unicopia/projectile/MagicProjectileEntity.java index eda8bcc0..f757cc96 100644 --- a/src/main/java/com/minelittlepony/unicopia/world/entity/MagicProjectileEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/projectile/MagicProjectileEntity.java @@ -1,20 +1,16 @@ -package com.minelittlepony.unicopia.world.entity; +package com.minelittlepony.unicopia.projectile; import java.util.UUID; -import com.minelittlepony.unicopia.magic.Affinity; -import com.minelittlepony.unicopia.magic.Caster; -import com.minelittlepony.unicopia.magic.EtherialListener; -import com.minelittlepony.unicopia.magic.Magical; -import com.minelittlepony.unicopia.magic.Spell; -import com.minelittlepony.unicopia.magic.ThrowableSpell; -import com.minelittlepony.unicopia.magic.spell.SpellRegistry; +import com.minelittlepony.unicopia.ability.magic.Affinity; +import com.minelittlepony.unicopia.ability.magic.Caster; +import com.minelittlepony.unicopia.ability.magic.Magical; +import com.minelittlepony.unicopia.ability.magic.Spell; +import com.minelittlepony.unicopia.ability.magic.ThrowableSpell; +import com.minelittlepony.unicopia.ability.magic.spell.SpellRegistry; import com.minelittlepony.unicopia.network.Channel; import com.minelittlepony.unicopia.network.EffectSync; import com.minelittlepony.unicopia.network.MsgSpawnProjectile; -import com.minelittlepony.unicopia.util.projectile.Projectile; -import com.minelittlepony.unicopia.util.projectile.Tossable; -import com.minelittlepony.unicopia.world.TossableItem; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; @@ -179,9 +175,7 @@ public class MagicProjectileEntity extends ThrownItemEntity implements Magical, if (hasSpell()) { if (lastBlockPos == null || !lastBlockPos.equals(getBlockPos())) { - notifyNearbySpells(getSpell(), lastBlockPos, 6, EtherialListener.REMOVED); lastBlockPos = getBlockPos(); - notifyNearbySpells(getSpell(), 6, EtherialListener.ADDED); } if (getSpell().isDead()) { @@ -271,17 +265,11 @@ public class MagicProjectileEntity extends ThrownItemEntity implements Magical, } protected void onHitBlock(BlockHitResult hit) { - Item item = getItem().getItem(); - - if (item instanceof TossableItem) { - ((TossableItem)item).onImpact(this, hit.getBlockPos(), world.getBlockState(hit.getBlockPos())); - } - if (hasSpell()) { Spell effect = getSpell(); - if (effect instanceof Tossable) { - ((Tossable)effect).onImpact(this, hit.getBlockPos(), world.getBlockState(hit.getBlockPos())); + if (effect instanceof ThrowableSpell) { + ((ThrowableSpell)effect).onImpact(this, hit.getBlockPos(), world.getBlockState(hit.getBlockPos())); } } } diff --git a/src/main/java/com/minelittlepony/unicopia/util/projectile/Projectile.java b/src/main/java/com/minelittlepony/unicopia/projectile/Projectile.java similarity index 88% rename from src/main/java/com/minelittlepony/unicopia/util/projectile/Projectile.java rename to src/main/java/com/minelittlepony/unicopia/projectile/Projectile.java index 2b9cc8df..ccf09c04 100644 --- a/src/main/java/com/minelittlepony/unicopia/util/projectile/Projectile.java +++ b/src/main/java/com/minelittlepony/unicopia/projectile/Projectile.java @@ -1,6 +1,6 @@ -package com.minelittlepony.unicopia.util.projectile; +package com.minelittlepony.unicopia.projectile; -import com.minelittlepony.unicopia.magic.ThrowableSpell; +import com.minelittlepony.unicopia.ability.magic.ThrowableSpell; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; diff --git a/src/main/java/com/minelittlepony/unicopia/util/projectile/ProjectileUtil.java b/src/main/java/com/minelittlepony/unicopia/projectile/ProjectileUtil.java similarity index 96% rename from src/main/java/com/minelittlepony/unicopia/util/projectile/ProjectileUtil.java rename to src/main/java/com/minelittlepony/unicopia/projectile/ProjectileUtil.java index 736cace8..68b32cc8 100644 --- a/src/main/java/com/minelittlepony/unicopia/util/projectile/ProjectileUtil.java +++ b/src/main/java/com/minelittlepony/unicopia/projectile/ProjectileUtil.java @@ -1,4 +1,4 @@ -package com.minelittlepony.unicopia.util.projectile; +package com.minelittlepony.unicopia.projectile; import javax.annotation.Nullable; diff --git a/src/main/java/com/minelittlepony/unicopia/util/HoeUtil.java b/src/main/java/com/minelittlepony/unicopia/util/HoeUtil.java deleted file mode 100644 index 0926c3b0..00000000 --- a/src/main/java/com/minelittlepony/unicopia/util/HoeUtil.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.minelittlepony.unicopia.util; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.item.HoeItem; -import net.minecraft.item.ItemUsageContext; - -public final class HoeUtil extends HoeItem { - private HoeUtil() { - super(null, 0, 0, null); - } - - public static void registerTillingAction(Block block, BlockState tilledState) { - TILLED_BLOCKS.put(block, tilledState); - } - - @FunctionalInterface - public interface Tillable { - boolean canTill(ItemUsageContext context); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/util/MagicalDamageSource.java b/src/main/java/com/minelittlepony/unicopia/util/MagicalDamageSource.java index 462dfa75..77c78ba7 100644 --- a/src/main/java/com/minelittlepony/unicopia/util/MagicalDamageSource.java +++ b/src/main/java/com/minelittlepony/unicopia/util/MagicalDamageSource.java @@ -9,9 +9,6 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.damage.EntityDamageSource; -import net.minecraft.entity.damage.ProjectileDamageSource; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.entity.projectile.ArrowEntity; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; import net.minecraft.text.TranslatableText; @@ -19,9 +16,6 @@ import net.minecraft.text.TranslatableText; public class MagicalDamageSource extends EntityDamageSource { public static final DamageSource FOOD_POISONING = mundane("food_poisoning"); - public static final DamageSource ACID = mundane("acid"); - public static final DamageSource ALICORN_AMULET = new MagicalDamageSource("alicorn_amulet", true, true); - public static final DamageSource DARKNESS = create("darkness"); public static final DamageSource ZAP_APPLE = create("zap"); public static DamageSource mundane(String type) { @@ -32,18 +26,10 @@ public class MagicalDamageSource extends EntityDamageSource { return new MagicalDamageSource(type, false, false); } - public static DamageSource causePlayerDamage(String type, PlayerEntity player) { - return causeMobDamage(type, player); - } - - public static DamageSource causeMobDamage(String type, LivingEntity source) { + public static DamageSource create(String type, LivingEntity source) { return new MagicalDamageSource(type, source, false, false); } - public static DamageSource causeIndirect(String type, ArrowEntity source, @Nullable Entity instigator) { - return new ProjectileDamageSource(type, source, instigator).setProjectile(); - } - protected MagicalDamageSource(String type, boolean direct, boolean unblockable) { this(type, null, direct, unblockable); } diff --git a/src/main/java/com/minelittlepony/unicopia/util/OreReplacer.java b/src/main/java/com/minelittlepony/unicopia/util/OreReplacer.java deleted file mode 100644 index 693a0d14..00000000 --- a/src/main/java/com/minelittlepony/unicopia/util/OreReplacer.java +++ /dev/null @@ -1,140 +0,0 @@ -package com.minelittlepony.unicopia.util; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -import com.google.common.collect.Lists; -import net.minecraft.item.ItemGroup; -import net.minecraft.item.ItemStack; -import net.minecraft.recipe.Ingredient; -import net.minecraft.recipe.Recipe; -import net.minecraft.recipe.RecipeType; -import net.minecraft.util.collection.DefaultedList; - -/** - * An Ore Replacer. - * Similar to what the OreDictionary does - * except this is configurable and works for vanilla and modded recipes. - */ -@Deprecated -public class OreReplacer { - - /** - * The vanilla remapper. Supports shaped recipes and shapeless recipes, and that's about it. - */ - public static final IIngredientRemapper VANILLA = new IIngredientRemapper() { - - @Override - public boolean canRemap(Recipe recipe) { - return recipe.getType() == RecipeType.CRAFTING; - } - - @Override - public int replaceIngredients(OreReplacer sender, Recipe recipe) { - DefaultedList ingredients = recipe.getPreviewInputs(); - - int replacements = 0; - - for (int i = 0; i < ingredients.size(); i++) { - Ingredient ingredient = ingredients.get(i); - - DefaultedList newStacks = DefaultedList.of(); - - boolean altered = false; - - ItemStack[] stacks = ingredient.getMatchingStacksClient(); - - for (int k = 0; k < stacks.length; k++) { - ItemStack stack = stacks[k]; - - boolean found = !stack.isEmpty() && sender.replaceOre(stack, newStacks); - - if (!found) { - newStacks.add(stack); - } - - altered |= found; - } - - if (altered) { - replacements++; - ingredients.set(i, Ingredient.ofStacks(newStacks.stream().distinct().toArray(ItemStack[]::new))); - } - } - - return replacements; - } - - }; - - private static final Logger log = LogManager.getLogger(); - - private int replacements = 0; - - private List ores = new ArrayList<>(); - - private final List remappers = Lists.newArrayList(VANILLA); - - /** - * Adds additional recipe handlers. - * By default only the vanilla crafting recipes are supported. - */ - public OreReplacer registerRecipeTypeHandler(IIngredientRemapper... remappers) { - this.remappers.addAll(Lists.newArrayList(remappers)); - - return this; - } - - /** - * Adds all the specified ore conversions to be processed by this replacer. - */ - public OreReplacer registerAll(IOre... ores) { - this.ores.addAll(Lists.newArrayList(ores)); - - return this; - } - - public void done() { - log.info("Searching for ore replacements..."); - /*Streams.stream(ForgeRegistries.RECIPES).forEach(recipe -> - remappers.stream() - .filter(remapper -> remapper.canRemap(recipe)) - .findFirst() - .ifPresent(remapper -> remapper.replaceIngredients(this, recipe)) - );*/ - log.info("Replaced {} ingredients.", replacements); - } - - public boolean replaceOre(ItemStack stack, DefaultedList newStacks) { - return ores.stream().filter(ore -> ore.matches(stack)).peek(ore -> - ore.getSubItems(stack, newStacks) - ).findFirst().isPresent(); - } - - public interface IIngredientRemapper { - - boolean canRemap(Recipe recipe); - - int replaceIngredients(OreReplacer sender, Recipe recipe); - } - - @FunctionalInterface - public interface IOre { - boolean matches(ItemStack stack); - - default void getSubItems(ItemStack stack, DefaultedList newStacks) { - DefaultedList newList = DefaultedList.of(); - - stack.getItem().appendStacks(ItemGroup.SEARCH, newList); - - if (stack.hasTag()) { - newList.forEach(i -> i.setTag(stack.getTag().copy())); - } - - newStacks.addAll(newList); - } - } -} \ No newline at end of file diff --git a/src/main/java/com/minelittlepony/unicopia/util/Registries.java b/src/main/java/com/minelittlepony/unicopia/util/Registries.java index a96b1ea2..e7cb56b2 100644 --- a/src/main/java/com/minelittlepony/unicopia/util/Registries.java +++ b/src/main/java/com/minelittlepony/unicopia/util/Registries.java @@ -9,7 +9,6 @@ import net.minecraft.util.registry.RegistryKey; import net.minecraft.util.registry.SimpleRegistry; public interface Registries { - static Registry createSimple(Identifier id) { return FabricRegistryBuilder.from(new SimpleRegistry(RegistryKey.ofRegistry(id), Lifecycle.stable())).buildAndRegister(); } diff --git a/src/main/java/com/minelittlepony/unicopia/util/VecHelper.java b/src/main/java/com/minelittlepony/unicopia/util/VecHelper.java index d0e674f1..85ac9c6f 100644 --- a/src/main/java/com/minelittlepony/unicopia/util/VecHelper.java +++ b/src/main/java/com/minelittlepony/unicopia/util/VecHelper.java @@ -59,7 +59,7 @@ public interface VecHelper { } static Stream findAllEntitiesInRange(@Nullable Entity origin, World w, BlockPos pos, double radius) { - return w.getEntities(origin, new Box(pos).expand(radius), e -> { + return w.getOtherEntities(origin, new Box(pos).expand(radius), e -> { double dist = Math.sqrt(e.squaredDistanceTo(pos.getX(), pos.getY(), pos.getZ())); double dist2 = Math.sqrt(e.squaredDistanceTo(pos.getX(), pos.getY() - e.getStandingEyeHeight(), pos.getZ())); @@ -73,7 +73,7 @@ public interface VecHelper { static List getWithinRange(PlayerEntity player, double reach, @Nullable Predicate predicate) { Vec3d look = player.getCameraPosVec(1).multiply(reach); - return player.world.getEntities(player, player + return player.world.getOtherEntities(player, player .getBoundingBox() .expand(look.x, look.y, look.z) .expand(1, 1, 1), predicate); @@ -120,7 +120,7 @@ public interface VecHelper { Vec3d hit = null; Entity pointedEntity = null; - List entitiesWithinRange = e.world.getEntities(e, e.getBoundingBox() + List entitiesWithinRange = e.world.getOtherEntities(e, e.getBoundingBox() .expand(look.x * distance, look.y * distance, look.z * distance) .expand(1, 1, 1), predicate); diff --git a/src/main/java/com/minelittlepony/unicopia/util/WorldHelper.java b/src/main/java/com/minelittlepony/unicopia/util/WorldHelper.java deleted file mode 100644 index ce67a833..00000000 --- a/src/main/java/com/minelittlepony/unicopia/util/WorldHelper.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.minelittlepony.unicopia.util; - -import net.minecraft.world.World; - -public interface WorldHelper { - /** - * Gets the daylight brightness value on a scale of 0-1. - * Midday = 1 - * Sunrise/Sunset = 0 - * Nighttime = 0 - */ - static float getDaylightBrightness(World w, float partialTicks) { - float celst = w.getSkyAngle(partialTicks); - - // ---------------------------- - // 0 | 0.5 | 1 - // | | | midday - // | midnight | - // sunset | - // sunrise - //---| |------- - //---// |-------| - // / \ - // / \ - // \ - // \ - // midnight = 0.5 - // sunrise = 0.7 - // midday = 1 - // sunset = 0.3 - - if (celst >= 0.7F || celst <= 0.3F) { - if (celst >= 0.7) { - celst -= 0.7; - } else { - celst = -celst + 0.3F; - } - - return celst * (3 + 1/3); - } else { - celst = 0; - } - - return celst; - } - - /** - * Gets the brightness of the moon. Works as the inverse of getDaylightBrightness but for the moon. - * Midnight = 1 - * Sunrise/Sunset = 0 - * Daytime = 0 - */ - static float getLunarBrightness(World w, float partialTicks) { - float celst = w.getSkyAngle(partialTicks); - - // ---------------------------- - // 0 | 0.5 | 1 - // | | | midday - // | midnight | - // sunset | - // sunrise - // |-------------------| - // \ | / - // \ | / - // \ | / - // \ | / - // | - // midnight = 0.5 - // sunrise = 0.7 - // midday = 1 - // sunset = 0.3 - - if (celst < 0.7F && celst > 0.3F) { - return Math.abs(celst - 0.5F) / 0.2F; - } - - return 0; - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/util/projectile/Tossable.java b/src/main/java/com/minelittlepony/unicopia/util/projectile/Tossable.java deleted file mode 100644 index d740a151..00000000 --- a/src/main/java/com/minelittlepony/unicopia/util/projectile/Tossable.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.minelittlepony.unicopia.util.projectile; - -import com.minelittlepony.unicopia.magic.Caster; - -import net.minecraft.block.BlockState; -import net.minecraft.sound.SoundEvent; -import net.minecraft.sound.SoundEvents; -import net.minecraft.util.math.BlockPos; - -public interface Tossable { - - /** - * Called once the projectile lands either hitting the ground or an entity. - */ - void onImpact(Caster caster, BlockPos pos, BlockState state); - - /** - * The sound made when thrown. - */ - default SoundEvent getThrowSound(T stack) { - return SoundEvents.ENTITY_SNOWBALL_THROW; - } - - /** - * The amount of damage to be dealt when the projectile collides with an entity. - */ - default int getThrowDamage(T stack) { - return 0; - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/TossableItem.java b/src/main/java/com/minelittlepony/unicopia/world/TossableItem.java deleted file mode 100644 index bd4b05e2..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/TossableItem.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.minelittlepony.unicopia.world; - -import javax.annotation.Nullable; - -import com.minelittlepony.unicopia.magic.Dispensable; -import com.minelittlepony.unicopia.util.projectile.Projectile; -import com.minelittlepony.unicopia.util.projectile.Tossable; -import com.minelittlepony.unicopia.world.entity.MagicProjectileEntity; - -import net.minecraft.block.DispenserBlock; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.sound.SoundCategory; -import net.minecraft.stat.Stats; -import net.minecraft.util.ActionResult; -import net.minecraft.util.TypedActionResult; -import net.minecraft.util.math.BlockPointer; -import net.minecraft.util.math.Direction; -import net.minecraft.util.math.Position; -import net.minecraft.world.World; - -public interface TossableItem extends Tossable, Dispensable { - - default boolean canBeThrown(ItemStack stack) { - return true; - } - - @Override - default TypedActionResult dispenseStack(BlockPointer source, ItemStack stack) { - - if (canBeThrown(stack)) { - stack = toss(source.getWorld(), - DispenserBlock.getOutputLocation(source), - source.getBlockState().get(DispenserBlock.FACING), - stack); - - return new TypedActionResult<>(ActionResult.SUCCESS, stack); - } - - return new TypedActionResult<>(ActionResult.PASS, stack); - } - - @Nullable - default Projectile createProjectile(World world, PlayerEntity player) { - return new MagicProjectileEntity(null, world, player); - } - - @Nullable - default Projectile createProjectile(World world, Position pos) { - return new MagicProjectileEntity(null, world, pos.getX(), pos.getY(), pos.getZ()); - } - - default void toss(World world, ItemStack itemstack, PlayerEntity player) { - - world.playSound(null, player.getX(), player.getY(), player.getZ(), getThrowSound(itemstack), SoundCategory.NEUTRAL, 0.5F, 0.4F / (world.random.nextFloat() * 0.4F + 0.8F)); - - if (!world.isClient) { - Projectile projectile = createProjectile(world, player); - - if (projectile == null) { - return; - } - - projectile.setItem(itemstack); - projectile.setThrowDamage(getThrowDamage(itemstack)); - projectile.launch(player, player.pitch, player.yaw, 0, 1.5F, 1); - - world.spawnEntity((Entity)projectile); - } - - if (!player.abilities.creativeMode) { - itemstack.decrement(1); - } - - player.incrementStat(Stats.USED.getOrCreateStat(itemstack.getItem())); - } - - default ItemStack toss(World world, Position pos, Direction facing, ItemStack stack) { - Projectile projectile = createProjectile(world, pos); - - if (projectile == null) { - return stack; - } - - projectile.setItem(stack); - projectile.setThrowDamage(getThrowDamage(stack)); - projectile.launch(facing.getOffsetX(), facing.getOffsetY() + 0.1F, facing.getOffsetZ(), 1.1F, 6); - - world.spawnEntity((Entity)projectile); - - stack.decrement(1); - - return stack; - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/UnicopiaWorld.java b/src/main/java/com/minelittlepony/unicopia/world/UnicopiaWorld.java deleted file mode 100644 index 1b5518c9..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/UnicopiaWorld.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.minelittlepony.unicopia.world; - -import com.minelittlepony.unicopia.mixin.CriterionsRegistry; -import com.minelittlepony.unicopia.world.advancement.BOHDeathCriterion; -import com.minelittlepony.unicopia.world.block.UBlocks; -import com.minelittlepony.unicopia.world.container.UContainers; -import com.minelittlepony.unicopia.world.item.UItems; -import com.minelittlepony.unicopia.world.recipe.URecipes; -import com.minelittlepony.unicopia.world.recipe.enchanting.Pages; -import com.minelittlepony.unicopia.world.structure.UStructures; - -import net.fabricmc.fabric.api.loot.v1.FabricLootSupplier; -import net.fabricmc.fabric.api.loot.v1.event.LootTableLoadingCallback; -import net.fabricmc.fabric.api.resource.ResourceManagerHelper; -import net.minecraft.loot.LootTable; -import net.minecraft.resource.ResourceType; -import net.minecraft.util.Identifier; - -public class UnicopiaWorld { - public static void bootstrap() { - UBlocks.bootstrap(); - UItems.bootstrap(); - UContainers.bootstrap(); - UStructures.bootstrap(); - URecipes.bootstrap(); - - ResourceManagerHelper.get(ResourceType.SERVER_DATA).registerReloadListener(Pages.instance()); - CriterionsRegistry.register(BOHDeathCriterion.INSTANCE); - LootTableLoadingCallback.EVENT.register((res, manager, id, supplier, setter) -> { - if (!"minecraft".contentEquals(id.getNamespace())) { - return; - } - - Identifier modId = new Identifier("unicopiamc", id.getPath()); - LootTable table = manager.getTable(modId); - if (table != LootTable.EMPTY) { - supplier.withPools(((FabricLootSupplier)table).getPools()); - } - }); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/advancement/AbstractCriterion.java b/src/main/java/com/minelittlepony/unicopia/world/advancement/AbstractCriterion.java deleted file mode 100644 index 2c6f3c02..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/advancement/AbstractCriterion.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.minelittlepony.unicopia.world.advancement; - -import java.util.List; -import java.util.Map; - -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; - -import net.minecraft.advancement.PlayerAdvancementTracker; -import net.minecraft.advancement.criterion.Criterion; -import net.minecraft.advancement.criterion.CriterionConditions; - -abstract class AbstractCriterion, T extends CriterionConditions> implements Criterion { - - protected final Map listeners = Maps.newHashMap(); - - @Override - public void beginTrackingCondition(PlayerAdvancementTracker key, Criterion.ConditionsContainer listener) { - listeners.computeIfAbsent(key, this::createEntry).listeners.add(listener); - } - - @Override - public void endTrackingCondition(PlayerAdvancementTracker key, Criterion.ConditionsContainer listener) { - if (listeners.containsKey(key)) { - E entry = listeners.get(key); - - entry.listeners.remove(listener); - if (entry.listeners.isEmpty()) { - listeners.remove(key); - } - } - } - - @Override - public void endTracking(PlayerAdvancementTracker key) { - if (listeners.containsKey(key)) { - listeners.remove(key); - } - } - - protected abstract E createEntry(PlayerAdvancementTracker advancement); - - protected static class Entry { - protected final PlayerAdvancementTracker advancement; - - protected final List> listeners = Lists.newArrayList(); - - Entry(PlayerAdvancementTracker key) { - advancement = key; - } - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/advancement/AdvancementPredicate.java b/src/main/java/com/minelittlepony/unicopia/world/advancement/AdvancementPredicate.java deleted file mode 100644 index 5bf34dce..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/advancement/AdvancementPredicate.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.minelittlepony.unicopia.world.advancement; - -import com.google.gson.JsonElement; - -import net.minecraft.advancement.Advancement; -import net.minecraft.advancement.PlayerAdvancementTracker; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.util.Identifier; - -/** - * Predicate for testing whether a player has a previous advancement. - * Allows for unlocking advancements in linear succession. - */ -class AdvancementPredicate { - - public static AdvancementPredicate deserialize(JsonElement json) { - return new AdvancementPredicate(json.getAsString()); - } - - private final Identifier id; - - public AdvancementPredicate(String advancement) { - this.id = new Identifier(advancement); - } - - public boolean test(ServerWorld world, PlayerAdvancementTracker tracker) { - Advancement advancement = world.getServer().getAdvancementLoader().get(id); - - return advancement != null && tracker.getProgress(advancement).isDone(); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/advancement/BOHDeathCriterion.java b/src/main/java/com/minelittlepony/unicopia/world/advancement/BOHDeathCriterion.java deleted file mode 100644 index ff78a2f6..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/advancement/BOHDeathCriterion.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.minelittlepony.unicopia.world.advancement; - -import java.util.Optional; - -import com.google.gson.JsonObject; - -import net.minecraft.advancement.PlayerAdvancementTracker; -import net.minecraft.advancement.criterion.AbstractCriterionConditions; -import net.minecraft.predicate.entity.AdvancementEntityPredicateDeserializer; -import net.minecraft.predicate.entity.EntityPredicate; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.util.Identifier; - -/** - * Advantement trigger for the book of holding. It's an achievement to die so spectacularly! :D - */ -public class BOHDeathCriterion extends AbstractCriterion { - public static final BOHDeathCriterion INSTANCE = new BOHDeathCriterion(); - - private static final Identifier ID = new Identifier("unicopia", "death_by_bag_of_holding"); - - @Override - public Identifier getId() { - return ID; - } - - @Override - public Conditions conditionsFromJson(JsonObject json, AdvancementEntityPredicateDeserializer deserializer) { - return new Conditions( - EntityPredicate.Extended.getInJson(json, "player", deserializer), - AdvancementPredicate.deserialize(json.get("advancement")) - ); - } - - @Override - protected Entry createEntry(PlayerAdvancementTracker advancement) { - return new Entry(advancement); - } - - public void trigger(ServerPlayerEntity player) { - PlayerAdvancementTracker key = player.getAdvancementTracker(); - - Optional.ofNullable(listeners.get(key)).ifPresent(e -> { - e.trigger((ServerWorld)player.world, key); - }); - } - - static class Conditions extends AbstractCriterionConditions { - - private final AdvancementPredicate requirement; - - public Conditions(EntityPredicate.Extended player, AdvancementPredicate key) { - super(ID, player); - - requirement = key; - } - - public boolean test(ServerWorld world, PlayerAdvancementTracker stracker) { - return requirement.test(world, stracker); - } - - } - - static class Entry extends AbstractCriterion.Entry { - - Entry(PlayerAdvancementTracker key) { - super(key); - } - - public void trigger(ServerWorld world, PlayerAdvancementTracker tracker) { - listeners.stream() - .filter(listener -> listener.getConditions().test(world, tracker)) - .forEach(winner -> winner.grant(advancement)); - } - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/block/AbstractDoorBlock.java b/src/main/java/com/minelittlepony/unicopia/world/block/AbstractDoorBlock.java deleted file mode 100644 index 7bb5a1d0..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/block/AbstractDoorBlock.java +++ /dev/null @@ -1,126 +0,0 @@ -package com.minelittlepony.unicopia.world.block; - -import javax.annotation.Nullable; - -import com.minelittlepony.unicopia.util.WorldEvent; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.DoorBlock; -import net.minecraft.block.Material; -import net.minecraft.block.enums.DoubleBlockHalf; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; -import net.minecraft.util.hit.BlockHitResult; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.world.World; - -public abstract class AbstractDoorBlock extends DoorBlock { - - protected AbstractDoorBlock(Settings settings) { - super(settings); - } - - protected int getCloseSound() { - return isLockable() ? WorldEvent.IRON_DOOR_CLOSE : WorldEvent.WOODEN_DOOR_CLOSE; - } - - protected int getOpenSound() { - return isLockable() ? WorldEvent.IRON_DOOR_OPEN : WorldEvent.WOODEN_DOOR_OPEN; - } - - @Override - public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { - return toggleDoor(world, pos, false, true, player); - } - - @Override - public void setOpen(World world, BlockPos pos, boolean open) { - toggleDoor(world, pos, open, false, null); - } - - protected boolean isLockable() { - return material == Material.METAL; - } - - protected boolean canBePowered() { - return true; - } - - protected boolean canOpen(@Nullable PlayerEntity player) { - return player == null || material != Material.METAL; - } - - protected ActionResult toggleDoor(World world, BlockPos pos, boolean open, boolean force, @Nullable PlayerEntity player) { - if (!canOpen(player)) { - return ActionResult.PASS; - } - - BlockState state = world.getBlockState(pos); - - if (state.getBlock() != this) { - return ActionResult.PASS; - } - - BlockPos lower = getPrimaryDoorPos(state, pos); - - BlockState mainDoor = pos == lower ? state : world.getBlockState(lower); - - if (mainDoor.getBlock() != this) { - return ActionResult.PASS; - } - - if (!force && mainDoor.get(OPEN) == open) { - return ActionResult.FAIL; - } - - state = mainDoor.cycle(OPEN); - - world.setBlockState(lower, state, 10); - world.syncWorldEvent(player, state.get(OPEN) ? getOpenSound() : getCloseSound(), pos, 0); - - return ActionResult.SUCCESS; - } - - protected BlockPos getPrimaryDoorPos(BlockState state, BlockPos pos) { - return state.get(HALF) == DoubleBlockHalf.LOWER ? pos : pos.down(); - } - - @Override - public void neighborUpdate(BlockState state, World world, BlockPos pos, Block sender, BlockPos blockPos_2, boolean boolean_1) { - if (!canBePowered()) { - return; - } - - BlockPos otherHalf = pos.offset(state.get(HALF) == DoubleBlockHalf.LOWER ? Direction.UP : Direction.DOWN); - - boolean powered = world.isReceivingRedstonePower(pos) || world.isReceivingRedstonePower(otherHalf); - - if (sender != this && powered != state.get(POWERED)) { - world.setBlockState(pos, state.with(POWERED, powered), 2); - - if (onPowerStateChanged(world, state.with(POWERED, powered), pos, powered)) { - playToggleSound(world, pos, powered); - } - } - } - - protected void playToggleSound(World world, BlockPos pos, boolean powered) { - world.syncWorldEvent(powered ? getOpenSound() : getCloseSound(), pos, 0); - } - - /** - * Called by the lower block when the powered state changes. - */ - protected boolean onPowerStateChanged(World world, BlockState state, BlockPos pos, boolean powered) { - if (powered != state.get(OPEN)) { - world.setBlockState(pos, state.with(OPEN, powered), 2); - - return true; - } - - return false; - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/block/ChiselledChitinBlock.java b/src/main/java/com/minelittlepony/unicopia/world/block/ChiselledChitinBlock.java deleted file mode 100644 index add262fe..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/block/ChiselledChitinBlock.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.minelittlepony.unicopia.world.block; - -import javax.annotation.Nullable; - -import com.minelittlepony.unicopia.Race; -import com.minelittlepony.unicopia.equine.player.Pony; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemPlacementContext; -import net.minecraft.state.StateManager; -import net.minecraft.state.property.Properties; -import net.minecraft.util.BlockMirror; -import net.minecraft.util.BlockRotation; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.world.BlockView; - -public class ChiselledChitinBlock extends Block { - - public ChiselledChitinBlock(Settings settings) { - super(settings); - setDefaultState(stateManager.getDefaultState() - .with(Properties.FACING, Direction.UP) - ); - } - - @Override - public BlockState rotate(BlockState state, BlockRotation rot) { - return state.with(Properties.FACING, rot.rotate(state.get(Properties.FACING))); - } - - @Override - public BlockState mirror(BlockState state, BlockMirror mirror) { - return state.with(Properties.FACING, mirror.apply(state.get(Properties.FACING))); - } - - @Override - @Nullable - public BlockState getPlacementState(ItemPlacementContext context) { - PlayerEntity player = context.getPlayer(); - Direction direction = context.getSide(); - - if (player != null && player.isSneaking()) { - direction = direction.getOpposite(); - } - - return getDefaultState().with(Properties.FACING, direction); - } - - @Override - protected void appendProperties(StateManager.Builder builder) { - builder.add(Properties.FACING); - } - - @Deprecated - @Override - public float calcBlockBreakingDelta(BlockState state, PlayerEntity player, BlockView worldIn, BlockPos pos) { - float hardness = super.calcBlockBreakingDelta(state, player, worldIn, pos); - - Pony iplayer = Pony.of(player); - Race race = iplayer.getSpecies(); - - if (race == Race.CHANGELING) { - hardness *= 80; - } else if (race.canInteractWithClouds()) { - hardness /= 4; - } else if (race.canUseEarth()) { - hardness *= 10; - } - - return hardness; - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/block/ChitinBlock.java b/src/main/java/com/minelittlepony/unicopia/world/block/ChitinBlock.java deleted file mode 100644 index 19cb4820..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/block/ChitinBlock.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.minelittlepony.unicopia.world.block; - -import javax.annotation.Nullable; - -import com.minelittlepony.unicopia.Race; -import com.minelittlepony.unicopia.equine.player.Pony; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemPlacementContext; -import net.minecraft.state.StateManager; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.world.BlockView; -import net.minecraft.world.WorldAccess; - -public class ChitinBlock extends Block { - - public ChitinBlock(Settings settings) { - super(settings); - setDefaultState(stateManager.getDefaultState().with(Covering.PROPERTY, Covering.UNCOVERED)); - } - - @Deprecated - @Override - public float calcBlockBreakingDelta(BlockState state, PlayerEntity player, BlockView world, BlockPos pos) { - float hardness = super.calcBlockBreakingDelta(state, player, world, pos); - - Pony iplayer = Pony.of(player); - Race race = iplayer.getSpecies(); - - if (race == Race.CHANGELING) { - hardness *= 80; - } else if (race.canInteractWithClouds()) { - hardness /= 4; - } else if (race.canUseEarth()) { - hardness *= 10; - } - - return hardness; - } - - @Override - @Nullable - public BlockState getPlacementState(ItemPlacementContext context) { - return getDefaultState().with(Covering.PROPERTY, Covering.getCovering(context.getWorld(), context.getBlockPos().up())); - } - - @Override - @Deprecated - public BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState other, WorldAccess world, BlockPos pos, BlockPos otherPos) { - if (direction == Direction.UP) { - return state.with(Covering.PROPERTY, Covering.getCovering(world, otherPos)); - } - - return state; - } - - @Override - protected void appendProperties(StateManager.Builder builder) { - builder.add(Covering.PROPERTY); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/block/Covering.java b/src/main/java/com/minelittlepony/unicopia/world/block/Covering.java deleted file mode 100644 index 35956fac..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/block/Covering.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.minelittlepony.unicopia.world.block; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.block.ShapeContext; -import net.minecraft.state.property.EnumProperty; -import net.minecraft.util.StringIdentifiable; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.world.WorldAccess; - -public enum Covering implements StringIdentifiable { - COVERED, - UNCOVERED, - SNOW_COVERED; - - public static final EnumProperty PROPERTY = EnumProperty.of("covering", Covering.class); - - @Override - public String toString() { - return asString(); - } - - @Override - public String asString() { - return name().toLowerCase(); - } - - public static Covering getCovering(WorldAccess world, BlockPos pos) { - BlockState state = world.getBlockState(pos); - Block block = state.getBlock(); - - if (block == Blocks.SNOW_BLOCK || block == Blocks.SNOW) { - return Covering.SNOW_COVERED; - } - - if ((state.isOpaque() && state.isFullCube(world, pos)) || Block.isFaceFullSquare(state.getCollisionShape(world, pos, ShapeContext.absent()), Direction.DOWN)) { - return Covering.COVERED; - } - - return Covering.UNCOVERED; - } -} \ No newline at end of file diff --git a/src/main/java/com/minelittlepony/unicopia/world/block/DiamondDoorBlock.java b/src/main/java/com/minelittlepony/unicopia/world/block/DiamondDoorBlock.java deleted file mode 100644 index 3961c451..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/block/DiamondDoorBlock.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.minelittlepony.unicopia.world.block; - -import javax.annotation.Nullable; - -import com.minelittlepony.unicopia.EquinePredicates; - -import net.minecraft.block.BlockState; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -public class DiamondDoorBlock extends AbstractDoorBlock { - public DiamondDoorBlock(Settings settings) { - super(settings); - } - - @Override - protected boolean canOpen(@Nullable PlayerEntity player) { - return EquinePredicates.PLAYER_UNICORN.test(player); - } - - @Override - protected boolean onPowerStateChanged(World world, BlockState state, BlockPos pos, boolean powered) { - if (state.get(OPEN)) { - world.setBlockState(pos, state.with(OPEN, false), 2); - - return true; - } - - return false; - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/block/DutchDoorBlock.java b/src/main/java/com/minelittlepony/unicopia/world/block/DutchDoorBlock.java deleted file mode 100644 index fb5538b6..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/block/DutchDoorBlock.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.minelittlepony.unicopia.world.block; - -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.block.enums.DoubleBlockHalf; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.world.World; -import net.minecraft.world.WorldAccess; - -public class DutchDoorBlock extends AbstractDoorBlock { - - public DutchDoorBlock(Settings settings) { - super(settings); - } - - @Override - protected BlockPos getPrimaryDoorPos(BlockState state, BlockPos pos) { - return pos; - } - - @Override - protected boolean onPowerStateChanged(World world, BlockState state, BlockPos pos, boolean powered) { - boolean result = super.onPowerStateChanged(world, state, pos, powered); - - BlockState upper = world.getBlockState(pos.up()); - if (upper.getBlock() == this && upper.get(OPEN) != powered) { - world.setBlockState(pos.up(), upper.with(OPEN, powered)); - - return true; - } - - return result; - } - - @Override - public BlockState getStateForNeighborUpdate(BlockState state, Direction face, BlockState other, WorldAccess world, BlockPos pos, BlockPos otherPos) { - - DoubleBlockHalf half = state.get(HALF); - - if (face.getAxis() == Direction.Axis.Y && half == DoubleBlockHalf.LOWER == (face == Direction.UP)) { - if (other.getBlock() == this && other.get(HALF) != half) { - return state - .with(FACING, other.get(FACING)) - .with(HINGE, other.get(HINGE)) - .with(POWERED, other.get(POWERED)); - } - - return Blocks.AIR.getDefaultState(); - } - - if (half == DoubleBlockHalf.LOWER && face == Direction.DOWN && !state.canPlaceAt(world, pos)) { - return Blocks.AIR.getDefaultState(); - } - - return state; - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/block/FruitLeavesBlock.java b/src/main/java/com/minelittlepony/unicopia/world/block/FruitLeavesBlock.java deleted file mode 100644 index 36516e40..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/block/FruitLeavesBlock.java +++ /dev/null @@ -1,172 +0,0 @@ -package com.minelittlepony.unicopia.world.block; - -import java.util.Random; -import java.util.function.Function; - -import javax.annotation.Nonnull; - -import com.minelittlepony.unicopia.ducks.Colourful; -import com.minelittlepony.unicopia.equine.player.Pony; -import com.minelittlepony.unicopia.util.WorldEvent; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.LeavesBlock; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.DyeItem; -import net.minecraft.item.ItemStack; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.sound.SoundCategory; -import net.minecraft.sound.SoundEvents; -import net.minecraft.state.StateManager; -import net.minecraft.state.property.BooleanProperty; -import net.minecraft.util.ActionResult; -import net.minecraft.util.DyeColor; -import net.minecraft.util.Hand; -import net.minecraft.util.hit.BlockHitResult; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraft.world.biome.Biome.TemperatureGroup; - -public class FruitLeavesBlock extends LeavesBlock implements Colourful { - - public static final BooleanProperty HEAVY = BooleanProperty.of("heavy"); - - private boolean hardy; - - private int baseGrowthChance; - private int customTint; - - private Function fruitProducer = w -> ItemStack.EMPTY; - private Function compostProducer = w -> ItemStack.EMPTY; - - public FruitLeavesBlock(Settings settings) { - super(settings); - setDefaultState(stateManager.getDefaultState() - .with(HEAVY, false) - .with(DISTANCE, 7) - .with(PERSISTENT, false) - ); - } - - @Override - protected void appendProperties(StateManager.Builder builder) { - super.appendProperties(builder); - builder.add(HEAVY); - } - - public FruitLeavesBlock hardy(boolean value) { - hardy = value; - return this; - } - - public FruitLeavesBlock fruit(@Nonnull Function producer) { - fruitProducer = producer; - return this; - } - - public FruitLeavesBlock compost(@Nonnull Function producer) { - compostProducer = producer; - return this; - } - - public FruitLeavesBlock growthChance(int chance) { - baseGrowthChance = chance; - return this; - } - - public FruitLeavesBlock tint(int tint) { - customTint = tint; - return this; - } - - @Override - public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { - ItemStack stack = player.getStackInHand(hand); - - if (Pony.of(player).getSpecies().canUseEarth()) { - if (stack.isEmpty()) { - - if (state.get(HEAVY)) { - dropContents(world, pos, state, 0); - } - } else if (stack.getItem() instanceof DyeItem && ((DyeItem)stack.getItem()).getColor() == DyeColor.WHITE) { - if (!state.get(HEAVY)) { - world.setBlockState(pos, state.with(HEAVY, true)); - - if (!world.isClient) { - world.syncWorldEvent(WorldEvent.BONEMEAL, pos, 0); - } - - if (!player.abilities.creativeMode) { - stack.decrement(1); - } - } - } - - return ActionResult.SUCCESS; - } - - return ActionResult.PASS; - } - - @Override - public void scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Random rand) { - if (!world.isClient && world.isChunkLoaded(pos) && !state.get(PERSISTENT)) { - int growthChance = getGrowthChance(world, pos, state); - - if (!state.get(HEAVY) && (growthChance <= 0 || rand.nextInt(growthChance) == 0)) { - world.setBlockState(pos, state.with(HEAVY, true)); - } else { - growthChance /= 10; - - if (state.get(HEAVY) && (growthChance <= 0 || rand.nextInt(growthChance) == 0)) { - dropContents(world, pos, state, 0); - } else { - super.scheduledTick(state, world, pos, rand); - } - } - } - } - - protected int getGrowthChance(World world, BlockPos pos, BlockState state) { - int chance = baseGrowthChance; - - if (!hardy && !world.isDay()) { - chance *= 40; - } - - if (world.getLightLevel(pos) >= 4) { - chance /= 3; - } - - TemperatureGroup temp = world.getBiome(pos).getTemperatureGroup(); - - if (!hardy && temp == TemperatureGroup.COLD) { - chance *= 1000; - } - - if (temp == TemperatureGroup.WARM) { - chance /= 100; - } - - if (temp == TemperatureGroup.MEDIUM) { - chance /= 50; - } - - return chance; - } - - @Override - public int getCustomTint(BlockState state, int tint) { - return customTint; - } - - protected void dropContents(World world, BlockPos pos, BlockState state, int chance) { - Function fruit = world.random.nextInt(40) == 0 ? compostProducer : fruitProducer; - dropStack(world, pos, fruit.apply(world)); - - world.playSound(null, pos, SoundEvents.ENTITY_ITEM_FRAME_PLACE, SoundCategory.BLOCKS, 0.3F, 1); - world.setBlockState(pos, state.with(HEAVY, false)); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/block/GemTorchBlock.java b/src/main/java/com/minelittlepony/unicopia/world/block/GemTorchBlock.java deleted file mode 100644 index ffe7ed4d..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/block/GemTorchBlock.java +++ /dev/null @@ -1,157 +0,0 @@ -package com.minelittlepony.unicopia.world.block; - -import java.util.Random; -import java.util.function.ToIntFunction; - -import com.minelittlepony.unicopia.particles.MagicParticleEffect; -import com.minelittlepony.unicopia.util.PosHelper; -import com.minelittlepony.unicopia.world.block.gas.Gas; -import com.minelittlepony.unicopia.world.block.gas.GasState; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.ShapeContext; -import net.minecraft.block.TorchBlock; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.particle.ParticleTypes; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.sound.SoundCategory; -import net.minecraft.sound.SoundEvents; -import net.minecraft.state.StateManager; -import net.minecraft.state.property.Properties; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; -import net.minecraft.util.hit.BlockHitResult; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.world.BlockView; -import net.minecraft.world.World; - -public class GemTorchBlock extends TorchBlock implements Gas { - private static final VoxelShape STANDING = createCuboidShape(7, 0, 7, 9, 16, 9); - - public GemTorchBlock(Settings settings) { - super(settings, MagicParticleEffect.UNICORN); - setDefaultState(stateManager.getDefaultState().with(Properties.LIT, true)); - } - - public static ToIntFunction lightFunc(int luminance) { - return state -> state.get(Properties.LIT) ? luminance : 0; - } - - @Override - protected void appendProperties(StateManager.Builder builder) { - builder.add(Properties.LIT); - } - - @Override - public void onBlockAdded(BlockState state, World world, BlockPos pos, BlockState oldState, boolean moved) { - PosHelper.all(pos, p -> world.updateNeighborsAlways(p, this), Direction.values()); - world.getBlockTickScheduler().schedule(pos, this, 2); - } - - @Override - public void onStateReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean moved) { - if (!moved) { - PosHelper.all(pos, p -> world.updateNeighborsAlways(p, this), Direction.values()); - } - } - - @Override - public VoxelShape getOutlineShape(BlockState state, BlockView source, BlockPos pos, ShapeContext context) { - return STANDING; - } - - @Override - public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { - - if (!state.get(Properties.LIT)) { - ItemStack held = player.getStackInHand(hand); - if (!held.isEmpty() && (held.getItem() == Items.FLINT_AND_STEEL || held.getItem() == Items.FIRE_CHARGE)) { - - world.playSound(null, pos, SoundEvents.ITEM_FLINTANDSTEEL_USE, SoundCategory.BLOCKS, 0.5F, 2.6F + (world.random.nextFloat() - world.random.nextFloat()) * 0.8F); - world.setBlockState(pos, state.with(Properties.LIT, true)); - - if (held.getItem() == Items.FLINT_AND_STEEL) { - held.damage(1, player, p -> p.sendToolBreakStatus(hand)); - } else if (!player.abilities.creativeMode) { - held.decrement(1); - } - } - - return ActionResult.SUCCESS; - } - - return ActionResult.PASS; - } - - @Override - public void randomDisplayTick(BlockState state, World world, BlockPos pos, Random rand) { - double x = pos.getX() + 0.5; - double y = pos.getY() + 1; - double z = pos.getZ() + 0.5; - - Direction facing = getDirection(state); - - if (facing.getAxis().isHorizontal()) { - - double drop = 0.22D; - double offsetDistance = 0.27D; - - facing = facing.getOpposite(); - - x += offsetDistance * facing.getOffsetX(); - y += drop; - z += offsetDistance * facing.getOffsetZ(); - } - - if (state.get(Properties.LIT)) { - for (int i = 0; i < 3; i++) { - world.addParticle(MagicParticleEffect.UNICORN, - x - 0.3, y - 0.3, z - 0.3, - rand.nextFloat(), rand.nextFloat(), rand.nextFloat()); - } - } else { - world.addParticle(ParticleTypes.SMOKE, x, y, z, 0, 0, 0); - } - } - - protected Direction getDirection(BlockState state) { - return Direction.UP; - } - - @Override - public void scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Random random) { - if (world.hasRain(pos)) { - if (state.get(Properties.LIT)) { - world.playSound(null, pos, SoundEvents.BLOCK_REDSTONE_TORCH_BURNOUT, SoundCategory.BLOCKS, 0.5F, 2.6F + (world.random.nextFloat() - world.random.nextFloat()) * 0.8F); - world.setBlockState(pos, state.with(Properties.LIT, false)); - } - } else { - if (!state.get(Properties.LIT)) { - world.playSound(null, pos, SoundEvents.ITEM_FLINTANDSTEEL_USE, SoundCategory.BLOCKS, 0.5F, 2.6F + (world.random.nextFloat() - world.random.nextFloat()) * 0.8F); - world.setBlockState(pos, state.with(Properties.LIT, true)); - } - } - - world.getBlockTickScheduler().schedule(pos, this, 2); - } - - @Override - public GasState getGasState(BlockState blockState) { - return GasState.ENCHANTED; - } - - @Override - public int getStrongRedstonePower(BlockState state, BlockView world, BlockPos pos, Direction side) { - return side == Direction.DOWN ? state.getWeakRedstonePower(world, pos, side) : 0; - } - - @Override - public int getWeakRedstonePower(BlockState state, BlockView world, BlockPos pos, Direction side) { - return state.get(Properties.LIT) ? 12 : 0; - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/block/HiveWallBlock.java b/src/main/java/com/minelittlepony/unicopia/world/block/HiveWallBlock.java deleted file mode 100644 index af00dad0..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/block/HiveWallBlock.java +++ /dev/null @@ -1,351 +0,0 @@ -package com.minelittlepony.unicopia.world.block; - -import java.util.Map; -import java.util.Random; - -import com.google.common.collect.Maps; -import com.minelittlepony.unicopia.Race; -import com.minelittlepony.unicopia.USounds; -import com.minelittlepony.unicopia.equine.player.Pony; -import com.minelittlepony.unicopia.util.PosHelper; -import com.minelittlepony.unicopia.util.shape.Shape; -import com.minelittlepony.unicopia.util.shape.Sphere; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.block.FallingBlock; -import net.minecraft.block.Material; -import net.minecraft.entity.Entity; -import net.minecraft.entity.FallingBlockEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemPlacementContext; -import net.minecraft.particle.BlockStateParticleEffect; -import net.minecraft.particle.ParticleTypes; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.sound.SoundCategory; -import net.minecraft.state.StateManager; -import net.minecraft.state.property.EnumProperty; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; -import net.minecraft.util.StringIdentifiable; -import net.minecraft.util.hit.BlockHitResult; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.World; - -public class HiveWallBlock extends FallingBlock { - - public static final EnumProperty STATE = EnumProperty.of("state", State.class); - public static final EnumProperty AXIS = EnumProperty.of("axis", Axis.class); - - private static final Shape shape = new Sphere(false, 1.5); - - public HiveWallBlock(Settings settings) { - super(settings); - setDefaultState(stateManager.getDefaultState() - .with(STATE, State.GROWING).with(AXIS, Axis.Y) - ); - } - - @Override - protected void appendProperties(StateManager.Builder builder) { - builder.add(STATE).add(AXIS); - } - - @Override - public void scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Random rand) { - - if (rand.nextInt(300) == 0) { - world.playSound(null, pos, USounds.INSECT, SoundCategory.BLOCKS, 1, 1); - } - - State type = getState(state); - - Axis axis = getAxis(state); - - int matchedNeighbours = countNeighbours(world, pos); - - if (type == State.GROWING) { - if (testForAxis(world, pos, axis)) { - world.setBlockState(pos, state.with(STATE, State.STABLE)); - } else { - Axis newAxis = axis; - - for (Axis i : Axis.VALUES) { - if (testForAxis(world, pos, i)) { - newAxis = i; - break; - } - } - - if (newAxis != axis) { - world.setBlockState(pos, state.with(AXIS, newAxis).with(STATE, State.STABLE)); - } else if (rand.nextInt(10) == 0) { - Direction facing = axis.randomFacing(rand); - - BlockPos other = pos.offset(facing); - - if (canSpreadInto(world, other, axis)) { - world.playSound(null, pos, USounds.SLIME_RETRACT, SoundCategory.BLOCKS, 1, 1); - world.setBlockState(other, state); - world.setBlockState(pos, state.with(STATE, State.STABLE)); - } - } - } - } else if (type == State.DYING) { - if (matchedNeighbours > 1 && matchedNeighbours < 17) { - world.setBlockState(pos, state.with(STATE, State.STABLE)); - } else { - die(world, pos, rand); - } - } else { - - if (pos.getX() % 3 == 0 && pos.getZ() % 4 == 0 && isEmptySpace(world, pos.down()) && UBlocks.SLIME_DRIP.getDefaultState().canPlaceAt(world, pos.down())) { - world.setBlockState(pos.down(), UBlocks.SLIME_DRIP.getDefaultState()); - } else if (!testForAxis(world, pos, axis)) { - world.setBlockState(pos, state.with(STATE, State.GROWING)); - } else if (matchedNeighbours >= 27) { - world.setBlockState(pos, state.with(STATE, State.DYING)); - } else { - return; - } - } - - world.getBlockTickScheduler().schedule(pos, this, 10); - } - - public State getState(BlockState state) { - return state.get(STATE); - } - - public Axis getAxis(BlockState state) { - return state.get(AXIS); - } - - @Override - public void onBlockAdded(BlockState state, World world, BlockPos pos, BlockState oldState, boolean uuuuh) { - if (getState(state) != State.STABLE) { - super.onBlockAdded(state, world, pos, oldState, uuuuh); - } - } - - @Override - public int getFallDelay() { - return 10; - } - - protected boolean testForAxis(World world, BlockPos pos, Axis axis) { - return !PosHelper.some(pos, p -> isEmptySpace(world, p), axis.getFacings()); - } - - protected boolean isEmptySpace(World world, BlockPos pos) { - - if (world.isAir(pos)) { - return true; - } - - BlockState state = world.getBlockState(pos); - - return !(state.getMaterial().isLiquid() - || state.isFullCube(world, pos) - || state.isOpaque()); - } - - protected void die(World world, BlockPos pos, Random rand) { - world.breakBlock(pos, false); - - PosHelper.all(pos, p -> { - BlockState s = world.getBlockState(p); - - if (s.getBlock() == this) { - notifyDying(world, p, s, rand); - } - }, Direction.values()); - } - - protected void notifyDying(World world, BlockPos pos, BlockState state, Random rand) { - State oldState = state.get(STATE); - State newState = oldState.downGrade(); - - if (newState != oldState) { - world.setBlockState(pos, state.with(STATE, newState)); - } - } - - @Override - public void onSteppedOn(World world, BlockPos pos, Entity entity) { - if (entity instanceof PlayerEntity) { - Pony player = Pony.of((PlayerEntity)entity); - - if (player.getSpecies() != Race.CHANGELING && !world.isClient) { - if (((isEmptySpace(world, pos.down()) || canFallThrough(world.getBlockState(pos.down()))) && pos.getY() >= 0)) { - FallingBlockEntity faller = new FallingBlockEntity(world, pos.getX() + 0.5D, pos.getY(), pos.getZ() + 0.5D, world.getBlockState(pos)); - configureFallingBlockEntity(faller); - world.spawnEntity(faller); - } - } - } - } - - @Override - public void onLanding(World world, BlockPos pos, BlockState fallingBlockState, BlockState currentStateInPos, FallingBlockEntity fallingBlockEntity) { - world.breakBlock(pos, true); - } - - @Override - public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { - - if (hand == Hand.MAIN_HAND && player.getStackInHand(hand).isEmpty()) { - Pony iplayer = Pony.of(player); - - if (iplayer.getSpecies() == Race.CHANGELING) { - retreat(world, pos); - - PosHelper.adjacentNeighbours(pos).forEach(p -> { - if (world.getBlockState(p).getBlock() == this) { - retreat(world, p); - } - }); - - return ActionResult.SUCCESS; - } - } - - return ActionResult.PASS; - } - - @Override - public BlockState getPlacementState(ItemPlacementContext context) { - return getDefaultState().with(AXIS, Axis.fromVanilla(context.getSide().getAxis())); - } - - @Override - public void randomDisplayTick(BlockState state, World world, BlockPos pos, Random rand) { - if (rand.nextInt(16) == 0) { - Vec3d vel = shape.computePoint(rand); - Vec3d vec = vel.add(pos.getX(), pos.getY(), pos.getZ()); - - world.addParticle(new BlockStateParticleEffect(ParticleTypes.BLOCK, state), vec.x, vec.y, vec.z, vel.x, vel.y, vel.z); - } - } - - public void retreat(World world, BlockPos pos) { - world.setBlockState(pos, Blocks.AIR.getDefaultState()); - world.playSound(null, pos, USounds.SLIME_RETRACT, SoundCategory.BLOCKS, 1, 1); - } - - protected int countNeighbours(World world, BlockPos pos) { - int count = 0; - for (BlockPos i : BlockPos.iterate(pos.add(-1, -1, -1), pos.add(1, 1, 1))) { - if (world.getBlockState(i).getBlock() == this) { - count++; - } - } - - return count; - } - - protected boolean exposed(World world, BlockPos pos) { - return PosHelper.some(pos, p -> isEmptySpace(world, p), Direction.values()); - } - - protected boolean canSpreadInto(World world, BlockPos pos, Axis axis) { - if (world.isChunkLoaded(pos) && isEmptySpace(world, pos)) { - boolean one = false; - - for (Direction facing : axis.getFacings()) { - BlockPos op = pos.offset(facing); - Material m = world.getBlockState(op).getMaterial(); - - if (m == UMaterials.HIVE || m == UMaterials.CHITIN) { - if (one) { - return true; - } - - one = true; - } - } - } - - return false; - } - - public enum State implements StringIdentifiable { - GROWING, - STABLE, - DYING; - - static final State[] VALUES = values(); - - @Override - public String toString() { - return asString(); - } - - @Override - public String asString() { - return name().toLowerCase(); - } - - public State upgrade() { - switch (this) { - case DYING: return STABLE; - default: return GROWING; - } - } - - public State downGrade() { - switch (this) { - case GROWING: return STABLE; - default: return DYING; - } - } - } - - public enum Axis implements StringIdentifiable { - X(Direction.Axis.X, Direction.EAST, Direction.WEST, Direction.UP, Direction.DOWN), - Y(Direction.Axis.Y, Direction.EAST, Direction.WEST, Direction.NORTH, Direction.SOUTH), - Z(Direction.Axis.Z, Direction.NORTH, Direction.SOUTH, Direction.UP, Direction.DOWN); - - static final Axis[] VALUES = values(); - static final Map AXIS_MAP = Maps.newEnumMap(Direction.Axis.class); - - private final Direction.Axis vanilla; - private final Direction[] facings; - - static { - for (Axis i : VALUES) { - AXIS_MAP.put(i.vanilla, i); - } - } - - Axis(Direction.Axis vanilla, Direction... facings) { - this.vanilla = vanilla; - this.facings = facings; - } - - @Override - public String toString() { - return asString(); - } - - @Override - public String asString() { - return name().toLowerCase(); - } - - public Direction randomFacing(Random rand) { - return facings[rand.nextInt(facings.length)]; - } - - public Direction[] getFacings() { - return facings; - } - - public static Axis fromVanilla(Direction.Axis axis) { - return AXIS_MAP.get(axis); - } - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/block/SlimeDripBlock.java b/src/main/java/com/minelittlepony/unicopia/world/block/SlimeDripBlock.java deleted file mode 100644 index 598b7adc..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/block/SlimeDripBlock.java +++ /dev/null @@ -1,245 +0,0 @@ -package com.minelittlepony.unicopia.world.block; - -import java.util.Random; - -import com.minelittlepony.unicopia.EquinePredicates; -import com.minelittlepony.unicopia.USounds; -import com.minelittlepony.unicopia.util.MagicalDamageSource; -import com.minelittlepony.unicopia.util.PosHelper; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.ShapeContext; -import net.minecraft.entity.Entity; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.NbtHelper; -import net.minecraft.particle.ParticleTypes; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.sound.SoundCategory; -import net.minecraft.state.StateManager; -import net.minecraft.state.property.EnumProperty; -import net.minecraft.state.property.IntProperty; -import net.minecraft.util.StringIdentifiable; -import net.minecraft.util.math.Box; -import net.minecraft.util.math.Direction; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.world.BlockView; -import net.minecraft.world.World; -import net.minecraft.world.WorldView; - -public class SlimeDripBlock extends Block { - - public static final IntProperty AGE = IntProperty.of("age", 0, 7); - public static final EnumProperty SHAPE = EnumProperty.of("shape", Shape.class); - - public static final VoxelShape[] SHAFTS = new VoxelShape[] { - Block.createCuboidShape(7, 0, 7, 9, 16, 7), - Block.createCuboidShape(6, 0, 6, 10, 16, 10), - Block.createCuboidShape(5, 0, 5, 11, 16, 11), - Block.createCuboidShape(4, 0, 4, 12, 16, 12) - }; - public static final VoxelShape[] BULBS = new VoxelShape[] { - Block.createCuboidShape(6, 1, 6, 10, 8, 10), - Block.createCuboidShape(4, 0, 4, 12, 9, 12), - Block.createCuboidShape(3, 0, 3, 13, 10, 13), - Block.createCuboidShape(2, 0, 2, 14, 12, 14), - }; - - public SlimeDripBlock(Settings settings) { - super(settings); - setDefaultState(stateManager.getDefaultState() - .with(AGE, 0) - .with(SHAPE, Shape.BULB)); - } - - @Override - public Block.OffsetType getOffsetType() { - return Block.OffsetType.XZ; - } - - @Override - public void scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Random rand) { - if (!checkSupport(world, pos)) { - breakConnected(world, pos); - return; - } - - int age = state.get(AGE); - - BlockPos below = pos.down(); - - if (world.isChunkLoaded(below)) { - boolean spaceBelow = world.isAir(below); - - Shape shape = state.get(SHAPE); - - if (shape == Shape.TAIL && spaceBelow) { - world.setBlockState(pos, state.with(SHAPE, Shape.BULB).with(AGE, age / 2)); - } else if (shape == Shape.BULB && !spaceBelow) { - world.setBlockState(pos, state.with(SHAPE, Shape.TAIL).with(AGE, age / 2)); - } else if (age >= 7) { - if (rand.nextInt(12) == 0 && spaceBelow) { - world.setBlockState(below, state.with(AGE, age / 2)); - world.setBlockState(pos, getDefaultState().with(AGE, age / 2).with(SHAPE, Shape.TAIL)); - world.playSound(null, pos, USounds.SLIME_ADVANCE, SoundCategory.BLOCKS, 1, 1); - } - } else { - if (age < getMaximumAge(world, pos, state, spaceBelow) && rand.nextInt(5 * (age + 1)) == 0) { - world.setBlockState(pos, state.cycle(AGE)); - } - } - } - } - - protected void breakConnected(World world, BlockPos pos) { - world.breakBlock(pos, true); - - pos = pos.down(); - if (world.getBlockState(pos).getBlock() == this) { - breakConnected(world, pos); - } - } - - protected int getMaximumAge(World world, BlockPos pos, BlockState state, boolean spaceBelow) { - if (state.get(SHAPE) == Shape.TAIL) { - BlockState higher = world.getBlockState(pos.up()); - - if (higher.getBlock() != this) { - return 7; - } - - return Math.min(higher.get(AGE), - ((SlimeDripBlock)higher.getBlock()).getMaximumAge(world, pos.up(), higher, false) - 1 - ); - } - - if (!spaceBelow) { - return 0; - } - - return 7; - } - - @Override - public boolean canPlaceAt(BlockState state, WorldView world, BlockPos pos) { - return super.canPlaceAt(state, world, pos) && checkSupport(world, pos); - } - - @Override - public void neighborUpdate(BlockState state, World world, BlockPos pos, Block otherBlock, BlockPos otherPos, boolean change) { - super.neighborUpdate(state, world, pos, otherBlock, otherPos, change); - if (!checkSupport(world, pos)) { - breakConnected(world, pos); - } - } - - @Override - public void onStateReplaced(BlockState state, World world, BlockPos pos, BlockState replacement, boolean moved) { - world.updateNeighborsAlways(pos, this); - super.onStateReplaced(state, world, pos, replacement, moved); - } - - @Override - public void onEntityCollision(BlockState state, World world, BlockPos pos, Entity entity) { - if (entity instanceof LivingEntity && !entity.removed) { - LivingEntity living = (LivingEntity)entity; - - if (!EquinePredicates.PLAYER_CHANGELING.test(living) && living.getHealth() > 0) { - living.damage(MagicalDamageSource.ACID, 1); - living.slowMovement(state, new Vec3d(0.25D, 0.05000000074505806D, 0.25D)); - - if (!world.isClient && living.getHealth() <= 0) { - living.dropItem(Items.BONE, 3); - - if (living instanceof PlayerEntity) { - if (world.random.nextInt(13000) == 0) { - ItemStack skull = new ItemStack(Items.PLAYER_HEAD); - PlayerEntity player = (PlayerEntity)living; - - skull.setTag(new CompoundTag()); - skull.getTag().put("SkullOwner", NbtHelper.fromGameProfile(new CompoundTag(), player.getGameProfile())); - player.dropItem(skull, true); - } else { - living.dropItem(Items.SKELETON_SKULL, 1); - } - } - } - } - } - } - - public boolean checkSupport(BlockView world, BlockPos pos) { - - if (PosHelper.some(pos, p -> !world.getBlockState(p).isAir(), Direction.NORTH, Direction.SOUTH, Direction.EAST, Direction.WEST)) { - return false; - } - - pos = pos.up(); - - BlockState above = world.getBlockState(pos); - - if (above.getBlock() == this || above.getBlock() == UBlocks.HIVE_WALL_BLOCK) { - return true; - } - - return Block.isFaceFullSquare(above.getCollisionShape(world, pos), Direction.DOWN); - } - - - @Override - public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext ePos) { - Vec3d offset = state.getModelOffset(view, pos); - - if (state.get(SHAPE) == Shape.BULB) { - return BULBS[state.get(AGE) / 2].offset(offset.x, offset.y, offset.z); - } - - return SHAFTS[state.get(AGE) / 2].offset(offset.x, offset.y, offset.z); - } - - - @Override - protected void appendProperties(StateManager.Builder builder) { - builder.add(AGE, SHAPE); - } - - @Override - public void randomDisplayTick(BlockState state, World world, BlockPos pos, Random rand) { - if (state.get(SHAPE) == Shape.BULB && rand.nextInt(8) == 0) { - Vec3d offset = state.getModelOffset(world, pos).add(pos.getX(), pos.getY(), pos.getZ()); - Box bounds = BULBS[state.get(AGE) / 2] - .offset(offset.x, offset.y, offset.z) - .getBoundingBox(); - - double x = bounds.minX + (bounds.maxX - bounds.minX) * rand.nextFloat(); - double y = bounds.minY; - double z = bounds.minZ + (bounds.maxZ - bounds.minZ) * rand.nextFloat(); - - world.addParticle(ParticleTypes.DRIPPING_LAVA, x, y, z, 0, 0, 0); - } - } - - enum Shape implements StringIdentifiable { - BULB, - TAIL; - - static final Shape[] VALUES = values(); - - @Override - public String toString() { - return asString(); - } - - @Override - public String asString() { - return name().toLowerCase(); - } - - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/block/SlimeLayerBlock.java b/src/main/java/com/minelittlepony/unicopia/world/block/SlimeLayerBlock.java deleted file mode 100644 index ea942df7..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/block/SlimeLayerBlock.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.minelittlepony.unicopia.world.block; - -import net.minecraft.block.Blocks; -import net.minecraft.block.SnowBlock; -import net.minecraft.entity.Entity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.BlockView; -import net.minecraft.world.World; - -public class SlimeLayerBlock extends SnowBlock { - - public SlimeLayerBlock(Settings settings) { - super(settings); - } - - @Override - public void onLandedUpon(World world, BlockPos pos, Entity entity, float distance) { - Blocks.SLIME_BLOCK.onLandedUpon(world, pos, entity, distance); - } - - @Override - public void onEntityLand(BlockView world, Entity entity) { - Blocks.SLIME_BLOCK.onEntityLand(world, entity); - } - - @Override - public void onSteppedOn(World world, BlockPos pos, Entity entity) { - double velocity = Math.abs(entity.getVelocity().y); - - if (velocity < 0.1 && !entity.bypassesSteppingEffects()) { - double factor = 0.4D + velocity * (0.2D * 8/world.getBlockState(pos).get(LAYERS)); - - entity.setVelocity(entity.getVelocity().multiply(factor, 1, factor)); - } - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/block/SmartSlabBlock.java b/src/main/java/com/minelittlepony/unicopia/world/block/SmartSlabBlock.java deleted file mode 100644 index 8e0780c0..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/block/SmartSlabBlock.java +++ /dev/null @@ -1,85 +0,0 @@ -package com.minelittlepony.unicopia.world.block; - -import java.util.Random; - -import javax.annotation.Nullable; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.SlabBlock; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemPlacementContext; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.state.StateManager; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.world.BlockView; -import net.minecraft.world.World; -import net.minecraft.world.WorldAccess; - -public class SmartSlabBlock extends SlabBlock { - - protected final BlockState modelState; - - public SmartSlabBlock(BlockState inherited, Block.Settings settings) { - super(settings); - modelState = inherited; - } - - @Deprecated - @Override - public boolean isTranslucent(BlockState state, BlockView world, BlockPos pos) { - return modelState.isTranslucent(world, pos); - } - - @Override - public void scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Random rand) { - modelState.scheduledTick(world, pos, rand); - } - - @Override - public void onLandedUpon(World w, BlockPos pos, Entity entity, float fallDistance) { - modelState.getBlock().onLandedUpon(w, pos, entity, fallDistance); - } - - @Override - public void onEntityLand(BlockView w, Entity entity) { - modelState.getBlock().onEntityLand(w, entity); - } - - @Override - public void onEntityCollision(BlockState state, World w, BlockPos pos, Entity entity) { - modelState.onEntityCollision(w, pos, entity); - } - - @Deprecated - @Override - public float calcBlockBreakingDelta(BlockState state, PlayerEntity player, BlockView worldIn, BlockPos pos) { - return modelState.calcBlockBreakingDelta(player, worldIn, pos); - } - - @Override - @Nullable - public BlockState getPlacementState(ItemPlacementContext context) { - return super.getPlacementState(context).with(Covering.PROPERTY, Covering.getCovering(context.getWorld(), context.getBlockPos().up())); - } - - @Override - @Deprecated - public BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState other, WorldAccess world, BlockPos pos, BlockPos otherPos) { - state = super.getStateForNeighborUpdate(state, direction, other, world, pos, otherPos); - - if (direction == Direction.UP) { - return state.with(Covering.PROPERTY, Covering.getCovering(world, otherPos)); - } - - return state; - } - - @Override - protected void appendProperties(StateManager.Builder builder) { - super.appendProperties(builder); - builder.add(Covering.PROPERTY); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/block/SmartStairsBlock.java b/src/main/java/com/minelittlepony/unicopia/world/block/SmartStairsBlock.java deleted file mode 100644 index 777f82a4..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/block/SmartStairsBlock.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.minelittlepony.unicopia.world.block; - -import javax.annotation.Nullable; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.StairsBlock; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemPlacementContext; -import net.minecraft.state.StateManager; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.world.BlockView; -import net.minecraft.world.World; -import net.minecraft.world.WorldAccess; - -public class SmartStairsBlock extends StairsBlock { - - protected final BlockState baseBlockState; - - public SmartStairsBlock(BlockState inherited, Settings settings) { - super(inherited, settings); - setDefaultState(getDefaultState().with(Covering.PROPERTY, Covering.UNCOVERED)); - baseBlockState = inherited; - } - - @Override - public boolean isTranslucent(BlockState state, BlockView world, BlockPos pos) { - return baseBlockState.isTranslucent(world, pos); - } - - @Override - public void onLandedUpon(World w, BlockPos pos, Entity entity, float fallDistance) { - baseBlockState.getBlock().onLandedUpon(w, pos, entity, fallDistance); - } - - @Override - public void onEntityLand(BlockView w, Entity entity) { - baseBlockState.getBlock().onEntityLand(w, entity); - } - - @Override - public void onEntityCollision(BlockState state, World w, BlockPos pos, Entity entity) { - baseBlockState.onEntityCollision(w, pos, entity); - } - - @Deprecated - @Override - public float calcBlockBreakingDelta(BlockState state, PlayerEntity player, BlockView world, BlockPos pos) { - return baseBlockState.calcBlockBreakingDelta(player, world, pos); - } - - @Override - @Nullable - public BlockState getPlacementState(ItemPlacementContext context) { - return super.getPlacementState(context).with(Covering.PROPERTY, Covering.getCovering(context.getWorld(), context.getBlockPos().up())); - } - - @Override - @Deprecated - public BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState other, WorldAccess world, BlockPos pos, BlockPos otherPos) { - state = super.getStateForNeighborUpdate(state, direction, other, world, pos, otherPos); - - if (direction == Direction.UP) { - return state.with(Covering.PROPERTY, Covering.getCovering(world, otherPos)); - } - - return state; - } - - @Override - protected void appendProperties(StateManager.Builder builder) { - super.appendProperties(builder); - builder.add(Covering.PROPERTY); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/block/StickPlantBlock.java b/src/main/java/com/minelittlepony/unicopia/world/block/StickPlantBlock.java deleted file mode 100644 index 1249acfd..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/block/StickPlantBlock.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.minelittlepony.unicopia.world.block; - -import com.minelittlepony.unicopia.world.block.gas.CloudFarmlandBlock; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.block.CropBlock; -import net.minecraft.block.FarmlandBlock; -import net.minecraft.block.ShapeContext; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.Item; -import net.minecraft.item.ItemConvertible; -import net.minecraft.item.ItemPlacementContext; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; -import net.minecraft.util.hit.BlockHitResult; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Box; -import net.minecraft.util.math.Vec3d; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.util.shape.VoxelShapes; -import net.minecraft.world.BlockView; -import net.minecraft.world.World; - -public class StickPlantBlock extends CropBlock { - - private static final VoxelShape BOUNDING_BOX = VoxelShapes.cuboid(new Box( - 7/16F, -1/16F, 7/16F, - 9/16F, 15/16F, 9/16F - )); - - private final ItemConvertible seeds; - private final ItemConvertible crop; - private final ItemConvertible waste; - - public StickPlantBlock(Settings settings, ItemConvertible seeds, ItemConvertible crop, ItemConvertible waste) { - super(settings); - this.seeds = seeds; - this.crop = crop; - this.waste = waste; - } - - @Deprecated - @Override - public VoxelShape getOutlineShape(BlockState state, BlockView source, BlockPos pos, ShapeContext context) { - Vec3d off = state.getModelOffset(source, pos); - return BOUNDING_BOX.offset(off.x, off.y, off.z); - } - - @Override - public Block.OffsetType getOffsetType() { - return Block.OffsetType.XZ; - } - - @Override - public Item getSeedsItem() { - return seeds.asItem(); - } - - @Override - protected boolean canPlantOnTop(BlockState floor, BlockView view, BlockPos pos) { - Block block = floor.getBlock(); - - if (seeds.asItem() == Items.AIR) { - return block instanceof StickPlantBlock - || block == Blocks.GRASS_BLOCK || block == Blocks.DIRT || block == Blocks.COARSE_DIRT - || block == Blocks.PODZOL || block == Blocks.FARMLAND || block == UBlocks.CLOUD_FARMLAND; - } - return super.canPlantOnTop(floor, view, pos) || block == UBlocks.CLOUD_FARMLAND; - } - - @Override - public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { - - if (hand == Hand.MAIN_HAND && isMature(state)) { - if (player.getStackInHand(hand).isEmpty()) { - int good = getAge(state); - int rotten = world.random.nextInt(good); - - good -= rotten; - - if (good > 0) { - dropStack(world, pos, new ItemStack(crop.asItem(), good)); - } - if (rotten > 0) { - dropStack(world, pos, new ItemStack(waste.asItem(), rotten)); - } - - world.setBlockState(pos, state.with(getAgeProperty(), 0)); - - return ActionResult.SUCCESS; - } - } - - return ActionResult.PASS; - } - - @Override - public void applyGrowth(World world, BlockPos pos, BlockState state) { - int age = Math.min(getAge(state) + getGrowthAmount(world), getMaxAge()); - - world.setBlockState(pos, state.with(getAgeProperty(), age), 2); - } - - @Override - public BlockState getPlacementState(ItemPlacementContext context) { - return getPlacedState(context.getWorld(), context.getBlockPos().down(), context.getWorld().getBlockState(context.getBlockPos().down())); - } - - public BlockState getPlacedState(World world, BlockPos pos, BlockState state) { - - if (state.getBlock() instanceof CloudFarmlandBlock) { - return UBlocks.CLOUDSDALE_TOMATO_PLANT.getDefaultState(); - } - if (state.getBlock() instanceof FarmlandBlock) { - return UBlocks.TOMATO_PLANT.getDefaultState(); - } - - return getDefaultState(); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/block/TallCropBlock.java b/src/main/java/com/minelittlepony/unicopia/world/block/TallCropBlock.java deleted file mode 100644 index a4d61c30..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/block/TallCropBlock.java +++ /dev/null @@ -1,257 +0,0 @@ -package com.minelittlepony.unicopia.world.block; - -import java.util.Random; - -import javax.annotation.Nullable; - -import com.minelittlepony.unicopia.world.item.UItems; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.CropBlock; -import net.minecraft.block.ShapeContext; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.Item; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.state.StateManager; -import net.minecraft.state.property.EnumProperty; -import net.minecraft.state.property.IntProperty; -import net.minecraft.util.StringIdentifiable; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.util.shape.VoxelShapes; -import net.minecraft.world.BlockView; -import net.minecraft.world.World; -import net.minecraft.world.WorldView; - -public class TallCropBlock extends CropBlock { - - public static final IntProperty AGE = IntProperty.of("age", 0, 4); - public static final EnumProperty HALF = EnumProperty.of("half", Half.class); - - private static final VoxelShape[] SHAPES = new VoxelShape[] { - Block.createCuboidShape(0, 0, 0, 16, 1.6, 16), - Block.createCuboidShape(0, 0, 0, 16, 3.2, 16), - Block.createCuboidShape(0, 0, 0, 16, 4.4, 16), - Block.createCuboidShape(0, 0, 0, 16, 9.6, 16), - Block.createCuboidShape(0, 0, 0, 16, 12.8, 16), - Block.createCuboidShape(0, 0, 0, 16, 16, 16), - Block.createCuboidShape(0, 0, 0, 16, 17.6, 16), - Block.createCuboidShape(0, 0, 0, 16, 19.2, 16), - Block.createCuboidShape(0, 0, 0, 16, 20.4, 16), - Block.createCuboidShape(0, 0, 0, 16, 25.6, 16), - Block.createCuboidShape(0, 0, 0, 16, 32, 16), - Block.createCuboidShape(0, 0, 0, 16, 33.6, 16), - Block.createCuboidShape(0, 0, 0, 16, 38.4, 16), - Block.createCuboidShape(0, 0, 0, 16, 67.6, 16), - Block.createCuboidShape(0, 0, 0, 16, 44.8, 16), - Block.createCuboidShape(0, 0, 0, 16, 48, 16) - }; - - public TallCropBlock(Settings settings) { - super(settings); - setDefaultState(getDefaultState().with(HALF, Half.BOTTOM)); - } - - @Override - protected void appendProperties(StateManager.Builder builder) { - builder.add(AGE, HALF); - } - - @Override - public OffsetType getOffsetType() { - return OffsetType.XZ; - } - - @Override - public IntProperty getAgeProperty() { - return AGE; - } - - @Override - public int getMaxAge() { - return 4; - } - - @Override - protected Item getSeedsItem() { - return UItems.ALFALFA_SEEDS; - } - - @Override - public void scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Random rand) { - if (rand.nextInt(10) != 0 && world.isChunkLoaded(pos) && world.getLightLevel(pos.up()) >= 9) { - if (canGrow(world, rand, pos, state)) { - growUpwards(world, pos, state, 1); - } - } - } - - @Override - protected boolean canPlantOnTop(BlockState state, BlockView view, BlockPos pos) { - return state.getBlock() == this || super.canPlantOnTop(state, view, pos); - } - - protected void growUpwards(World world, BlockPos pos, BlockState state, int increase) { - boolean hasDown = world.getBlockState(pos.down()).getBlock() == this; - boolean hasTrunk = world.getBlockState(pos.down(2)).getBlock() == this; - boolean hasRoot = world.getBlockState(pos.down(3)).getBlock() == this; - - if (state.getBlock() != this) { - if (state.isAir()) { - if (!(hasDown && hasTrunk && hasRoot)) { - world.setBlockState(pos, withAge(increase).with(HALF, Half.TOP)); - } - } - return; - } - - int age = getAge(state) + increase; - int max = getMaxAge(); - - if (age > max) { - if (!(hasDown && hasTrunk)) { - growUpwards(world, pos.up(), world.getBlockState(pos.up()), age - max); - } - age = max; - } - - boolean hasUp = world.getBlockState(pos.up()).getBlock() == this; - - if (hasDown && hasUp) { - world.setBlockState(pos, withAge(age).with(HALF, Half.MIDDLE)); - } else if (hasUp) { - world.setBlockState(pos, withAge(age).with(HALF, Half.BOTTOM)); - } else { - world.setBlockState(pos, withAge(age).with(HALF, Half.TOP)); - } - } - - @Override - public boolean canPlaceAt(BlockState state, WorldView world, BlockPos pos) { - return getHalf(state) != Half.BOTTOM || super.canPlaceAt(state, world, pos); - } - - public void onPlayerDestroy(World worldIn, BlockPos pos, BlockState state) { - breakConnectedBlocks(worldIn, pos, null); - } - - @Override - public void onBreak(World worldIn, BlockPos pos, BlockState state, PlayerEntity player) { - breakConnectedBlocks(worldIn, pos, player); - } - - protected void breakConnectedBlocks(World worldIn, BlockPos pos, @Nullable PlayerEntity player) { - BlockState state = worldIn.getBlockState(pos); - - if (state.getBlock() != this) { - return; - } - - worldIn.breakBlock(pos, true); - - Half half = getHalf(state); - - if (half.checkDown()) { - breakConnectedBlocks(worldIn, pos.down(), player); - } - if (half.checkUp()) { - breakConnectedBlocks(worldIn, pos.up(), player); - } - } - - @Override - protected int getGrowthAmount(World world) { - return super.getGrowthAmount(world) / 2; - } - - @Override - public VoxelShape getCollisionShape(BlockState state, BlockView view, BlockPos pos, ShapeContext context) { - if (getHalf(state) != Half.MIDDLE) { - return VoxelShapes.empty(); - } - return super.getCollisionShape(state, view, pos, context); - } - - @Override - public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext ePos) { - Vec3d offset = state.getModelOffset(view, pos); - return SHAPES[Math.min(SHAPES.length - 1, getFullAge(view, pos))].offset(offset.x, offset.y, offset.z); - } - - @Override - public boolean canGrow(World world, Random random, BlockPos pos, BlockState state) { - Half half = getHalf(state); - - if (half == Half.MIDDLE || (half == Half.TOP && world.getBlockState(pos.down()).getBlock() == this)) { - return false; - } - - BlockState above = world.getBlockState(pos.up(1)); - BlockState higher = world.getBlockState(pos.up(2)); - - boolean iCanGrow = !isMature(state); - boolean aboveCanGrow = above.getBlock() != this || !isMature(above); - boolean higherCanGrow = higher.getBlock() != this || !isMature(higher); - - return iCanGrow || aboveCanGrow || higherCanGrow; - } - - @Override - public void applyGrowth(World world, BlockPos pos, BlockState state) { - growUpwards(world, pos, state, getGrowthAmount(world)); - } - - protected BlockPos getTip(World world, BlockPos pos) { - BlockPos above = pos.up(); - BlockState state = world.getBlockState(above); - - if (state.getBlock() == this) { - return getTip(world, above); - } - - return pos; - } - - protected int getFullAge(BlockView world, BlockPos pos) { - BlockState state = world.getBlockState(pos); - - int age = 0; - - if (state.getBlock() == this) { - age += state.get(getAgeProperty()); - age += getFullAge(world, pos.up()); - } - - return age; - } - - protected Half getHalf(BlockState state) { - return state.get(HALF); - } - - public enum Half implements StringIdentifiable { - TOP, - MIDDLE, - BOTTOM; - - boolean checkUp() { - return this != TOP; - } - - boolean checkDown() { - return this != BOTTOM; - } - - @Override - public String toString() { - return super.toString().toLowerCase(); - } - - @Override - public String asString() { - return toString(); - } - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/block/UBlocks.java b/src/main/java/com/minelittlepony/unicopia/world/block/UBlocks.java deleted file mode 100644 index 783364f9..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/block/UBlocks.java +++ /dev/null @@ -1,185 +0,0 @@ -package com.minelittlepony.unicopia.world.block; - -import com.minelittlepony.unicopia.TreeType; -import com.minelittlepony.unicopia.world.block.gas.CloudAnvilBlock; -import com.minelittlepony.unicopia.world.block.gas.CloudBlock; -import com.minelittlepony.unicopia.world.block.gas.CloudDoorBlock; -import com.minelittlepony.unicopia.world.block.gas.CloudFarmlandBlock; -import com.minelittlepony.unicopia.world.block.gas.CloudFenceBlock; -import com.minelittlepony.unicopia.world.block.gas.CloudSlabBlock; -import com.minelittlepony.unicopia.world.block.gas.CloudSoilBlock; -import com.minelittlepony.unicopia.world.block.gas.CloudStairsBlock; -import com.minelittlepony.unicopia.world.block.gas.CoverableCloudBlock; -import com.minelittlepony.unicopia.world.block.gas.GasState; -import com.minelittlepony.unicopia.world.block.gas.PillarCloudBlock; -import com.minelittlepony.unicopia.world.item.UItems; -import com.minelittlepony.unicopia.world.structure.CustomSaplingGenerator; - -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; -import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; -import net.minecraft.block.Block; -import net.minecraft.block.FallingBlock; -import net.minecraft.block.Material; -import net.minecraft.block.MaterialColor; -import net.minecraft.block.SaplingBlock; -import net.minecraft.block.SlabBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.sound.BlockSoundGroup; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; - -public interface UBlocks { - CloudFarmlandBlock CLOUD_FARMLAND = register("cloud_farmland", new CloudFarmlandBlock(GasState.NORMAL.configure())); - CloudBlock CLOUD_BLOCK = register("cloud_block", new CloudSoilBlock(GasState.NORMAL)); - CloudBlock ENCHANTED_CLOUD_BLOCK = register("enchanted_cloud_block", new CoverableCloudBlock(GasState.ENCHANTED)); - CloudBlock DENSE_CLOUD_BLOCK = register("dense_cloud_block", new CloudBlock(GasState.DENSE)); - CloudBlock DENSE_CLOUD_PILLAR = register("dense_cloud_pillar", new PillarCloudBlock(GasState.DENSE)); - - CloudStairsBlock CLOUD_STAIRS = register("cloud_stairs", new CloudStairsBlock(CLOUD_BLOCK.getDefaultState(), GasState.NORMAL.configure())); - CloudStairsBlock ENCHANTED_CLOUD_STAIRS = register("enchanted_cloud_stairs", new CloudStairsBlock(ENCHANTED_CLOUD_BLOCK.getDefaultState(), GasState.ENCHANTED.configure())); - CloudStairsBlock DENSE_CLOUD_STAIRS = register("dense_cloud_stairs", new CloudStairsBlock(DENSE_CLOUD_BLOCK.getDefaultState(), GasState.DENSE.configure())); - - CloudSlabBlock CLOUD_SLAB = register("cloud_slab", new CloudSlabBlock(CLOUD_BLOCK.getDefaultState(), GasState.NORMAL.configure())); - CloudSlabBlock ENCHANTED_CLOUD_SLAB = register("enchanted_cloud_slab", new CloudSlabBlock(ENCHANTED_CLOUD_BLOCK.getDefaultState(), GasState.ENCHANTED.configure())); - CloudSlabBlock DENSE_CLOUD_SLAB = register("dense_cloud_slab", new CloudSlabBlock(DENSE_CLOUD_BLOCK.getDefaultState(), GasState.DENSE.configure())); - - CloudDoorBlock MISTED_GLASS_DOOR = register("misted_glass_door", new CloudDoorBlock(FabricBlockSettings.of(Material.GLASS) - .sounds(BlockSoundGroup.GLASS) - .hardness(3) - .resistance(200) - .nonOpaque() - .breakByTool(FabricToolTags.PICKAXES, 0))); - DutchDoorBlock LIBRARY_DOOR = register("library_door", new DutchDoorBlock(FabricBlockSettings.of(Material.WOOD). - sounds(BlockSoundGroup.WOOD) - .hardness(3) - .nonOpaque())); - DutchDoorBlock BAKERY_DOOR = register("bakery_door", new DutchDoorBlock(FabricBlockSettings.of(Material.WOOD) - .sounds(BlockSoundGroup.WOOD) - .hardness(3) - .nonOpaque())); - DiamondDoorBlock DIAMOND_DOOR = register("diamond_door", new DiamondDoorBlock(FabricBlockSettings.of(Material.METAL) - .sounds(BlockSoundGroup.METAL) - .materialColor(MaterialColor.DIAMOND) - .strength(6, 20) - .nonOpaque())); - - GemTorchBlock ENCHANTED_TORCH = register("enchanted_torch", new GemTorchBlock(FabricBlockSettings.of(Material.SUPPORTED) - .noCollision() - .breakInstantly() - .ticksRandomly() - .lightLevel(GemTorchBlock.lightFunc(11)) - .sounds(BlockSoundGroup.GLASS))); - GemTorchBlock ENCHANTED_WALL_TORCH = register("enchanted_wall_torch", new WallGemTorchBlock(FabricBlockSettings.of(Material.SUPPORTED) - .noCollision() - .breakInstantly() - .ticksRandomly() - .lightLevel(GemTorchBlock.lightFunc(11)) - .sounds(BlockSoundGroup.GLASS))); - - CloudAnvilBlock CLOUD_ANVIL = register("cloud_anvil", new CloudAnvilBlock(GasState.NORMAL.configure() - .strength(0.025F, 2000) - .breakByTool(FabricToolTags.SHOVELS, 0) - .ticksRandomly())); - - CloudFenceBlock CLOUD_FENCE = register("cloud_fence", new CloudFenceBlock(GasState.NORMAL)); - - TallCropBlock ALFALFA_CROPS = register("alfalfa_crops", new TallCropBlock(FabricBlockSettings.of(Material.PLANT) - .noCollision() - .ticksRandomly() - .breakInstantly() - .sounds(BlockSoundGroup.CROP))); - - StickPlantBlock STICK = register("stick", new StickPlantBlock(FabricBlockSettings.of(UMaterials.STICK) - .nonOpaque() - .strength(0.2F, 0.2F) - .sounds(BlockSoundGroup.WOOD), Items.AIR, Items.AIR, Items.AIR)); - StickPlantBlock TOMATO_PLANT = register("tomato_plant", new StickPlantBlock(FabricBlockSettings.of(UMaterials.STICK) - .nonOpaque() - .strength(0.2F, 0.2F) - .ticksRandomly() - .sounds(BlockSoundGroup.WOOD), - () -> UItems.TOMATO_SEEDS, - () -> UItems.TOMATO, - () -> UItems.ROTTEN_TOMATO)); - StickPlantBlock CLOUDSDALE_TOMATO_PLANT = register("cloudsdale_tomato_plant", new StickPlantBlock(FabricBlockSettings.of(UMaterials.STICK) - .nonOpaque() - .strength(0.2F, 0.2F) - .ticksRandomly() - .sounds(BlockSoundGroup.WOOD), - () -> UItems.TOMATO_SEEDS, - () -> UItems.CLOUDSDALE_TOMATO, - () -> UItems.ROTTEN_CLOUDSDALE_TOMATO)); - - HiveWallBlock HIVE_WALL_BLOCK = register("hive_wall_block", new HiveWallBlock(FabricBlockSettings.of(UMaterials.HIVE) - .strength(10, 10) - .hardness(2) - .ticksRandomly() - .lightLevel(3) - .sounds(BlockSoundGroup.SAND) - .breakByTool(FabricToolTags.SHOVELS, 1) - .emissiveLighting((state, world, pos) -> true))); - Block CHITIN_SHELL_BLOCK = register("chitin_shell_block", new ChitinBlock(FabricBlockSettings.of(UMaterials.CHITIN) - .strength(50, 2000) - .breakByTool(FabricToolTags.PICKAXES, 2))); - Block CHITIN_SHELL_STAIRS = register("chitin_shell_stairs", new SmartStairsBlock(CHITIN_SHELL_BLOCK.getDefaultState(), FabricBlockSettings.of(UMaterials.CHITIN) - .strength(50, 2000) - .breakByTool(FabricToolTags.PICKAXES, 2))); - Block CHITIN_SHELL_SLAB = register("chitin_shell_slab", new SmartSlabBlock(CHITIN_SHELL_BLOCK.getDefaultState(), FabricBlockSettings.of(UMaterials.CHITIN) - .strength(50, 2000) - .breakByTool(FabricToolTags.PICKAXES, 2))); - - Block CHISELED_CHITIN_SHELL_BLOCK = register("chiseled_chitin_shell_block", new ChiselledChitinBlock(FabricBlockSettings.of(UMaterials.CHITIN) - .strength(50, 2000) - .breakByTool(FabricToolTags.PICKAXES, 2))); - - SlimeDripBlock SLIME_DRIP = register("slime_drip", new SlimeDripBlock(FabricBlockSettings.of(UMaterials.HIVE, MaterialColor.GRASS) - .ticksRandomly() - .breakInstantly() - .lightLevel(9) - .slipperiness(0.5F) - .sounds(BlockSoundGroup.SLIME) - .breakByTool(FabricToolTags.SHOVELS, 2))); - SlimeLayerBlock SLIME_LAYER = register("slime_layer", new SlimeLayerBlock(FabricBlockSettings.of(Material.ORGANIC_PRODUCT, MaterialColor.GRASS) - .sounds(BlockSoundGroup.SLIME) - .slipperiness(0.8F) - .nonOpaque())); - - Block SMOOTH_MARBLE_BLOCK = register("smooth_marble_block", new Block(FabricBlockSettings.of(Material.STONE) - .strength(0.7F, 10) - .breakByTool(FabricToolTags.PICKAXES))); - Block CHISELED_MARBLE_BLOCK = register("chiseled_marble_block", new Block(FabricBlockSettings.of(Material.STONE) - .strength(0.8F, 10) - .breakByTool(FabricToolTags.PICKAXES))); - Block SMOOTH_MARBLE_SLAB = register("smooth_marble_slab", new SlabBlock(FabricBlockSettings.of(Material.STONE) - .strength(0.7F, 10) - .breakByTool(FabricToolTags.PICKAXES))); - - Block SUGAR_BLOCK = register("sugar_block", new FallingBlock(FabricBlockSettings.of(Material.AGGREGATE) - .strength(10, 10) - .hardness(0.7F) - .sounds(BlockSoundGroup.SAND) - .breakByTool(FabricToolTags.SHOVELS))); - Block APPLE_LEAVES = register("apple_leaves", new FruitLeavesBlock(FabricBlockSettings.of(Material.LEAVES) - .nonOpaque() - .strength(0.2F, 0.2F) - .ticksRandomly() - .sounds(BlockSoundGroup.GRASS)) - .growthChance(1200) - .tint(0xFFEE81) - .fruit(W -> TreeType.OAK.pickRandomStack()) - .compost(w -> new ItemStack(UItems.ROTTEN_APPLE))); - - SaplingBlock APPLE_SAPLING = register("apple_sapling", new SaplingBlock(CustomSaplingGenerator.APPLE_TREE, FabricBlockSettings.of(Material.WOOD) - .noCollision() - .ticksRandomly() - .breakInstantly() - .sounds(BlockSoundGroup.GRASS)) {}); - - - static T register(String name, T block) { - return Registry.register(Registry.BLOCK, new Identifier("unicopia", name), block); - } - - static void bootstrap() { } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/block/UMaterials.java b/src/main/java/com/minelittlepony/unicopia/world/block/UMaterials.java deleted file mode 100644 index f0102e0f..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/block/UMaterials.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.minelittlepony.unicopia.world.block; - -import net.fabricmc.fabric.api.object.builder.v1.block.FabricMaterialBuilder; -import net.minecraft.block.Material; -import net.minecraft.block.MaterialColor; - -public interface UMaterials { - Material CLOUD = new FabricMaterialBuilder(MaterialColor.WHITE).allowsMovement().lightPassesThrough().notSolid().build(); - Material HIVE = new Material.Builder(MaterialColor.NETHER).build(); - Material CHITIN = new Material.Builder(MaterialColor.BLACK).build(); - Material STICK = new FabricMaterialBuilder(MaterialColor.WOOD).allowsMovement().burnable().destroyedByPiston().lightPassesThrough().notSolid().build(); -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/block/WallGemTorchBlock.java b/src/main/java/com/minelittlepony/unicopia/world/block/WallGemTorchBlock.java deleted file mode 100644 index cec9ce24..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/block/WallGemTorchBlock.java +++ /dev/null @@ -1,93 +0,0 @@ -package com.minelittlepony.unicopia.world.block; - -import javax.annotation.Nullable; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.block.ShapeContext; -import net.minecraft.item.ItemPlacementContext; -import net.minecraft.state.StateManager; -import net.minecraft.state.property.Properties; -import net.minecraft.util.BlockMirror; -import net.minecraft.util.BlockRotation; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.world.BlockView; -import net.minecraft.world.WorldAccess; -import net.minecraft.world.WorldView; - -public class WallGemTorchBlock extends GemTorchBlock { - private static final VoxelShape NORTH = createCuboidShape(6, 3, 10, 10, 16, 16); - private static final VoxelShape SOUTH = createCuboidShape(6, 3, 0, 10, 16, 5); - private static final VoxelShape WEST = createCuboidShape(10, 3, 6, 16, 16, 10); - private static final VoxelShape EAST = createCuboidShape(0, 3, 6, 5, 16, 10); - - public WallGemTorchBlock(Settings settings) { - super(settings); - setDefaultState(stateManager.getDefaultState() - .with(Properties.HORIZONTAL_FACING, Direction.NORTH) - .with(Properties.LIT, true) - ); - } - - @Override - @Nullable - public BlockState getPlacementState(ItemPlacementContext ctx) { - BlockState blockState = Blocks.WALL_TORCH.getPlacementState(ctx); - - if (blockState != null) { - return getDefaultState().with(Properties.HORIZONTAL_FACING, blockState.get(Properties.HORIZONTAL_FACING)); - } - - return null; - } - - @Override - protected Direction getDirection(BlockState state) { - return state.get(Properties.HORIZONTAL_FACING); - } - - @Override - public boolean canPlaceAt(BlockState state, WorldView world, BlockPos pos) { - return Blocks.WALL_TORCH.canPlaceAt(state, world, pos); - } - - @Override - public BlockState getStateForNeighborUpdate(BlockState state, Direction facing, BlockState neighborState, WorldAccess world, BlockPos pos, BlockPos neighborPos) { - return Blocks.WALL_TORCH.getStateForNeighborUpdate(state, facing, neighborState, world, pos, neighborPos); - } - - @Override - public BlockState rotate(BlockState state, BlockRotation rotation) { - return Blocks.WALL_TORCH.rotate(state, rotation); - } - - @Override - public BlockState mirror(BlockState state, BlockMirror mirror) { - return Blocks.WALL_TORCH.mirror(state, mirror); - } - - @Override - public int getWeakRedstonePower(BlockState state, BlockView view, BlockPos pos, Direction facing) { - return state.get(Properties.LIT) && state.get(Properties.HORIZONTAL_FACING) != facing ? 12 : 0; - } - - @Override - protected void appendProperties(StateManager.Builder builder) { - super.appendProperties(builder); - builder.add(Properties.HORIZONTAL_FACING); - } - - @Override - public VoxelShape getOutlineShape(BlockState state, BlockView source, BlockPos pos, ShapeContext context) { - switch (state.get(Properties.HORIZONTAL_FACING)) { - case EAST: return EAST; - case WEST: return WEST; - case SOUTH: return SOUTH; - case NORTH: return NORTH; - default: return super.getOutlineShape(state, source, pos, context); - } - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/block/gas/CloudAnvilBlock.java b/src/main/java/com/minelittlepony/unicopia/world/block/gas/CloudAnvilBlock.java deleted file mode 100644 index 74b66cfa..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/block/gas/CloudAnvilBlock.java +++ /dev/null @@ -1,111 +0,0 @@ -package com.minelittlepony.unicopia.world.block.gas; - -import java.util.Random; - -import com.minelittlepony.unicopia.util.WorldEvent; - -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -import net.minecraft.block.AnvilBlock; -import net.minecraft.block.BlockState; -import net.minecraft.entity.Entity; -import net.minecraft.entity.FallingBlockEntity; -import net.minecraft.block.ShapeContext; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; -import net.minecraft.util.hit.BlockHitResult; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.util.shape.VoxelShapes; -import net.minecraft.world.BlockView; -import net.minecraft.world.World; - -public class CloudAnvilBlock extends AnvilBlock implements Gas { - public CloudAnvilBlock(Settings settings) { - super(settings); - } - - @Override - public void onLandedUpon(World world, BlockPos pos, Entity entityIn, float fallDistance) { - if (!applyLanding(entityIn, fallDistance)) { - super.onLandedUpon(world, pos, entityIn, fallDistance); - } - } - - @Override - public void onLanding(World world, BlockPos pos, BlockState fallingState, BlockState hitState, FallingBlockEntity entity) { - world.syncWorldEvent(WorldEvent.BAT_TAKEOFF, pos, 0); - } - - @Override - public void onDestroyedOnLanding(World world, BlockPos pos, FallingBlockEntity entity) { - world.syncWorldEvent(WorldEvent.BAT_TAKEOFF, pos, 0); - } - - @Override - public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { - return ActionResult.PASS; - } - - @Override - public void onEntityLand(BlockView world, Entity entity) { - if (!applyRebound(entity)) { - super.onEntityLand(world, entity); - } - } - - @Override - public void scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Random rand) { - if (!(world.getBlockState(pos.down()).getBlock() instanceof Gas)) { - super.scheduledTick(state, world, pos, rand); - } - } - - @Override - @Environment(EnvType.CLIENT) - public void randomDisplayTick(BlockState state, World world, BlockPos pos, Random random) { - if (!(world.getBlockState(pos.down()).getBlock() instanceof Gas)) { - super.randomDisplayTick(state, world, pos, random); - } - } - - @Override - public void onEntityCollision(BlockState state, World w, BlockPos pos, Entity entity) { - if (!applyBouncyness(state, entity)) { - super.onEntityCollision(state, w, pos, entity); - } - } - - @Override - public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext context) { - if (getGasState(state).canPlace((CloudInteractionContext)context)) { - return super.getOutlineShape(state, view, pos, context); - } - return VoxelShapes.empty(); - } - - @Override - public VoxelShape getCollisionShape(BlockState state, BlockView view, BlockPos pos, ShapeContext context) { - if (getGasState(state).canTouch((CloudInteractionContext)context)) { - return super.getCollisionShape(state, view, pos, context); - } - return VoxelShapes.empty(); - } - - @Deprecated - @Override - public float calcBlockBreakingDelta(BlockState state, PlayerEntity player, BlockView world, BlockPos pos) { - if (GasState.NORMAL.canTouch(player)) { - return super.calcBlockBreakingDelta(state, player, world, pos); - } - return -1; - } - - - @Override - public GasState getGasState(BlockState blockState) { - return GasState.NORMAL; - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/block/gas/CloudBlock.java b/src/main/java/com/minelittlepony/unicopia/world/block/gas/CloudBlock.java deleted file mode 100644 index 5db1b2f4..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/block/gas/CloudBlock.java +++ /dev/null @@ -1,113 +0,0 @@ -package com.minelittlepony.unicopia.world.block.gas; - -import java.util.Random; - -import com.minelittlepony.unicopia.util.blockstate.StateMaps; - -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.entity.Entity; -import net.minecraft.block.ShapeContext; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.util.math.Direction; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.util.shape.VoxelShapes; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.BlockView; -import net.minecraft.world.World; - -public class CloudBlock extends Block implements Gas { - - private final GasState variant; - - public CloudBlock(GasState variant) { - super(variant.configure() - .ticksRandomly() - ); - this.variant = variant; - } - - @Override - public GasState getGasState(BlockState state) { - return variant; - } - - @Override - public float getAmbientOcclusionLightLevel(BlockState state, BlockView view, BlockPos pos) { - return getGasState(state).isTranslucent() ? 0.9F : 0.5F; - } - - @Override - public boolean isTranslucent(BlockState state, BlockView world, BlockPos pos) { - return getGasState(state).isTranslucent(); - } - - @Override - public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext context) { - if (getGasState(state).canPlace((CloudInteractionContext)context)) { - return VoxelShapes.fullCube(); - } - return VoxelShapes.empty(); - } - - @Override - public VoxelShape getCollisionShape(BlockState state, BlockView view, BlockPos pos, ShapeContext context) { - if (getGasState(state).canTouch((CloudInteractionContext)context)) { - return collidable ? VoxelShapes.fullCube() : VoxelShapes.empty(); - } - return VoxelShapes.empty(); - } - - @Override - public void scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Random rand) { - if (rand.nextInt(10) == 0) { - pos = pos.offset(Direction.random(rand), 1 + rand.nextInt(2)); - state = world.getBlockState(pos); - - BlockState converted = StateMaps.MOSS_AFFECTED.getInverse().getConverted(state); - - if (!state.equals(converted)) { - world.setBlockState(pos, converted); - } - } - } - - @Override - @Environment(EnvType.CLIENT) - public boolean isSideInvisible(BlockState state, BlockState beside, Direction face) { - return isFaceCoverd(state, beside, face); - } - - @Override - public void onLandedUpon(World world, BlockPos pos, Entity entityIn, float fallDistance) { - if (!applyLanding(entityIn, fallDistance)) { - super.onLandedUpon(world, pos, entityIn, fallDistance); - } - } - - @Override - public void onEntityLand(BlockView world, Entity entity) { - if (!applyRebound(entity)) { - super.onEntityLand(world, entity); - } - } - - @Override - public void onEntityCollision(BlockState state, World w, BlockPos pos, Entity entity) { - if (!applyBouncyness(state, entity)) { - super.onEntityCollision(state, w, pos, entity); - } - } - - @Deprecated - @Override - public float calcBlockBreakingDelta(BlockState state, PlayerEntity player, BlockView worldIn, BlockPos pos) { - if (GasState.NORMAL.canTouch(player)) { - return super.calcBlockBreakingDelta(state, player, worldIn, pos); - } - return -1; - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/block/gas/CloudDoorBlock.java b/src/main/java/com/minelittlepony/unicopia/world/block/gas/CloudDoorBlock.java deleted file mode 100644 index bbc91774..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/block/gas/CloudDoorBlock.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.minelittlepony.unicopia.world.block.gas; - -import com.minelittlepony.unicopia.world.block.AbstractDoorBlock; - -import net.minecraft.block.BlockState; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; -import net.minecraft.util.hit.BlockHitResult; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.BlockView; -import net.minecraft.world.World; - -public class CloudDoorBlock extends AbstractDoorBlock implements Gas { - public CloudDoorBlock(Settings settings) { - super(settings); - } - - @Override - public GasState getGasState(BlockState blockState) { - return GasState.NORMAL; - } - - @Override - public ActionResult onUse(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { - if (!getGasState(state).canTouch(player)) { - return ActionResult.PASS; - } - return super.onUse(state, worldIn, pos, player, hand, hit); - } - - @Override - public void onEntityCollision(BlockState state, World w, BlockPos pos, Entity entity) { - if (!applyBouncyness(state, entity)) { - super.onEntityCollision(state, w, pos, entity); - } - } - - @Deprecated - @Override - public float calcBlockBreakingDelta(BlockState state, PlayerEntity player, BlockView world, BlockPos pos) { - if (GasState.NORMAL.canTouch(player)) { - float f = state.getHardness(world, pos); - f = Math.max(f, Math.min(60, f + (pos.getY() - 100))); - if (f == -1) { - return 0; - } - - float toolBreakingSpeedUp = player.isUsingEffectiveTool(state) ? 30 : 100; - return player.getBlockBreakingSpeed(state) / f / toolBreakingSpeedUp; - } - return -1; - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/block/gas/CloudFarmlandBlock.java b/src/main/java/com/minelittlepony/unicopia/world/block/gas/CloudFarmlandBlock.java deleted file mode 100644 index b32062e8..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/block/gas/CloudFarmlandBlock.java +++ /dev/null @@ -1,102 +0,0 @@ -package com.minelittlepony.unicopia.world.block.gas; - -import com.minelittlepony.unicopia.ducks.Farmland; -import com.minelittlepony.unicopia.world.block.UBlocks; - -import net.minecraft.block.BlockState; -import net.minecraft.block.FarmlandBlock; -import net.minecraft.entity.Entity; -import net.minecraft.block.ShapeContext; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.util.math.Direction.Axis; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.util.shape.VoxelShapes; -import net.minecraft.world.BlockView; -import net.minecraft.world.World; - -public class CloudFarmlandBlock extends FarmlandBlock implements Farmland, Gas { - - public CloudFarmlandBlock(Settings settings) { - super(settings); - } - - @Override - public boolean isSideInvisible(BlockState state, BlockState beside, Direction face) { - - if (beside.getBlock() instanceof Gas) { - Gas cloud = ((Gas)beside.getBlock()); - - if (face.getAxis() == Axis.Y || cloud == this) { - if (cloud.getGasState(beside) == getGasState(state)) { - return true; - } - } - } - - return super.isSideInvisible(state, beside, face); - } - - @Override - public void onLandedUpon(World world, BlockPos pos, Entity entityIn, float fallDistance) { - if (!applyLanding(entityIn, fallDistance)) { - super.onLandedUpon(world, pos, entityIn, fallDistance); - } - } - - @Override - public void onEntityLand(BlockView world, Entity entity) { - if (!applyRebound(entity)) { - super.onEntityLand(world, entity); - } - } - - @Override - public void onEntityCollision(BlockState state, World w, BlockPos pos, Entity entity) { - if (!applyBouncyness(state, entity)) { - super.onEntityCollision(state, w, pos, entity); - } - } - - @Override - public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext context) { - CloudInteractionContext ctx = (CloudInteractionContext)context; - - if (!getGasState(state).canPlace(ctx)) { - return VoxelShapes.empty(); - } - - return super.getOutlineShape(state, view, pos, context); - } - - @Override - public VoxelShape getCollisionShape(BlockState state, BlockView view, BlockPos pos, ShapeContext context) { - CloudInteractionContext ctx = (CloudInteractionContext)context; - - if (!getGasState(state).canTouch(ctx)) { - return VoxelShapes.empty(); - } - - return super.getCollisionShape(state, view, pos, context); - } - - @Deprecated - @Override - public float calcBlockBreakingDelta(BlockState state, PlayerEntity player, BlockView world, BlockPos pos) { - if (GasState.NORMAL.canTouch(player)) { - return super.calcBlockBreakingDelta(state, player, world, pos); - } - return -1; - } - - @Override - public GasState getGasState(BlockState blockState) { - return GasState.NORMAL; - } - - @Override - public BlockState getDirtState(BlockState state, World world, BlockPos pos) { - return UBlocks.CLOUD_BLOCK.getDefaultState(); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/block/gas/CloudFenceBlock.java b/src/main/java/com/minelittlepony/unicopia/world/block/gas/CloudFenceBlock.java deleted file mode 100644 index afd8f26f..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/block/gas/CloudFenceBlock.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.minelittlepony.unicopia.world.block.gas; - -import net.minecraft.block.BlockState; -import net.minecraft.block.FenceBlock; -import net.minecraft.block.ShapeContext; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.util.shape.VoxelShapes; -import net.minecraft.world.BlockView; -import net.minecraft.world.World; - -public class CloudFenceBlock extends FenceBlock implements Gas { - - private final GasState variant; - - public CloudFenceBlock(GasState variant) { - super(variant.configure()); - this.variant = variant; - } - - @Override - public boolean isTranslucent(BlockState state, BlockView world, BlockPos pos) { - return getGasState(state).isTranslucent(); - } - - @Override - public GasState getGasState(BlockState blockState) { - return variant; - } - - @Override - public void onLandedUpon(World world, BlockPos pos, Entity entityIn, float fallDistance) { - if (!applyLanding(entityIn, fallDistance)) { - super.onLandedUpon(world, pos, entityIn, fallDistance); - } - } - - @Override - public void onEntityLand(BlockView world, Entity entity) { - if (!applyRebound(entity)) { - super.onEntityLand(world, entity); - } - } - - @Override - public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext context) { - CloudInteractionContext ctx = (CloudInteractionContext)context; - - if (!getGasState(state).canPlace(ctx)) { - return VoxelShapes.empty(); - } - - return super.getOutlineShape(state, view, pos, context); - } - - @Override - public VoxelShape getCollisionShape(BlockState state, BlockView view, BlockPos pos, ShapeContext context) { - CloudInteractionContext ctx = (CloudInteractionContext)context; - - if (!getGasState(state).canTouch(ctx)) { - return VoxelShapes.empty(); - } - - return super.getCollisionShape(state, view, pos, context); - } - - @Override - public void onEntityCollision(BlockState state, World w, BlockPos pos, Entity entity) { - if (!applyBouncyness(state, entity)) { - super.onEntityCollision(state, w, pos, entity); - } - } - - @Deprecated - @Override - public float calcBlockBreakingDelta(BlockState state, PlayerEntity player, BlockView world, BlockPos pos) { - if (GasState.NORMAL.canTouch(player)) { - return super.calcBlockBreakingDelta(state, player, world, pos); - } - return -1; - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/block/gas/CloudInteractionContext.java b/src/main/java/com/minelittlepony/unicopia/world/block/gas/CloudInteractionContext.java deleted file mode 100644 index 3937af35..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/block/gas/CloudInteractionContext.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.minelittlepony.unicopia.world.block.gas; - -import com.minelittlepony.unicopia.EquinePredicates; -import net.minecraft.entity.Entity; -import net.minecraft.entity.LivingEntity; -import net.minecraft.item.ItemStack; - -public interface CloudInteractionContext { - - static CloudInteractionContext of(Entity entity) { - return entity == null ? empty() : new Impl(entity); - } - - static CloudInteractionContext empty() { - return Impl.EMPTY; - } - - default boolean isPlayer() { - return false; - } - - default boolean isPegasus() { - return false; - } - - default ItemStack getHeldStack() { - return ItemStack.EMPTY; - } - - default boolean isEmpty() { - return this == empty(); - } - - boolean canTouch(GasState type); - - interface Holder extends CloudInteractionContext { - CloudInteractionContext getCloudInteractionContext(); - - @Override - default boolean isPlayer() { - return getCloudInteractionContext().isPlayer(); - } - - @Override - default boolean isPegasus() { - return getCloudInteractionContext().isPegasus(); - } - - @Override - default ItemStack getHeldStack() { - return getCloudInteractionContext().getHeldStack(); - } - - @Override - default boolean canTouch(GasState type) { - return getCloudInteractionContext().canTouch(type); - } - - @Override - default boolean isEmpty() { - return getCloudInteractionContext().isEmpty(); - } - } - - class Impl implements CloudInteractionContext { - private static final CloudInteractionContext EMPTY = type -> true; - - private final boolean isPlayer; - private final boolean isPegasus; - - private ItemStack main = ItemStack.EMPTY; - - private Impl(Entity entity) { - this.isPlayer = EquinePredicates.IS_PLAYER.test(entity); - this.isPegasus = EquinePredicates.ENTITY_INTERACT_WITH_CLOUD_BLOCKS.test(entity); - - if (entity instanceof LivingEntity) { - main = ((LivingEntity)entity).getMainHandStack(); - if (main.isEmpty()) { - main = ((LivingEntity)entity).getOffHandStack(); - } - } - } - - @Override - public boolean isPlayer() { - return isPlayer; - } - - @Override - public boolean isPegasus() { - return isPegasus; - } - - @Override - public boolean canTouch(GasState type) { - return type.isTouchable(isPlayer(), isPegasus()); - } - - @Override - public ItemStack getHeldStack() { - return main; - } - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/block/gas/CloudSlabBlock.java b/src/main/java/com/minelittlepony/unicopia/world/block/gas/CloudSlabBlock.java deleted file mode 100644 index 80eba290..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/block/gas/CloudSlabBlock.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.minelittlepony.unicopia.world.block.gas; - -import com.minelittlepony.unicopia.world.block.SmartSlabBlock; - -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -import net.minecraft.block.BlockState; -import net.minecraft.block.ShapeContext; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.util.shape.VoxelShapes; -import net.minecraft.world.BlockView; - -public class CloudSlabBlock extends SmartSlabBlock implements Gas { - - public CloudSlabBlock(BlockState inherited, Settings settings) { - super(inherited, settings); - } - - @Override - public GasState getGasState(BlockState blockState) { - return ((Gas)modelState.getBlock()).getGasState(blockState); - } - - @Override - public float getAmbientOcclusionLightLevel(BlockState state, BlockView view, BlockPos pos) { - return getGasState(state).isTranslucent() ? 1 : 0.9F; - } - - @Override - public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext context) { - if (getGasState(state).canPlace((CloudInteractionContext)context)) { - return super.getOutlineShape(state, view, pos, context); - } - return VoxelShapes.empty(); - } - - @Override - public VoxelShape getCollisionShape(BlockState state, BlockView view, BlockPos pos, ShapeContext context) { - if (getGasState(state).canTouch((CloudInteractionContext)context)) { - return super.getCollisionShape(state, view, pos, context); - } - return VoxelShapes.empty(); - } - - @Override - @Environment(EnvType.CLIENT) - public boolean isSideInvisible(BlockState state, BlockState beside, Direction face) { - return isFaceCoverd(state, beside, face); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/block/gas/CloudSoilBlock.java b/src/main/java/com/minelittlepony/unicopia/world/block/gas/CloudSoilBlock.java deleted file mode 100644 index ea317b3d..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/block/gas/CloudSoilBlock.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.minelittlepony.unicopia.world.block.gas; - -import com.minelittlepony.unicopia.equine.player.Pony; -import com.minelittlepony.unicopia.util.HoeUtil; -import com.minelittlepony.unicopia.world.block.UBlocks; - -import net.minecraft.item.ItemUsageContext; - -public class CloudSoilBlock extends CloudBlock implements HoeUtil.Tillable { - - public CloudSoilBlock(GasState variant) { - super(variant); - HoeUtil.registerTillingAction(this, UBlocks.CLOUD_FARMLAND.getDefaultState()); - } - - @Override - public boolean canTill(ItemUsageContext context) { - return context.getPlayer() == null || Pony.of(context.getPlayer()).getSpecies().canInteractWithClouds(); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/block/gas/CloudStairsBlock.java b/src/main/java/com/minelittlepony/unicopia/world/block/gas/CloudStairsBlock.java deleted file mode 100644 index 107a8248..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/block/gas/CloudStairsBlock.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.minelittlepony.unicopia.world.block.gas; - -import com.minelittlepony.unicopia.world.block.SmartStairsBlock; - -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -import net.minecraft.block.BlockState; -import net.minecraft.block.ShapeContext; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.util.shape.VoxelShapes; -import net.minecraft.world.BlockView; - -public class CloudStairsBlock extends SmartStairsBlock implements Gas { - - public CloudStairsBlock(BlockState inherited, Settings settings) { - super(inherited, settings); - } - - @Override - public GasState getGasState(BlockState state) { - return ((Gas)baseBlockState.getBlock()).getGasState(baseBlockState); - } - - @Override - public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext context) { - if (getGasState(state).canPlace((CloudInteractionContext)context)) { - return super.getOutlineShape(state, view, pos, context); - } - return VoxelShapes.empty(); - } - - @Override - public VoxelShape getCollisionShape(BlockState state, BlockView view, BlockPos pos, ShapeContext context) { - if (getGasState(state).canTouch((CloudInteractionContext)context)) { - return super.getCollisionShape(state, view, pos, context); - } - return VoxelShapes.empty(); - } - - @Override - @Environment(EnvType.CLIENT) - public boolean isSideInvisible(BlockState state, BlockState beside, Direction face) { - return isFaceCoverd(state, beside, face); - } -} \ No newline at end of file diff --git a/src/main/java/com/minelittlepony/unicopia/world/block/gas/CoverableCloudBlock.java b/src/main/java/com/minelittlepony/unicopia/world/block/gas/CoverableCloudBlock.java deleted file mode 100644 index 833aa3f8..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/block/gas/CoverableCloudBlock.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.minelittlepony.unicopia.world.block.gas; - -import javax.annotation.Nullable; - -import com.minelittlepony.unicopia.world.block.Covering; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.item.ItemPlacementContext; -import net.minecraft.state.StateManager; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.world.WorldAccess; - -public class CoverableCloudBlock extends CloudBlock { - - public CoverableCloudBlock(GasState variant) { - super(variant); - setDefaultState(stateManager.getDefaultState().with(Covering.PROPERTY, Covering.UNCOVERED)); - } - - @Override - @Nullable - public BlockState getPlacementState(ItemPlacementContext context) { - return getDefaultState().with(Covering.PROPERTY, Covering.getCovering(context.getWorld(), context.getBlockPos().up())); - } - - @Override - @Deprecated - public BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState other, WorldAccess world, BlockPos pos, BlockPos otherPos) { - if (direction == Direction.UP) { - return state.with(Covering.PROPERTY, Covering.getCovering(world, otherPos)); - } - - return state; - } - - @Override - protected void appendProperties(StateManager.Builder builder) { - builder.add(Covering.PROPERTY); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/block/gas/Gas.java b/src/main/java/com/minelittlepony/unicopia/world/block/gas/Gas.java deleted file mode 100644 index c2eaab3d..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/block/gas/Gas.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.minelittlepony.unicopia.world.block.gas; - -import net.minecraft.block.BlockState; -import net.minecraft.entity.Entity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.util.math.Vec3d; -import net.minecraft.util.shape.VoxelShapes; -import net.minecraft.world.EmptyBlockView; - -public interface Gas { - - GasState getGasState(BlockState blockState); - - default boolean applyLanding(Entity entity, float fallDistance) { - if (entity.isSneaking()) { - return true; - } - - entity.handleFallDamage(fallDistance, 0); - return false; - } - - default boolean isFaceCoverd(BlockState state, BlockState beside, Direction face) { - return beside.getBlock() instanceof Gas - && ((Gas)beside.getBlock()).getGasState(beside) == getGasState(state) - && VoxelShapes.isSideCovered( - state.getCollisionShape(EmptyBlockView.INSTANCE, BlockPos.ORIGIN), - beside.getCollisionShape(EmptyBlockView.INSTANCE, BlockPos.ORIGIN), face); - } - - default boolean applyRebound(Entity entity) { - double y = entity.getVelocity().y; - - if (entity.isSneaking() || y >= 0 || Math.abs(y) < 0.25) { - return false; - } - - entity.setVelocity(entity.getVelocity().multiply(1, -1.2, 1)); - - return true; - } - - default boolean applyBouncyness(BlockState state, Entity entity) { - if (!getGasState(state).canTouch(entity)) { - return false; - } - - Vec3d vel = entity.getVelocity(); - double y = vel.y; - - if (entity.isSneaking() || Math.abs(y) < 0.25) { - y = 0; - } else { - y += 0.0155 * Math.max(1, entity.fallDistance); - } - entity.setVelocity(vel.x, y, vel.z); - - return true; - } - - default boolean isSupporting(BlockState state) { - return getGasState(state).isDense(); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/block/gas/GasState.java b/src/main/java/com/minelittlepony/unicopia/world/block/gas/GasState.java deleted file mode 100644 index 24ccc342..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/block/gas/GasState.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.minelittlepony.unicopia.world.block.gas; - -import com.minelittlepony.unicopia.EquinePredicates; -import com.minelittlepony.unicopia.world.block.UMaterials; - -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; -import net.minecraft.block.AbstractRailBlock; -import net.minecraft.block.BedBlock; -import net.minecraft.block.Block; -import net.minecraft.block.ChestBlock; -import net.minecraft.block.TorchBlock; -import net.minecraft.entity.Entity; -import net.minecraft.item.BlockItem; -import net.minecraft.item.ItemStack; -import net.minecraft.sound.BlockSoundGroup; - -public enum GasState { - NORMAL, - DENSE, - ENCHANTED; - - public FabricBlockSettings configure() { - return FabricBlockSettings.of(UMaterials.CLOUD) - .strength(0.5F, 1) - .sounds(BlockSoundGroup.WOOL) - .nonOpaque() - .suffocates((state, b, c) -> !isTranslucent()) - .allowsSpawning((state, b, c, type) -> !isTranslucent()) - .blockVision((state, b, c) -> !isTranslucent()); - } - - public boolean isTranslucent() { - return this == NORMAL; - } - - public boolean isDense() { - return this != NORMAL; - } - - public boolean isTouchable(boolean isPlayer, boolean isPegasus) { - return isPegasus || this == ENCHANTED || (this == DENSE && isPlayer); - } - - public boolean canTouch(Entity e) { - return isTouchable(EquinePredicates.IS_PLAYER.test(e), EquinePredicates.ENTITY_INTERACT_WITH_CLOUD_BLOCKS.test(e)); - } - - public boolean canTouch(CloudInteractionContext context) { - return context.canTouch(this); - } - - public boolean canPlace(CloudInteractionContext context) { - return context.isEmpty() || canTouch(context) && heldCanTouch(context); - } - - private boolean heldCanTouch(CloudInteractionContext context) { - if (this == ENCHANTED) { - return true; - } - - ItemStack main = context.getHeldStack(); - - if (main.getItem() instanceof BlockItem) { - Block block = ((BlockItem)main.getItem()).getBlock(); - - if (block instanceof Gas) { - return true; - } - - return this == DENSE && ( - block instanceof TorchBlock - || block instanceof BedBlock - || block instanceof ChestBlock - || block instanceof AbstractRailBlock); - } - - return true; - } - -} \ No newline at end of file diff --git a/src/main/java/com/minelittlepony/unicopia/world/block/gas/PillarCloudBlock.java b/src/main/java/com/minelittlepony/unicopia/world/block/gas/PillarCloudBlock.java deleted file mode 100644 index 0b5651ac..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/block/gas/PillarCloudBlock.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.minelittlepony.unicopia.world.block.gas; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.item.ItemPlacementContext; -import net.minecraft.state.StateManager; -import net.minecraft.state.property.Properties; -import net.minecraft.util.BlockRotation; -import net.minecraft.util.math.Direction; - -public class PillarCloudBlock extends CloudBlock { - - public PillarCloudBlock(GasState variant) { - super(variant); - setDefaultState(getDefaultState().with(Properties.AXIS, Direction.Axis.Y)); - } - - @Override - public BlockState rotate(BlockState state, BlockRotation rotation) { - switch(rotation) { - case COUNTERCLOCKWISE_90: - case CLOCKWISE_90: - switch(state.get(Properties.AXIS)) { - case X: - return state.with(Properties.AXIS, Direction.Axis.Z); - case Z: - return state.with(Properties.AXIS, Direction.Axis.X); - default: - return state; - } - default: - return state; - } - } - - @Override - protected void appendProperties(StateManager.Builder builder) { - builder.add(Properties.AXIS); - } - - @Override - public BlockState getPlacementState(ItemPlacementContext ctx) { - return getDefaultState().with(Properties.AXIS, ctx.getSide().getAxis()); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/client/UWorldClient.java b/src/main/java/com/minelittlepony/unicopia/world/client/UWorldClient.java deleted file mode 100644 index 558f4591..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/client/UWorldClient.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.minelittlepony.unicopia.world.client; - -import com.minelittlepony.unicopia.world.block.UBlocks; -import com.minelittlepony.unicopia.world.client.gui.UScreens; -import com.minelittlepony.unicopia.world.client.render.ButterflyEntityRenderer; -import com.minelittlepony.unicopia.world.client.render.CloudEntityRenderer; -import com.minelittlepony.unicopia.world.client.render.CucoonEntityRenderer; -import com.minelittlepony.unicopia.world.client.render.RainbowEntityRenderer; -import com.minelittlepony.unicopia.world.client.render.SpearEntityRenderer; -import com.minelittlepony.unicopia.world.client.render.SpellbookEntityRender; -import com.minelittlepony.unicopia.world.client.render.SpellcastEntityRenderer; -import com.minelittlepony.unicopia.world.entity.UEntities; - -import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap; -import net.fabricmc.fabric.api.client.rendereregistry.v1.EntityRendererRegistry; -import net.minecraft.client.render.RenderLayer; -import net.minecraft.client.render.entity.FlyingItemEntityRenderer; - -public interface UWorldClient { - static void bootstrap() { - EntityRendererRegistry.INSTANCE.register(UEntities.CLOUD, CloudEntityRenderer::new); - EntityRendererRegistry.INSTANCE.register(UEntities.WILD_CLOUD, CloudEntityRenderer::new); - EntityRendererRegistry.INSTANCE.register(UEntities.CONSTRUCTION_CLOUD, CloudEntityRenderer::new); - EntityRendererRegistry.INSTANCE.register(UEntities.RACING_CLOUD, CloudEntityRenderer::new); - EntityRendererRegistry.INSTANCE.register(UEntities.MAGIC_SPELL, SpellcastEntityRenderer::new); - EntityRendererRegistry.INSTANCE.register(UEntities.THROWN_ITEM, (manager, context) -> new FlyingItemEntityRenderer<>(manager, context.getItemRenderer())); - EntityRendererRegistry.INSTANCE.register(UEntities.SPELLBOOK, SpellbookEntityRender::new); - EntityRendererRegistry.INSTANCE.register(UEntities.RAINBOW, RainbowEntityRenderer::new); - EntityRendererRegistry.INSTANCE.register(UEntities.BUTTERFLY, ButterflyEntityRenderer::new); - EntityRendererRegistry.INSTANCE.register(UEntities.CUCOON, CucoonEntityRenderer::new); - EntityRendererRegistry.INSTANCE.register(UEntities.THROWN_SPEAR, SpearEntityRenderer::new); - - BlockRenderLayerMap.INSTANCE.putBlocks(RenderLayer.getCutout(), - UBlocks.ENCHANTED_TORCH, UBlocks.ENCHANTED_WALL_TORCH, - UBlocks.BAKERY_DOOR, UBlocks.LIBRARY_DOOR, UBlocks.MISTED_GLASS_DOOR, UBlocks.DIAMOND_DOOR, - UBlocks.APPLE_SAPLING, UBlocks.ALFALFA_CROPS, - UBlocks.TOMATO_PLANT, UBlocks.CLOUDSDALE_TOMATO_PLANT - ); - BlockRenderLayerMap.INSTANCE.putBlocks(RenderLayer.getTranslucent(), - UBlocks.CLOUD_ANVIL, UBlocks.CLOUD_FARMLAND, - UBlocks.CLOUD_BLOCK, UBlocks.CLOUD_SLAB, UBlocks.CLOUD_STAIRS, - UBlocks.ENCHANTED_CLOUD_BLOCK, UBlocks.ENCHANTED_CLOUD_SLAB, UBlocks.ENCHANTED_CLOUD_STAIRS, - - UBlocks.SLIME_DRIP, UBlocks.SLIME_LAYER - ); - BlockRenderLayerMap.INSTANCE.putBlocks(RenderLayer.getCutoutMipped(), - UBlocks.APPLE_LEAVES - ); - - UScreens.bootstrap(); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/client/gui/BagOfHoldingScreen.java b/src/main/java/com/minelittlepony/unicopia/world/client/gui/BagOfHoldingScreen.java deleted file mode 100644 index ab6ce1bd..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/client/gui/BagOfHoldingScreen.java +++ /dev/null @@ -1,147 +0,0 @@ -package com.minelittlepony.unicopia.world.client.gui; - -import java.util.List; - -import com.minelittlepony.common.client.gui.IViewRoot; -import com.minelittlepony.common.client.gui.dimension.Bounds; -import com.minelittlepony.common.client.gui.dimension.Padding; -import com.minelittlepony.common.client.gui.element.Scrollbar; -import com.minelittlepony.unicopia.world.container.BagOfHoldingContainer; -import com.mojang.blaze3d.platform.GlStateManager; - -import net.minecraft.client.gui.Element; -import net.minecraft.client.gui.screen.ingame.HandledScreen; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.sound.SoundEvents; -import net.minecraft.text.Text; -import net.minecraft.util.Identifier; - -public class BagOfHoldingScreen extends HandledScreen implements IViewRoot { - private static final Identifier CHEST_GUI_TEXTURE = new Identifier("textures/gui/container/generic_54.png"); - - private final int inventoryRows; - private final int playerRows; - - private final Bounds bounds = Bounds.empty(); - private final Bounds contentBounds = Bounds.empty(); - private final Padding padding = new Padding(0, 0, 0, 0); - - private final Scrollbar scrollbar = new Scrollbar(this); - - public BagOfHoldingScreen(BagOfHoldingContainer handler, PlayerInventory inv, Text title) { - super(handler, inv, title); - - playerRows = playerInventory.size() / 9; - inventoryRows = (handler.slots.size() / 9) - 1; - } - - @Override - public void init() { - super.init(); - - bounds.left = x; - bounds.top = y; - bounds.width = backgroundWidth; - bounds.height = backgroundHeight; - contentBounds.width = bounds.width; - contentBounds.height = (inventoryRows + 1) * 18 + 17; - - scrollbar.reposition(); - children.add(scrollbar); - } - - @Override - public void onClose() { - super.onClose(); - client.player.playSound(SoundEvents.BLOCK_ENDER_CHEST_OPEN, 0.5F, 0.5F); - } - - @Override - public void render(MatrixStack matrices, int mouseX, int mouseY, float partialTicks) { - renderBackground(matrices); - - scrollbar.render(matrices, mouseX, mouseY, partialTicks); - - int scroll = -scrollbar.getVerticalScrollAmount(); - - GlStateManager.pushMatrix(); - GlStateManager.translatef(0, scroll, 0); - - super.render(matrices, mouseX, mouseY - scroll, partialTicks); - - int h = height; - height = Integer.MAX_VALUE; - drawMouseoverTooltip(matrices, mouseX, mouseY - scroll); - height = h; - - GlStateManager.popMatrix(); - } - - @Override - public boolean mouseClicked(double x, double y, int button) { - return super.mouseClicked(x, y + scrollbar.getVerticalScrollAmount(), button); - } - - @Override - public boolean mouseDragged(double x, double y, int button, double dx, double dy) { - - if (scrollbar.isMouseOver(x, y)) { - return scrollbar.mouseDragged(x, y + scrollbar.getVerticalScrollAmount(), button, dx, dy); - } - - return super.mouseDragged(x, y + scrollbar.getVerticalScrollAmount(), button, dx, dy); - } - - @Override - public boolean mouseReleased(double x, double y, int button) { - return super.mouseReleased(x, y + scrollbar.getVerticalScrollAmount(), button); - } - - @Override - protected void drawForeground(MatrixStack matrices, int mouseX, int mouseY) { - textRenderer.drawWithShadow(matrices, title, 8, 6, 0x404040); - } - - @Override - protected void drawBackground(MatrixStack matrices, float partialTicks, int mouseX, int mouseY) { - GlStateManager.color4f(1, 1, 1, 1); - - client.getTextureManager().bindTexture(CHEST_GUI_TEXTURE); - - int midX = (width - backgroundWidth) / 2; - int midY = (height - backgroundHeight) / 2; - - drawTexture(matrices, midX, midY, 0, 0, backgroundWidth, 18); - for (int i = 0; i < inventoryRows - (playerRows - 1); i++) { - drawTexture(matrices, midX, midY + (18 * (i + 1)), 0, 18, backgroundWidth, 18); - } - - drawTexture(matrices, midX, midY + (18 * (inventoryRows - (playerRows - 2))) - 1, 0, 131, backgroundWidth, 98); - } - - @Override - public Bounds getBounds() { - return bounds; - } - - @Override - public void setBounds(Bounds bounds) { - } - - @Override - public Bounds getContentBounds() { - return contentBounds; - } - - @Override - public Padding getContentPadding() { - return padding; - } - - @Override - public List getChildElements() { - // TODO Auto-generated method stub - return children; - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/client/gui/SpellBookScreen.java b/src/main/java/com/minelittlepony/unicopia/world/client/gui/SpellBookScreen.java deleted file mode 100644 index efc2ade7..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/client/gui/SpellBookScreen.java +++ /dev/null @@ -1,237 +0,0 @@ -package com.minelittlepony.unicopia.world.client.gui; - -import org.lwjgl.opengl.GL11; - -import com.minelittlepony.common.client.gui.element.Button; -import com.minelittlepony.unicopia.Unicopia; -import com.minelittlepony.unicopia.equine.player.Pony; -import com.minelittlepony.unicopia.world.container.SpellBookContainer; -import com.minelittlepony.unicopia.world.container.SpellBookContainer.InputSlot; -import com.minelittlepony.unicopia.world.recipe.enchanting.IPageUnlockListener; -import com.minelittlepony.unicopia.world.recipe.enchanting.Page; -import com.minelittlepony.unicopia.world.recipe.enchanting.PageState; -import com.minelittlepony.unicopia.world.recipe.enchanting.Pages; -import com.mojang.blaze3d.platform.GlStateManager; - -import net.minecraft.client.gui.screen.ingame.HandledScreen; -import net.minecraft.client.texture.MissingSprite; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.util.Identifier; -import net.minecraft.screen.slot.Slot; -import net.minecraft.text.Text; - -public class SpellBookScreen extends HandledScreen implements IPageUnlockListener { - - private static Page currentPage; - - public static final Identifier TEXTURE = new Identifier("unicopia", "textures/gui/container/book.png"); - - private Pony player; - - private PageButton nextPage; - private PageButton prevPage; - - public SpellBookScreen(SpellBookContainer handler, PlayerInventory inv, Text title) { - super(handler, inv, title); - - backgroundWidth = 405; - backgroundHeight = 219; - player = Pony.of(inv.player); - } - - @Override - public void init() { - super.init(); - - addButton(nextPage = new PageButton(x + 360, y + 185, true)).onClick(v -> { - currentPage = currentPage.next(); - onPageChange(); - }); - addButton(prevPage = new PageButton(x + 20, y + 185, false)).onClick(v -> { - currentPage = currentPage.prev(); - onPageChange(); - }); - - if (currentPage == null) { - currentPage = Pages.instance().getByIndex(0); - } - - onPageChange(); - - if (player.getPages().hasPageStateRelative(currentPage, PageState.UNREAD, Page::next)) { - nextPage.triggerShake(); - } - - if (player.getPages().hasPageStateRelative(currentPage, PageState.UNREAD, Page::prev)) { - prevPage.triggerShake(); - } - } - - protected void onPageChange() { - prevPage.setEnabled(currentPage.getIndex() > 0); - nextPage.setEnabled(currentPage.getIndex() < Pages.instance().getTotalPages() - 1); - - if (player.getPages().getPageState(currentPage) == PageState.UNREAD) { - player.getPages().setPageState(currentPage, PageState.READ); - } - } - - @Override - public boolean onPageUnlocked(Page page) { - int i = currentPage.compareTo(page); - - if (i <= 0) { - prevPage.triggerShake(); - } - - if (i >= 0) { - nextPage.triggerShake(); - } - - return true; - } - - @Override - protected void fillGradient(MatrixStack matrices, int left, int top, int width, int height, int startColor, int endColor) { - if (focusedSlot == null || left != focusedSlot.x || top != focusedSlot.y || !drawSlotOverlay(matrices, focusedSlot)) { - super.fillGradient(matrices, left, top, width, height, startColor, endColor); - } - } - - protected boolean drawSlotOverlay(MatrixStack matrices, Slot slot) { - if (slot instanceof InputSlot) { - GlStateManager.enableBlend(); - GL11.glDisable(GL11.GL_ALPHA_TEST); - - client.getTextureManager().bindTexture(TEXTURE); - drawTexture(matrices, slot.x - 1, slot.y - 1, 74, 223, 18, 18, 512, 256); - - GL11.glEnable(GL11.GL_ALPHA_TEST); - GlStateManager.disableBlend(); - - return true; - } - - return false; - } - - - @Override - public void render(MatrixStack matrices, int mouseX, int mouseY, float partialTicks) { - super.render(matrices, mouseX, mouseY, partialTicks); - drawMouseoverTooltip(matrices, mouseX, mouseY); - } - - @Override - protected void drawForeground(MatrixStack matrices, int mouseX, int mouseY) { - String text = String.format("%d / %d", currentPage.getIndex() + 1, Pages.instance().getTotalPages()); - - textRenderer.drawWithShadow(matrices, text, 70 - textRenderer.getWidth(text)/2, 190, 0x0); - } - - - @Override - protected void drawBackground(MatrixStack matrices, float partialTicks, int mouseX, int mouseY) { - renderBackground(matrices, 0); - GlStateManager.color4f(1, 1, 1, 1); - - int left = (width - backgroundWidth) / 2; - int top = (height - backgroundHeight) / 2; - - client.getTextureManager().bindTexture(TEXTURE); - drawTexture(matrices, left, top, 0, 0, backgroundWidth, backgroundHeight, 512, 256); - - GlStateManager.enableBlend(); - GL11.glDisable(GL11.GL_ALPHA_TEST); - - client.getTextureManager().bindTexture(TEXTURE); - drawTexture(matrices, left + 147, top + 49, 407, 2, 100, 101, 512, 256); - - if (player.getPages().getPageState(currentPage) != PageState.LOCKED) { - Identifier texture = currentPage.getTexture(); - - if (client.getTextureManager().getTexture(texture) != MissingSprite.getMissingSpriteTexture()) { - GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - - client.getTextureManager().bindTexture(texture); - drawTexture(matrices, left, top, 0, 0, backgroundWidth, backgroundHeight, 512, 256); - } else { - if (player.getWorld().random.nextInt(100) == 0) { - Unicopia.LOGGER.fatal("Missing texture " + texture); - } - } - } - - GL11.glEnable(GL11.GL_ALPHA_TEST); - GlStateManager.disableBlend(); - } - - class PageButton extends Button { - private final boolean direction; - - private int shakesLeft = 0; - private float shakeCount = 0; - - public PageButton(int x, int y, boolean direction) { - super(x, y, 23, 13); - this.direction = direction; - } - - @Override - public void renderButton(MatrixStack matrices, int mouseX, int mouseY, float partialTicks) { - if (visible) { - - boolean shaking = false; - - int x = this.x; - int y = this.y; - - if (shakesLeft > 0) { - shaking = true; - shakeCount += (float)Math.PI / 2; - - if (shakeCount >= Math.PI * 2) { - shakeCount %= Math.PI * 2; - shakesLeft--; - } - - x += (int)(Math.sin(shakeCount) * 3); - y -= (int)(Math.sin(shakeCount) * 3); - } - - GlStateManager.color4f(1, 1, 1, 1); - client.getTextureManager().bindTexture(TEXTURE); - - int u = 0; - int v = 220; - - if (shaking || isMouseOver(mouseX, mouseY)) { - u += 23; - } - - if (shaking) { - u += 23; - } - - if (!direction) { - v += 13; - } - - drawTexture(matrices, x, y, u, v, 23, 13, 512, 256); - } - } - - @Override - public boolean isMouseOver(double mouseX, double mouseY) { - return visible && mouseX >= x && mouseY >= y && mouseX < x + width && mouseY < y + height; - - } - - public void triggerShake() { - if (shakesLeft <= 0) { - shakesLeft = 5; - } - } - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/client/gui/UScreens.java b/src/main/java/com/minelittlepony/unicopia/world/client/gui/UScreens.java deleted file mode 100644 index e7ac9be8..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/client/gui/UScreens.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.minelittlepony.unicopia.world.client.gui; - -import com.minelittlepony.unicopia.world.container.UContainers; - -import net.fabricmc.fabric.api.client.screenhandler.v1.ScreenRegistry; -import net.fabricmc.fabric.api.client.screenhandler.v1.ScreenRegistry.Factory; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.screen.ingame.ScreenHandlerProvider; -import net.minecraft.screen.ScreenHandler; -import net.minecraft.screen.ScreenHandlerType; - -public interface UScreens { - static void bootstrap() { - register(UContainers.BAG_OF_HOLDING, BagOfHoldingScreen::new); - register(UContainers.SPELL_BOOK, SpellBookScreen::new); - } - - // TODO: farbreic :tiny_potato: - static < - H extends ScreenHandler, - S extends Screen & ScreenHandlerProvider> - void register( - ScreenHandlerType type, - Factory screenFactory) { - ScreenRegistry.register(type, screenFactory); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/client/package-info.java b/src/main/java/com/minelittlepony/unicopia/world/client/package-info.java deleted file mode 100644 index 58c0d70b..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/client/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package com.minelittlepony.unicopia.world.client; \ No newline at end of file diff --git a/src/main/java/com/minelittlepony/unicopia/world/client/render/ButterflyEntityRenderer.java b/src/main/java/com/minelittlepony/unicopia/world/client/render/ButterflyEntityRenderer.java deleted file mode 100644 index b1cd8202..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/client/render/ButterflyEntityRenderer.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.minelittlepony.unicopia.world.client.render; - -import com.minelittlepony.unicopia.world.client.render.model.ButterflyEntityModel; -import com.minelittlepony.unicopia.world.entity.ButterflyEntity; - -import net.fabricmc.fabric.api.client.rendereregistry.v1.EntityRendererRegistry; -import net.minecraft.client.render.entity.EntityRenderDispatcher; -import net.minecraft.client.render.entity.MobEntityRenderer; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.util.Identifier; -import net.minecraft.util.math.MathHelper; - -public class ButterflyEntityRenderer extends MobEntityRenderer { - - public ButterflyEntityRenderer(EntityRenderDispatcher manager, EntityRendererRegistry.Context context) { - super(manager, new ButterflyEntityModel(), 0.25F); - } - - @Override - public Identifier getTexture(ButterflyEntity entity) { - return entity.getVariety().getSkin(); - } - - @Override - protected void scale(ButterflyEntity entity, MatrixStack matrices, float ticks) { - matrices.scale(0.35F, 0.35F, 0.35F); - matrices.translate(0.8F, 0, -0.5F); - } - - @Override - protected void setupTransforms(ButterflyEntity entity, MatrixStack matrices, float age, float yaw, float ticks) { - - if (!entity.isResting()) { - matrices.translate(0, MathHelper.cos(age / 3F) / 10F, 0); - } - - super.setupTransforms(entity, matrices, age, yaw, ticks); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/client/render/CloudEntityRenderer.java b/src/main/java/com/minelittlepony/unicopia/world/client/render/CloudEntityRenderer.java deleted file mode 100644 index 1125100e..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/client/render/CloudEntityRenderer.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.minelittlepony.unicopia.world.client.render; - -import net.fabricmc.fabric.api.client.rendereregistry.v1.EntityRendererRegistry; -import net.minecraft.client.render.VertexConsumerProvider; -import net.minecraft.client.render.entity.EntityRenderDispatcher; -import net.minecraft.client.render.entity.MobEntityRenderer; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.util.Identifier; - -import com.minelittlepony.unicopia.world.client.render.model.CloudEntityModel; -import com.minelittlepony.unicopia.world.entity.CloudEntity; - -public class CloudEntityRenderer extends MobEntityRenderer { - private static final Identifier NORMAL = new Identifier("unicopia", "textures/entity/clouds.png"); - private static final Identifier RAINING = new Identifier("unicopia", "textures/entity/clouds_storm.png"); - - public CloudEntityRenderer(EntityRenderDispatcher manager, EntityRendererRegistry.Context context) { - super(manager, new CloudEntityModel(), 1f); - } - - @Override - public void scale(CloudEntity entity, MatrixStack matrixStack, float par2) { - float scale = entity.getCloudSize(); - - matrixStack.scale(scale, scale, scale); - } - - @Override - public void render(CloudEntity entity, float f, float g, MatrixStack matrices, VertexConsumerProvider vertexConsumerProvider, int i) { - - if (entity.removed) { - return; - } - - matrices.push(); - matrices.translate(0, -entity.getHeight() + 0.3F, 0); - - //GlStateManager.disableLighting(); - //GlStateManager.enableBlend(); - - //float brightness = Math.max(WorldHelper.getDaylightBrightness(entity.getEntityWorld(), 0) * 3, 0.05F); - - //GlStateManager.color4f(brightness, brightness, brightness, entity.getOpaque() ? 1 : 0.8F); - - //GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - - super.render(entity, f, g, matrices, vertexConsumerProvider, i); - - //GlStateManager.disableBlend(); - //GlStateManager.enableLighting(); - //GlStateManager.color4f(1, 1, 1, 1); - - matrices.pop(); - } - - @Override - public Identifier getTexture(CloudEntity entity) { - if (entity.getIsRaining() && entity.getIsThundering()) { - return RAINING; - } - return NORMAL; - } - - @Override - protected float getLyingAngle(CloudEntity par1LivingEntity) { - return 0; - } -} - - - - - - - - - - diff --git a/src/main/java/com/minelittlepony/unicopia/world/client/render/CucoonEntityRenderer.java b/src/main/java/com/minelittlepony/unicopia/world/client/render/CucoonEntityRenderer.java deleted file mode 100644 index 449d2097..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/client/render/CucoonEntityRenderer.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.minelittlepony.unicopia.world.client.render; - -import com.minelittlepony.unicopia.world.client.render.model.CucoonEntityModel; -import com.minelittlepony.unicopia.world.entity.CucoonEntity; - -import net.fabricmc.fabric.api.client.rendereregistry.v1.EntityRendererRegistry; -import net.minecraft.client.render.entity.EntityRenderDispatcher; -import net.minecraft.client.render.entity.LivingEntityRenderer; -import net.minecraft.util.Identifier; - -public class CucoonEntityRenderer extends LivingEntityRenderer { - - private static final Identifier TEXTURE = new Identifier("unicopia", "textures/entity/cucoon.png"); - - public CucoonEntityRenderer(EntityRenderDispatcher manager, EntityRendererRegistry.Context context) { - super(manager, new CucoonEntityModel(), 1); - } - - @Override - public Identifier getTexture(CucoonEntity entity) { - return TEXTURE; - } - - @Override - protected float getLyingAngle(CucoonEntity entity) { - return 0; - } - - @Override - protected boolean hasLabel(CucoonEntity mobEntity) { - return super.hasLabel(mobEntity) && (mobEntity.shouldRenderName() || mobEntity.hasCustomName() && mobEntity == dispatcher.targetedEntity); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/client/render/RainbowEntityRenderer.java b/src/main/java/com/minelittlepony/unicopia/world/client/render/RainbowEntityRenderer.java deleted file mode 100644 index 99cbf908..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/client/render/RainbowEntityRenderer.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.minelittlepony.unicopia.world.client.render; - -import org.lwjgl.opengl.GL11; - -import com.minelittlepony.unicopia.util.WorldHelper; -import com.minelittlepony.unicopia.world.entity.RainbowEntity; -import com.mojang.blaze3d.platform.GlStateManager.DstFactor; -import com.mojang.blaze3d.platform.GlStateManager.SrcFactor; -import com.mojang.blaze3d.systems.RenderSystem; - -import net.fabricmc.fabric.api.client.rendereregistry.v1.EntityRendererRegistry; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.render.BufferBuilder; -import net.minecraft.client.render.Tessellator; -import net.minecraft.client.render.VertexFormats; -import net.minecraft.client.render.entity.EntityRenderDispatcher; -import net.minecraft.client.render.entity.EntityRenderer; -import net.minecraft.util.Identifier; - -public class RainbowEntityRenderer extends EntityRenderer { - private static final Identifier TEXTURE = new Identifier("unicopia", "textures/environment/rainbow.png"); - - public RainbowEntityRenderer(EntityRenderDispatcher manager, EntityRendererRegistry.Context context) { - super(manager); - } - - @Override - public Identifier getTexture(RainbowEntity entity) { - return TEXTURE; - } - - public void render(RainbowEntity entity, double x, double y, double z, float entityYaw, float partialTicks) { - float distance = MinecraftClient.getInstance().getCameraEntity().distanceTo(entity); - float maxDistance = 16 * MinecraftClient.getInstance().options.viewDistance; - double r = entity.getRadius(); - float light = WorldHelper.getDaylightBrightness(entity.getEntityWorld(), partialTicks); - - float opacity = ((maxDistance - distance) / maxDistance); - - opacity *= light; - - if (opacity <= 0) { - return; - } - - RenderSystem.pushMatrix(); - RenderSystem.disableLighting(); - RenderSystem.disableCull(); - RenderSystem.enableBlend(); - RenderSystem.blendFunc(SrcFactor.SRC_ALPHA, DstFactor.ONE_MINUS_SRC_ALPHA); - - RenderSystem.translated(x, y, z); - RenderSystem.rotatef(entityYaw, 0, 1, 0); - - RenderSystem.color4f(1, 1, 1, opacity); - - Tessellator tessellator = Tessellator.getInstance(); - BufferBuilder bufferbuilder = tessellator.getBuffer(); - - bufferbuilder.begin(GL11.GL_QUADS, VertexFormats.POSITION_TEXTURE); - bufferbuilder.vertex(-r, r, 0).texture(1, 0).next(); - bufferbuilder.vertex( r, r, 0).texture(0, 0).next(); - bufferbuilder.vertex( r, 0, 0).texture(0, 1).next(); - bufferbuilder.vertex(-r, 0, 0).texture(1, 1).next(); - - tessellator.draw(); - - RenderSystem.disableBlend(); - RenderSystem.enableCull(); - RenderSystem.enableLighting(); - RenderSystem.popMatrix(); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/client/render/RenderLayers.java b/src/main/java/com/minelittlepony/unicopia/world/client/render/RenderLayers.java deleted file mode 100644 index 05b54f1e..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/client/render/RenderLayers.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.minelittlepony.unicopia.world.client.render; - -import net.minecraft.client.render.RenderLayer; -import net.minecraft.client.render.RenderPhase; -import net.minecraft.client.render.VertexFormat; -import net.minecraft.client.render.VertexFormats; -import net.minecraft.util.Identifier; - -public final class RenderLayers extends RenderLayer { - - private RenderLayers(String name, VertexFormat vertexFormat, int drawMode, int expectedBufferSize, - boolean hasCrumbling, boolean translucent, Runnable startAction, Runnable endAction) { - super(name, vertexFormat, drawMode, expectedBufferSize, hasCrumbling, translucent, startAction, endAction); - } - - private static final RenderLayer MAGIC = of("mlp_magic_glow", VertexFormats.POSITION_COLOR_TEXTURE_LIGHT_NORMAL, 7, 256, RenderLayer.MultiPhaseParameters.builder() - .texture(NO_TEXTURE) - .writeMaskState(COLOR_MASK) - .transparency(LIGHTNING_TRANSPARENCY) - .lightmap(DISABLE_LIGHTMAP) - .cull(DISABLE_CULLING) - .build(false)); - - public static RenderLayer entityNoLighting(Identifier tex) { - return of("entity_cutout_no_cull_no_lighting", VertexFormats.POSITION_COLOR_TEXTURE_OVERLAY_LIGHT_NORMAL, 7, 256, true, false, RenderLayer.MultiPhaseParameters.builder() - .texture(new RenderPhase.Texture(tex, false, false)) - .transparency(NO_TRANSPARENCY) - .diffuseLighting(ENABLE_DIFFUSE_LIGHTING) - .alpha(ONE_TENTH_ALPHA) - .cull(DISABLE_CULLING) - .lightmap(DISABLE_LIGHTMAP) - .overlay(ENABLE_OVERLAY_COLOR) - .build(true)); - } - - public static RenderLayer cloud(Identifier tex) { - return of("cloud", VertexFormats.POSITION_COLOR_TEXTURE_OVERLAY_LIGHT_NORMAL, 7, 256, true, false, RenderLayer.MultiPhaseParameters.builder() - .texture(new RenderPhase.Texture(tex, false, false)) - .transparency(TRANSLUCENT_TRANSPARENCY) - .diffuseLighting(ENABLE_DIFFUSE_LIGHTING) - .alpha(ONE_TENTH_ALPHA) - .lightmap(DISABLE_LIGHTMAP) - .overlay(DISABLE_OVERLAY_COLOR) - .cull(DISABLE_CULLING) - .build(true)); - } - - public static RenderLayer magic() { - return MAGIC; - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/client/render/SpearEntityRenderer.java b/src/main/java/com/minelittlepony/unicopia/world/client/render/SpearEntityRenderer.java deleted file mode 100644 index 69c94246..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/client/render/SpearEntityRenderer.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.minelittlepony.unicopia.world.client.render; - -import com.minelittlepony.unicopia.world.entity.SpearEntity; - -import net.fabricmc.fabric.api.client.rendereregistry.v1.EntityRendererRegistry; -import net.minecraft.client.render.entity.EntityRenderDispatcher; -import net.minecraft.client.render.entity.ProjectileEntityRenderer; -import net.minecraft.util.Identifier; - -public class SpearEntityRenderer extends ProjectileEntityRenderer { - public static final Identifier TEXTURE = new Identifier("unicopia", "textures/entity/projectiles/spear.png"); - - public SpearEntityRenderer(EntityRenderDispatcher manager, EntityRendererRegistry.Context context) { - super(manager); - } - - @Override - public Identifier getTexture(SpearEntity entity) { - return TEXTURE; - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/client/render/SpellbookEntityRender.java b/src/main/java/com/minelittlepony/unicopia/world/client/render/SpellbookEntityRender.java deleted file mode 100644 index 5795069a..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/client/render/SpellbookEntityRender.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.minelittlepony.unicopia.world.client.render; - -import com.minelittlepony.unicopia.world.client.render.model.SpellbookModel; -import com.minelittlepony.unicopia.world.entity.SpellbookEntity; - -import net.minecraft.util.math.MathHelper; -import net.fabricmc.fabric.api.client.rendereregistry.v1.EntityRendererRegistry; -import net.minecraft.client.render.entity.EntityRenderDispatcher; -import net.minecraft.client.render.entity.LivingEntityRenderer; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.client.util.math.Vector3f; -import net.minecraft.util.Identifier; - -public class SpellbookEntityRender extends LivingEntityRenderer { - - private static final Identifier BLUE = new Identifier("unicopia", "textures/entity/enchanting_table_book_blue.png"); - private static final Identifier NORMAL = new Identifier("unicopia", "textures/entity/enchanting_table_book.png"); - - public SpellbookEntityRender(EntityRenderDispatcher manager, EntityRendererRegistry.Context context) { - super(manager, new SpellbookModel(), 0); - } - - @Override - public Identifier getTexture(SpellbookEntity entity) { - return entity.getIsAltered() ? BLUE : NORMAL; - } - - @Override - protected float getLyingAngle(SpellbookEntity entity) { - return 0; - } - - @Override - protected void setupTransforms(SpellbookEntity entity, MatrixStack matrices, float f, float g, float partialTicks) { - super.setupTransforms(entity, matrices, f, g + 90, partialTicks); - - if (entity.getIsOpen()) { - matrices.translate(-1.25F, -0.35F, 0); - - float floatPosition = MathHelper.sin((entity.age + partialTicks + entity.getEntityId()) / 20) * 0.04F; - - matrices.translate(0, floatPosition, 0); - matrices.multiply(Vector3f.NEGATIVE_Z.getDegreesQuaternion(60)); - } else { - matrices.translate(-1.5F, 0.1F, 0.2F); - matrices.multiply(Vector3f.NEGATIVE_Z.getDegreesQuaternion(90)); - matrices.multiply(Vector3f.NEGATIVE_Y.getDegreesQuaternion(90)); - } - } - - @Override - protected boolean hasLabel(SpellbookEntity targetEntity) { - return super.hasLabel(targetEntity) - && (targetEntity.isCustomNameVisible() - || targetEntity.hasCustomName() - && targetEntity == dispatcher.targetedEntity); - } -} \ No newline at end of file diff --git a/src/main/java/com/minelittlepony/unicopia/world/client/render/SpellcastEntityRenderer.java b/src/main/java/com/minelittlepony/unicopia/world/client/render/SpellcastEntityRenderer.java deleted file mode 100644 index 1303fc6e..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/client/render/SpellcastEntityRenderer.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.minelittlepony.unicopia.world.client.render; - -import com.minelittlepony.unicopia.world.client.render.model.GemEntityModel; -import com.minelittlepony.unicopia.world.entity.SpellcastEntity; - -import net.fabricmc.fabric.api.client.rendereregistry.v1.EntityRendererRegistry; -import net.minecraft.client.render.Frustum; -import net.minecraft.client.render.VertexConsumerProvider; -import net.minecraft.client.render.entity.EntityRenderDispatcher; -import net.minecraft.client.render.entity.LivingEntityRenderer; -import net.minecraft.client.render.entity.feature.FeatureRenderer; -import net.minecraft.client.render.entity.feature.FeatureRendererContext; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.util.Identifier; - -public class SpellcastEntityRenderer extends LivingEntityRenderer { - - private static final Identifier TEXTURE = new Identifier("unicopia", "textures/entity/gem.png"); - - public SpellcastEntityRenderer(EntityRenderDispatcher manager, EntityRendererRegistry.Context context) { - super(manager, new GemEntityModel(), 0); - addFeature(new TierFeature(this)); - } - - @Override - public Identifier getTexture(SpellcastEntity entity) { - return TEXTURE; - } - - @Override - public boolean shouldRender(SpellcastEntity entity, Frustum visibleRegion, double cameraX, double cameraY, double cameraZ) { - return true; - } - - @Override - protected float getLyingAngle(SpellcastEntity entity) { - - return 0; - } - - @Override - public void render(SpellcastEntity livingEntity, float f, float g, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i) { - super.render(livingEntity, f, g, matrixStack, vertexConsumerProvider, i); - } - - @Override - protected boolean hasLabel(SpellcastEntity targetEntity) { - return super.hasLabel(targetEntity) && (targetEntity.isCustomNameVisible() - || targetEntity.hasCustomName() && targetEntity == dispatcher.targetedEntity); - } - - class TierFeature extends FeatureRenderer { - - public TierFeature(FeatureRendererContext context) { - super(context); - } - - @Override - public void render(MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, SpellcastEntity entity, float limbAngle, float limbDistance, float tickDelta, float customAngle, float headYaw, float headPitch) { - matrices.push(); - int tiers = Math.min(entity.getCurrentLevel(), 5); - - for (int i = 0; i <= tiers; i++) { - float grow = (1 + i) * 0.2F; - - matrices.scale(1 + grow, 1 + grow, 1 + grow); - matrices.translate(0, -grow, 0); - - if (i == 5) { - matrices.push(); - matrices.translate(0.6F, 0.8F, 0); - matrices.scale(0.4F, 0.4F, 0.4F); - FeatureRenderer.render(model, model, TEXTURE, matrices, vertexConsumers, light, entity, limbAngle, limbDistance, entity.age, headYaw, headPitch, 1, 1, 1, 1); - matrices.pop(); - } - } - - for (int i = entity.getCurrentLevel(); i > 0; i--) { - matrices.push(); - matrices.translate(0.6F, 0, 0); - FeatureRenderer.render(model, model, TEXTURE, matrices, vertexConsumers, light, entity, limbAngle, limbDistance, entity.age, headYaw, headPitch, 1, 1, 1, 1); - matrices.pop(); - } - matrices.pop(); - } - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/client/render/model/ButterflyEntityModel.java b/src/main/java/com/minelittlepony/unicopia/world/client/render/model/ButterflyEntityModel.java deleted file mode 100644 index cd13424f..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/client/render/model/ButterflyEntityModel.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.minelittlepony.unicopia.world.client.render.model; - -import com.minelittlepony.unicopia.world.client.render.RenderLayers; -import com.minelittlepony.unicopia.world.entity.ButterflyEntity; - -import net.minecraft.client.model.ModelPart; -import net.minecraft.client.render.VertexConsumer; -import net.minecraft.client.render.entity.model.EntityModel; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.util.math.MathHelper; - -public class ButterflyEntityModel extends EntityModel { - - private ModelPart body; - - private ModelPart leftWingInner; - private ModelPart leftWingOuter; - - private ModelPart rightWingInner; - private ModelPart rightWingOuter; - - public ButterflyEntityModel() { - super(RenderLayers::entityNoLighting); - textureWidth = 64; - textureHeight = 64; - - body = new ModelPart(this, 0, 0); - body.pivotX = -10; - body.pivotY = 12; - - rightWingInner = new ModelPart(this, 42, 0); - rightWingInner.roll = -0.2F; - rightWingInner.addCuboid(-13, -5, 0, 10, 19, 1); - - body.addChild(rightWingInner); - - rightWingOuter = new ModelPart(this, 24, 16); - rightWingOuter.setPivot(-13, 10, 0.1F); - rightWingOuter.roll = -0.2F; - rightWingOuter.addCuboid(0, 0, 0, 10, 12, 1); - - rightWingInner.addChild(rightWingOuter); - - leftWingInner = new ModelPart(this, 42, 0); - leftWingInner.mirror = true; - leftWingInner.roll = 0.2F; - leftWingInner.addCuboid(2, -5, 0, 10, 19, 1); - - body.addChild(leftWingInner); - - leftWingOuter = new ModelPart(this, 24, 16); - leftWingOuter.mirror = true; - leftWingOuter.roll = -0.2F; - leftWingOuter.setPivot(2, 10, 0.1F); - leftWingOuter.addCuboid(0, 0, 0, 10, 12, 1); - - leftWingInner.addChild(leftWingOuter); - } - - @Override - public void render(MatrixStack matrices, VertexConsumer vertexConsumer, int light, int overlay, float red, float green, float blue, float alpha) { - body.render(matrices, vertexConsumer, light, overlay, red, green, blue, alpha); - } - - @Override - public void setAngles(ButterflyEntity entity, float limbSwing, float limbSwingAmount, float ageInTicks, float headYaw, float headPitch) { - - float flap = MathHelper.cos(ageInTicks) * (float)Math.PI / 4; - - if (entity.isResting()) { - body.pitch = 0.8F; - flap = MathHelper.cos(ageInTicks / 10) * (float)Math.PI / 6 + 0.7F; - } else { - body.pitch = ((float)Math.PI / 4) + MathHelper.cos(ageInTicks * 0.1F) * 0.15F; - } - - rightWingInner.yaw = flap; - leftWingInner.yaw = -flap; - } -} \ No newline at end of file diff --git a/src/main/java/com/minelittlepony/unicopia/world/client/render/model/CloudEntityModel.java b/src/main/java/com/minelittlepony/unicopia/world/client/render/model/CloudEntityModel.java deleted file mode 100644 index f16c40eb..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/client/render/model/CloudEntityModel.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.minelittlepony.unicopia.world.client.render.model; - -import com.minelittlepony.unicopia.world.client.render.RenderLayers; -import com.minelittlepony.unicopia.world.entity.CloudEntity; - -import net.minecraft.client.model.ModelPart; -import net.minecraft.client.render.VertexConsumer; -import net.minecraft.client.render.entity.model.EntityModel; -import net.minecraft.client.util.math.MatrixStack; - -public class CloudEntityModel extends EntityModel { - - private final ModelPart body; - - public CloudEntityModel() { - super(RenderLayers::cloud); - body = new ModelPart(this, 0, 0); - body.setTextureSize(250, 90); - - body.setTextureOffset(0, 0); - body.addCuboid(-24, 5, -24, 48, 10, 48); - - body.setTextureOffset(0, 58); - body.addCuboid(-10, 14.999F, -10, 30, 2, 30); - - body.setTextureOffset(120, 58); - body.addCuboid(-10, 3.001F, -10, 30, 2, 30); - - body.pivotY += 4.2; - } - - @Override - public void render(MatrixStack matrices, VertexConsumer vertexConsumer, int light, int overlay, float red, float green, float blue, float alpha) { - body.render(matrices, vertexConsumer, light, overlay, red, green, blue, alpha); - } - - @Override - public void setAngles(CloudEntity entity, float limbAngle, float limbDistance, float customAngle, float headYaw, float headPitch) { - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/client/render/model/CucoonEntityModel.java b/src/main/java/com/minelittlepony/unicopia/world/client/render/model/CucoonEntityModel.java deleted file mode 100644 index 34876ddd..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/client/render/model/CucoonEntityModel.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.minelittlepony.unicopia.world.client.render.model; - -import com.minelittlepony.unicopia.world.entity.CucoonEntity; - -import net.minecraft.client.model.ModelPart; -import net.minecraft.client.render.RenderLayer; -import net.minecraft.client.render.VertexConsumer; -import net.minecraft.client.render.entity.model.EntityModel; -import net.minecraft.client.util.math.MatrixStack; - -public class CucoonEntityModel extends EntityModel { - - private final ModelPart body; - - private float breatheAmount; - - public CucoonEntityModel() { - super(RenderLayer::getEntityTranslucentCull); - body = new ModelPart(this, 0, 0); - body.setTextureSize(250, 250); - - body.setTextureOffset(0, 0); - - // cucoon shape - body.addCuboid(-4, -2, -4, 8, 2, 8); - body.addCuboid(-7.5F, 0, -7.5F, 15, 6, 15); - body.addCuboid(-10, 4, -10, 20, 6, 20); - body.addCuboid(-11.5F, 10, -11.5F, 23, 8, 23); - body.addCuboid(-10, 17, -10, 20, 6, 20); - body.addCuboid(-11.5F, 22, -11.5F, 23, 2, 23); - } - - @Override - public void render(MatrixStack matrices, VertexConsumer vertexConsumer, int light, int overlay, float red, float green, float blue, float alpha) { - matrices.push(); - - matrices.scale(1 - breatheAmount, 1 + breatheAmount, 1 - breatheAmount); - matrices.translate(0, -breatheAmount * 1.3F, 0); - - body.render(matrices, vertexConsumer, light, overlay, red, green, blue, alpha); - - matrices.scale(0.9F, 0.9F, 0.9F); - matrices.translate(0, 0.2F, 0); - - body.render(matrices, vertexConsumer, light, overlay, red, green, blue, alpha); - - matrices.pop(); - } - - @Override - public void setAngles(CucoonEntity entity, float limbAngle, float limbDistance, float customAngle, float headYaw, float headPitch) { - breatheAmount = entity.getBreatheAmount(customAngle) / 8; - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/client/render/model/GemEntityModel.java b/src/main/java/com/minelittlepony/unicopia/world/client/render/model/GemEntityModel.java deleted file mode 100644 index dfb3208e..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/client/render/model/GemEntityModel.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.minelittlepony.unicopia.world.client.render.model; - -import javax.annotation.Nullable; - -import com.minelittlepony.unicopia.magic.Affinity; -import com.minelittlepony.unicopia.magic.Spell; -import com.minelittlepony.unicopia.magic.spell.SpellRegistry; -import com.minelittlepony.unicopia.world.entity.SpellcastEntity; -import com.minelittlepony.unicopia.world.item.UItems; -import com.minelittlepony.common.util.Color; - -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.model.ModelPart; -import net.minecraft.client.render.VertexConsumer; -import net.minecraft.client.render.entity.model.EntityModel; -import net.minecraft.client.render.model.json.ModelTransformation; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.client.util.math.Vector3f; -import net.minecraft.entity.EntityPose; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.MathHelper; - -public class GemEntityModel extends EntityModel { - - private ModelPart body; - - @Nullable - private Spell effect; - - public GemEntityModel() { - textureWidth = 256; - textureHeight = 256; - - body = new ModelPart(this); - body.pivotY = 1.2f; - } - - @Override - public void setAngles(SpellcastEntity entity, float limbAngle, float limbDistance, float customAngle, float headYaw, float headPitch) { - effect = entity.hasSpell() ? entity.getSpell() : null; - - float floatOffset = MathHelper.sin((entity.age + customAngle) / 10 + entity.hoverStart) / 10 + 0.1F; - - boolean unstable = entity.overLevelCap(); - - body.pivotX = unstable ? (float)Math.sin(customAngle) / 5F : 0; - body.pivotY = 1.2F + floatOffset - entity.getEyeHeight(EntityPose.STANDING); - body.pivotZ = unstable ? (float)Math.cos(customAngle) / 5F : 0; - body.pitch = unstable ? (float)Math.sin(customAngle) : 0; - - floatOffset = (entity.age + customAngle) / 20; - if (entity.getCurrentLevel() > 0) { - floatOffset *= entity.getCurrentLevel() + 1; - } - - floatOffset += entity.hoverStart; - floatOffset *= 180 / (float)Math.PI; - - body.yaw = floatOffset; - - } - - @Override - public void render(MatrixStack matrices, VertexConsumer vertexConsumer, int light, int overlay, float red, float green, float blue, float alpha) { - if (effect != null) { - red = Color.r(effect.getTint()); - green = Color.g(effect.getTint()); - blue = Color.b(effect.getTint()); - } - matrices.push(); - matrices.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(body.yaw)); - matrices.multiply(Vector3f.POSITIVE_X.getDegreesQuaternion(body.pitch)); - matrices.translate(body.pivotX, body.pivotY, body.pivotZ); - - ItemStack stack = new ItemStack(effect != null && effect.getAffinity() == Affinity.BAD ? UItems.CORRUPTED_GEM : UItems.GEM); - if (effect != null) { - SpellRegistry.instance().enchantStack(stack, effect.getName()); - } - - MinecraftClient.getInstance().getItemRenderer().renderItem( - stack, - ModelTransformation.Mode.GROUND, light, - overlay, - matrices, - MinecraftClient.getInstance().getBufferBuilders().getEntityVertexConsumers() - ); - - matrices.pop(); - //body.render(matrices, vertexConsumer, light, overlay, red, green, blue, alpha); - } - -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/client/render/model/SpellbookModel.java b/src/main/java/com/minelittlepony/unicopia/world/client/render/model/SpellbookModel.java deleted file mode 100644 index 63dc3f76..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/client/render/model/SpellbookModel.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.minelittlepony.unicopia.world.client.render.model; - -import java.util.List; - -import com.google.common.collect.ImmutableList; -import com.minelittlepony.unicopia.world.entity.SpellbookEntity; - -import net.minecraft.client.model.ModelPart; -import net.minecraft.client.render.VertexConsumer; -import net.minecraft.client.render.entity.model.EntityModel; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.util.math.MathHelper; - -public class SpellbookModel extends EntityModel { - private ModelPart leftCover = new ModelPart(64, 32, 0, 0).addCuboid(-6, -5, -0.005F, 6, 10, 0.005F); - private ModelPart rightCover = new ModelPart(64, 32, 16, 0).addCuboid(0, -5, -0.005F, 6, 10, 0.005F); - private ModelPart leftBlock = new ModelPart(64, 32, 0, 10).addCuboid(0, -4, -0.99F, 5, 8, 1); - private ModelPart rightBlock = new ModelPart(64, 32, 12, 10).addCuboid(0, -4, -0.01F, 5, 8, 1); - private ModelPart leftPage = new ModelPart(64, 32, 24, 10).addCuboid(0, -4, 0, 5, 8, 0.005F); - private ModelPart rightPage = new ModelPart(64, 32, 24, 10).addCuboid(0, -4, 0, 5, 8, 0.005F); - private ModelPart spine = new ModelPart(64, 32, 12, 0).addCuboid(-1, -5, 0, 2, 10, 0.005F); - - private List parts = ImmutableList.of(leftCover, rightCover, spine, leftBlock, rightBlock, leftPage, rightPage); - - public SpellbookModel() { - leftCover.setPivot(0, 0, -1); - rightCover.setPivot(0, 0, 1); - spine.yaw = 1.5707964F; - } - - @Override - public void render(MatrixStack matrices, VertexConsumer vertexConsumer, int light, int overlay, float red, float green, float blue, float alpha) { - parts.forEach(modelPart -> modelPart.render(matrices, vertexConsumer, light, overlay, red, green, blue, alpha)); - - leftCover = (new ModelPart(64, 32, 0, 0)).addCuboid(-6, -5, -0.005F, 6, 10, 0.005F); - rightCover = (new ModelPart(64, 32, 16, 0)).addCuboid(0, -5, -0.005F, 6, 10, 0.005F); - leftBlock = (new ModelPart(64, 32, 0, 10)).addCuboid(0.01F, -4, -0.99F, 5, 8, 1); - rightBlock = (new ModelPart(64, 32, 12, 10)).addCuboid(0.01F, -4, -0.01F, 5, 8, 1); - leftPage = (new ModelPart(64, 32, 24, 10)).addCuboid(0, -4, 0, 5, 8, 0.005F); - rightPage = (new ModelPart(64, 32, 24, 10)).addCuboid(0, -4, 0, 5, 8, 0.005F); - spine = (new ModelPart(64, 32, 12, 0)).addCuboid(-1, -5, 0, 2, 10, 0.005F); - - leftCover.setPivot(0, 0, -1); - rightCover.setPivot(0, 0, 1); - spine.yaw = 1.5707964F; - - parts = ImmutableList.of(leftCover, rightCover, spine, leftBlock, rightBlock, leftPage, rightPage); - } - - public void setPageAngles(float breath, float leftPageRot, float rightPageRot, float openAngle) { - float j = (MathHelper.sin(breath * 0.02F) * 0.1F + 1.25F) * openAngle; - - leftCover.yaw = 3.1415927F + j; - rightCover.yaw = -j; - leftBlock.yaw = j; - rightBlock.yaw = -j; - leftPage.yaw = j - j * 2 * leftPageRot; - rightPage.yaw = j - j * 2 * rightPageRot; - leftBlock.pivotX = MathHelper.sin(j); - rightBlock.pivotX = MathHelper.sin(j); - leftPage.pivotX = MathHelper.sin(j); - rightPage.pivotX = MathHelper.sin(j); - } - - @Override - public void setAngles(SpellbookEntity entity, float limbAngle, float limbDistance, float customAngle, float headYaw, float headPitch) { - float breath = MathHelper.sin((entity.age + customAngle) / 20) * 0.01F + 0.1F; - - float first_page_rot = limbDistance + (breath * 10); - float second_page_rot = 1 - first_page_rot; - float open_angle = 0.9f - limbDistance; - - if (first_page_rot > 1) first_page_rot = 1; - if (second_page_rot > 1) second_page_rot = 1; - - if (!entity.getIsOpen()) { - first_page_rot = second_page_rot = open_angle = 0; - } - - setPageAngles(breath, first_page_rot, second_page_rot, open_angle); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/container/BagOfHoldingContainer.java b/src/main/java/com/minelittlepony/unicopia/world/container/BagOfHoldingContainer.java deleted file mode 100644 index cfaef92c..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/container/BagOfHoldingContainer.java +++ /dev/null @@ -1,101 +0,0 @@ -package com.minelittlepony.unicopia.world.container; - -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.Inventory; -import net.minecraft.item.ItemStack; -import net.minecraft.util.Hand; -import net.minecraft.screen.ScreenHandler; -import net.minecraft.screen.slot.Slot; - -public class BagOfHoldingContainer extends ScreenHandler { - private final BagOfHoldingInventory inventory; - - private ItemStack sourceStack; - - public BagOfHoldingContainer(int sync, PlayerInventory inv) { - super(UContainers.BAG_OF_HOLDING, sync); - - PlayerEntity player = inv.player; - sourceStack = player.getStackInHand(Hand.MAIN_HAND); - inventory = BagOfHoldingInventory.getInventoryFromStack(sourceStack); - - inventory.onOpen(player); - close(player); - - final int LEFT_MARGIN = 8; - final int TOP_MARGIN = 18; - - final int containerRows = (int)Math.ceil(inventory.size() / 9); - final int inventoryRows = (int)Math.ceil((player.inventory.size() - 9) / 9); - - for (int i = 0; i < inventory.size(); i++) { - int slotX = (i % 9) * 18; - int slotY = (int)Math.floor(i / 9) * 18; - - addSlot(new SlotOfHolding(inventory, i, LEFT_MARGIN + slotX, TOP_MARGIN + slotY)); - } - - int inventoryY = (containerRows * 18) + 8; - int hotbarY = inventoryY + TOP_MARGIN + (inventoryRows * 18) + 4; - - for (int i = 9; i < player.inventory.size() - 5; i++) { - int slotX = (i % 9) * 18; - int slotY = (int)Math.floor(i / 9) * 18; - - addSlot(new Slot(player.inventory, i, LEFT_MARGIN + slotX, inventoryY + slotY)); - } - - for (int i = 0; i < 9; i++) { - addSlot(new Slot(player.inventory, i, LEFT_MARGIN + i * 18, hotbarY)); - } - } - - @Override - public void close(PlayerEntity player) { - inventory.writeTostack(sourceStack); - inventory.onClose(player); - - super.close(player); - } - - @Override - public boolean canUse(PlayerEntity playerIn) { - return true; - } - - @Override - public ItemStack transferSlot(PlayerEntity playerIn, int index) { - ItemStack resultingStack = ItemStack.EMPTY; - Slot slot = slots.get(index); - - if (slot != null && slot.hasStack()) { - ItemStack originalStack = slot.getStack(); - resultingStack = originalStack.copy(); - - if (index < inventory.size()) { - if (!insertItem(originalStack, inventory.size(), slots.size(), true)) { - return ItemStack.EMPTY; - } - } else if (!insertItem(originalStack, 0, inventory.size(), false)) { - return ItemStack.EMPTY; - } - - if (originalStack.isEmpty()) { - slot.setStack(ItemStack.EMPTY); - } else { - slot.markDirty(); - } - } - - sendContentUpdates(); - - return resultingStack; - } - - class SlotOfHolding extends Slot { - public SlotOfHolding(Inventory inventoryIn, int index, int xPosition, int yPosition) { - super(inventoryIn, index, xPosition, yPosition); - } - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/container/BagOfHoldingInventory.java b/src/main/java/com/minelittlepony/unicopia/world/container/BagOfHoldingInventory.java deleted file mode 100644 index c0f0d52d..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/container/BagOfHoldingInventory.java +++ /dev/null @@ -1,222 +0,0 @@ -package com.minelittlepony.unicopia.world.container; - -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; -import java.util.function.BiFunction; - -import com.minelittlepony.unicopia.UTags; -import com.minelittlepony.unicopia.util.NbtSerialisable; -import com.minelittlepony.unicopia.world.advancement.BOHDeathCriterion; -import com.minelittlepony.unicopia.util.MagicalDamageSource; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.block.EnderChestBlock; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.entity.Entity; -import net.minecraft.entity.ItemEntity; -import net.minecraft.entity.mob.MobEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.inventory.Inventory; -import net.minecraft.inventory.SimpleInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.item.SpawnEggItem; -import net.minecraft.loot.context.LootContext; -import net.minecraft.loot.context.LootContextParameters; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.ListTag; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.sound.SoundCategory; -import net.minecraft.sound.SoundEvents; -import net.minecraft.text.Text; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraft.world.explosion.Explosion.DestructionType; - -public class BagOfHoldingInventory extends SimpleInventory implements NbtSerialisable { - - public static final int NBT_COMPOUND = 10; - public static final int MIN_SIZE = 18; - - static BagOfHoldingInventory empty() { - return new BagOfHoldingInventory(new ArrayList<>(), ItemStack.EMPTY); - } - - public static BagOfHoldingInventory getInventoryFromStack(ItemStack stack) { - List items = new ArrayList<>(); - - iterateContents(stack, (i, item) -> { - items.add(item); - return true; - }); - - return new BagOfHoldingInventory(items, stack); - } - - public static void iterateContents(ItemStack stack, BiFunction itemConsumer) { - if (stack.hasTag() && stack.getTag().contains("inventory")) { - CompoundTag compound = stack.getSubTag("inventory"); - - if (compound.contains("items")) { - ListTag list = compound.getList("items", NBT_COMPOUND); - - for (int i = 0; i < list.size(); i++) { - ItemStack item = ItemStack.fromTag(list.getCompound(i)); - if (!item.isEmpty() && !itemConsumer.apply(i, item)) { - break; - } - } - } - } - } - - private final Optional name; - - private BagOfHoldingInventory(List items, ItemStack source) { - super(items.size() + 9 - (items.size() % 9)); - - for (int i = 0; i < items.size(); i++) { - setStack(i, items.get(i)); - } - - if (source.hasCustomName()) { - name = Optional.of(source.getName()); - } else { - name = Optional.empty(); - } - } - - public Optional getName() { - return name; - } - - public void addEntity(World world, Entity entity) { - - SpawnEggItem item = SpawnEggItem.forEntity(entity.getType()); - - ItemStack stack = new ItemStack(item); - - CompoundTag tag = entity.toTag(stack.getOrCreateSubTag("EntityTag")); - tag.remove("Pos"); - tag.remove("UUIDMost"); - tag.remove("UUIDLeast"); - - for (ItemStack i : entity.getItemsEquipped()) { - if (isIllegalItem(i)) { - stack.getTag().putBoolean("invalid", true); - break; - } - } - - addStack(stack); - entity.remove(); - - if (entity instanceof MobEntity) { - ((MobEntity)entity).playAmbientSound(); - } - - world.playSound(null, entity.getBlockPos(), SoundEvents.UI_TOAST_IN, SoundCategory.PLAYERS, 3.5F, 0.25F); - } - - public void addBlockEntity(World world, BlockPos pos, T blockInventory) { - BlockState state = world.getBlockState(pos); - - BlockEntity tile = state.getBlock().hasBlockEntity() ? world.getBlockEntity(pos) : null; - LootContext.Builder context = new LootContext.Builder((ServerWorld)world) - .random(world.random) - .parameter(LootContextParameters.POSITION, pos) - .parameter(LootContextParameters.TOOL, ItemStack.EMPTY) - .optionalParameter(LootContextParameters.BLOCK_ENTITY, tile); - - ItemStack blockStack = state.getDroppedStacks(context).get(0); - - blockInventory.toTag(blockStack.getOrCreateSubTag("BlockEntityTag")); - - for (int i = 0; i < blockInventory.size(); i++) { - ItemStack stack = blockInventory.getStack(i); - - if (isIllegalItem(stack)) { - blockStack.getSubTag("inventory").putBoolean("invalid", true); - break; - } - } - - HeavyInventory.encodeStackWeight(blockStack, HeavyInventory.getContentsTotalWorth(blockInventory, true), true); - - world.removeBlockEntity(pos); - world.setBlockState(pos, Blocks.AIR.getDefaultState()); - - addStack(blockStack); - world.playSound(null, pos, SoundEvents.UI_TOAST_IN, SoundCategory.PLAYERS, 3.5F, 0.25F); - } - - public void addItem(ItemEntity entity) { - addStack(entity.getStack()); - entity.remove(); - - entity.playSound(SoundEvents.UI_TOAST_IN, 3.5F, 0.25F); - } - - @Override - public void onClose(PlayerEntity player) { - if (checkExplosionConditions()) { - if (player instanceof ServerPlayerEntity) { - BOHDeathCriterion.INSTANCE.trigger((ServerPlayerEntity)player); - } - player.damage(MagicalDamageSource.create("paradox"), 1000); - player.world.createExplosion(player, player.getX(), player.getY(), player.getZ(), 5, DestructionType.DESTROY); - } - } - - protected boolean checkExplosionConditions() { - for (int i = 0; i < size(); i++) { - if (isIllegalItem(getStack(i))) { - return true; - } - } - - return false; - } - - protected boolean isIllegalItem(ItemStack stack) { - CompoundTag compound = stack.getSubTag("inventory"); - - return isIllegalBlock(Block.getBlockFromItem(stack.getItem())) - || stack.getItem().isIn(UTags.HAMMERPACE_IMMUNE) - || (compound != null && compound.contains("invalid")); - } - - protected boolean isIllegalBlock(Block block) { - return block instanceof EnderChestBlock; - } - - @Override - public void toNBT(CompoundTag compound) { - ListTag nbtItems = new ListTag(); - - for (int i = 0; i < size(); i++) { - CompoundTag comp = new CompoundTag(); - ItemStack stack = getStack(i); - if (!isIllegalItem(stack)) { - if (!stack.isEmpty()) { - stack.toTag(comp); - nbtItems.add(comp); - } - } - } - compound.put("items", nbtItems); - compound.putDouble("weight", getContentsTotalWorth()); - } - - public double getContentsTotalWorth() { - return HeavyInventory.getContentsTotalWorth(this, true); - } - - public void writeTostack(ItemStack stack) { - toNBT(stack.getOrCreateSubTag("inventory")); - } - -} \ No newline at end of file diff --git a/src/main/java/com/minelittlepony/unicopia/world/container/HeavyInventory.java b/src/main/java/com/minelittlepony/unicopia/world/container/HeavyInventory.java deleted file mode 100644 index f8734d50..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/container/HeavyInventory.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.minelittlepony.unicopia.world.container; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockEntityProvider; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.inventory.Inventory; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.world.EmptyBlockView; - -public class HeavyInventory { - - public static double getContentsTotalWorth(Inventory inventory, boolean deep) { - double total = 0; - - for (int i = 0; i < inventory.size(); i++) { - ItemStack stack = inventory.getStack(i); - - double weightOfOne = decodeStackWeight(stack, deep); - - if (weightOfOne == 0) { - total += stack.getCount(); - } else { - total += weightOfOne * stack.getCount(); - } - } - - return total; - } - - public static void encodeStackWeight(ItemStack stack, double weight, boolean deep) { - CompoundTag compound = stack.getSubTag("inventory"); - if (weight == 0 && compound != null) { - compound.remove("weight"); - compound.remove("deep"); - if (compound.isEmpty()) { - stack.removeSubTag("inventory"); - } - } else { - if (weight != 0) { - if (compound == null) { - compound = stack.getOrCreateSubTag("inventory"); - } - - compound.putDouble("weight", weight); - if (deep) { - compound.putBoolean("deep", deep); - } - } - } - } - - public static double decodeStackWeight(ItemStack stack, boolean deep) { - if (!stack.isEmpty() && stack.hasTag()) { - CompoundTag bet = stack.getSubTag("BlockEntityTag"); - CompoundTag compound = stack.getSubTag("inventory"); - - boolean hasWeight = compound != null && compound.contains("weight"); - - if (deep) { - if (!hasWeight && bet != null) { - Block b = Block.getBlockFromItem(stack.getItem()); - BlockEntity te = b.hasBlockEntity() ? ((BlockEntityProvider)b).createBlockEntity(EmptyBlockView.INSTANCE) : null; - - double weight = 0; - - if (te instanceof Inventory) { - te.fromTag(b.getDefaultState(), bet); - - weight = getContentsTotalWorth((Inventory)te, deep); - } - - encodeStackWeight(stack, weight, deep); - - return weight; - } - } - - if (hasWeight && (deep || !compound.contains("deep"))) { - return compound.getDouble("weight"); - } - } - - return 0; - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/container/SpellBookContainer.java b/src/main/java/com/minelittlepony/unicopia/world/container/SpellBookContainer.java deleted file mode 100644 index e4ab424f..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/container/SpellBookContainer.java +++ /dev/null @@ -1,187 +0,0 @@ -package com.minelittlepony.unicopia.world.container; - -import javax.annotation.Nonnull; - -import com.minelittlepony.unicopia.AwaitTickQueue; -import com.minelittlepony.unicopia.EquinePredicates; -import com.minelittlepony.unicopia.equine.player.Pony; -import com.minelittlepony.unicopia.magic.spell.SpellRegistry; -import com.minelittlepony.unicopia.world.recipe.URecipes; -import com.minelittlepony.unicopia.world.recipe.enchanting.IPageUnlockListener; - -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.inventory.CraftingInventory; -import net.minecraft.inventory.Inventory; -import net.minecraft.inventory.SimpleInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.particle.ParticleTypes; -import net.minecraft.recipe.Recipe; -import net.minecraft.screen.ScreenHandler; -import net.minecraft.screen.slot.Slot; -import net.minecraft.sound.SoundEvents; -import net.minecraft.world.World; -import net.minecraft.world.explosion.Explosion.DestructionType; - -public class SpellBookContainer extends ScreenHandler { - - private final World world; - - private Inventory result = new SimpleInventory(1); - - private SBInventory input = new SBInventory(result, this, 5, 1); - - private IPageUnlockListener listener; - - private SpellbookResultSlot output = null; - - private final PlayerEntity player; - - public SpellBookContainer(int sync, PlayerInventory inv) { - super(UContainers.SPELL_BOOK, sync); - world = inv.player.world; - this.player = inv.player; - - initCraftingSlots(); - - for (int i = 0; i < 9; ++i) { - addSlot(new Slot(player.inventory, i, 121 + i * 18, 195)); - } - - onContentChanged(input); - } - - public void setListener(IPageUnlockListener listener) { - this.listener = listener; - - if (output != null) { - output.setListener(listener); - } - } - - public void initCraftingSlots() { - addSlot(new InputSlot(input, 0, 175, 50)); - addSlot(new InputSlot(input, 1, 149, 94)); - addSlot(new InputSlot(input, 2, 175, 134)); - addSlot(new InputSlot(input, 3, 226, 120)); - addSlot(new InputSlot(input, 4, 227, 65)); - addSlot(output = new SpellbookResultSlot(listener, Pony.of(player), input, result, 0, 191, 92)); - } - - @Override - public void onContentChanged(Inventory inventoryIn) { - ItemStack current = result.getStack(0); - - if (!current.isEmpty()) { - ItemStack crafted = player.world.getRecipeManager().getFirstMatch(URecipes.SPELL_BOOK, input, world) - .map(Recipe::getOutput) - .orElse(ItemStack.EMPTY); - - if (!crafted.isEmpty()) { - output.setCrafted(true); - - if (crafted.getItem() != current.getItem()) { - - result.setStack(0, ItemStack.EMPTY); - output.onTakeItem(player, crafted); - - player.dropItem(crafted, true); - - player.playSound(SoundEvents.BLOCK_NOTE_BLOCK_SNARE, 1, 1); - - world.createExplosion(null, player.getX(), player.getY(), player.getZ(), 0, DestructionType.NONE); - world.createExplosion(null, player.getX(), player.getY(), player.getZ(), 0, DestructionType.NONE); - world.addParticle(ParticleTypes.EXPLOSION, player.getX(), player.getY(), player.getZ(), 1, 0, 0); - - AwaitTickQueue.scheduleTask(player.world, w -> player.currentScreenHandler.close(player), 0); - - return; - } - - current = crafted; - player.playSound(SoundEvents.BLOCK_NOTE_BLOCK_CHIME, 1, 1); - } else { - current = SpellRegistry.instance().disenchantStack(current); - - output.setCrafted(false); - player.playSound(SoundEvents.BLOCK_NOTE_BLOCK_BASS, 1, 1); - } - - result.setStack(0, current); - } - } - - @Nonnull - @Override - public ItemStack transferSlot(PlayerEntity player, int index) { - ItemStack stack = ItemStack.EMPTY; - Slot slot = slots.get(index); - - if (slot != null && slot.hasStack()) { - ItemStack slotStack = slot.getStack(); - stack = slotStack.copy(); - - if (index > 5) { - if (!output.hasStack() && output.canInsert(stack)) { - if (!insertItem(slotStack, 5, 6, false)) { - return ItemStack.EMPTY; - } - } else if (!insertItem(slotStack, 0, 5, false)) { - return ItemStack.EMPTY; - } - } else { - if (!insertItem(slotStack, 6, 15, false)) { - return ItemStack.EMPTY; - } - - slot.onStackChanged(slotStack, stack); - onContentChanged(input); - } - - if (slotStack.getCount() == stack.getCount()) { - return ItemStack.EMPTY; - } - - slot.onTakeItem(player, slotStack); - } - - return stack; - } - - @Override - public void close(PlayerEntity player) { - dropInventory(player, world, input); - dropInventory(player, world, result); - super.close(player); - } - - @Override - public boolean canUse(PlayerEntity player) { - return EquinePredicates.PLAYER_UNICORN.test(player); - } - - public static class InputSlot extends Slot { - - public InputSlot(Inventory inventoryIn, int index, int xPosition, int yPosition) { - super(inventoryIn, index, xPosition, yPosition); - } - - public boolean canBeHovered() { - return true; - } - } - - public static class SBInventory extends CraftingInventory { - - private final Inventory craftResult; - - public SBInventory(Inventory resultMatrix, ScreenHandler eventHandler, int width, int height) { - super(eventHandler, width, height); - craftResult = resultMatrix; - } - - public Inventory getCraftResultMatrix() { - return craftResult; - } - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/container/SpellbookResultSlot.java b/src/main/java/com/minelittlepony/unicopia/world/container/SpellbookResultSlot.java deleted file mode 100644 index a1ac5d26..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/container/SpellbookResultSlot.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.minelittlepony.unicopia.world.container; - -import com.minelittlepony.unicopia.equine.player.Pony; -import com.minelittlepony.unicopia.magic.spell.SpellRegistry; -import com.minelittlepony.unicopia.world.container.SpellBookContainer.SBInventory; -import com.minelittlepony.unicopia.world.item.MagicGemItem; -import com.minelittlepony.unicopia.world.recipe.URecipes; -import com.minelittlepony.unicopia.world.recipe.enchanting.IPageUnlockListener; -import com.minelittlepony.unicopia.world.recipe.enchanting.SpellCraftingEvent; -import com.mojang.datafixers.util.Pair; - -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.inventory.Inventory; -import net.minecraft.item.ItemStack; -import net.minecraft.item.MusicDiscItem; -import net.minecraft.screen.PlayerScreenHandler; -import net.minecraft.util.Identifier; -import net.minecraft.util.collection.DefaultedList; - -public class SpellbookResultSlot extends SpellBookContainer.InputSlot { - public static final Identifier EMPTY_GEM_SLOT = new Identifier("unicopia", "item/empty_gem_slot"); - - private final Pony player; - private final SBInventory craftMatrix; - - private IPageUnlockListener listener; - - private boolean crafted; - - public SpellbookResultSlot(IPageUnlockListener listener, Pony player, SBInventory craftMatric, Inventory inventory, int index, int xPosition, int yPosition) { - super(inventory, index, xPosition, yPosition); - this.player = player; - this.listener = listener; - craftMatrix = craftMatric; - } - - public void setListener(IPageUnlockListener listener) { - this.listener = listener; - } - - public void setCrafted(boolean crafted) { - this.crafted = crafted; - } - - @Override - public ItemStack onTakeItem(PlayerEntity player, ItemStack stack) { - if (crafted) { - onCrafted(stack); - - ItemStack current = craftMatrix.getCraftResultMatrix().getStack(0); - craftMatrix.getCraftResultMatrix().setStack(0, stack); - - DefaultedList remaining = player.world.getRecipeManager().getRemainingStacks(URecipes.SPELL_BOOK, craftMatrix, player.world); - - craftMatrix.getCraftResultMatrix().setStack(0, current); - - for (int i = 0; i < remaining.size(); ++i) { - current = craftMatrix.getStack(i); - ItemStack remainder = remaining.get(i); - - if (!current.isEmpty()) { - if (current.getCount() < stack.getCount()) { - craftMatrix.setStack(i, ItemStack.EMPTY); - } else { - craftMatrix.removeStack(i, stack.getCount()); - } - - if (!remainder.isEmpty()) { - if (craftMatrix.getStack(i).isEmpty()) { - craftMatrix.setStack(i, remainder); - } else { - remainder.setCount(stack.getCount()); - if (!player.inventory.insertStack(remainder)) { - player.dropItem(remainder, true); - } - } - } - } - } - } - - return super.onTakeItem(player, stack); - } - - @Override - protected void onCrafted(ItemStack stack, int amount) { - onCrafted(stack); - } - - @Override - protected void onCrafted(ItemStack stack) { - SpellCraftingEvent.trigger(player.getPages(), stack, listener); - } - - @Override - public boolean canInsert(ItemStack stack) { - return (stack.getItem() instanceof MagicGemItem || stack.getItem() instanceof MusicDiscItem) - && !SpellRegistry.stackHasEnchantment(stack); - } - - @Override - public Pair getBackgroundSprite() { - return Pair.of(PlayerScreenHandler.BLOCK_ATLAS_TEXTURE, EMPTY_GEM_SLOT); - } -} \ No newline at end of file diff --git a/src/main/java/com/minelittlepony/unicopia/world/container/UContainers.java b/src/main/java/com/minelittlepony/unicopia/world/container/UContainers.java deleted file mode 100644 index a7d6bd10..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/container/UContainers.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.minelittlepony.unicopia.world.container; - -import net.fabricmc.fabric.api.screenhandler.v1.ScreenHandlerRegistry; -import net.fabricmc.fabric.api.screenhandler.v1.ScreenHandlerRegistry.SimpleClientHandlerFactory; -import net.minecraft.screen.ScreenHandler; -import net.minecraft.screen.ScreenHandlerType; -import net.minecraft.util.Identifier; - -public interface UContainers { - - ScreenHandlerType BAG_OF_HOLDING = register("bag_of_holding", BagOfHoldingContainer::new); - ScreenHandlerType SPELL_BOOK = register("spell_book", SpellBookContainer::new); - - static ScreenHandlerType register(String name, SimpleClientHandlerFactory factory) { - return ScreenHandlerRegistry.registerSimple(new Identifier("unicopia", name), factory); - } - - static void bootstrap() { } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/entity/ButterflyEntity.java b/src/main/java/com/minelittlepony/unicopia/world/entity/ButterflyEntity.java deleted file mode 100644 index f092052e..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/entity/ButterflyEntity.java +++ /dev/null @@ -1,227 +0,0 @@ -package com.minelittlepony.unicopia.world.entity; - -import java.util.Random; - -import javax.annotation.Nullable; - -import net.minecraft.block.BlockState; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityPose; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.SpawnReason; -import net.minecraft.entity.attribute.DefaultAttributeContainer; -import net.minecraft.entity.attribute.EntityAttributes; -import net.minecraft.entity.damage.DamageSource; -import net.minecraft.entity.data.DataTracker; -import net.minecraft.entity.data.TrackedData; -import net.minecraft.entity.data.TrackedDataHandlerRegistry; -import net.minecraft.entity.mob.AmbientEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.predicate.entity.EntityPredicates; -import net.minecraft.sound.SoundEvent; -import net.minecraft.util.Identifier; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.World; -import net.minecraft.world.WorldAccess; - -public class ButterflyEntity extends AmbientEntity { - - private static final TrackedData RESTING = DataTracker.registerData(ButterflyEntity.class, TrackedDataHandlerRegistry.BOOLEAN); - - private static final TrackedData VARIANT = DataTracker.registerData(ButterflyEntity.class, TrackedDataHandlerRegistry.INTEGER); - - private BlockPos hoveringPosition; - - public ButterflyEntity(EntityType type, World world) { - super(type, world); - setVariaty(Variant.random(world.random)); - setResting(true); - } - - public static DefaultAttributeContainer.Builder createButterflyAttributes() { - return createLivingAttributes().add(EntityAttributes.GENERIC_MAX_HEALTH, 2); - } - - @Nullable - @Override - protected SoundEvent getHurtSound(DamageSource damageSourceIn) { - return null; - } - - @Nullable - @Override - protected SoundEvent getDeathSound() { - return null; - } - - @Override - protected void initDataTracker() { - super.initDataTracker(); - getDataTracker().startTracking(VARIANT, Variant.BUTTERFLY.ordinal()); - getDataTracker().startTracking(RESTING, false); - } - - @Override - public boolean isPushable() { - return false; - } - - @Override - public boolean collides() { - return true; - } - - @Override - public void tick() { - super.tick(); - - Vec3d vel = getVelocity(); - setVelocity(vel.x, vel.y * 0.6 + 0.02F, vel.z); - } - - public boolean isResting() { - return getDataTracker().get(RESTING); - } - - public void setResting(boolean resting) { - getDataTracker().set(RESTING, resting); - } - - public Variant getVariety() { - Variant[] values = Variant.values(); - return values[getDataTracker().get(VARIANT) % values.length]; - } - - public void setVariaty(Variant variant) { - getDataTracker().set(VARIANT, variant.ordinal()); - } - - protected boolean isAggressor(Entity e) { - if (e instanceof ButterflyEntity) { - return false; - } - - if (e instanceof PlayerEntity) { - PlayerEntity player = (PlayerEntity)e; - - if (player.isCreative() || player.isSpectator()) { - return false; - } - - if (player.isSprinting() || player.handSwinging || player.forwardSpeed > 0 || player.sidewaysSpeed > 0) { - return true; - } - } else if (!EntityPredicates.EXCEPT_CREATIVE_OR_SPECTATOR.test(e)) { - return false; - } - - return e.getVelocity().x != 0 || e.getVelocity().z != 0; - } - - @Override - public void tickMovement() { - super.tickMovement(); - - BlockPos pos = getBlockPos(); - BlockPos below = pos.down(); - - if (isResting()) { - if (world.getBlockState(below).isOpaque()) { - if (world.getEntities(this, getBoundingBox().expand(7)).stream().anyMatch(this::isAggressor)) { - setResting(false); - } - } else { - setResting(false); - } - - } else { - - // invalidate the hovering position - if (hoveringPosition != null && (!world.isAir(hoveringPosition) || hoveringPosition.getY() < 1)) { - hoveringPosition = null; - } - - // select a new hovering position - if (hoveringPosition == null || random.nextInt(30) == 0 || hoveringPosition.getSquaredDistance(pos) < 4) { - hoveringPosition = new BlockPos( - getX() + random.nextInt(7) - random.nextInt(7), - getY() + random.nextInt(6) - 2, - getZ() + random.nextInt(7) - random.nextInt(7) - ); - } - - // hover casually towards the chosen position - - double changedX = hoveringPosition.getX() + 0.5D - getX(); - double changedY = hoveringPosition.getY() + 0.1D - getY(); - double changedZ = hoveringPosition.getZ() + 0.5D - getZ(); - - Vec3d vel = getVelocity(); - - setVelocity( - vel.x + (Math.signum(changedX) * 0.5D - vel.x) * 0.10000000149011612D, - vel.y + (Math.signum(changedY) * 0.699999988079071D - vel.y) * 0.10000000149011612D, - vel.z + (Math.signum(changedZ) * 0.5D - vel.z) * 0.10000000149011612D - ); - - float f = (float)(MathHelper.atan2(vel.z, vel.x) * (180 / Math.PI)) - 90; - - forwardSpeed = 0.5F; - headYaw += MathHelper.wrapDegrees(f - headYaw); - - if (random.nextInt(100) == 0 && world.getBlockState(below).isOpaque()) { - setResting(true); - } - } - } - - @Override - public boolean handleFallDamage(float distance, float damageMultiplier) { - return false; - } - - @Override - protected void fall(double y, boolean onGroundIn, BlockState state, BlockPos pos) { - } - - @Override - public boolean canSpawn(WorldAccess world, SpawnReason reason) { - return reason != SpawnReason.NATURAL || (getY() < world.getSeaLevel() && world.getLightLevel(getBlockPos()) > 7); - } - - @Override - public float getEyeHeight(EntityPose pose) { - return getHeight() / 2; - } - - public enum Variant { - BUTTERFLY, - YELLOW, - LIME, - RED, - GREEN, - BLUE, - PURPLE, - MAGENTA, - PINK, - HEDYLIDAE, - LYCAENIDAE, - NYMPHALIDAE, - MONARCH, - WHITE_MONARCH, - BRIMSTONE; - - private final Identifier skin = new Identifier("unicopia", "textures/entity/butterfly/" + name().toLowerCase() + ".png"); - - public Identifier getSkin() { - return skin; - } - - static Variant random(Random rand) { - Variant[] values = values(); - return values[rand.nextInt(values.length)]; - } - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/entity/CloudEntity.java b/src/main/java/com/minelittlepony/unicopia/world/entity/CloudEntity.java deleted file mode 100644 index b462c9f2..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/entity/CloudEntity.java +++ /dev/null @@ -1,718 +0,0 @@ -package com.minelittlepony.unicopia.world.entity; - -import java.util.Map; - -import javax.annotation.Nullable; - -import com.google.common.collect.Streams; -import com.minelittlepony.unicopia.EquinePredicates; -import com.minelittlepony.unicopia.InAnimate; -import com.minelittlepony.unicopia.Race; -import com.minelittlepony.unicopia.ability.PegasusCloudInteractionAbility.Interactable; -import com.minelittlepony.unicopia.equine.Ponylike; -import com.minelittlepony.unicopia.equine.player.Pony; -import com.minelittlepony.unicopia.particles.ParticleEmitter; -import com.minelittlepony.unicopia.particles.UParticles; -import com.minelittlepony.unicopia.world.block.UBlocks; -import com.minelittlepony.unicopia.world.item.UItems; - -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.block.CropBlock; -import net.minecraft.block.FarmlandBlock; -import net.minecraft.block.FireBlock; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.enchantment.Enchantments; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityData; -import net.minecraft.entity.EntityDimensions; -import net.minecraft.entity.EntityPose; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.ItemEntity; -import net.minecraft.entity.LightningEntity; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.MovementType; -import net.minecraft.entity.SpawnReason; -import net.minecraft.entity.damage.DamageSource; -import net.minecraft.entity.data.DataTracker; -import net.minecraft.entity.data.TrackedData; -import net.minecraft.entity.data.TrackedDataHandlerRegistry; -import net.minecraft.entity.mob.FlyingEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemConvertible; -import net.minecraft.item.ItemStack; -import net.minecraft.item.ShovelItem; -import net.minecraft.item.SwordItem; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.particle.ParticleEffect; -import net.minecraft.particle.ParticleTypes; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.sound.BlockSoundGroup; -import net.minecraft.sound.SoundCategory; -import net.minecraft.sound.SoundEvent; -import net.minecraft.sound.SoundEvents; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Box; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.Heightmap; -import net.minecraft.world.LocalDifficulty; -import net.minecraft.world.World; -import net.minecraft.world.WorldAccess; -import net.minecraft.world.biome.Biome; - -public class CloudEntity extends FlyingEntity implements Interactable, InAnimate { - - private static final TrackedData RAINTIMER = DataTracker.registerData(CloudEntity.class, TrackedDataHandlerRegistry.INTEGER); - private static final TrackedData THUNDERING = DataTracker.registerData(CloudEntity.class, TrackedDataHandlerRegistry.BOOLEAN); - private static final TrackedData SCALE = DataTracker.registerData(CloudEntity.class, TrackedDataHandlerRegistry.INTEGER); - - private static final TrackedData STATIONARY = DataTracker.registerData(CloudEntity.class, TrackedDataHandlerRegistry.BOOLEAN); - - public static final EntityDimensions BASE_DIMENSIONS = EntityDimensions.changing(0.6f, 0.6f); - - protected double targetAltitude; - - protected int directionX; - protected int directionZ; - - public CloudEntity(EntityType type, World world) { - super(type, world); - inanimate = true; - ignoreCameraFrustum = true; - targetAltitude = getRandomFlyingHeight(); - } - - @Override - protected void initDataTracker() { - super.initDataTracker(); - dataTracker.startTracking(RAINTIMER, 0); - dataTracker.startTracking(THUNDERING, false); - dataTracker.startTracking(STATIONARY, false); - dataTracker.startTracking(SCALE, 1); - } - - @Override - protected SoundEvent getHurtSound(DamageSource damageSource) { - return SoundEvents.BLOCK_WOOL_HIT; - } - - @Override - protected SoundEvent getDeathSound() { - return SoundEvents.BLOCK_WOOL_BREAK; - } - - @Override - public boolean doesRenderOnFire() { - return false; - } - - @Override - public float getBrightnessAtEyes() { - return 0xF000F0; - } - - @Override - public boolean cannotDespawn() { - return hasCustomName() || getStationary() || getOpaque(); - } - - @Override - public int getLimitPerChunk() { - return 6; - } - - @Override - public boolean canInteract(Race race) { - return race.canInteractWithClouds(); - } - - @Override - public void onStruckByLightning(LightningEntity lightningBolt) { - - } - - @Override - public EntityData initialize(WorldAccess world, LocalDifficulty difficulty, SpawnReason type, @Nullable EntityData data, @Nullable CompoundTag tag) { - if (random.nextInt(20) == 0 && canRainHere()) { - setRaining(); - if (random.nextInt(20) == 0) { - setIsThundering(true); - } - } - - setCloudSize(1 + random.nextInt(4)); - - return super.initialize(world, difficulty, type, data, tag); - } - - @Override - protected void pushAway(Entity other) { - if (other instanceof CloudEntity || other instanceof PlayerEntity) { - if (other.getY() > getY()) { - return; - } - - super.pushAway(other); - } - } - - @Override - public void pushAwayFrom(Entity other) { - if (other instanceof PlayerEntity) { - if (EquinePredicates.PLAYER_PEGASUS.test(other)) { - super.pushAwayFrom(other); - } - } else if (other instanceof CloudEntity) { - super.pushAwayFrom(other); - } - } - - @Override - public void tick() { - Box boundingbox = getBoundingBox(); - - if (getIsRaining()) { - if (world.isClient) { - for (int i = 0; i < 30 * getCloudSize(); i++) { - double x = MathHelper.nextDouble(random, boundingbox.minX, boundingbox.maxX); - double y = getBoundingBox().minY + getHeight()/2; - double z = MathHelper.nextDouble(random, boundingbox.minZ, boundingbox.maxZ); - - ParticleEffect particleId = canSnowHere(new BlockPos(x, y, z)) ? ParticleTypes.ITEM_SNOWBALL : UParticles.RAIN_DROPS; - - world.addParticle(particleId, x, y, z, 0, 0, 0); - } - - Box rainedArea = boundingbox - .expand(1, 0, 1) - .expand(0, -(getY() - getGroundPosition(getBlockPos()).getY()), 0); - - - for (PlayerEntity j : world.getEntities(PlayerEntity.class, rainedArea, j -> canSnowHere(j.getBlockPos()))) { - j.world.playSound(j, j.getBlockPos(), SoundEvents.WEATHER_RAIN, SoundCategory.AMBIENT, 0.1F, 0.6F); - } - } - - double width = getDimensions(getPose()).width; - BlockPos pos = getGroundPosition(new BlockPos( - getX() + random.nextFloat() * width, - getY(), - getZ() + random.nextFloat() * width - )); - - if (getIsThundering()) { - if (random.nextInt(3000) == 0) { - spawnThunderbolt(pos); - } - - if (random.nextInt(200) == 0) { - setIsThundering(false); - } - } - - BlockState state = world.getBlockState(pos); - - if (state.getBlock() instanceof FireBlock) { - world.setBlockState(pos, Blocks.AIR.getDefaultState()); - } - - if (random.nextInt(20) == 0) { - BlockPos below = pos.down(); - state = world.getBlockState(below); - if (state.getBlock() != null) { - Biome biome = world.getBiome(below); - - if (biome.canSetIce(world, below)) { - world.setBlockState(below, Blocks.ICE.getDefaultState()); - } - - if (biome.canSetSnow(world, pos)) { - world.setBlockState(pos, Blocks.SNOW.getDefaultState()); - } - - if (state.getBlock() instanceof FarmlandBlock) { - int moisture = state.get(FarmlandBlock.MOISTURE); - - if (moisture < 7) { - world.setBlockState(below, state.with(FarmlandBlock.MOISTURE, moisture + 1)); - } - } else if (state.getBlock() instanceof CropBlock) { - int age = state.get(CropBlock.AGE); - - if (age < 7) { - world.setBlockState(below, state.with(CropBlock.AGE, age + 1), 2); - } - } - - state.getBlock().rainTick(world, below); - } - } - - if (setRainTimer(getRainTimer() - 1) == 0) { - if (!getStationary()) { - spawnHurtParticles(); - - if (getCloudSize() > 1) { - setIsRaining(false); - setCloudSize(getCloudSize() - 1); - } else { - remove(); - } - } - } - } else { - if (random.nextInt(8000) == 0 && canRainHere()) { - setRaining(); - if (random.nextInt(7000) == 0) { - setIsThundering(true); - } - } - } - - pitch = 0; - headYaw = 0; - yaw = 0; - - for (Entity i : world.getEntities(this, boundingbox - .expand(1 / (1 + getCloudSize())), EquinePredicates.ENTITY_INTERACT_WITH_CLOUDS)) { - if (i.getY() > getY() + 0.5) { - applyGravityCompensation(i); - } - } - - if (isOnFire() && !dead) { - for (int i = 0; i < 5; i++) { - world.addParticle(ParticleTypes.CLOUD, - MathHelper.nextDouble(random, boundingbox.minX, boundingbox.maxX), - MathHelper.nextDouble(random, boundingbox.minY, boundingbox.maxY), - MathHelper.nextDouble(random, boundingbox.minZ, boundingbox.maxZ), 0, 0.25, 0); - } - } - - if (getStationary()) { - setVelocity(0, 0, 0); - } - - super.tick(); - - double motionFactor = (1 + getCloudSize() / 4); - - Vec3d vel = this.getVelocity(); - this.setVelocity(vel.x / motionFactor, vel.y, vel.z / motionFactor); - - - hurtTime = 0; - } - - @Override - public double getMountedHeightOffset() { - return getBoundingBox().maxY - getBoundingBox().minY - 0.25; - } - - @Override - public void travel(Vec3d motion) { - if (!getStationary()) { - super.travel(motion); - } - } - - @Override - public void onPlayerCollision(PlayerEntity player) { - - Pony pony = Pony.of(player); - - if (pony.getPhysics().isGravityNegative() ? player.getY() <= getY() : player.getY() >= getY()) { - if (applyGravityCompensation(player)) { - double difX = player.getX() - player.prevX; - double difZ = player.getZ() - player.prevZ; - double difY = player.getY() - player.prevY; - - player.horizontalSpeed = (float)(player.horizontalSpeed + MathHelper.sqrt(difX * difX + difZ * difZ) * 0.6); - player.distanceTraveled = (float)(player.distanceTraveled + MathHelper.sqrt(difX * difX + difY * difY + difZ * difZ) * 0.6); - - if (pony.stepOnCloud()) { - BlockSoundGroup soundtype = BlockSoundGroup.WOOL; - player.playSound(soundtype.getStepSound(), soundtype.getVolume() * 0.15F, soundtype.getPitch()); - } - } - } - - super.onPlayerCollision(player); - } - - @Override - protected void mobTick() { - - if (!getStationary()) { - if (!hasVehicle()) { - double distance = targetAltitude - getY(); - - if (targetAltitude < getY() && !world.isAir(getBlockPos())) { - distance = 0; - } - - if (Math.abs(distance) < 1 && random.nextInt(7000) == 0) { - targetAltitude = getRandomFlyingHeight(); - distance = targetAltitude - getY(); - } - - if (Math.abs(distance) < 1) { - distance = 0; - } - - Vec3d vel = getVelocity(); - - setVelocity(vel.x, vel.y + (Math.signum(distance) * 0.699999988079071D - vel.y) * 0.10000000149011612D, vel.z); - } - } - } - - protected float getRandomFlyingHeight() { - float b = getMinimumFlyingHeight(); - float a = b + getMaximumAltitude(); - - return MathHelper.lerp(world.random.nextFloat(), Math.min(a, b), Math.max(a, b)); - } - - protected float getMinimumFlyingHeight() { - return world.getTopY(Heightmap.Type.WORLD_SURFACE, MathHelper.floor(getX()), MathHelper.floor(getZ())); - } - - protected int getMaximumAltitude() { - return 15; - } - - @Override - public void handleStatus(byte type) { - if (type == 2 && !isOnFire()) { - spawnHurtParticles(); - } - super.handleStatus(type); - } - - @Override - public void handlePegasusInteration(int interationType) { - if (!world.isClient) { - switch (interationType) { - case 1: - setIsRaining(!getIsRaining()); - break; - case 2: - spawnThunderbolt(); - break; - } - } - - spawnHurtParticles(); - } - - public void spawnHurtParticles() { - for (int i = 0; i < 50 * getCloudSize(); i++) { - ParticleEmitter.instance().emitDiggingParticles(this, UBlocks.CLOUD_BLOCK); - } - playHurtSound(DamageSource.GENERIC); - } - - @Override - public boolean damage(DamageSource source, float amount) { - Entity attacker = source.getAttacker(); - - if (attacker instanceof PlayerEntity) { - return damage(source, amount, (PlayerEntity)attacker); - } - - return source == DamageSource.IN_WALL || super.damage(source, amount); - } - - private boolean damage(DamageSource source, float amount, PlayerEntity player) { - - ItemStack stack = player.getMainHandStack(); - - boolean canFly = EnchantmentHelper.get(stack).containsKey(Enchantments.FEATHER_FALLING) - || EquinePredicates.PLAYER_PEGASUS.test(player); - boolean stat = getStationary(); - - if (stat || canFly) { - if (!isOnFire()) { - spawnHurtParticles(); - } - - if (stack != null && stack.getItem() instanceof SwordItem) { - return super.damage(source, amount); - } else if (stack != null && stack.getItem() instanceof ShovelItem) { - return super.damage(source, amount * 1.5f); - } else if (canFly) { - if (player.getY() < getY() || !world.isAir(getBlockPos())) { - targetAltitude = getY() + 5; - } else if (player.getY() > getY()) { - targetAltitude = getY() - 5; - } - } - } - return false; - } - - @Override - public void onDeath(DamageSource s) { - if (s == DamageSource.GENERIC || (s.getSource() != null && s.getSource() instanceof PlayerEntity)) { - remove(); - } - - super.onDeath(s); - //clearItemFloatingState(); - } - - @Override - public void remove() { - super.remove(); - //clearItemFloatingState(); - } - - //@FUF(reason = "There is no TickEvent.EntityTickEvent. Waiting on mixins...") - protected void clearItemFloatingState() { - Box bounds = getBoundingBox().expand(1 / (1 + getCloudSize())).expand(5); - - for (Entity i : world.getEntities(this, bounds, this::entityIsFloatingItem)) { - i.setNoGravity(false); - } - } - - private boolean entityIsFloatingItem(Entity e) { - return e instanceof ItemEntity - && EquinePredicates.ITEM_INTERACT_WITH_CLOUDS.test(e); - } - - @Override - protected void dropEquipment(DamageSource source, int looting, boolean hitByPlayer) { - if (hitByPlayer) { - int amount = 13 + world.random.nextInt(3); - - dropItem(UItems.CLOUD_MATTER, amount * (1 + looting)); - - if (world.random.nextBoolean()) { - dropItem(UItems.DEW_DROP, 3 + looting); - } - } - } - - @Override - public ItemEntity dropItem(ItemConvertible stack, int amount) { - ItemEntity item = super.dropItem(stack, amount); - - Ponylike.of(item).setSpecies(Race.PEGASUS); - item.setNoGravity(true); - item.setVelocity(0, 0, 0); - - return item; - } - - @Override - public void readCustomDataFromTag(CompoundTag tag) { - super.readCustomDataFromTag(tag); - - setRainTimer(tag.getInt("RainTimer")); - setIsThundering(tag.getBoolean("IsThundering")); - setCloudSize(tag.getByte("CloudSize")); - setStationary(tag.getBoolean("IsStationary")); - } - - @Override - public void writeCustomDataToTag(CompoundTag tag) { - super.writeCustomDataToTag(tag); - - tag.putInt("RainTimer", getRainTimer()); - tag.putBoolean("IsThundering", getIsThundering()); - tag.putByte("CloudSize", (byte)getCloudSize()); - tag.putBoolean("IsStationary", getStationary()); - } - - protected boolean applyGravityCompensation(Entity entity) { - int floatStrength = getFloatStrength(entity); - - if (!isConnectedThroughVehicle(entity) && floatStrength > 0) { - - double bounceModifier = entity.fallDistance > 80 ? 80 : MathHelper.floor(entity.fallDistance * 10) / 10; - - entity.setOnGround(true); - - Vec3d motion = entity.getVelocity(); - double motionX = motion.x; - double motionY = motion.y; - double motionZ = motion.z; - - Ponylike p = Ponylike.of(entity); - boolean negativeGravity = p != null && p.getPhysics().isGravityNegative(); - float gravityConstant = negativeGravity ? -1 : 1; - - if (negativeGravity ? motionY >= 0 : motionY <= 0) { - motionY += gravityConstant * (((floatStrength > 2 ? 1 : floatStrength/2) * 0.699999998079071D) - motionY + bounceModifier * 0.7) * 0.10000000149011612D; - - if (negativeGravity) { - if (motionY > 0) { - motionY = 0; - } - } else { - motionY = Math.min(0.1F, motionY); - if (motionY < 0.002F) { - motionY = 0.001; - } - } - } - - if (!getStationary()) { - motionX += ((motionX - motionX) / getCloudSize()) - 0.002F; - } - - if (!getStationary() && motionY > 0.4 && world.random.nextInt(900) == 0) { - spawnThunderbolt(getBlockPos()); - } - - if (getStationary() && entity instanceof ItemEntity) { - motionX /= 8; - motionZ /= 8; - } - entity.setVelocity(motionX, motionY, motionZ); - - return true; - } - - return false; - } - - @Override - public void move(MovementType type, Vec3d delta) { - setBoundingBox(getBoundingBox().offset(delta)); - moveToBoundingBoxCenter(); - } - - public int getFloatStrength(Entity entity) { - if (EquinePredicates.ENTITY_INTERACT_WITH_CLOUDS.test(entity)) { - return 3; - } - - if (entity instanceof LivingEntity) { - return getFeatherEnchantStrength((LivingEntity)entity); - } - - return 0; - } - - public static int getFeatherEnchantStrength(LivingEntity entity) { - return Streams.stream(entity.getArmorItems()) - .map(CloudEntity::getFeatherEnchantStrength).filter(i -> i > 0) - .findFirst() - .orElse(0); - } - - public static int getFeatherEnchantStrength(ItemStack stack) { - if (stack != null && !stack.isEmpty()) { - Map enchantments = EnchantmentHelper.get(stack); - if (enchantments.containsKey(Enchantments.FEATHER_FALLING)) { - return enchantments.get(Enchantments.FEATHER_FALLING); - } - } - return 0; - } - - private boolean canRainHere() { - return world.getBiome(getBlockPos()).getRainfall() > 0; - } - - private boolean canSnowHere(BlockPos pos) { - return world.getBiome(pos).canSetSnow(world, pos); - } - - public void spawnThunderbolt() { - spawnThunderbolt(getGroundPosition(getBlockPos())); - } - - public void spawnThunderbolt(BlockPos pos) { - if (world instanceof ServerWorld) { - LightningEntity lightning = EntityType.LIGHTNING_BOLT.create(world); - lightning.positAfterTeleport(pos.getX(), pos.getY(), pos.getZ()); - world.spawnEntity(lightning); - } - } - - private BlockPos getGroundPosition(BlockPos inPos) { - BlockPos pos = world.getTopPosition(Heightmap.Type.WORLD_SURFACE, inPos); - - if (pos.getY() >= getY()) { - while (!World.isHeightInvalid(pos)) { - pos = pos.down(); - if (world.getBlockState(pos).hasSolidTopSurface(world, pos, this)) { - return pos.up(); - } - } - - } - return pos; - } - - public int getRainTimer() { - return dataTracker.get(RAINTIMER); - } - - public int setRainTimer(int val) { - val = Math.max(0, val); - dataTracker.set(RAINTIMER, val); - return val; - } - - private void setRaining() { - setRainTimer(700 + random.nextInt(20)); - } - - public void setIsRaining(boolean val) { - if (val) { - setRaining(); - } else { - setRainTimer(0); - } - } - - public boolean getIsRaining() { - return getRainTimer() > 0; - } - - public boolean getIsThundering() { - return dataTracker.get(THUNDERING); - } - - public void setIsThundering(boolean val) { - dataTracker.set(THUNDERING, val); - } - - public boolean getStationary() { - return dataTracker.get(STATIONARY); - } - - public void setStationary(boolean val) { - dataTracker.set(STATIONARY, val); - } - - public boolean getOpaque() { - return false; - } - - public int getCloudSize() { - return dataTracker.get(SCALE); - } - - @Override - public float getScaleFactor() { - return getCloudSize(); - } - - @Override - public EntityDimensions getDimensions(EntityPose pose) { - return EntityDimensions.changing(3, 0.5F).scaled(getScaleFactor()); // super.getDimensions(pose); - } - - public void setCloudSize(int val) { - dataTracker.set(SCALE, Math.max(1, val)); - calculateDimensions(); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/entity/ConstructionCloudEntity.java b/src/main/java/com/minelittlepony/unicopia/world/entity/ConstructionCloudEntity.java deleted file mode 100644 index 9d8559d1..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/entity/ConstructionCloudEntity.java +++ /dev/null @@ -1,112 +0,0 @@ -package com.minelittlepony.unicopia.world.entity; - -import com.minelittlepony.unicopia.EquinePredicates; - -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.network.ClientPlayerEntity; -import net.minecraft.client.world.ClientWorld; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.BlockItem; -import net.minecraft.item.ItemStack; -import net.minecraft.item.SpawnEggItem; -import net.minecraft.util.math.Direction; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; -import net.minecraft.util.hit.BlockHitResult; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Box; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.BlockView; -import net.minecraft.world.RayTraceContext; -import net.minecraft.world.World; - -public class ConstructionCloudEntity extends CloudEntity { - - public ConstructionCloudEntity(EntityType type, World world) { - super(type, world); - } - - @Override - public boolean getStationary() { - return true; - } - - @Override - public boolean getOpaque() { - return true; - } - - @Override - public ActionResult interactAt(PlayerEntity player, Vec3d vec, Hand hand) { - - if (!(hasPassengers() || isConnectedThroughVehicle(player)) && hand == Hand.MAIN_HAND) { - if (EquinePredicates.PLAYER_PEGASUS.test(player)) { - - if (player.getItemUseTime() > 0) { - return ActionResult.FAIL; - } - - ItemStack stack = player.getStackInHand(hand); - - if (stack != null) { - if (stack.getItem() instanceof BlockItem || stack.getItem() instanceof SpawnEggItem) { - placeBlock(player, stack, hand); - return ActionResult.SUCCESS; - } - } - } - } - - return ActionResult.FAIL; - } - - private void placeBlock(PlayerEntity player, ItemStack stack, Hand hand) { - if (!world.isClient || !(player instanceof ClientPlayerEntity)) { - return; - } - - MinecraftClient mc = MinecraftClient.getInstance(); - - double distance = mc.interactionManager.getReachDistance(); - - float ticks = mc.getTickDelta(); - - Vec3d start = player.getCameraPosVec(ticks); - Vec3d rotation = player.getRotationVec(ticks); - Vec3d end = start.add(rotation.x * distance, rotation.y * distance, rotation.z * distance); - - Box box = getBoundingBox().expand(3); - - RayTraceContext ctx = new RayTraceContext(start, end, RayTraceContext.ShapeType.OUTLINE, RayTraceContext.FluidHandling.NONE, player); - - BlockHitResult hit = BlockView.rayTrace(ctx, (c, pos) -> { - if (box.contains(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5)) { - return new BlockHitResult(new Vec3d(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5), Direction.UP, pos, true); - } - - return null; - }, c -> { - return null; - }); - - if (hit != null) { - Direction direction = hit.getSide(); - - mc.crosshairTarget = hit = new BlockHitResult(hit.getPos(), direction, new BlockPos(hit.getPos()), false); - - int oldCount = stack.getCount(); - ActionResult result = mc.interactionManager.interactBlock(((ClientPlayerEntity)player), (ClientWorld)player.world, hand, hit); - - if (result == ActionResult.SUCCESS) { - player.swingHand(hand); - - if (!stack.isEmpty() && (stack.getCount() != oldCount || mc.interactionManager.hasCreativeInventory())) { - mc.gameRenderer.firstPersonRenderer.resetEquipProgress(hand); - } - } - } - - - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/entity/CucoonEntity.java b/src/main/java/com/minelittlepony/unicopia/world/entity/CucoonEntity.java deleted file mode 100644 index 96397309..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/entity/CucoonEntity.java +++ /dev/null @@ -1,314 +0,0 @@ -package com.minelittlepony.unicopia.world.entity; - -import java.util.Collections; - -import javax.annotation.Nullable; - -import com.minelittlepony.unicopia.EquinePredicates; -import com.minelittlepony.unicopia.InAnimate; -import com.minelittlepony.unicopia.Race; -import com.minelittlepony.unicopia.USounds; -import com.minelittlepony.unicopia.equine.Trap; -import com.minelittlepony.unicopia.equine.player.Pony; -import com.minelittlepony.unicopia.magic.Magical; -import com.minelittlepony.unicopia.particles.UParticles; -import com.minelittlepony.unicopia.util.MagicalDamageSource; - -import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; -import net.minecraft.block.Blocks; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityDimensions; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.EquipmentSlot; -import net.minecraft.entity.ExperienceOrbEntity; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.damage.DamageSource; -import net.minecraft.entity.data.DataTracker; -import net.minecraft.entity.data.TrackedData; -import net.minecraft.entity.data.TrackedDataHandlerRegistry; -import net.minecraft.entity.effect.StatusEffectInstance; -import net.minecraft.entity.effect.StatusEffects; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.particle.BlockStateParticleEffect; -import net.minecraft.particle.ParticleTypes; -import net.minecraft.sound.SoundEvent; -import net.minecraft.sound.SoundEvents; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Arm; -import net.minecraft.util.Hand; -import net.minecraft.util.math.Box; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.GameRules; -import net.minecraft.world.World; - -public class CucoonEntity extends LivingEntity implements Magical, InAnimate, Trap { - - private static final TrackedData STRUGGLE_COUNT = DataTracker.registerData(CucoonEntity.class, TrackedDataHandlerRegistry.INTEGER); - - private boolean captiveLastSneakState; - - public CucoonEntity(EntityType type, World world) { - super(type, world); - } - - @Override - protected void initDataTracker() { - super.initDataTracker(); - getDataTracker().startTracking(STRUGGLE_COUNT, 0); - } - - public int getStruggleCount() { - return getDataTracker().get(STRUGGLE_COUNT) % 6; - } - - public void setStruggleCount(int count) { - getDataTracker().set(STRUGGLE_COUNT, count % 6); - } - - @Override - @Nullable - protected SoundEvent getHurtSound(DamageSource source) { - return SoundEvents.ENTITY_SLIME_SQUISH; - } - - @Override - protected SoundEvent getFallSound(int heightIn) { - return SoundEvents.ENTITY_SLIME_SQUISH; - } - - @Override - public boolean damage(DamageSource source, float amount) { - - if (EquinePredicates.PLAYER_CHANGELING.test(source.getSource())) { - - PlayerEntity player = (PlayerEntity)source.getSource(); - if (!FabricToolTags.SHOVELS.contains(player.getMainHandStack().getItem())) { - amount = 0; - } - } - - return super.damage(source, amount); - } - - @Override - protected boolean canAddPassenger(Entity entity) { - return super.canAddPassenger(entity) - && !entity.isSneaking() - && !hasPassengers() - && entity instanceof LivingEntity - && !entity.hasVehicle() - && !(entity instanceof CucoonEntity) - && !EquinePredicates.PLAYER_CHANGELING.test(entity); - } - - @Override - public boolean doesRenderOnFire() { - return false; - } - - @Override - public double getMountedHeightOffset() { - return 0; - } - - @Override - @Nullable - public Entity getPrimaryPassenger() { - return getPassengerList().isEmpty() ? null : getPassengerList().get(0); - } - - @Override - public void tick() { - super.tick(); - - Entity passenger = getPrimaryPassenger(); - - if (passenger != null) { - - boolean sneaking = passenger.isSneaking(); - - if (sneaking && !attemptDismount(passenger)) { - passenger.setSneaking(false); - } - - captiveLastSneakState = sneaking; - - if (passenger instanceof LivingEntity) { - LivingEntity living = (LivingEntity)passenger; - - if (!living.hasStatusEffect(StatusEffects.REGENERATION) && living.getHealth() < living.getMaxHealth()) { - living.addStatusEffect(new StatusEffectInstance(StatusEffects.REGENERATION, 20, 2)); - } - - if (!living.hasStatusEffect(StatusEffects.SLOWNESS) && living.getHealth() < living.getMaxHealth()) { - living.addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, 2000, 4)); - } - } - } - - if (world.isClient) { - EntityDimensions dims = getDimensions(getPose()); - - double x = getX() + dims.width * random.nextFloat() - dims.width/2; - double y = getY() + dims.height * random.nextFloat(); - double z = getZ() + dims.width * random.nextFloat() - dims.width/2; - - world.addParticle(ParticleTypes.DRIPPING_LAVA, x, y, z, 0, 0, 0); - } - } - - @Override - public ActionResult interactAt(PlayerEntity player, Vec3d vec, Hand hand) { - - if (hand == Hand.MAIN_HAND && EquinePredicates.PLAYER_CHANGELING.test(player)) { - Entity passenger = getPrimaryPassenger(); - - if (passenger != null && (player.canConsume(false) || player.getHealth() < player.getMaxHealth())) { - DamageSource d = MagicalDamageSource.causePlayerDamage("feed", player); - - Pony.of(player).spawnParticles(UParticles.CHANGELING_MAGIC, 7); - - if (passenger instanceof LivingEntity) { - if (player.hasStatusEffect(StatusEffects.NAUSEA)) { - ((LivingEntity)passenger).addStatusEffect(player.removeStatusEffectInternal(StatusEffects.NAUSEA)); - } else if (random.nextInt(2300) == 0) { - ((LivingEntity)passenger).addStatusEffect(new StatusEffectInstance(StatusEffects.WITHER, 20, 1)); - } - } - - if (passenger instanceof PlayerEntity) { - if (!player.hasStatusEffect(StatusEffects.HEALTH_BOOST)) { - player.addStatusEffect(new StatusEffectInstance(StatusEffects.HEALTH_BOOST, 13000, 1)); - } - } - - passenger.damage(d, 5); - - if (player.canConsume(false)) { - player.getHungerManager().add(5, 0); - } else { - player.heal(5); - } - - return ActionResult.SUCCESS; - } - } - - return super.interactAt(player, vec, hand); - } - - public float getBreatheAmount(float stutter) { - return MathHelper.sin((age + stutter) / 40) / 2 - + hurtTime / 10F; - } - - @Override - public boolean isAttackable() { - return true; - } - - @Override - public boolean attemptDismount(Entity captive) { - if (captive.isSneaking() != captiveLastSneakState) { - setStruggleCount(getStruggleCount() + 1); - - spawnSlimeParticles(); - - captive.playSound(USounds.SLIME_RETRACT, 1, 1); - this.hurtTime += 15; - - if (getStruggleCount() == 0) { - remove(); - - return true; - } - } - - return false; - } - - private void spawnSlimeParticles() { - EntityDimensions dims = getDimensions(getPose()); - - for (int k = 0; k < 20; k++) { - double d2 = random.nextGaussian() * 0.02; - double d0 = random.nextGaussian() * 0.02; - double d1 = random.nextGaussian() * 0.02; - - world.addParticle(new BlockStateParticleEffect(ParticleTypes.BLOCK, Blocks.SLIME_BLOCK.getDefaultState()), - getX() + random.nextFloat() * dims.width * 2 - dims.width, - getY() + random.nextFloat() * dims.height, - getZ() + random.nextFloat() * dims.width * 2 - dims.width, - d2, d0, d1); - } - } - - @Override - protected void updatePostDeath() { - if (++deathTime == 20) { - if (!world.isClient && lastAttackedTicks > 0 && canDropLootAndXp() && world.getGameRules().getBoolean(GameRules.DO_ENTITY_DROPS)) { - int i = getCurrentExperience(attackingPlayer); - - while (i > 0) { - int j = ExperienceOrbEntity.roundToOrbSize(i); - - i -= j; - - world.spawnEntity(new ExperienceOrbEntity(world, getX(), getY(), getZ(), j)); - } - - removeAllPassengers(); - } - - remove(); - spawnSlimeParticles(); - } - } - - @Override - @Nullable - public Box getHardCollisionBox(Entity entity) { - return entity.collides() ? entity.getBoundingBox() : null; - } - - @Nullable - public Box getCollisionBoundingBox() { - return getBoundingBox().contract(0.2); - } - - @Override - protected void pushAway(Entity entity) { - if (canAddPassenger(entity)) { - entity.playSound(USounds.SLIME_ADVANCE, 1, 1); - entity.startRiding(this, true); - } else { - super.pushAway(entity); - } - } - - @Override - public boolean canInteract(Race race) { - return race == Race.CHANGELING; - } - - @Override - public Iterable getArmorItems() { - return Collections.emptyList(); - } - - @Override - public ItemStack getEquippedStack(EquipmentSlot slot) { - return ItemStack.EMPTY; - } - - @Override - public void equipStack(EquipmentSlot slot, ItemStack stack) { - } - - @Override - public Arm getMainArm() { - return Arm.LEFT; - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/entity/FollowCasterGoal.java b/src/main/java/com/minelittlepony/unicopia/world/entity/FollowCasterGoal.java deleted file mode 100644 index 1f08dc51..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/entity/FollowCasterGoal.java +++ /dev/null @@ -1,135 +0,0 @@ -package com.minelittlepony.unicopia.world.entity; - -import java.util.EnumSet; - -import com.minelittlepony.unicopia.magic.Caster; - -import net.minecraft.block.BlockState; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.ai.goal.Goal; -import net.minecraft.entity.ai.pathing.BirdNavigation; -import net.minecraft.entity.ai.pathing.EntityNavigation; -import net.minecraft.entity.ai.pathing.MobNavigation; -import net.minecraft.entity.ai.pathing.PathNodeType; -import net.minecraft.entity.mob.MobEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MathHelper; -import net.minecraft.world.WorldView; - -@Deprecated -public class FollowCasterGoal extends Goal { - - protected final Caster caster; - - protected final MobEntity entity; - - protected LivingEntity owner; - - protected final WorldView world; - - public final double followSpeed; - - private final EntityNavigation navigation; - - private int timeout; - - public float maxDistance; - public float minDistance; - - private float oldWaterCost; - - public FollowCasterGoal(Caster caster, double followSpeed, float minDist, float maxDist) { - this.caster = caster; - - this.entity = (MobEntity)caster.getEntity(); - this.world = caster.getWorld(); - - this.followSpeed = followSpeed; - navigation = entity.getNavigation(); - minDistance = minDist; - maxDistance = maxDist; - setControls(EnumSet.of(Goal.Control.MOVE, Goal.Control.LOOK)); - - if (!(navigation instanceof MobNavigation || navigation instanceof BirdNavigation)) { - throw new IllegalArgumentException("Unsupported mob type for FollowCasterGoal"); - } - } - - @Override - public boolean canStart() { - LivingEntity owner = caster.getOwner(); - - if (owner == null - || (owner instanceof PlayerEntity && ((PlayerEntity)owner).isSpectator()) - || entity.squaredDistanceTo(owner) < (minDistance * minDistance)) { - return false; - } - - this.owner = owner; - - return true; - } - - @Override - public boolean shouldContinue() { - return !navigation.isIdle() - && entity.squaredDistanceTo(owner) > (maxDistance * maxDistance); - } - - @Override - public void start() { - timeout = 0; - oldWaterCost = entity.getPathfindingPenalty(PathNodeType.WATER); - entity.setPathfindingPenalty(PathNodeType.WATER, 0); - } - - @Override - public void stop() { - owner = null; - navigation.stop(); - entity.setPathfindingPenalty(PathNodeType.WATER, oldWaterCost); - } - - @Override - public void tick() { - entity.getLookControl().lookAt(owner, 10, entity.getLookPitchSpeed()); - - if (--timeout > 0) { - return; - } - - timeout = 10; - - if (navigation.startMovingTo(owner, followSpeed) - || entity.isLeashed() - || entity.hasVehicle() - || entity.squaredDistanceTo(owner) < 144) { - return; - } - - int x = MathHelper.floor(owner.getX()) - 2; - int y = MathHelper.floor(owner.getBoundingBox().minY); - int z = MathHelper.floor(owner.getZ()) - 2; - - for (int offX = 0; offX <= 4; offX++) { - for (int offZ = 0; offZ <= 4; offZ++) { - if ((offX < 1 || offZ < 1 || offX > 3 || offZ > 3) && canMoveInto(new BlockPos(x + offX, y - 1, z + offZ))) { - - entity.updatePositionAndAngles((x + offX) + 0.5F, y, (z + offZ) + 0.5F, entity.headYaw, entity.pitch); - navigation.stop(); - - return; - } - } - } - } - - protected boolean canMoveInto(BlockPos pos) { - BlockState state = world.getBlockState(pos); - - return state.allowsSpawning(world, pos, entity.getType()) - && world.isAir(pos.up()) - && world.isAir(pos.up(2)); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/entity/RacingCloudEntity.java b/src/main/java/com/minelittlepony/unicopia/world/entity/RacingCloudEntity.java deleted file mode 100644 index 1e50d1ae..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/entity/RacingCloudEntity.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.minelittlepony.unicopia.world.entity; - -import java.util.List; - -import javax.annotation.Nullable; - -import com.minelittlepony.unicopia.EquinePredicates; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.World; - -public class RacingCloudEntity extends CloudEntity { - - public RacingCloudEntity(EntityType type, World world) { - super(type, world); - setCloudSize(1); - } - - @Override - public boolean canBeControlledByRider() { - return true; - } - - @Override - protected boolean canAddPassenger(Entity passenger) { - return getPassengerList().size() < getCloudSize(); - } - - @Override - @Nullable - public Entity getPrimaryPassenger() { - List list = getPassengerList(); - return list.isEmpty() ? null : list.get(0); - } - - @Override - public ActionResult interactAt(PlayerEntity player, Vec3d vec, Hand hand) { - if (!(hasPassengers() || isConnectedThroughVehicle(player)) && hand == Hand.MAIN_HAND) { - if (EquinePredicates.PLAYER_PEGASUS.test(player)) { - if (!getStationary()) { - player.startRiding(this); - return ActionResult.SUCCESS; - } - } - } - return ActionResult.FAIL; - } - - @Override - public void tick() { - Entity jockey = getPrimaryPassenger(); - - Vec3d vel = getVelocity(); - double motionX = vel.x; - double motionY = vel.y; - double motionZ = vel.z; - - if (jockey != null && canBeControlledByRider()) { - LivingEntity rider = (LivingEntity)jockey; - - double speed = 1.5F * rider.forwardSpeed / 5; - double horizontalDriving = (jockey.yaw - rider.sidewaysSpeed * 90) * Math.PI / 180; - - motionX += -Math.sin(horizontalDriving) * speed; - motionZ += Math.cos(horizontalDriving) * speed; - - double pitch = jockey.pitch * Math.PI / 180; - - motionY += -Math.sin(pitch) * (speed / 20); - } else { - motionY = 0; - } - setVelocity(motionX, motionY, motionZ); - - super.tick(); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/entity/RainbowEntity.java b/src/main/java/com/minelittlepony/unicopia/world/entity/RainbowEntity.java deleted file mode 100644 index 6f40e010..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/entity/RainbowEntity.java +++ /dev/null @@ -1,134 +0,0 @@ -package com.minelittlepony.unicopia.world.entity; - -import com.minelittlepony.unicopia.InAnimate; -import com.minelittlepony.unicopia.Race; -import com.minelittlepony.unicopia.network.Channel; -import com.minelittlepony.unicopia.network.MsgSpawnRainbow; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityDimensions; -import net.minecraft.entity.EntityPose; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.SpawnReason; -import net.minecraft.entity.mob.MobEntity; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.network.Packet; -import net.minecraft.sound.SoundCategory; -import net.minecraft.util.math.Box; -import net.minecraft.util.math.MathHelper; -import net.minecraft.world.World; -import net.minecraft.world.WorldAccess; - -public class RainbowEntity extends MobEntity implements InAnimate { - - private int ticksAlive; - - private final double radius; - - public static final int RAINBOW_MAX_SIZE = 180; - public static final int RAINBOW_MIN_SIZE = 50; - - public static final Box SPAWN_COLLISSION_RADIUS = new Box( - -RAINBOW_MAX_SIZE, -RAINBOW_MAX_SIZE, -RAINBOW_MAX_SIZE, - RAINBOW_MAX_SIZE, RAINBOW_MAX_SIZE, RAINBOW_MAX_SIZE - ).expand(RAINBOW_MAX_SIZE); - - - public RainbowEntity(EntityType type, World world) { - super(type, world); - - float yaw = (int)MathHelper.nextDouble(random, 0, 360); - - updatePositionAndAngles(0, 0, 0, yaw, 0); - - radius = MathHelper.nextDouble(random, RAINBOW_MIN_SIZE, RAINBOW_MAX_SIZE); - ticksAlive = 10000; - - ignoreCameraFrustum = true; - - calculateDimensions(); - } - - @Override - public boolean canInteract(Race race) { - return false; - } - - @Override - public void setPos(double x, double y, double z) { - super.setPos(x, y, z); - - float width = getDimensions(getPose()).width; - setBoundingBox(new Box( - x - width, y - radius/2, z, - x + width, y + radius/2, z - )); - } - - @Override - public EntityDimensions getDimensions(EntityPose pose) { - return EntityDimensions.changing((float)getRadius(), (float)getRadius()); - } - - @Override - public SoundCategory getSoundCategory() { - return SoundCategory.WEATHER; - } - - @Override - public boolean shouldRender(double distance) { - return true; - } - - public double getRadius() { - return radius; - } - - @Override - public void tick() { - super.tick(); - - if (ticksAlive-- <= 0) { - remove(); - } - - if (!removed) { - Box bounds = SPAWN_COLLISSION_RADIUS.offset(getPos()); - - world.getEntities(RainbowEntity.class, bounds, null).forEach(this::attackCompetitor); - } - } - - private void attackCompetitor(Entity other) { - if (other != this) { - other.remove(); - } - } - - @Override - public boolean canSpawn(WorldAccess world, SpawnReason type) { - - Box bounds = SPAWN_COLLISSION_RADIUS.offset(getPos()); - - return super.canSpawn(world, type) - && world.getEntities(RainbowEntity.class, bounds, null).isEmpty(); - } - - @Override - public int getLimitPerChunk() { - return 1; - } - - @Override - public void readCustomDataFromTag(CompoundTag var1) { - } - - @Override - public void writeCustomDataToTag(CompoundTag var1) { - } - - @Override - public Packet createSpawnPacket() { - return Channel.SPAWN_RAINBOW.toPacket(new MsgSpawnRainbow(this)); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/entity/SpearEntity.java b/src/main/java/com/minelittlepony/unicopia/world/entity/SpearEntity.java deleted file mode 100644 index 4bc57273..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/entity/SpearEntity.java +++ /dev/null @@ -1,189 +0,0 @@ -package com.minelittlepony.unicopia.world.entity; - -import com.minelittlepony.unicopia.magic.ThrowableSpell; -import com.minelittlepony.unicopia.util.MagicalDamageSource; -import com.minelittlepony.unicopia.util.projectile.Projectile; - -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.MovementType; -import net.minecraft.entity.damage.DamageSource; -import net.minecraft.entity.data.DataTracker; -import net.minecraft.entity.data.TrackedData; -import net.minecraft.entity.data.TrackedDataHandlerRegistry; -import net.minecraft.entity.mob.EndermanEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.entity.projectile.ArrowEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.network.packet.s2c.play.GameStateChangeS2CPacket; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.sound.SoundEvents; -import net.minecraft.util.hit.EntityHitResult; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.World; - -public class SpearEntity extends ArrowEntity implements Projectile { - - private static final TrackedData ITEM = DataTracker.registerData(SpearEntity.class, TrackedDataHandlerRegistry.ITEM_STACK); - - private static final TrackedData KNOCKBACK = DataTracker.registerData(SpearEntity.class, TrackedDataHandlerRegistry.INTEGER); - - public SpearEntity(EntityType type, World world) { - super(type, world); - } - - public SpearEntity(World world, double x, double y, double z) { - super(world, x, y, z); - } - - public SpearEntity(World world, LivingEntity shooter) { - super(world, shooter); - } - - @Override - protected void initDataTracker() { - super.initDataTracker(); - getDataTracker().startTracking(ITEM, ItemStack.EMPTY); - getDataTracker().startTracking(KNOCKBACK, 0); - } - - @Override - public void setVelocity(double x, double y, double z, float velocity, float inaccuracy) { - setDamage(0); - - super.setVelocity(x, y, z, velocity, inaccuracy); - } - - @Override - public void move(MovementType type, Vec3d delta) { - super.move(type, delta); - - if (type == MovementType.SELF && !inGround) { - setDamage(getDamage() + 0.02); - } - } - - @Override - public void setPunch(int amount) { - super.setPunch(amount); - getDataTracker().set(KNOCKBACK, amount); - } - - @Override - protected void onEntityHit(EntityHitResult hit) { - - Entity entity = hit.getEntity(); - - if (entity != null) { - Vec3d vel = getVelocity(); - - double speed = vel.length(); - int damage = MathHelper.ceil(Math.max(speed * this.getDamage(), 0)); - - if (isCritical()) { - damage += random.nextInt(damage / 2 + 2); - } - - Entity archer = getOwner(); - DamageSource damagesource = MagicalDamageSource.causeIndirect("spear", this, archer == null ? this : archer); - - if (isOnFire() && !(entity instanceof EndermanEntity)) { - entity.setOnFireFor(5); - } - - if (entity.damage(damagesource, damage)) { - if (entity instanceof LivingEntity) { - LivingEntity target = (LivingEntity)entity; - - if (!world.isClient) { - target.setStuckArrowCount(target.getStuckArrowCount() + 1); - } - - int knockback = getDataTracker().get(KNOCKBACK); - - if (knockback > 0) { - - double f1 = MathHelper.sqrt(vel.x * vel.x + vel.z * vel.z); - - if (f1 > 0) { - target.addVelocity( - vel.x * knockback * 0.6000000238418579D / f1, - 0.1D, - vel.z * knockback * 0.6000000238418579D / f1); - } - } - - if (!this.world.isClient && archer instanceof LivingEntity) { - EnchantmentHelper.onUserDamaged(target, archer); - EnchantmentHelper.onTargetDamaged((LivingEntity)archer, target); - } - - onHit(target); - - if (archer != null && target != archer && target instanceof PlayerEntity && archer instanceof ServerPlayerEntity) { - ((ServerPlayerEntity)archer).networkHandler.sendPacket(new GameStateChangeS2CPacket(GameStateChangeS2CPacket.PROJECTILE_HIT_PLAYER, 0)); - } - } - - playSound(SoundEvents.ENTITY_ARROW_HIT, 1.0F, 1.2F / (random.nextFloat() * 0.2F + 0.9F)); - - if (!(entity instanceof EndermanEntity)) { - remove(); - } - - return; - } - } - } - - @Override - protected ItemStack asItemStack() { - return getDataTracker().get(ITEM); - } - - @Override - public void setItem(ItemStack stack) { - getDataTracker().set(ITEM, stack.copy()); - } - - @Override - public void setThrowDamage(float damage) { - setDamage(damage); - } - - @Override - public float getThrowDamage() { - return (float)getDamage(); - } - - @Override - public void setHydrophobic() { - - } - - @Override - public boolean getHydrophobic() { - return false; - } - - @Override - public void launch(Entity shooter, float pitch, float yaw, float pitchOffset, float velocity, float inaccuracy) { - setProperties(shooter, pitch, yaw, pitchOffset, velocity, inaccuracy); - } - - @Override - public void setGravity(boolean gravity) { - } - - @Override - public void setOwner(LivingEntity owner) { - setOwner((Entity)owner); - } - - @Override - public void setEffect(ThrowableSpell effect) { - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/entity/SpellbookEntity.java b/src/main/java/com/minelittlepony/unicopia/world/entity/SpellbookEntity.java deleted file mode 100644 index 071d6121..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/entity/SpellbookEntity.java +++ /dev/null @@ -1,208 +0,0 @@ -package com.minelittlepony.unicopia.world.entity; - -import com.minelittlepony.unicopia.EquinePredicates; -import com.minelittlepony.unicopia.ducks.PickedItemSupplier; -import com.minelittlepony.unicopia.magic.Magical; -import com.minelittlepony.unicopia.world.container.SpellBookContainer; -import com.minelittlepony.unicopia.world.item.UItems; - -import net.minecraft.entity.EntityType; -import net.minecraft.entity.damage.DamageSource; -import net.minecraft.entity.data.DataTracker; -import net.minecraft.entity.data.TrackedData; -import net.minecraft.entity.data.TrackedDataHandlerRegistry; -import net.minecraft.entity.mob.MobEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.particle.ParticleTypes; -import net.minecraft.predicate.entity.EntityPredicates; -import net.minecraft.screen.SimpleNamedScreenHandlerFactory; -import net.minecraft.sound.BlockSoundGroup; -import net.minecraft.sound.SoundCategory; -import net.minecraft.sound.SoundEvents; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.GameRules; -import net.minecraft.world.World; - -public class SpellbookEntity extends MobEntity implements Magical, PickedItemSupplier { - - private static final TrackedData OPENED = DataTracker.registerData(SpellbookEntity.class, TrackedDataHandlerRegistry.BOOLEAN); - private static final TrackedData ALTERED = DataTracker.registerData(SpellbookEntity.class, TrackedDataHandlerRegistry.BOOLEAN); - private static final TrackedData OPENED_USER = DataTracker.registerData(SpellbookEntity.class, TrackedDataHandlerRegistry.BYTE); - - public SpellbookEntity(EntityType type, World world) { - super(type, world); - setPersistent(); - - if (world.random.nextInt(3) == 0) { - setAltered(); - } - } - - @Override - protected void initDataTracker() { - super.initDataTracker(); - dataTracker.startTracking(OPENED, true); - dataTracker.startTracking(OPENED_USER, (byte)1); - dataTracker.startTracking(ALTERED, false); - } - - @Override - public ItemStack getPickedStack() { - return new ItemStack(UItems.SPELLBOOK); - } - - @Override - public boolean isPushable() { - return false; - } - - @Override - public boolean doesRenderOnFire() { - return false; - } - - public boolean getIsAltered() { - return dataTracker.get(ALTERED); - } - - public void setAltered() { - dataTracker.set(ALTERED, true); - } - - public boolean getIsOpen() { - return dataTracker.get(OPENED); - } - - public Boolean getUserSetState() { - byte state = dataTracker.get(OPENED_USER); - return state == 1 ? null : state == 2; - } - - public void setIsOpen(boolean val) { - dataTracker.set(OPENED, val); - } - - public void setUserSetState(Boolean val) { - dataTracker.set(OPENED_USER, val == null ? (byte)1 : val == true ? (byte)2 : (byte)0); - } - - @Override - public void tick() { - boolean open = getIsOpen(); - jumping = open && isTouchingWater(); - super.tick(); - if (open && world.isClient) { - for (int offX = -2; offX <= 1; ++offX) { - for (int offZ = -2; offZ <= 1; ++offZ) { - if (offX > -1 && offX < 1 && offZ == -1) { - offZ = 1; - } - - if (random.nextInt(320) == 0) { - for (int offY = 0; offY <= 1; ++offY) { - world.addParticle(ParticleTypes.ENCHANT, - getX(), getY(), getZ(), - offX/2F + random.nextFloat(), - offY/2F - random.nextFloat() + 0.5f, - offZ/2F + random.nextFloat() - ); - } - } - } - } - } - - if (open) { - world.getEntities(this, getBoundingBox().expand(2), EntityPredicates.EXCEPT_SPECTATOR.and(e -> e instanceof PlayerEntity)).stream().findFirst().ifPresent(player -> { - - Vec3d diff = player.getPos().subtract(getPos()); - double yaw = Math.atan2(diff.z, diff.x) * 180D / Math.PI - 90; - - setHeadYaw((float)yaw); - setYaw((float)yaw); - }); - } - - if (world.random.nextInt(30) == 0) { - float celest = world.getSkyAngleRadians(1) * 4; - - boolean isDay = celest > 3 || celest < 1; - - Boolean userState = getUserSetState(); - - boolean canToggle = (isDay != open) && (userState == null || userState == isDay); - - if (canToggle) { - setUserSetState(null); - setIsOpen(isDay); - } - - if (userState != null && (isDay == open) && (userState == open)) { - setUserSetState(null); - } - } - } - - @Override - public boolean damage(DamageSource source, float amount) { - if (!world.isClient) { - remove(); - - BlockSoundGroup sound = BlockSoundGroup.WOOD; - - world.playSound(getX(), getY(), getZ(), sound.getBreakSound(), SoundCategory.BLOCKS, sound.getVolume(), sound.getPitch(), true); - - if (world.getGameRules().getBoolean(GameRules.DO_ENTITY_DROPS)) { - dropItem(UItems.SPELLBOOK, 1); - } - } - return false; - } - - @Override - public ActionResult interactAt(PlayerEntity player, Vec3d vec, Hand hand) { - if (player.isSneaking()) { - boolean open = !getIsOpen(); - - setIsOpen(open); - setUserSetState(open); - - return ActionResult.SUCCESS; - } - - if (EquinePredicates.PLAYER_UNICORN.test(player)) { - - player.openHandledScreen(new SimpleNamedScreenHandlerFactory( - (sync, inv, ply) -> new SpellBookContainer(sync, inv), - getName())); - player.playSound(SoundEvents.BLOCK_FURNACE_FIRE_CRACKLE, 2, 1); - return ActionResult.SUCCESS; - } - - return ActionResult.PASS; - } - - @Override - public void readCustomDataFromTag(CompoundTag compound) { - super.readCustomDataFromTag(compound); - - setIsOpen(compound.getBoolean("open")); - setUserSetState(compound.contains("force_open") ? compound.getBoolean("force_open") : null); - } - - @Override - public void writeCustomDataToTag(CompoundTag compound) { - super.writeCustomDataToTag(compound); - compound.putBoolean("open", getIsOpen()); - - Boolean state = getUserSetState(); - - if (state != null) { - compound.putBoolean("force_open", state); - } - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/entity/SpellcastEntity.java b/src/main/java/com/minelittlepony/unicopia/world/entity/SpellcastEntity.java deleted file mode 100644 index 39e9f996..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/entity/SpellcastEntity.java +++ /dev/null @@ -1,372 +0,0 @@ -package com.minelittlepony.unicopia.world.entity; - -import java.util.Optional; -import java.util.UUID; - -import javax.annotation.Nullable; - -import com.minelittlepony.unicopia.EquinePredicates; -import com.minelittlepony.unicopia.InAnimate; -import com.minelittlepony.unicopia.Race; -import com.minelittlepony.unicopia.ducks.PickedItemSupplier; -import com.minelittlepony.unicopia.magic.Affinity; -import com.minelittlepony.unicopia.magic.Caster; -import com.minelittlepony.unicopia.magic.EtherialListener; -import com.minelittlepony.unicopia.magic.Magical; -import com.minelittlepony.unicopia.magic.Spell; -import com.minelittlepony.unicopia.magic.spell.SpellRegistry; -import com.minelittlepony.unicopia.network.EffectSync; -import com.minelittlepony.unicopia.world.item.CastableMagicItem; -import com.minelittlepony.unicopia.world.item.UItems; - -import net.minecraft.block.BlockState; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityDimensions; -import net.minecraft.entity.EntityPose; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.EquipmentSlot; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.ai.goal.GoalSelector; -import net.minecraft.entity.damage.DamageSource; -import net.minecraft.entity.data.DataTracker; -import net.minecraft.entity.data.TrackedData; -import net.minecraft.entity.data.TrackedDataHandlerRegistry; -import net.minecraft.entity.mob.MobEntityWithAi; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.sound.BlockSoundGroup; -import net.minecraft.sound.SoundCategory; -import net.minecraft.sound.SoundEvents; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.GameRules; -import net.minecraft.world.World; -import net.minecraft.world.explosion.Explosion.DestructionType; - -public class SpellcastEntity extends MobEntityWithAi implements Magical, Caster, EtherialListener, InAnimate, PickedItemSupplier { - - private static final TrackedData LEVEL = DataTracker.registerData(SpellcastEntity.class, TrackedDataHandlerRegistry.INTEGER); - private static final TrackedData> OWNER = DataTracker.registerData(SpellcastEntity.class, TrackedDataHandlerRegistry.OPTIONAL_UUID); - private static final TrackedData EFFECT = DataTracker.registerData(SpellcastEntity.class, TrackedDataHandlerRegistry.TAG_COMPOUND); - private static final TrackedData AFFINITY = DataTracker.registerData(SpellcastEntity.class, TrackedDataHandlerRegistry.INTEGER); - - public float hoverStart; - - private final EffectSync effectDelegate = new EffectSync(this, EFFECT); - - public SpellcastEntity(EntityType type, World w) { - super(type, w); - hoverStart = (float)(Math.random() * Math.PI * 2.0D); - setPersistent(); - } - - public GoalSelector getGoals() { - return goalSelector; - } - - public GoalSelector getTargets() { - return targetSelector; - } - - @Override - public boolean cannotDespawn() { - return true; - } - - @Override - public boolean shouldRender(double distance) { - if (getCurrentLevel() > 0) { - distance /= getCurrentLevel(); - } - if (distance > 0) { - distance--; - } - return super.shouldRender(distance); - } - - @Override - public Affinity getAffinity() { - return Affinity.values()[dataTracker.get(AFFINITY)]; - } - - public void setAffinity(Affinity affinity) { - dataTracker.set(AFFINITY, affinity.ordinal()); - } - - @Override - public EffectSync getPrimarySpellSlot() { - return effectDelegate; - } - - @Override - public void setSpell(@Nullable Spell effect) { - Caster.super.setSpell(effect); - - if (effect != null) { - effect.onPlaced(this); - } - } - - @Override - public boolean canInteract(Race race) { - return race.canCast(); - } - - @Override - protected void initDataTracker() { - super.initDataTracker(); - dataTracker.startTracking(LEVEL, 0); - dataTracker.startTracking(EFFECT, new CompoundTag()); - dataTracker.startTracking(OWNER, Optional.empty()); - dataTracker.startTracking(AFFINITY, Affinity.NEUTRAL.ordinal()); - } - - @Override - public ItemStack getPickedStack() { - return SpellRegistry.instance().enchantStack(new ItemStack(getItem()), getSpell().getName()); - } - - protected Item getItem() { - return getAffinity() == Affinity.BAD ? UItems.CORRUPTED_GEM : UItems.GEM; - } - - @Override - public boolean isPushable() { - return false; - } - - @Override - public boolean doesRenderOnFire() { - return false; - } - - @Override - public void setOwner(LivingEntity owner) { - setOwner(owner.getUuid()); - } - - protected void setOwner(@Nullable UUID ownerId) { - dataTracker.set(OWNER, Optional.ofNullable(ownerId)); - } - - protected Optional getOwnerId() { - return dataTracker.get(OWNER); - } - - @Nullable - @Override - public LivingEntity getOwner() { - return getOwnerId().map(world::getPlayerByUuid).orElse(null); - } - - protected void displayTick() { - if (hasSpell()) { - getSpell().render(this); - } - } - - @Override - public void tickMovement() { - super.mobTick(); - if (world.isClient) { - displayTick(); - } - - if (!hasSpell()) { - remove(); - } else { - if (getSpell().isDead()) { - remove(); - onDeath(); - } else { - getSpell().update(this); - } - - if (getSpell().allowAI()) { - super.tickMovement(); - } - } - - if (overLevelCap()) { - if (world.random.nextInt(10) == 0) { - playSpawnEffects(); - } - - if (!world.isClient && hasSpell()) { - float exhaustionChance = getSpell().getExhaustion(this); - - if (exhaustionChance == 0 || world.random.nextInt((int)(exhaustionChance / 500)) == 0) { - addLevels(-1); - } else if (world.random.nextInt((int)(exhaustionChance * 500)) == 0) { - setSpell(null); - } else if (world.random.nextInt((int)(exhaustionChance * 3500)) == 0) { - world.createExplosion(this, getX(), getY(), getZ(), getCurrentLevel()/2, DestructionType.BREAK); - remove(); - } - } - } - - if (getCurrentLevel() < 0) { - remove(); - } - } - - @Override - public EntityDimensions getDimensions(EntityPose pose) { - EntityDimensions dims = super.getDimensions(pose); - - if (hasSpell() && getSpell().allowAI()) { - return EntityDimensions.changing(dims.width, 1.5F); - } - - return dims; - } - - public boolean overLevelCap() { - return getCurrentLevel() > getMaxLevel(); - } - - @Override - protected void fall(double y, boolean onGround, BlockState state, BlockPos pos) { - this.onGround = true; - } - - @Override - public boolean damage(DamageSource source, float amount) { - if (!world.isClient) { - remove(); - onDeath(); - } - return false; - } - - protected void onDeath() { - BlockSoundGroup sound = BlockSoundGroup.STONE; - - world.playSound(getX(), getY(), getZ(), sound.getBreakSound(), SoundCategory.NEUTRAL, sound.getVolume(), sound.getPitch(), true); - - if (world.getGameRules().getBoolean(GameRules.DO_ENTITY_DROPS)) { - int level = getCurrentLevel(); - - ItemStack stack = new ItemStack(getItem(), level + 1); - if (hasSpell()) { - SpellRegistry.instance().enchantStack(stack, getSpell().getName()); - } - - dropStack(stack, 0); - } - } - - @Override - public void remove() { - if (hasSpell()) { - getSpell().onDestroyed(this); - } - super.remove(); - } - - @Override - public ActionResult interactAt(PlayerEntity player, Vec3d vec, Hand hand) { - if (EquinePredicates.PLAYER_UNICORN.test(player)) { - ItemStack currentItem = player.getStackInHand(Hand.MAIN_HAND); - - if (currentItem != null - && currentItem.getItem() instanceof CastableMagicItem - && ((CastableMagicItem)currentItem.getItem()).canFeed(this, currentItem) - && tryLevelUp(currentItem)) { - - if (!player.abilities.creativeMode) { - currentItem.decrement(1); - - if (currentItem.isEmpty()) { - player.sendEquipmentBreakStatus(EquipmentSlot.MAINHAND); - } - } - - return ActionResult.SUCCESS; - } - } - - return ActionResult.FAIL; - } - - public boolean tryLevelUp(ItemStack stack) { - if (hasSpell() && SpellRegistry.stackHasEnchantment(stack)) { - if (!getSpell().getName().contentEquals(SpellRegistry.getKeyFromStack(stack))) { - return false; - } - - addLevels(1); - - playSound(SoundEvents.ENTITY_ZOMBIE_VILLAGER_CURE, 0.1f, 1); - - return true; - } - - return false; - } - - @Override - public int getMaxLevel() { - return hasSpell() ? getSpell().getMaxLevelCutOff(this) : 0; - } - - @Override - public int getCurrentLevel() { - return dataTracker.get(LEVEL); - } - - @Override - public void setCurrentLevel(int level) { - dataTracker.set(LEVEL, Math.max(level, 0)); - } - - @Override - public Entity getEntity() { - return this; - } - - @Override - public void readCustomDataFromTag(CompoundTag compound) { - super.readCustomDataFromTag(compound); - if (compound.contains("affinity")) { - setAffinity(Affinity.of(compound.getString("affinity"))); - } - - if (compound.containsUuid("owner")) { - setOwner(compound.getUuid("owner")); - } - setCurrentLevel(compound.getInt("level")); - - if (compound.contains("effect")) { - setSpell(SpellRegistry.instance().createEffectFromNBT(compound.getCompound("effect"))); - } - } - - @Override - public void writeCustomDataToTag(CompoundTag compound) { - super.writeCustomDataToTag(compound); - - compound.putString("affinity", getAffinity().name()); - compound.putInt("level", getCurrentLevel()); - getOwnerId().ifPresent(id -> compound.putUuid("owner", id)); - - if (hasSpell()) { - compound.put("effect", SpellRegistry.toNBT(getSpell())); - } - } - - @Override - public void onNearbySpellChange(Caster source, Spell effect, int newState) { - if (hasSpell()) { - EtherialListener listener = getSpell(EtherialListener.class, true); - if (listener != null) { - listener.onNearbySpellChange(source, effect, newState); - } - } - } -} \ No newline at end of file diff --git a/src/main/java/com/minelittlepony/unicopia/world/entity/UEntities.java b/src/main/java/com/minelittlepony/unicopia/world/entity/UEntities.java deleted file mode 100644 index 820a0b5f..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/entity/UEntities.java +++ /dev/null @@ -1,102 +0,0 @@ -package com.minelittlepony.unicopia.world.entity; - -import java.util.List; - -import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry; -import net.fabricmc.fabric.api.object.builder.v1.entity.FabricEntityTypeBuilder; -import net.fabricmc.fabric.impl.biome.InternalBiomeData; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityDimensions; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.SpawnGroup; -import net.minecraft.entity.attribute.DefaultAttributeContainer; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; -import net.minecraft.world.biome.OceanBiome; -import net.minecraft.world.biome.Biome; -import net.minecraft.world.biome.Biome.SpawnEntry; - -public interface UEntities { - EntityType SPELLBOOK = register("spellbook", FabricEntityTypeBuilder.create(SpawnGroup.MISC, SpellbookEntity::new) - .dimensions(EntityDimensions.changing(0.6F, 0.6F)), - LivingEntity.createLivingAttributes()); - EntityType MAGIC_SPELL = register("magic_spell", FabricEntityTypeBuilder.create(SpawnGroup.MISC, SpellcastEntity::new) - .dimensions(EntityDimensions.changing(0.6F, 0.25F)), - LivingEntity.createLivingAttributes()); - EntityType CLOUD = register("cloud", FabricEntityTypeBuilder.create(SpawnGroup.CREATURE, CloudEntity::new) - .dimensions(CloudEntity.BASE_DIMENSIONS), - LivingEntity.createLivingAttributes()); - EntityType WILD_CLOUD = register("wild_cloud", FabricEntityTypeBuilder.create(SpawnGroup.CREATURE, WildCloudEntity::new) - .dimensions(CloudEntity.BASE_DIMENSIONS), - LivingEntity.createLivingAttributes()); - EntityType RACING_CLOUD = register("racing_cloud", FabricEntityTypeBuilder.create(SpawnGroup.CREATURE, RacingCloudEntity::new) - .dimensions(CloudEntity.BASE_DIMENSIONS), - LivingEntity.createLivingAttributes()); - EntityType CONSTRUCTION_CLOUD = register("construction_cloud", FabricEntityTypeBuilder.create(SpawnGroup.CREATURE, ConstructionCloudEntity::new) - .dimensions(CloudEntity.BASE_DIMENSIONS), - LivingEntity.createLivingAttributes()); - - EntityType RAINBOW = register("rainbow", FabricEntityTypeBuilder.create(SpawnGroup.AMBIENT, RainbowEntity::new) - .dimensions(EntityDimensions.fixed(1, 1)), - LivingEntity.createLivingAttributes()); - - EntityType CUCOON = register("cucoon", FabricEntityTypeBuilder.create(SpawnGroup.MISC, CucoonEntity::new) - .dimensions(EntityDimensions.changing(1.5F, 1.6F)), - LivingEntity.createLivingAttributes()); - - EntityType BUTTERFLY = register("butterfly", FabricEntityTypeBuilder.create(SpawnGroup.AMBIENT, ButterflyEntity::new) - .dimensions(EntityDimensions.fixed(1, 1)), - ButterflyEntity.createButterflyAttributes()); - - EntityType THROWN_ITEM = register("thrown_item", FabricEntityTypeBuilder.create(SpawnGroup.MISC, MagicProjectileEntity::new) - .trackable(100, 2) - .dimensions(EntityDimensions.fixed(0.25F, 0.25F))); - EntityType THROWN_SPEAR = register("thrown_spear", FabricEntityTypeBuilder.create(SpawnGroup.MISC, SpearEntity::new) - .trackable(100, 2) - .dimensions(EntityDimensions.fixed(0.6F, 0.6F))); - - static EntityType register(String name, FabricEntityTypeBuilder builder, DefaultAttributeContainer.Builder attributes) { - EntityType type = builder.build(); - FabricDefaultAttributeRegistry.register(type, attributes); - return Registry.register(Registry.ENTITY_TYPE, new Identifier("unicopia", name), type); - } - - static EntityType register(String name, FabricEntityTypeBuilder builder) { - EntityType type = builder.build(); - return Registry.register(Registry.ENTITY_TYPE, new Identifier("unicopia", name), type); - } - - static void bootstrap() { - final SpawnEntry CLOUD_SPAWN_ENTRY_LAND = new SpawnEntry(WILD_CLOUD, 1, 1, 15); - final SpawnEntry CLOUD_SPAWN_ENTRY_OCEAN = new SpawnEntry(WILD_CLOUD, 1, 1, 7); - final SpawnEntry BUTTERFLY_SPAWN_ENTRY = new SpawnEntry(BUTTERFLY, 15, 9, 15); - final SpawnEntry RAINBOW_SPAWN_ENTRY = new SpawnEntry(RAINBOW, 1, 1, 1); - - Registry.BIOME.forEach(biome -> { - Biome.Category category = biome.getCategory(); - - boolean isNether = category == Biome.Category.NETHER || InternalBiomeData.getNetherBiomes().contains(biome); - - if (!isNether && category != Biome.Category.THEEND) { - addifAbsent(biome.getEntitySpawnList(SpawnGroup.AMBIENT), biome instanceof OceanBiome ? CLOUD_SPAWN_ENTRY_OCEAN : CLOUD_SPAWN_ENTRY_LAND); - addifAbsent(biome.getEntitySpawnList(SpawnGroup.CREATURE), RAINBOW_SPAWN_ENTRY); - } - - if (category == Biome.Category.PLAINS - || category == Biome.Category.RIVER - || category == Biome.Category.FOREST - || category == Biome.Category.EXTREME_HILLS) { - addifAbsent(biome.getEntitySpawnList(SpawnGroup.AMBIENT), BUTTERFLY_SPAWN_ENTRY); - } - }); - } - - static void addifAbsent(List entries, T entry) { - if (!entries.contains(entry)) { - entries.add(entry); - } - } - - -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/entity/WildCloudEntity.java b/src/main/java/com/minelittlepony/unicopia/world/entity/WildCloudEntity.java deleted file mode 100644 index aba1c00f..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/entity/WildCloudEntity.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.minelittlepony.unicopia.world.entity; - -import java.util.Iterator; - -import javax.annotation.Nullable; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityData; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.SpawnReason; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.util.math.ChunkPos; -import net.minecraft.util.collection.TypeFilterableList; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.LocalDifficulty; -import net.minecraft.world.World; -import net.minecraft.world.WorldAccess; -import net.minecraft.world.chunk.WorldChunk; - -public class WildCloudEntity extends CloudEntity { - - public WildCloudEntity(EntityType type, World world) { - super(type, world); - - inanimate = true; - } - - /*@Override - public boolean isNotColliding() { - Box boundingbox = getBoundingBox(); - - return checkNoEntityCollision(boundingbox, this) - && world.isSkyVisible(getBlockPos()) - && world.doesNotCollide(this, boundingbox) - && !world.intersectsFluid(boundingbox); - }*/ - - /** - * Returns true if there are no solid, live entities in the specified Box, excluding the given entity - * - * @ref World.checkNoEntityCollision(Box area, Entity entity) - */ - /*public boolean checkNoEntityCollision(Box area, Entity entity) { - ServerWorld s; - ((ServerWorld)world).intersectsEntities(entity_1, voxelShape_1) - - for (Entity i : world.getEntities(entity, area)) { - if (!i.removed && (i.inanimate || i instanceof CloudEntity) && (!entity.hasVehicle() || !entity.isConnectedThroughVehicle(i))) { - return false; - } - } - return true; - }*/ - - @Override - public boolean canSpawn(WorldAccess world, SpawnReason type) { - if (type == SpawnReason.NATURAL) { - int count = 0; - - ChunkPos cpos = new ChunkPos(getBlockPos()); - - WorldChunk chunk = world.getChunkManager().getWorldChunk(cpos.x, cpos.z, false); - for (TypeFilterableList i : chunk.getEntitySectionArray()) { - Iterator iter = i.getAllOfType(CloudEntity.class).iterator(); - while (iter.hasNext()) { - iter.next(); - - if (count++ > 2) { - return false; - } - } - } - } - - BlockPos pos = getBlockPos().down(); - return world.getBlockState(pos).allowsSpawning(world, pos, getType()); - } - - @Override - public EntityData initialize(WorldAccess world, LocalDifficulty difficulty, SpawnReason type, @Nullable EntityData data, @Nullable CompoundTag tag) { - data = super.initialize(world, difficulty, type, data, tag); - - if (!(data instanceof PackData)) { - float minSpawnHeight = getMinimumFlyingHeight(); - - targetAltitude = getRandomFlyingHeight(); - - if (getY() < minSpawnHeight) { - minSpawnHeight += random.nextInt(Math.max(1, getMaximumAltitude())); - - updatePositionAndAngles(getX(), minSpawnHeight - 1, getZ(), yaw, pitch); - moveToBoundingBoxCenter(); - } - - if (this.world.hasRain(getBlockPos())) { - setIsRaining(true); - } - - if (this.world.isThundering()) { - setIsThundering(true); - } - - data = new PackData(this); - } else { - PackData packData = (PackData)data; - targetAltitude = packData.leader.targetAltitude; - - Vec3d position = packData.getUnOccupiedPosition(getCloudSize()); - - setIsRaining(packData.leader.getIsRaining()); - setIsThundering(packData.leader.getIsThundering()); - - updatePositionAndAngles(position.x, position.y, position.z, packData.leader.yaw, packData.leader.pitch); - checkBlockCollision(); - } - - return data; - } - - static class PackData implements EntityData { - - final CloudEntity leader; - - PackData(CloudEntity leader) { - this.leader = leader; - } - - Vec3d getUnOccupiedPosition(int size) { - return leader.getPos(); - } - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/item/AlicornAmuletItem.java b/src/main/java/com/minelittlepony/unicopia/world/item/AlicornAmuletItem.java deleted file mode 100644 index 71e05bd9..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/item/AlicornAmuletItem.java +++ /dev/null @@ -1,321 +0,0 @@ -package com.minelittlepony.unicopia.world.item; - -import java.util.List; -import java.util.UUID; - -import javax.annotation.Nullable; - -import com.google.common.collect.Multimap; -import com.minelittlepony.unicopia.AwaitTickQueue; -import com.minelittlepony.unicopia.ducks.IItemEntity; -import com.minelittlepony.unicopia.equine.ItemImpl; -import com.minelittlepony.unicopia.equine.player.MagicReserves; -import com.minelittlepony.unicopia.equine.player.Pony; -import com.minelittlepony.unicopia.magic.AffineItem; -import com.minelittlepony.unicopia.magic.Affinity; -import com.minelittlepony.unicopia.util.MagicalDamageSource; -import com.minelittlepony.unicopia.util.VecHelper; - -import net.minecraft.util.ChatUtil; -import net.minecraft.util.Hand; -import net.minecraft.util.TypedActionResult; -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.item.TooltipContext; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EquipmentSlot; -import net.minecraft.entity.ItemEntity; -import net.minecraft.entity.MovementType; -import net.minecraft.entity.attribute.EntityAttribute; -import net.minecraft.entity.attribute.EntityAttributeModifier; -import net.minecraft.entity.attribute.EntityAttributes; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ArmorItem; -import net.minecraft.item.ArmorMaterial; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.particle.ParticleEffect; -import net.minecraft.particle.ParticleTypes; -import net.minecraft.recipe.Ingredient; -import net.minecraft.sound.SoundCategory; -import net.minecraft.sound.SoundEvent; -import net.minecraft.sound.SoundEvents; -import net.minecraft.text.Text; -import net.minecraft.text.TranslatableText; -import net.minecraft.util.ActionResult; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.LocalDifficulty; -import net.minecraft.world.World; -import net.minecraft.world.explosion.Explosion.DestructionType; - -public class AlicornAmuletItem extends ArmorItem implements AffineItem, ItemImpl.TickableItem { - - private static final UUID[] MODIFIERS = new UUID[] { - UUID.fromString("845DB27C-C624-495F-8C9F-6020A9A58B6B"), - UUID.fromString("D8499B04-0E66-4726-AB29-64469D734E0D"), - UUID.fromString("9F3D476D-C118-4544-8365-64846904B48E"), - UUID.fromString("2AD3F246-FEE1-4E67-B886-69FD380BB150") - }; - - public AlicornAmuletItem(Settings settings) { - super(new Material(), EquipmentSlot.CHEST, settings); - } - - @Override - public Affinity getAffinity() { - return Affinity.BAD; - } - - @Override - public ActionResult onGroundTick(IItemEntity item) { - - ItemEntity entity = item.get().getOwner(); - - World world = entity.world; - - double x = entity.getX() + world.random.nextFloat() - 0.5; - double y = entity.getY() + world.random.nextFloat() - 0.5; - double z = entity.getZ() + world.random.nextFloat() - 0.5; - - ParticleEffect particle = world.random.nextBoolean() ? ParticleTypes.LARGE_SMOKE : ParticleTypes.FLAME; - - world.addParticle(particle, x, y, z, 0, 0, 0); - - if (world.random.nextInt(500) == 0) { - world.playSound(null, entity.getBlockPos(), SoundEvents.AMBIENT_CAVE, SoundCategory.HOSTILE, 0.5F, 1); - } - - Vec3d position = entity.getPos(); - VecHelper.findAllEntitiesInRange(entity, world, entity.getBlockPos(), 20) - .filter(e -> e instanceof PlayerEntity) - .sorted((a, b) -> (int)(a.getPos().distanceTo(position) - b.getPos().distanceTo(position))) - .findFirst() - .ifPresent(player -> interactWithPlayer(entity, (PlayerEntity)player)); - - return ActionResult.PASS; - } - - protected void interactWithPlayer(ItemEntity entity, PlayerEntity player) { - - entity.move(MovementType.SELF, player.getPos().subtract(entity.getPos()).multiply(0.02)); - - if (!player.world.isClient && !entity.removed) { - if (player.getPos().distanceTo(entity.getPos()) < 3) { - if (entity.world.random.nextInt(150) == 0) { - entity.setPickupDelay(0); - entity.onPlayerCollision(player); - - if (player.getMainHandStack().getItem() == this) { - TypedActionResult result = use(player.world, player, Hand.MAIN_HAND); - - if (result.getResult() == ActionResult.SUCCESS) { - entity.setPickupDelay(1000); - entity.remove(); - } - } - } - } - } - } - - @Environment(EnvType.CLIENT) - @Override - public void appendTooltip(ItemStack stack, @Nullable World world, List tooltip, TooltipContext context) { - - Pony iplayer = Pony.of(MinecraftClient.getInstance().player); - - if (iplayer != null) { - int attachedTime = iplayer.getInventory().getTicksAttached(this); - if (attachedTime > 0) { - tooltip.add(new TranslatableText(getTranslationKey() + ".tagline", ChatUtil.ticksToString(attachedTime))); - } - } - } - - @Override - public Text getName(ItemStack stack) { - if (!stack.hasTag()) { - stack.setTag(new CompoundTag()); - } - - CompoundTag compound = stack.getTag(); - - int hideFlags = 0; - - if (!compound.contains("HideFlags") || ((hideFlags = compound.getInt("HideFlags")) & 2) == 0) { - compound.putInt("HideFlags", hideFlags | 2); - } - - return super.getName(stack); - } - - @Override - public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { - - if (!(entity instanceof PlayerEntity)) { - return; - } - - PlayerEntity player = (PlayerEntity)entity; - - if (player.getHealth() < player.getMaxHealth()) { - player.heal(0.5F); - } else if (player.canConsume(false)) { - player.getHungerManager().add(1, 0); - } - - Pony iplayer = Pony.of(player); - - if (!iplayer.getInventory().isWearing(this)) { - - if (world.random.nextInt(12200) == 0 && player.getMainHandStack().getItem() == this) { - use(world, player, Hand.MAIN_HAND); - } - - return; - } - - float attachedTime = iplayer.getInventory().getTicksAttached(this); - - MagicReserves reserves = iplayer.getMagicalReserves(); - - if (reserves.getExertion() < 1) { - reserves.addExertion(2); - } - - if (reserves.getEnergy() < 0.005F + (attachedTime / 1000000)) { - reserves.addEnergy(2); - } - - if (attachedTime == 1) { - world.playSound(null, player.getBlockPos(), SoundEvents.ENTITY_ELDER_GUARDIAN_CURSE, SoundCategory.PLAYERS, 3, 1); - } - - if (attachedTime > 0 && attachedTime % 100 == 0) { - world.playSound(null, player.getBlockPos(), SoundEvents.AMBIENT_NETHER_WASTES_MOOD, SoundCategory.PLAYERS, 3, 1); - } - - if (attachedTime > 1000) { - if (world.random.nextInt(700) == 0) { - player.dropSelectedItem(false); - } - } - - if (attachedTime > 3000) { - if (world.random.nextInt(300) == 0) { - player.addVelocity(world.random.nextFloat() - 0.5F, 0, 0); - } - - if (world.random.nextInt(300) == 0) { - player.addVelocity(0, 0, world.random.nextFloat() - 0.5F); - } - } - - if (attachedTime > 6000) { - if (world.random.nextInt(300) == 0) { - player.yaw += 180; - } - } - - if (attachedTime > 13000) { - if (world.random.nextInt(300) == 0) { - player.damage(MagicalDamageSource.ALICORN_AMULET, 1F); - } - } - - if (stack.getDamage() >= getMaxDamage() - 1) { - stack.damage(10, player, p -> p.sendEquipmentBreakStatus(EquipmentSlot.CHEST)); - - player.damage(MagicalDamageSource.ALICORN_AMULET, player.getMaxHealth() - 0.01F); - player.getHungerManager().setFoodLevel(1); - - Vec3d pos = player.getPos(); - - player.world.createExplosion(player, pos.x, pos.y, pos.z, 10, DestructionType.NONE); - - AwaitTickQueue.scheduleTask(player.world, w -> { - w.createExplosion(player, pos.x, pos.y, pos.z, 6, DestructionType.BREAK); - }, 50); - } - - iplayer.getInventory().enforceDependency(this); - } - - @Override - public void onRemoved(Pony player, float needfulness) { - - float attachedTime = player.getInventory().getTicksAttached(this) / 100F; - - LocalDifficulty difficulty = player.getWorld().getLocalDifficulty(player.getOrigin()); - float amount = (attachedTime * (1 + needfulness)) * (1 + difficulty.getClampedLocalDifficulty()); - - amount = Math.min(amount, player.getOwner().getMaxHealth()); - - player.getOwner().damage(MagicalDamageSource.ALICORN_AMULET, amount); - - if (attachedTime > 120) { - player.getOwner().takeKnockback(1, 1, 1); - } - } - - @Override - public boolean alwaysActive() { - return false; - } - - @Override - public Multimap getAttributeModifiers(EquipmentSlot equipmentSlot) { - Multimap multimap = super.getAttributeModifiers(equipmentSlot); - - if (equipmentSlot == slot) { - UUID modifierId = MODIFIERS[equipmentSlot.getEntitySlotId()]; - multimap.put(EntityAttributes.GENERIC_ATTACK_DAMAGE, new EntityAttributeModifier(modifierId, "Strength modifier", 50, EntityAttributeModifier.Operation.ADDITION)); - } - - return multimap; - } - - static class Material implements ArmorMaterial { - - @Override - public int getDurability(EquipmentSlot slot) { - return 200; - } - - @Override - public int getProtectionAmount(EquipmentSlot slot) { - return Integer.MAX_VALUE; - } - - @Override - public int getEnchantability() { - return 0; - } - - @Override - public SoundEvent getEquipSound() { - return SoundEvents.ITEM_ARMOR_EQUIP_IRON; - } - - @Override - public Ingredient getRepairIngredient() { - return Ingredient.ofItems(UItems.ALICORN_AMULET); - } - - @Override - public String getName() { - return "alicorn_amulet"; - } - - @Override - public float getToughness() { - return 20; - } - - @Override - public float getKnockbackResistance() { - return 0; - } - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/item/BagOfHoldingItem.java b/src/main/java/com/minelittlepony/unicopia/world/item/BagOfHoldingItem.java deleted file mode 100644 index 43d765f1..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/item/BagOfHoldingItem.java +++ /dev/null @@ -1,143 +0,0 @@ -package com.minelittlepony.unicopia.world.item; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import javax.annotation.Nullable; - -import com.minelittlepony.unicopia.EquinePredicates; -import com.minelittlepony.unicopia.magic.AffineItem; -import com.minelittlepony.unicopia.magic.Affinity; -import com.minelittlepony.unicopia.magic.Magical; -import com.minelittlepony.unicopia.util.VecHelper; -import com.minelittlepony.unicopia.world.container.BagOfHoldingContainer; -import com.minelittlepony.unicopia.world.container.BagOfHoldingInventory; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.client.item.TooltipContext; -import net.minecraft.entity.Entity; -import net.minecraft.entity.ItemEntity; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.inventory.Inventory; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.screen.SimpleNamedScreenHandlerFactory; -import net.minecraft.sound.SoundEvents; -import net.minecraft.text.Text; -import net.minecraft.text.TranslatableText; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; -import net.minecraft.util.TypedActionResult; -import net.minecraft.util.hit.BlockHitResult; -import net.minecraft.util.hit.EntityHitResult; -import net.minecraft.util.hit.HitResult; -import net.minecraft.util.math.Box; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -public class BagOfHoldingItem extends Item implements AffineItem { - - public BagOfHoldingItem(Settings settings) { - super(settings); - } - - @Override - public void appendTooltip(ItemStack stack, @Nullable World worldIn, List tooltip, TooltipContext flagIn) { - super.appendTooltip(stack, worldIn, tooltip, flagIn); - - Map counts = new HashMap<>(); - - BagOfHoldingInventory.iterateContents(stack, (i, itemstack) -> { - Text name = itemstack.getName(); - - counts.put(name, counts.getOrDefault(name, 0) + itemstack.getCount()); - return true; - }); - - counts.forEach((line, count) -> { - tooltip.add(line.copy().append(" ").append(count.toString())); - }); - } - - @Override - public TypedActionResult use(World world, PlayerEntity player, Hand hand) { - - if (!EquinePredicates.PLAYER_UNICORN.test(player)) { - return super.use(world, player, hand); - } - - ItemStack stack = player.getStackInHand(hand); - - if (player.isSneaking()) { - HitResult hit = VecHelper.getObjectMouseOver(player, 5, 0); - - if (hit != null) { - if (hit.getType() == HitResult.Type.BLOCK) { - BlockHitResult bhit = (BlockHitResult)hit; - BlockPos pos = bhit.getBlockPos(); - - BlockEntity tile = world.getBlockEntity(pos); - - if (tile instanceof Inventory) { - if (!world.isClient) { - BagOfHoldingInventory inventory = BagOfHoldingInventory.getInventoryFromStack(stack); - - inventory.addBlockEntity(world, pos, (BlockEntity & Inventory)tile); - inventory.writeTostack(stack); - inventory.onClose(player); - } - return new TypedActionResult<>(ActionResult.SUCCESS, stack); - } - - Box box = new Box(pos.offset(bhit.getSide())).expand(0.5); - - List itemsAround = world.getEntities(player, box, EquinePredicates.IS_VALID_ITEM); - - if (itemsAround.size() > 0) { - if (!world.isClient) { - BagOfHoldingInventory inventory = BagOfHoldingInventory.getInventoryFromStack(stack); - - inventory.addItem((ItemEntity)itemsAround.get(0)); - inventory.writeTostack(stack); - inventory.onClose(player); - } - return new TypedActionResult<>(ActionResult.SUCCESS, stack); - } - } else if (hit.getType() == HitResult.Type.ENTITY) { - - Entity e = ((EntityHitResult)hit).getEntity(); - - if (e instanceof LivingEntity && !(e instanceof PlayerEntity) && !(e instanceof Magical)) { - if (!world.isClient) { - BagOfHoldingInventory inventory = BagOfHoldingInventory.getInventoryFromStack(stack); - - inventory.addEntity(world, e); - inventory.writeTostack(stack); - inventory.onClose(player); - } - return new TypedActionResult<>(ActionResult.SUCCESS, stack); - } - } - } - - return new TypedActionResult<>(ActionResult.FAIL, stack); - } - - player.openHandledScreen(new SimpleNamedScreenHandlerFactory( - (sync, inv, ply) -> new BagOfHoldingContainer(sync, inv), - stack.hasCustomName() ? stack.getName() : new TranslatableText("item.unicopia.bag_of_holding"))); - player.playSound(SoundEvents.BLOCK_ENDER_CHEST_OPEN, 0.5F, 1); - - return new TypedActionResult<>(ActionResult.SUCCESS, stack); - } - - @Override - public Affinity getAffinity() { - return Affinity.NEUTRAL; - } - - @Override - public boolean alwaysActive() { - return false; - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/item/CastableMagicItem.java b/src/main/java/com/minelittlepony/unicopia/world/item/CastableMagicItem.java deleted file mode 100644 index 3574ee19..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/item/CastableMagicItem.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.minelittlepony.unicopia.world.item; - -import com.minelittlepony.unicopia.magic.AffineItem; -import com.minelittlepony.unicopia.magic.CastResult; -import com.minelittlepony.unicopia.magic.DispenceableSpell; -import com.minelittlepony.unicopia.magic.Dispensable; -import com.minelittlepony.unicopia.magic.Spell; -import com.minelittlepony.unicopia.magic.spell.SpellRegistry; -import com.minelittlepony.unicopia.world.entity.SpellcastEntity; -import com.minelittlepony.unicopia.world.entity.UEntities; - -import net.minecraft.item.ItemStack; -import net.minecraft.item.ItemUsageContext; -import net.minecraft.util.ActionResult; -import net.minecraft.util.TypedActionResult; -import net.minecraft.util.math.BlockPointer; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -public interface CastableMagicItem extends AffineItem, Dispensable { - - @Override - default TypedActionResult dispenseStack(BlockPointer source, ItemStack stack) { - DispenceableSpell effect = SpellRegistry.instance().getDispenseActionFrom(stack); - - if (effect == null) { - return new TypedActionResult<>(ActionResult.FAIL, stack); - } - - CastResult dispenceResult = onDispenseSpell(source, stack, effect); - - if (dispenceResult == CastResult.DEFAULT) { - return new TypedActionResult<>(ActionResult.PASS, stack); - } - - if (dispenceResult == CastResult.PLACE) { - castContainedSpell(source.getWorld(), source.getBlockPos(), stack, effect); - - stack.decrement(1); - } - - return new TypedActionResult<>(ActionResult.SUCCESS, stack); - } - - CastResult onDispenseSpell(BlockPointer source, ItemStack stack, DispenceableSpell effect); - - CastResult onCastSpell(ItemUsageContext context, Spell effect); - - boolean canFeed(SpellcastEntity spell, ItemStack stack); - - /** - * Called to cast a spell. The result is an entity spawned with the spell attached. - */ - default SpellcastEntity castContainedSpell(World world, BlockPos pos, ItemStack stack, Spell effect) { - SpellcastEntity spell = new SpellcastEntity(UEntities.MAGIC_SPELL, world); - - spell.setAffinity(getAffinity(stack)); - spell.updatePositionAndAngles(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, 0, 0); - world.spawnEntity(spell); - spell.setSpell(effect); - - return spell; - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/item/CloudPlacerItem.java b/src/main/java/com/minelittlepony/unicopia/world/item/CloudPlacerItem.java deleted file mode 100644 index 85f3d87c..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/item/CloudPlacerItem.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.minelittlepony.unicopia.world.item; - -import com.minelittlepony.unicopia.magic.Dispensable; -import com.minelittlepony.unicopia.world.entity.CloudEntity; - -import net.minecraft.block.DispenserBlock; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.Item; -import net.minecraft.item.ItemGroup; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; -import net.minecraft.util.TypedActionResult; -import net.minecraft.util.hit.BlockHitResult; -import net.minecraft.util.hit.HitResult; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Position; -import net.minecraft.world.RayTraceContext; -import net.minecraft.world.World; - -public class CloudPlacerItem extends Item { - - private final EntityType cloudSupplier; - - public CloudPlacerItem(EntityType spawner) { - super(new Item.Settings() - .group(ItemGroup.MATERIALS) - .maxCount(16) - ); - this.cloudSupplier = spawner; - - Dispensable.setDispenseable(this, (source, stack) -> { - Position pos = DispenserBlock.getOutputLocation(source); - - placeCloud(source.getWorld(), new BlockPos(pos.getX(), pos.getY(), pos.getZ())); - - stack.decrement(1); - - return new TypedActionResult<>(ActionResult.SUCCESS, stack); - }); - } - - public void placeCloud(World world, BlockPos pos) { - CloudEntity cloud = cloudSupplier.create(world); - cloud.refreshPositionAndAngles(pos, 0, 0); - world.spawnEntity(cloud); - } - - @Override - public TypedActionResult use(World world, PlayerEntity player, Hand hand) { - - ItemStack stack = player.getStackInHand(hand); - - if (!world.isClient) { - HitResult mop = rayTrace(world, player, RayTraceContext.FluidHandling.NONE); - - BlockPos pos; - - if (mop.getType() == HitResult.Type.BLOCK) { - BlockHitResult bhr = (BlockHitResult)mop; - pos = bhr.getBlockPos().offset(bhr.getSide()); - } else { - pos = player.getBlockPos(); - } - - placeCloud(world, pos); - - if (!player.abilities.creativeMode) { - stack.decrement(1); - } - } - - return new TypedActionResult<>(ActionResult.SUCCESS, stack); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/item/CursedMagicGemItem.java b/src/main/java/com/minelittlepony/unicopia/world/item/CursedMagicGemItem.java deleted file mode 100644 index 8329c37c..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/item/CursedMagicGemItem.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.minelittlepony.unicopia.world.item; - -import com.minelittlepony.unicopia.magic.Affinity; -import com.minelittlepony.unicopia.magic.CastResult; -import com.minelittlepony.unicopia.magic.DispenceableSpell; -import com.minelittlepony.unicopia.magic.Spell; -import com.minelittlepony.unicopia.util.MagicalDamageSource; - -import net.minecraft.item.ItemStack; -import net.minecraft.item.ItemUsageContext; -import net.minecraft.util.math.BlockPointer; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraft.world.explosion.Explosion.DestructionType; - -public class CursedMagicGemItem extends MagicGemItem { - - public CursedMagicGemItem(Settings settings) { - super(settings); - } - - @Override - public CastResult onDispenseSpell(BlockPointer source, ItemStack stack, DispenceableSpell effect) { - - BlockPos pos = source.getBlockPos(); - World world = source.getWorld(); - - CastResult result = super.onDispenseSpell(source, stack, effect); - - if (result != CastResult.NONE) { - if (world.random.nextInt(200) == 0) { - float strength = world.random.nextFloat() * 100; - - world.createExplosion(null, pos.getX(), pos.getY(), pos.getZ(), strength, DestructionType.DESTROY); - - return CastResult.NONE; - } - } - - return result; - } - - @Override - public CastResult onCastSpell(ItemUsageContext context, Spell effect) { - CastResult result = super.onCastSpell(context, effect); - - if (result != CastResult.NONE) { - context.getPlayer().damage(MagicalDamageSource.causePlayerDamage("corruption", context.getPlayer()), 1); - } - - return result; - } - - @Override - public Affinity getAffinity() { - return Affinity.BAD; - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/item/EnchantedStaffItem.java b/src/main/java/com/minelittlepony/unicopia/world/item/EnchantedStaffItem.java deleted file mode 100644 index 8dd10ef9..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/item/EnchantedStaffItem.java +++ /dev/null @@ -1,147 +0,0 @@ -package com.minelittlepony.unicopia.world.item; - -import java.util.List; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import com.minelittlepony.unicopia.EquinePredicates; -import com.minelittlepony.unicopia.equine.player.Pony; -import com.minelittlepony.unicopia.magic.Affinity; -import com.minelittlepony.unicopia.magic.CasterUtils; -import com.minelittlepony.unicopia.magic.Affine; -import com.minelittlepony.unicopia.magic.Caster; -import com.minelittlepony.unicopia.magic.ThrowableSpell; -import com.minelittlepony.unicopia.world.TossableItem; - -import net.minecraft.block.BlockState; -import net.minecraft.client.item.TooltipContext; -import net.minecraft.entity.EquipmentSlot; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.damage.DamageSource; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.particle.ParticleTypes; -import net.minecraft.sound.SoundCategory; -import net.minecraft.sound.SoundEvents; -import net.minecraft.text.Text; -import net.minecraft.util.Hand; -import net.minecraft.util.TypedActionResult; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.World; - -public class EnchantedStaffItem extends StaffItem implements Affine, TossableItem { - - @Nonnull - private final ThrowableSpell effect; - - public EnchantedStaffItem(Settings settings, @Nonnull ThrowableSpell effect) { - super(settings.maxDamage(500)); - - this.effect = effect; - } - - @Override - public void appendTooltip(ItemStack stack, @Nullable World world, List tooltip, TooltipContext context) { - tooltip.add(getAffinity().getName()); - } - - @Override - public TypedActionResult use(World world, PlayerEntity player, Hand hand) { - if (EquinePredicates.PLAYER_UNICORN.test(player) && hand == Hand.MAIN_HAND) { - ItemStack itemstack = player.getStackInHand(hand); - - player.setCurrentHand(hand); - return TypedActionResult.consume(itemstack); - } - - return super.use(world, player, hand); - } - - @Override - public void onStoppedUsing(ItemStack itemstack, World world, LivingEntity entity, int timeLeft) { - if (EquinePredicates.PLAYER_UNICORN.test(entity)) { - int i = getMaxUseTime(itemstack) - timeLeft; - - if (i > 10 && canBeThrown(itemstack)) { - toss(world, itemstack, (PlayerEntity)entity); - } - } - } - - @Override - protected boolean castContainedEffect(ItemStack stack, LivingEntity target, LivingEntity attacker) { - if (attacker.isSneaking()) { - stack.damage(50, attacker, p -> p.sendEquipmentBreakStatus(EquipmentSlot.MAINHAND)); - - CasterUtils.toCaster(attacker).ifPresent(c -> c.subtractEnergyCost(4)); - CasterUtils.toCaster(target).ifPresent(c -> onImpact( - c, - target.getBlockPos(), - target.getEntityWorld().getBlockState(target.getBlockPos()) - )); - - return true; - } - - return false; - } - - @Override - public void usageTick(World world, LivingEntity entity, ItemStack stack, int ticksRemaining) { - if (entity instanceof LivingEntity) { - LivingEntity living = entity; - - if (living.getActiveItem().getItem() == this) { - Vec3d eyes = entity.getCameraPosVec(1); - - float i = getMaxUseTime(stack) - ticksRemaining; - - world.addParticle(i > 150 ? ParticleTypes.LARGE_SMOKE : ParticleTypes.CLOUD, eyes.x, eyes.y, eyes.z, - (world.random.nextGaussian() - 0.5) / 10, - (world.random.nextGaussian() - 0.5) / 10, - (world.random.nextGaussian() - 0.5) / 10 - ); - world.playSound(null, entity.getBlockPos(), SoundEvents.ENTITY_GUARDIAN_ATTACK, SoundCategory.PLAYERS, 1, i / 20); - - if (i > 200) { - living.clearActiveItem(); - living.damage(DamageSource.MAGIC, 1200); - CasterUtils.toCaster(entity).ifPresent(c -> onImpact( - c, - entity.getBlockPos(), - entity.getEntityWorld().getBlockState(entity.getBlockPos()) - )); - } - } - } - - } - - @Override - public int getMaxUseTime(ItemStack stack) { - return 72000; - } - - @Override - public void toss(World world, ItemStack stack, PlayerEntity player) { - Pony iplayer = Pony.of(player); - - iplayer.subtractEnergyCost(4); - effect.toss(iplayer); - - stack.damage(1, player, p -> p.sendEquipmentBreakStatus(EquipmentSlot.MAINHAND)); - } - - @Override - public void onImpact(Caster caster, BlockPos pos, BlockState state) { - effect.onImpact(caster, pos, state); - } - - @Override - public Affinity getAffinity() { - return effect.getAffinity(); - } - -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/item/ExtendedShearsItem.java b/src/main/java/com/minelittlepony/unicopia/world/item/ExtendedShearsItem.java deleted file mode 100644 index 4e4be5dd..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/item/ExtendedShearsItem.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.minelittlepony.unicopia.world.item; - -import java.util.Optional; - -import com.minelittlepony.unicopia.magic.Dispensable; - -import net.minecraft.block.BlockState; -import net.minecraft.block.DispenserBlock; -import net.minecraft.block.dispenser.DispenserBehavior; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.item.ItemUsageContext; -import net.minecraft.item.Items; -import net.minecraft.item.ShearsItem; -import net.minecraft.util.ActionResult; -import net.minecraft.util.TypedActionResult; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -public class ExtendedShearsItem extends ShearsItem { - - public ExtendedShearsItem(Settings settings) { - super(settings); - final Optional vanillaDispenserBehaviour = Dispensable.getBehavior(new ItemStack(Items.SHEARS)); - /*DispenserBlock.registerBehavior(Items.SHEARS,*/ Dispensable.setDispenseable(this, (source, stack) -> { - - BlockPos pos = source.getBlockPos().offset(source.getBlockState().get(DispenserBlock.FACING)); - World w = source.getWorld(); - - if (UItems.MOSS.tryConvert(w, w.getBlockState(pos), pos, null)) { - stack.damage(1, w.random, null); - - return TypedActionResult.success(stack); - } - - return vanillaDispenserBehaviour - .map(action -> { - return TypedActionResult.pass(action.dispense(source, stack)); - }) - .orElseGet(() -> TypedActionResult.fail(stack)); - })/*)*/; - } - - @Override - public ActionResult useOnBlock(ItemUsageContext context) { - BlockState state = context.getWorld().getBlockState(context.getBlockPos()); - - PlayerEntity player = context.getPlayer(); - - if (UItems.MOSS.tryConvert(context.getWorld(), state, context.getBlockPos(), context.getPlayer())) { - if (player != null) { - ItemStack stack = context.getStack(); - - if (player == null || !player.isCreative()) { - stack.damage(1, player, p -> p.sendToolBreakStatus(context.getHand())); - } - } - - return ActionResult.SUCCESS; - } - - return ActionResult.PASS; - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/item/MagicGemItem.java b/src/main/java/com/minelittlepony/unicopia/world/item/MagicGemItem.java deleted file mode 100644 index 3f50232f..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/item/MagicGemItem.java +++ /dev/null @@ -1,200 +0,0 @@ -package com.minelittlepony.unicopia.world.item; - -import java.util.List; - -import javax.annotation.Nullable; - -import com.minelittlepony.unicopia.EquinePredicates; -import com.minelittlepony.unicopia.magic.Affinity; -import com.minelittlepony.unicopia.magic.CastResult; -import com.minelittlepony.unicopia.magic.DispenceableSpell; -import com.minelittlepony.unicopia.magic.Dispensable; -import com.minelittlepony.unicopia.magic.Spell; -import com.minelittlepony.unicopia.magic.Useable; -import com.minelittlepony.unicopia.magic.spell.SpellRegistry; -import com.minelittlepony.unicopia.util.VecHelper; -import com.minelittlepony.unicopia.world.entity.SpellcastEntity; - -import net.minecraft.block.DispenserBlock; -import net.minecraft.client.item.TooltipContext; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.Item; -import net.minecraft.item.ItemGroup; -import net.minecraft.item.ItemStack; -import net.minecraft.item.ItemUsageContext; -import net.minecraft.text.Text; -import net.minecraft.text.TranslatableText; -import net.minecraft.util.math.BlockPointer; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.util.ActionResult; -import net.minecraft.util.collection.DefaultedList; -import net.minecraft.util.Hand; -import net.minecraft.util.Rarity; -import net.minecraft.util.TypedActionResult; -import net.minecraft.world.World; - -public class MagicGemItem extends Item implements CastableMagicItem { - - public MagicGemItem(Settings settings) { - super(settings); - Dispensable.setDispenseable(this, this::dispenseStack); - } - - @Override - public boolean hasEnchantmentGlint(ItemStack stack) { - return super.hasEnchantmentGlint(stack) || SpellRegistry.stackHasEnchantment(stack); - } - - @Override - public CastResult onDispenseSpell(BlockPointer source, ItemStack stack, DispenceableSpell effect) { - Direction facing = source.getBlockState().get(DispenserBlock.FACING); - BlockPos pos = source.getBlockPos().offset(facing); - - return effect.onDispenced(pos, facing, source, getAffinity(stack)); - } - - @Override - public CastResult onCastSpell(ItemUsageContext context, Spell effect) { - if (effect instanceof Useable) { - return ((Useable)effect).onUse(context, getAffinity(context.getStack())); - } - - return CastResult.PLACE; - } - - @Override - public ActionResult useOnBlock(ItemUsageContext context) { - - BlockPos pos = context.getBlockPos(); - Hand hand = context.getHand(); - PlayerEntity player = context.getPlayer(); - - if (hand != Hand.MAIN_HAND || !EquinePredicates.PLAYER_UNICORN.test(player)) { - return ActionResult.PASS; - } - - ItemStack stack = player.getStackInHand(hand); - - if (!SpellRegistry.stackHasEnchantment(stack)) { - return ActionResult.FAIL; - } - - Spell effect = SpellRegistry.instance().getSpellFrom(stack); - - if (effect == null) { - return ActionResult.FAIL; - } - - CastResult result = onCastSpell(context, effect); - - if (!context.getWorld().isClient) { - pos = pos.offset(context.getSide()); - - if (result == CastResult.PLACE) { - castContainedSpell(context.getWorld(), pos, stack, effect).setOwner(player); - } - } - - if (result != CastResult.NONE) { - if (!player.isCreative()) { - stack.decrement(1); - } - - return ActionResult.SUCCESS; - } - - return ActionResult.SUCCESS; - } - - @Override - public TypedActionResult use(World world, PlayerEntity player, Hand hand) { - - ItemStack stack = player.getStackInHand(hand); - - if (!EquinePredicates.PLAYER_UNICORN.test(player)) { - return new TypedActionResult<>(ActionResult.PASS, stack); - } - - if (!SpellRegistry.stackHasEnchantment(stack)) { - return new TypedActionResult<>(ActionResult.FAIL, stack); - } - - Useable effect = SpellRegistry.instance().getUseActionFrom(stack); - - if (effect != null) { - CastResult result = effect.onUse(stack, getAffinity(stack), player, world, VecHelper.getLookedAtEntity(player, 5)); - - if (result != CastResult.NONE) { - if (result == CastResult.PLACE && !player.isCreative()) { - stack.decrement(1); - } - - return new TypedActionResult<>(ActionResult.SUCCESS, stack); - } - } - - return new TypedActionResult<>(ActionResult.PASS, stack); - } - - @Override - public void appendTooltip(ItemStack stack, @Nullable World worldIn, List tooltip, TooltipContext context) { - if (SpellRegistry.stackHasEnchantment(stack)) { - Affinity affinity = getAffinity(stack); - tooltip.add(new TranslatableText(String.format("%s.%s.tagline", - affinity.getTranslationKey(), - SpellRegistry.getKeyFromStack(stack) - )).styled(s -> s.withColor(affinity.getColourCode()))); - } - } - - @Override - public Text getName(ItemStack stack) { - if (SpellRegistry.stackHasEnchantment(stack)) { - return new TranslatableText(getTranslationKey(stack) + ".enchanted", - new TranslatableText(String.format("%s.%s", getAffinity(stack).getTranslationKey(), SpellRegistry.getKeyFromStack(stack) - ))); - } - - return super.getName(stack); - } - - @Override - public void appendStacks(ItemGroup tab, DefaultedList subItems) { - super.appendStacks(tab, subItems); - - if (isIn(tab)) { - SpellRegistry.instance().getAllNames(getAffinity()).forEach(name -> { - subItems.add(SpellRegistry.instance().enchantStack(new ItemStack(this), name)); - }); - } - } - - @Override - public Rarity getRarity(ItemStack stack) { - if (SpellRegistry.stackHasEnchantment(stack)) { - return Rarity.UNCOMMON; - } - - return super.getRarity(stack); - } - - @Override - public boolean canFeed(SpellcastEntity entity, ItemStack stack) { - Spell effect = entity.getSpell(); - - return effect != null - && entity.getAffinity() == getAffinity() - && effect.getName().equals(SpellRegistry.getKeyFromStack(stack)); - } - - @Override - public Affinity getAffinity() { - return Affinity.GOOD; - } - - @Override - public boolean alwaysActive() { - return true; - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/item/MossItem.java b/src/main/java/com/minelittlepony/unicopia/world/item/MossItem.java deleted file mode 100644 index b22cc2ce..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/item/MossItem.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.minelittlepony.unicopia.world.item; - -import javax.annotation.Nullable; - -import com.minelittlepony.unicopia.equine.player.Pony; -import com.minelittlepony.unicopia.toxin.ToxicItem; -import com.minelittlepony.unicopia.toxin.Toxicity; -import com.minelittlepony.unicopia.toxin.Toxin; -import com.minelittlepony.unicopia.util.blockstate.StateMaps; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.sound.SoundCategory; -import net.minecraft.sound.SoundEvents; -import net.minecraft.util.UseAction; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -public class MossItem extends ToxicItem { - - public MossItem(Item.Settings settings) { - super(settings, UseAction.EAT, Toxicity.MILD, Toxin.FOOD); - } - - public boolean tryConvert(World world, BlockState state, BlockPos pos, @Nullable PlayerEntity player) { - BlockState converted = StateMaps.MOSS_AFFECTED.getConverted(state); - - if (!state.equals(converted)) { - world.setBlockState(pos, converted, 3); - world.playSound(null, pos, SoundEvents.ENTITY_SHEEP_SHEAR, SoundCategory.PLAYERS, 1, 1); - - int amount = player != null && Pony.of(player).getSpecies().canUseEarth() ? world.random.nextInt(4) : 1; - - Block.dropStack(world, pos, new ItemStack(this, amount)); - - return true; - } - - return false; - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/item/RottenTomatoItem.java b/src/main/java/com/minelittlepony/unicopia/world/item/RottenTomatoItem.java deleted file mode 100644 index 3f6c4597..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/item/RottenTomatoItem.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.minelittlepony.unicopia.world.item; - -import com.minelittlepony.unicopia.equine.player.Pony; -import com.minelittlepony.unicopia.magic.Caster; -import com.minelittlepony.unicopia.magic.Dispensable; -import com.minelittlepony.unicopia.world.TossableItem; - -import net.minecraft.block.BlockState; -import net.minecraft.block.Material; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.effect.StatusEffectInstance; -import net.minecraft.entity.effect.StatusEffects; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; -import net.minecraft.util.TypedActionResult; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -public class RottenTomatoItem extends TomatoItem implements TossableItem { - - public RottenTomatoItem(Settings settings) { - super(settings); - Dispensable.setDispenseable(this, this::dispenseStack); - } - - @Override - public TypedActionResult use(World world, PlayerEntity player, Hand hand) { - ItemStack itemstack = player.getStackInHand(hand); - - if (canBeThrown(itemstack) && !player.canConsume(false)) { - toss(world, itemstack, player); - - return new TypedActionResult<>(ActionResult.SUCCESS, itemstack); - } - - return super.use(world, player, hand); - } - - protected boolean isSickening(ItemStack stack, PlayerEntity player) { - return canBeThrown(stack) - && !Pony.of(player).getSpecies().canUseEarth(); - } - - @Override - public ItemStack finishUsing(ItemStack stack, World world, LivingEntity entity) { - if (entity instanceof PlayerEntity && isSickening(stack, (PlayerEntity)entity)) { - int duration = 7000; - - StatusEffectInstance effect = entity.getStatusEffect(StatusEffects.NAUSEA); - - if (effect != null) { - duration += Math.max(0, effect.getDuration()); - } - - entity.addStatusEffect(new StatusEffectInstance(StatusEffects.NAUSEA, duration, 4)); - - } - return entity.eatFood(world, stack); - } - - @Override - public void onImpact(Caster caster, BlockPos pos, BlockState state) { - if (caster.isLocal() && state.getMaterial() == Material.GLASS) { - caster.getWorld().breakBlock(pos, true); - } - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/item/SpearItem.java b/src/main/java/com/minelittlepony/unicopia/world/item/SpearItem.java deleted file mode 100644 index 46cf3de6..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/item/SpearItem.java +++ /dev/null @@ -1,101 +0,0 @@ -package com.minelittlepony.unicopia.world.item; - -import javax.annotation.Nullable; - -import com.minelittlepony.unicopia.magic.Caster; -import com.minelittlepony.unicopia.util.projectile.Projectile; -import com.minelittlepony.unicopia.world.TossableItem; -import com.minelittlepony.unicopia.world.entity.SpearEntity; - -import net.minecraft.block.BlockState; -import net.minecraft.entity.EquipmentSlot; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; -import net.minecraft.util.TypedActionResult; -import net.minecraft.util.UseAction; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Position; -import net.minecraft.world.World; - -public class SpearItem extends Item implements TossableItem { - - public SpearItem(Settings settings) { - super(settings); - } - - @Override - public UseAction getUseAction(ItemStack stack) { - return UseAction.BOW; - } - - @Override - public int getMaxUseTime(ItemStack stack) { - return 440; - } - - @Override - public TypedActionResult use(World world, PlayerEntity player, Hand hand) { - if (!world.isClient) { - ItemStack itemstack = player.getStackInHand(hand); - - if (canBeThrown(itemstack)) { - player.swingHand(hand); - - return new TypedActionResult<>(ActionResult.SUCCESS, itemstack); - } - - } - - return super.use(world, player, hand); - } - - @Override - public void onStoppedUsing(ItemStack itemstack, World world, LivingEntity entity, int timeLeft) { - if (entity instanceof PlayerEntity) { - - int i = getMaxUseTime(itemstack) - timeLeft; - - if (i > 10) { - if (canBeThrown(itemstack)) { - itemstack.damage(1, entity, p -> p.sendEquipmentBreakStatus(EquipmentSlot.MAINHAND)); - toss(world, itemstack, (PlayerEntity)entity); - } - } - } - } - - @Override - public boolean isEnchantable(ItemStack stack) { - return true; - } - - public boolean canApplyAtEnchantingTable(ItemStack stack, net.minecraft.enchantment.Enchantment enchantment) { - switch (enchantment.type) { - case WEAPON: - case BOW: - return true; - default: return false; - } - } - - @Nullable - @Override - public Projectile createProjectile(World world, PlayerEntity player) { - return new SpearEntity(world, player); - } - - @Nullable - @Override - public Projectile createProjectile(World world, Position pos) { - return null; - } - - @Override - public void onImpact(Caster caster, BlockPos pos, BlockState state) { - - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/item/SpellbookItem.java b/src/main/java/com/minelittlepony/unicopia/world/item/SpellbookItem.java deleted file mode 100644 index fa2e2b89..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/item/SpellbookItem.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.minelittlepony.unicopia.world.item; - -import javax.annotation.Nullable; - -import com.minelittlepony.unicopia.EquinePredicates; -import com.minelittlepony.unicopia.magic.Dispensable; -import com.minelittlepony.unicopia.world.entity.SpellbookEntity; -import com.minelittlepony.unicopia.world.entity.UEntities; - -import net.minecraft.block.DispenserBlock; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.BookItem; -import net.minecraft.item.ItemUsageContext; -import net.minecraft.util.ActionResult; -import net.minecraft.util.TypedActionResult; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.world.World; - -public class SpellbookItem extends BookItem { - - public SpellbookItem(Settings settings) { - super(settings); - Dispensable.setDispenseable(this, (source, stack) -> { - Direction facing = source.getBlockState().get(DispenserBlock.FACING); - BlockPos pos = source.getBlockPos().offset(facing); - - float yaw = facing.getOpposite().asRotation(); - placeBook(source.getWorld(), pos.getX(), pos.getY(), pos.getZ(), yaw); - stack.decrement(1); - - return new TypedActionResult<>(ActionResult.SUCCESS, stack); - }); - } - - @Override - public ActionResult useOnBlock(ItemUsageContext context) { - - @Nullable - PlayerEntity player = context.getPlayer(); - - if (!context.getWorld().isClient && EquinePredicates.PLAYER_UNICORN.test(player)) { - BlockPos pos = context.getBlockPos().offset(context.getSide()); - - placeBook(context.getWorld(), pos.getX(), pos.getY(), pos.getZ(), context.getPlayerYaw() + 180); - - if (!player.abilities.creativeMode) { - player.getStackInHand(context.getHand()).decrement(1); - } - - return ActionResult.SUCCESS; - } - return ActionResult.PASS; - } - - private static void placeBook(World world, int x, int y, int z, float yaw) { - SpellbookEntity book = UEntities.SPELLBOOK.create(world); - - book.refreshPositionAndAngles(x + 0.5, y, z + 0.5, 0, 0); - book.setHeadYaw(yaw); - book.setYaw(yaw); - world.spawnEntity(book); - } -} - - - - - - - - - - - - - - - diff --git a/src/main/java/com/minelittlepony/unicopia/world/item/StaffItem.java b/src/main/java/com/minelittlepony/unicopia/world/item/StaffItem.java deleted file mode 100644 index 68cb88ec..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/item/StaffItem.java +++ /dev/null @@ -1,102 +0,0 @@ -package com.minelittlepony.unicopia.world.item; - -import java.util.List; -import java.util.UUID; - -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Multimap; -import com.minelittlepony.unicopia.EquinePredicates; - -import net.minecraft.block.Blocks; -import net.minecraft.client.item.TooltipContext; -import net.minecraft.entity.EntityDimensions; -import net.minecraft.entity.EquipmentSlot; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.attribute.EntityAttribute; -import net.minecraft.entity.attribute.EntityAttributeModifier; -import net.minecraft.entity.attribute.EntityAttributes; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.item.SwordItem; -import net.minecraft.item.ToolMaterials; -import net.minecraft.particle.BlockStateParticleEffect; -import net.minecraft.particle.ParticleTypes; -import net.minecraft.sound.SoundEvents; -import net.minecraft.text.Text; -import net.minecraft.text.TranslatableText; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; -import net.minecraft.util.UseAction; -import net.minecraft.util.math.MathHelper; -import net.minecraft.world.World; - -public class StaffItem extends SwordItem { - - protected static final UUID ATTACK_REACH_MODIFIER_ID = UUID.fromString("FA235E1C-4280-A865-B01B-CBAE9985ACA3"); - - public StaffItem(Settings settings) { - super(ToolMaterials.WOOD, 2, 4, settings); - } - - @Override - public ActionResult useOnEntity(ItemStack stack, PlayerEntity player, LivingEntity target, Hand hand) { - World w = player.getEntityWorld(); - - EntityDimensions dims = target.getDimensions(target.getPose()); - - for (int i = 0; i < 130; i++) { - w.addParticle(new BlockStateParticleEffect(ParticleTypes.BLOCK, Blocks.OAK_LOG.getDefaultState()), - target.getX() + (target.world.random.nextFloat() - 0.5F) * (dims.width + 1), - (target.getY() + dims.height / 2) + (target.world.random.nextFloat() - 0.5F) * dims.height, - target.getZ() + (target.world.random.nextFloat() - 0.5F) * (dims.width + 1), - 0, 0, 0 - ); - } - - return ActionResult.PASS; - } - - @Override - public void appendTooltip(ItemStack stack, World world, List tooltip, TooltipContext context) { - tooltip.add(new TranslatableText(getTranslationKey(stack) + ".tagline")); - } - - @Override - public boolean postHit(ItemStack stack, LivingEntity entity, LivingEntity attacker) { - super.postHit(stack, entity, attacker); - - if (EquinePredicates.PLAYER_UNICORN.test(entity)) { - return castContainedEffect(stack, entity, attacker); - } - - return false; - } - - protected boolean castContainedEffect(ItemStack stack, LivingEntity target, LivingEntity attacker) { - target.getEntityWorld().playSound(null, target.getBlockPos(), SoundEvents.ENTITY_PLAYER_ATTACK_CRIT, attacker.getSoundCategory(), 1, 1); - - target.takeKnockback(2, - MathHelper.sin(attacker.yaw * 0.017453292F), - -MathHelper.cos(attacker.yaw * 0.017453292F) - ); - - return true; - } - - @Override - public UseAction getUseAction(ItemStack stack) { - return UseAction.BOW; - } - - @Override - public Multimap getAttributeModifiers(EquipmentSlot slot) { - Multimap multimap = HashMultimap.create(); - - if (slot == EquipmentSlot.MAINHAND) { - multimap.put(EntityAttributes.GENERIC_ATTACK_DAMAGE, new EntityAttributeModifier(ATTACK_DAMAGE_MODIFIER_ID, "Weapon modifier", getAttackDamage(), EntityAttributeModifier.Operation.ADDITION)); - //multimap.put(PlayerEntity.REACH_DISTANCE.getId(), new EntityAttributeModifier(ATTACK_REACH_MODIFIER_ID, "Weapon modifier", 3, EntityAttributeModifier.Operation.ADDITION)); - } - - return multimap; - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/item/StickItem.java b/src/main/java/com/minelittlepony/unicopia/world/item/StickItem.java deleted file mode 100644 index 8deb82eb..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/item/StickItem.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.minelittlepony.unicopia.world.item; - -import javax.annotation.Nullable; - -import com.minelittlepony.unicopia.world.block.UBlocks; - -import net.minecraft.advancement.criterion.Criteria; -import net.minecraft.block.BlockState; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.Item; -import net.minecraft.item.ItemPlacementContext; -import net.minecraft.item.ItemStack; -import net.minecraft.item.ItemUsageContext; -import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.sound.BlockSoundGroup; -import net.minecraft.sound.SoundCategory; -import net.minecraft.util.ActionResult; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.world.World; - -public class StickItem extends Item { - public StickItem(Settings settings) { - super(settings); - } - - @Override - public ActionResult useOnBlock(ItemUsageContext context) { - World world = context.getWorld(); - BlockPos pos = context.getBlockPos(); - Direction facing = context.getSide(); - - @Nullable - PlayerEntity player = context.getPlayer(); - - if (facing == Direction.UP && world.isAir(pos.up()) && (player == null || world.canPlayerModifyAt(player, pos.offset(facing)))) { - - BlockState placementState = UBlocks.STICK.getPlacementState(new ItemPlacementContext(context)); - - if (!world.setBlockState(pos.up(), placementState, 11)) { - return ActionResult.FAIL; - } - - ItemStack itemstack = context.getStack(); - - if (player instanceof ServerPlayerEntity) { - Criteria.PLACED_BLOCK.trigger((ServerPlayerEntity)player, pos.up(), itemstack); - } - - BlockSoundGroup sound = world.getBlockState(pos).getSoundGroup(); - world.playSound(null, pos, sound.getPlaceSound(), SoundCategory.BLOCKS, (sound.getVolume() + 1) / 2, sound.getPitch()); - itemstack.decrement(1); - return ActionResult.SUCCESS; - } - - return ActionResult.FAIL; - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/item/SugaryItem.java b/src/main/java/com/minelittlepony/unicopia/world/item/SugaryItem.java deleted file mode 100644 index 0030070a..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/item/SugaryItem.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.minelittlepony.unicopia.world.item; - -import com.minelittlepony.unicopia.equine.player.Pony; - -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -public class SugaryItem extends Item { - - private final int sugarAmount; - - public SugaryItem(Settings settings, int sugar) { - super(settings); - sugarAmount = sugar; - } - - @Override - public ItemStack finishUsing(ItemStack stack, World world, LivingEntity entity) { - if (sugarAmount != 0 && entity instanceof PlayerEntity) { - Pony.of((PlayerEntity)entity).getMagicalReserves().addEnergy(sugarAmount); - } - - return super.finishUsing(stack, world, entity); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/item/TomatoItem.java b/src/main/java/com/minelittlepony/unicopia/world/item/TomatoItem.java deleted file mode 100644 index 3f98dff9..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/item/TomatoItem.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.minelittlepony.unicopia.world.item; - -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.effect.StatusEffects; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -public class TomatoItem extends Item { - - public TomatoItem(Settings settings) { - super(settings); - } - - @Override - public ItemStack finishUsing(ItemStack stack, World world, LivingEntity entity) { - stack = super.finishUsing(stack, world, entity); - entity.removeStatusEffect(StatusEffects.NAUSEA); - return stack; - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/item/TomatoSeedsItem.java b/src/main/java/com/minelittlepony/unicopia/world/item/TomatoSeedsItem.java deleted file mode 100644 index 19f6ebec..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/item/TomatoSeedsItem.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.minelittlepony.unicopia.world.item; - -import com.minelittlepony.unicopia.world.block.StickPlantBlock; -import com.minelittlepony.unicopia.world.block.UBlocks; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.Item; -import net.minecraft.item.ItemUsageContext; -import net.minecraft.sound.BlockSoundGroup; -import net.minecraft.sound.SoundCategory; -import net.minecraft.util.ActionResult; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -public class TomatoSeedsItem extends Item { - - public TomatoSeedsItem(Item.Settings settings) { - super(settings); - } - - @Override - public ActionResult useOnBlock(ItemUsageContext context) { - - World world = context.getWorld(); - BlockPos pos = context.getBlockPos(); - BlockState state = world.getBlockState(context.getBlockPos()); - - Block block = state.getBlock(); - - if (block instanceof StickPlantBlock && (block == UBlocks.TOMATO_PLANT || block == UBlocks.CLOUDSDALE_TOMATO_PLANT)) { - StickPlantBlock plant = (StickPlantBlock)block; - - if (plant.getSeedsItem() == this && state.get(plant.getAgeProperty()) == 0 && world.setBlockState(pos, plant.getPlacedState(world, pos, state).with(plant.getAgeProperty(), 1), 11)) { - BlockSoundGroup sound = block.getSoundGroup(state); - - context.getWorld().playSound(null, pos, sound.getPlaceSound(), SoundCategory.BLOCKS, sound.getVolume(), sound.getPitch() * 2); - - PlayerEntity player = context.getPlayer(); - - if (player == null || !player.isCreative()) { - context.getStack().decrement(1); - } - - return ActionResult.SUCCESS; - } - } - - return ActionResult.PASS; - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/item/UItems.java b/src/main/java/com/minelittlepony/unicopia/world/item/UItems.java deleted file mode 100644 index 1c5e5f3e..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/item/UItems.java +++ /dev/null @@ -1,195 +0,0 @@ -package com.minelittlepony.unicopia.world.item; - -import static com.minelittlepony.unicopia.EquinePredicates.*; - -import com.minelittlepony.unicopia.USounds; -import com.minelittlepony.unicopia.magic.spell.ScorchSpell; -import com.minelittlepony.unicopia.toxin.ToxicItem; -import com.minelittlepony.unicopia.toxin.Toxicity; -import com.minelittlepony.unicopia.toxin.Toxin; -import com.minelittlepony.unicopia.toxin.UFoodComponents; -import com.minelittlepony.unicopia.world.block.UBlocks; -import com.minelittlepony.unicopia.world.entity.UEntities; -import com.minelittlepony.unicopia.toxin.Toxics; - -import net.minecraft.item.Item; -import net.minecraft.item.Item.Settings; -import net.minecraft.item.ItemGroup; -import net.minecraft.item.AliasedBlockItem; -import net.minecraft.item.BlockItem; -import net.minecraft.item.FoodComponents; -import net.minecraft.item.Items; -import net.minecraft.item.MusicDiscItem; -import net.minecraft.item.SpawnEggItem; -import net.minecraft.item.TallBlockItem; -import net.minecraft.item.WallStandingBlockItem; -import net.minecraft.sound.SoundEvent; -import net.minecraft.util.Identifier; -import net.minecraft.util.Rarity; -import net.minecraft.util.UseAction; -import net.minecraft.util.registry.Registry; - -public interface UItems { - - AppleItem GREEN_APPLE = register("green_apple", new AppleItem(new Item.Settings().group(ItemGroup.FOOD).food(FoodComponents.APPLE))); - AppleItem SWEET_APPLE = register("sweet_apple", new AppleItem(new Item.Settings().group(ItemGroup.FOOD).food(FoodComponents.APPLE))); - AppleItem SOUR_APPLE = register("sour_apple", new AppleItem(new Item.Settings().group(ItemGroup.FOOD).food(FoodComponents.APPLE))); - - ZapAppleItem ZAP_APPLE = register("zap_apple", new ZapAppleItem(new Item.Settings().group(ItemGroup.FOOD).food(UFoodComponents.ZAP_APPLE))); - - AppleItem ROTTEN_APPLE = register("rotten_apple", new RottenAppleItem(new Item.Settings().group(ItemGroup.FOOD).food(FoodComponents.APPLE))); - AppleItem COOKED_ZAP_APPLE = register("cooked_zap_apple", new AppleItem(new Item.Settings().group(ItemGroup.FOOD).food(FoodComponents.APPLE))); - - Item CLOUD_MATTER = register("cloud_matter", new Item(new Settings().group(ItemGroup.MATERIALS))); - Item DEW_DROP = register("dew_drop", new Item(new Settings().group(ItemGroup.MATERIALS))); - - CloudPlacerItem RACING_CLOUD_SPAWNER = register("racing_cloud_spawner", new CloudPlacerItem(UEntities.RACING_CLOUD)); - CloudPlacerItem CONSTRUCTION_CLOUD_SPAWNER = register("construction_cloud_spawner", new CloudPlacerItem(UEntities.CONSTRUCTION_CLOUD)); - CloudPlacerItem WILD_CLOUD_SPAWNER = register("wild_cloud_spawner", new CloudPlacerItem(UEntities.WILD_CLOUD)); - - Item CLOUD_BLOCK = register("cloud_block", new PredicatedBlockItem(UBlocks.CLOUD_BLOCK, new Settings().group(ItemGroup.MATERIALS), PLAYER_PEGASUS)); - Item ENCHANTED_CLOUD_BLOCK = register("enchanted_cloud_block", new PredicatedBlockItem(UBlocks.ENCHANTED_CLOUD_BLOCK, new Settings().group(ItemGroup.MATERIALS), PLAYER_PEGASUS)); - Item DENSE_CLOUD_BLOCK = register("dense_cloud_block", new PredicatedBlockItem(UBlocks.DENSE_CLOUD_BLOCK, new Settings().group(ItemGroup.MATERIALS), PLAYER_PEGASUS)); - Item DENSE_CLOUD_PILLAR = register("dense_cloud_pillar", new PredicatedBlockItem(UBlocks.DENSE_CLOUD_PILLAR, new Settings().group(ItemGroup.MATERIALS), PLAYER_PEGASUS)); - - Item CLOUD_STAIRS = register("cloud_stairs", new PredicatedBlockItem(UBlocks.CLOUD_STAIRS, new Settings().group(ItemGroup.BUILDING_BLOCKS), PLAYER_PEGASUS)); - Item ENCHANTED_CLOUD_STAIRS = register("enchanted_cloud_stairs", new PredicatedBlockItem(UBlocks.ENCHANTED_CLOUD_STAIRS, new Settings().group(ItemGroup.BUILDING_BLOCKS), PLAYER_PEGASUS)); - Item DENSE_CLOUD_STAIRS = register("dense_cloud_stairs", new PredicatedBlockItem(UBlocks.DENSE_CLOUD_STAIRS, new Settings().group(ItemGroup.BUILDING_BLOCKS), PLAYER_PEGASUS)); - - Item CLOUD_FENCE = register("cloud_fence", new PredicatedBlockItem(UBlocks.CLOUD_FENCE, new Settings().group(ItemGroup.DECORATIONS), PLAYER_PEGASUS)); - Item CLOUD_ANVIL = register("cloud_anvil", new PredicatedBlockItem(UBlocks.CLOUD_ANVIL, new Settings().group(ItemGroup.DECORATIONS), PLAYER_PEGASUS)); - - Item MUSIC_DISC_CRUSADE = register("music_disc_crusade", USounds.RECORD_CRUSADE); - Item MUSIC_DISC_PET = register("music_disc_pet", USounds.RECORD_PET); - Item MUSIC_DISC_POPULAR = register("music_disc_popular", USounds.RECORD_POPULAR); - Item MUSIC_DISC_FUNK = register("music_disc_funk", USounds.RECORD_FUNK); - - Item HIVE_WALL_BLOCK = register("hive_wall_block", new BlockItem(UBlocks.HIVE_WALL_BLOCK, new Settings().group(ItemGroup.BUILDING_BLOCKS))); - - Item CHITIN_SHELL = register("chitin_shell", new Item(new Settings().group(ItemGroup.MATERIALS))); - Item CHITIN_SHELL_BLOCK = register("chitin_shell_block", new BlockItem(UBlocks.CHITIN_SHELL_BLOCK, new Settings().group(ItemGroup.BUILDING_BLOCKS))); - Item CHITIN_SHELL_SLAB = register("chitin_shell_slab", new BlockItem(UBlocks.CHITIN_SHELL_SLAB, new Settings().group(ItemGroup.BUILDING_BLOCKS))); - Item CHITIN_SHELL_STAIRS = register("chitin_shell_stairs", new BlockItem(UBlocks.CHITIN_SHELL_STAIRS, new Settings().group(ItemGroup.BUILDING_BLOCKS))); - - Item CHISELED_CHITIN_SHELL_BLOCK = register("chiseled_chitin_shell_block", new BlockItem(UBlocks.CHISELED_CHITIN_SHELL_BLOCK, new Settings().group(ItemGroup.BUILDING_BLOCKS))); - Item CUCOON = register("cucoon", new AliasedBlockItem(UBlocks.SLIME_DRIP, new Settings().group(ItemGroup.MATERIALS))); - Item SLIME_LAYER = register("slime_layer", new BlockItem(UBlocks.SLIME_LAYER, new Settings().group(ItemGroup.DECORATIONS))); - - Item MISTED_GLASS_DOOR = register("misted_glass_door", new TallBlockItem(UBlocks.MISTED_GLASS_DOOR, new Settings().group(ItemGroup.REDSTONE))); - Item LIBRARY_DOOR = register("library_door", new TallBlockItem(UBlocks.LIBRARY_DOOR, new Settings().group(ItemGroup.REDSTONE))); - Item BAKERY_DOOR = register("bakery_door", new TallBlockItem(UBlocks.BAKERY_DOOR, new Settings().group(ItemGroup.REDSTONE))); - Item DIAMOND_DOOR = register("diamond_door", new TallBlockItem(UBlocks.DIAMOND_DOOR, new Settings().group(ItemGroup.REDSTONE))); - - Item SUGAR_BLOCK = register("sugar_block", new BlockItem(UBlocks.SUGAR_BLOCK, new Settings().group(ItemGroup.BUILDING_BLOCKS))); - - Item SMOOTH_MARBLE_BLOCK = register("smooth_marble_block", new BlockItem(UBlocks.SMOOTH_MARBLE_BLOCK, new Settings().group(ItemGroup.BUILDING_BLOCKS))); - Item CHISELED_MARBLE_BLOCK = register("chiseled_marble_block", new BlockItem(UBlocks.CHISELED_MARBLE_BLOCK, new Settings().group(ItemGroup.BUILDING_BLOCKS))); - Item SMOOTH_MARBLE_SLAB = register("smooth_marble_slab", new BlockItem(UBlocks.SMOOTH_MARBLE_SLAB, new Settings().group(ItemGroup.BUILDING_BLOCKS))); - - Item CLOUD_SLAB = register("cloud_slab", new PredicatedBlockItem(UBlocks.CLOUD_SLAB, new Settings().group(ItemGroup.BUILDING_BLOCKS), PLAYER_PEGASUS)); - Item ENCHANTED_CLOUD_SLAB = register("enchanted_cloud_slab", new PredicatedBlockItem(UBlocks.ENCHANTED_CLOUD_SLAB, new Settings().group(ItemGroup.BUILDING_BLOCKS), PLAYER_PEGASUS)); - Item DENSE_CLOUD_SLAB = register("dense_cloud_slab", new PredicatedBlockItem(UBlocks.DENSE_CLOUD_SLAB, new Settings().group(ItemGroup.BUILDING_BLOCKS), PLAYER_PEGASUS)); - - MagicGemItem GEM = register("gem", new MagicGemItem(new Settings().maxCount(16).group(ItemGroup.BREWING))); - MagicGemItem CORRUPTED_GEM = register("corrupted_gem", new CursedMagicGemItem(new Settings().maxCount(16).group(ItemGroup.BREWING))); - - BagOfHoldingItem BAG_OF_HOLDING = register("bag_of_holding", new BagOfHoldingItem(new Settings().group(ItemGroup.TRANSPORTATION).rarity(Rarity.UNCOMMON).maxCount(1))); - AlicornAmuletItem ALICORN_AMULET = register("alicorn_amulet", new AlicornAmuletItem(new Settings().group(ItemGroup.COMBAT).rarity(Rarity.RARE).maxCount(1))); - - SpellbookItem SPELLBOOK = register("spellbook", new SpellbookItem(new Item.Settings().maxCount(1).group(ItemGroup.BREWING))); - Item MEADOW_BROOK_STAFF = register("meadow_brook_staff", new StaffItem(new Settings().group(ItemGroup.TOOLS).rarity(Rarity.UNCOMMON).maxCount(1).maxDamage(2))); - Item REMEMBERANCE_STAFF = register("remembrance_staff", new EnchantedStaffItem(new Settings().group(ItemGroup.TOOLS).rarity(Rarity.UNCOMMON).maxCount(1), new ScorchSpell())); - - Item SPEAR = register("spear", new SpearItem(new Settings().group(ItemGroup.TOOLS).maxCount(1).maxDamage(500))); - - MossItem MOSS = register("moss", new MossItem(new Settings().group(ItemGroup.FOOD).food(UFoodComponents.RANDOM_FOLIAGE))); - - Item ALFALFA_SEEDS = register("alfalfa_seeds", new AliasedBlockItem(UBlocks.ALFALFA_CROPS, new Settings().group(ItemGroup.MATERIALS).food(UFoodComponents.ALFALFA_SEEDS))); - Item ALFALFA_LEAVES = register("alfalfa_leaves", new Item(new Settings().group(ItemGroup.FOOD).food(UFoodComponents.ALFALFA_LEAVES))); - - Item ENCHANTED_TORCH = register("enchanted_torch", new WallStandingBlockItem(UBlocks.ENCHANTED_TORCH, UBlocks.ENCHANTED_WALL_TORCH, new Settings().group(ItemGroup.DECORATIONS))); - - Item CEREAL = register("cereal", new SugaryItem(new Settings() - .group(ItemGroup.FOOD) - .food(UFoodComponents.CEREAL) - .maxCount(1) - .recipeRemainder(Items.BOWL), 1)); - Item BOOP_O_ROOPS = register("boop_o_roops", new SugaryItem(new Settings() - .group(ItemGroup.FOOD) - .food(UFoodComponents.SUGAR) - .maxCount(1) - .recipeRemainder(Items.BOWL), 110)); - - TomatoSeedsItem TOMATO_SEEDS = register("tomato_seeds", new TomatoSeedsItem(new Settings().group(ItemGroup.MATERIALS))); - TomatoItem TOMATO = register("tomato", new TomatoItem(new Settings() - .group(ItemGroup.FOOD) - .food(UFoodComponents.TOMATO))); - RottenTomatoItem ROTTEN_TOMATO = register("rotten_tomato", new RottenTomatoItem(new Settings() - .group(ItemGroup.FOOD) - .food(UFoodComponents.BAD_TOMATO))); - - TomatoItem CLOUDSDALE_TOMATO = register("cloudsdale_tomato", new TomatoItem(new Settings() - .rarity(Rarity.UNCOMMON) - .group(ItemGroup.FOOD) - .food(UFoodComponents.GOOD_TOMATO))); - RottenTomatoItem ROTTEN_CLOUDSDALE_TOMATO = register("rotten_cloudsdale_tomato", new RottenTomatoItem(new Settings() - .group(ItemGroup.FOOD) - .rarity(Rarity.UNCOMMON) - .food(UFoodComponents.BAD_TOMATO))); - - Item APPLE_SEEDS = register("apple_seeds", new BlockItem(UBlocks.APPLE_SAPLING, new Settings().group(ItemGroup.DECORATIONS))); - Item APPLE_LEAVES = register("apple_leaves", new BlockItem(UBlocks.APPLE_LEAVES, new Settings().group(ItemGroup.DECORATIONS))); - - Item DAFFODIL_DAISY_SANDWICH = register("daffodil_daisy_sandwich", new ToxicItem(new Settings() - .group(ItemGroup.FOOD) - .food(UFoodComponents.DAFODIL_DAISY_SANDWICH), UseAction.EAT, Toxicity::fromStack, Toxin.FOOD)); - Item HAY_BURGER = register("hay_burger", new ToxicItem(new Settings() - .group(ItemGroup.FOOD) - .food(UFoodComponents.HAY_BURGER), UseAction.EAT, Toxicity::fromStack, Toxin.FOOD)); - Item HAY_FRIES = register("hay_fries", new ToxicItem(new Settings() - .group(ItemGroup.FOOD) - .food(UFoodComponents.HAY_FRIES), UseAction.EAT, Toxicity.SAFE, Toxin.FOOD)); - Item SALAD = register("salad", new ToxicItem(new Settings() - .group(ItemGroup.FOOD) - .food(UFoodComponents.SALAD) - .recipeRemainder(Items.BOWL), UseAction.EAT, Toxicity::fromStack, Toxin.FOOD)); - - Item WHEAT_WORMS = register("wheat_worms", new ToxicItem(new Settings() - .group(ItemGroup.MISC) - .food(UFoodComponents.WORMS), UseAction.EAT, Toxicity.SEVERE, Toxin.FOOD)); - Item MUG = register("mug", new Item(new Settings().group(ItemGroup.MATERIALS))); - Item CIDER = register("apple_cider", new ToxicItem(new Settings() - .group(ItemGroup.FOOD) - .food(UFoodComponents.SALAD) - .recipeRemainder(MUG), UseAction.DRINK, Toxicity.MILD, Toxin.FOOD)); - Item JUICE = register("juice", new ToxicItem(new Settings() - .group(ItemGroup.FOOD) - .recipeRemainder(Items.GLASS_BOTTLE) - .food(UFoodComponents.JUICE), UseAction.DRINK, Toxicity.SAFE, Toxin.FOOD)); - Item BURNED_JUICE = register("burned_juice", new ToxicItem(new Settings() - .group(ItemGroup.FOOD) - .recipeRemainder(Items.GLASS_BOTTLE) - .food(UFoodComponents.BURNED_JUICE), UseAction.DRINK, Toxicity.FAIR, Toxin.FOOD)); - - Item CLOUD_SPAWN_EGG = register("cloud_spawn_egg", new SpawnEggItem(UEntities.CLOUD, 0x4169e1, 0x7fff00, new Settings().group(ItemGroup.MISC))); - Item BUTTERFLY_SPAWN_EGG = register("butterfly_spawn_egg", new SpawnEggItem(UEntities.BUTTERFLY, 0x222200, 0xaaeeff, new Settings().group(ItemGroup.MISC))); - - static T register(String name, T item) { - if (item instanceof BlockItem) { - ((BlockItem)item).appendBlocks(Item.BLOCK_ITEMS, item); - } - return Registry.register(Registry.ITEM, new Identifier("unicopia", name), item); - } - - static MusicDiscItem register(String name, SoundEvent sound) { - return register(name, new MusicDiscItem(1, sound, new Settings() - .maxCount(1) - .group(ItemGroup.MISC) - .rarity(Rarity.RARE) - ) {}); - } - - static void bootstrap() { - Toxics.bootstrap(); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/recipe/Pattern.java b/src/main/java/com/minelittlepony/unicopia/world/recipe/Pattern.java deleted file mode 100644 index a2ee232c..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/recipe/Pattern.java +++ /dev/null @@ -1,240 +0,0 @@ -package com.minelittlepony.unicopia.world.recipe; - -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; - -import com.google.common.collect.Sets; -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; -import com.google.gson.JsonSyntaxException; -import com.minelittlepony.unicopia.world.recipe.ingredient.PredicatedIngredient; - -import net.minecraft.inventory.CraftingInventory; -import net.minecraft.util.collection.DefaultedList; -import net.minecraft.util.JsonHelper; -import net.minecraft.network.PacketByteBuf; -import net.minecraft.util.Util; - -public class Pattern { - - public static Pattern read(PacketByteBuf buf) { - return new Pattern( - Utils.read(buf, PredicatedIngredient.EMPTY, PredicatedIngredient::read), - buf.readVarInt(), - buf.readVarInt() - ); - } - - public static Pattern read(JsonObject json) { - String[] patterns = removePadding(readPattern(JsonHelper.getArray(json, "pattern"))); - Map symbols = readSymbols(JsonHelper.getObject(json, "key")); - - return new Pattern(patterns, symbols); - } - - public final DefaultedList matrix; - - public final int width; - public final int height; - - public Pattern(DefaultedList matrix, int width, int height) { - this.matrix = matrix; - this.width = width; - this.height = height; - } - - public Pattern(String[] pattern, Map ingredients) { - this(pattern, ingredients, pattern[0].length(), pattern.length); - } - - private Pattern(String[] pattern, Map ingredients, int width, int height) { - this(buildIngredientMatrix(pattern, ingredients, width, height), width, height); - } - - public boolean matches(CraftingInventory inv) { - for(int x = 0; x <= inv.getWidth() - width; x++) { - for(int y = 0; y <= inv.getHeight() - height; y++) { - if (matchesPattern(inv, x, y, true) || matchesPattern(inv, x, y, false)) { - return true; - } - } - } - - return false; - } - - public void write(PacketByteBuf buf) { - Utils.write(buf, matrix, PredicatedIngredient::write); - buf.writeVarInt(width); - buf.writeVarInt(height); - } - - public int size() { - return matrix.size(); - } - - private boolean matchesPattern(CraftingInventory inv, int offsetX, int offsetY, boolean reflected) { - for(int x = 0; x < inv.getWidth(); ++x) { - for(int y = 0; y < inv.getHeight(); ++y) { - int left = x - offsetX; - int top = y - offsetY; - - PredicatedIngredient ingredient = PredicatedIngredient.EMPTY; - - if (left >= 0 && top >= 0 && left < width && top < height) { - if (reflected) { - ingredient = matrix.get(width - left - 1 + top * width); - } else { - ingredient = matrix.get(left + top * width); - } - } - - if (!ingredient.matches(inv.getStack(x + y * inv.getWidth()), 1)) { - return false; - } - } - } - - return true; - } - - static DefaultedList buildIngredientMatrix(String[] pattern, Map symbols, int width, int height) { - DefaultedList result = DefaultedList.ofSize(width * height, PredicatedIngredient.EMPTY); - - Set unresolved = Sets.newHashSet(symbols.keySet()); - unresolved.remove(" "); - - for(int i = 0; i < pattern.length; ++i) { - for(int j = 0; j < pattern[i].length(); ++j) { - String key = pattern[i].substring(j, j + 1); - - PredicatedIngredient ingredient = symbols.get(key); - - if (ingredient == null) { - throw new JsonSyntaxException("Pattern references symbol '" + key + "' but it's not defined in the key"); - } - - unresolved.remove(key); - result.set(j + width * i, ingredient); - } - } - - if (!unresolved.isEmpty()) { - throw new JsonSyntaxException("Key defines symbols that aren't used in pattern: " + unresolved); - } - - return result; - } - - /** - * Removes empty space from around the recipe pattern. - * - * Turns patterns such as: - * " o" - * " a" - * " " - * Into: - * "o" - * "a" - * - * @param pattern - * @return A new recipe pattern with all leading and trailing empty rows/columns removed. - */ - static String[] removePadding(String... pattern) { - int left = Integer.MAX_VALUE; - int right = 0; - - int top = 0; - int bottom = 0; - - for(int yPosition = 0; yPosition < pattern.length; ++yPosition) { - String row = pattern[yPosition]; - - left = Math.min(left, findFirstSymbol(row)); - - int rowEnd = findLastSymbol(row); - - right = Math.max(right, rowEnd); - - if (rowEnd < 0) { - if (top == yPosition) { - top++; - } - - bottom++; - } else { - bottom = 0; - } - } - - if (pattern.length == bottom) { - return new String[0]; - } - - String[] strings = new String[pattern.length - bottom - top]; - - for(int i = 0; i < strings.length; i++) { - strings[i] = pattern[i + top].substring(left, right + 1); - } - - return strings; - } - - private static int findFirstSymbol(String pattern) { - int i; - for(i = 0; i < pattern.length() && pattern.charAt(i) == ' '; ++i) {} - - return i; - } - - private static int findLastSymbol(String pattern) { - int i; - for(i = pattern.length() - 1; i >= 0 && pattern.charAt(i) == ' '; --i) {} - - return i; - } - - static String[] readPattern(JsonArray json) { - String[] rows = new String[json.size()]; - - if (rows.length > 3) { - throw new JsonSyntaxException("Invalid pattern: too many rows, 3 is maximum"); - } - if (rows.length == 0) { - throw new JsonSyntaxException("Invalid pattern: empty pattern not allowed"); - } - - for(int i = 0; i < rows.length; ++i) { - String column = JsonHelper.asString(json.get(i), "pattern[" + i + "]"); - - if (column.length() > 3) { - throw new JsonSyntaxException("Invalid pattern: too many columns, 3 is maximum"); - } - - if (i > 0 && rows[0].length() != column.length()) { - throw new JsonSyntaxException("Invalid pattern: each row must be the same width"); - } - - rows[i] = column; - } - - return rows; - } - - static Map readSymbols(JsonObject json) { - return Util.make(json.entrySet().stream().collect(Collectors.toMap(e -> { - if (e.getKey().length() != 1) { - throw new JsonSyntaxException("Invalid key entry: '" + e.getKey() + "' is an invalid symbol (must be 1 character only)."); - } - - if (" ".equals(e.getKey())) { - throw new JsonSyntaxException("Invalid key entry: ' ' is a reserved symbol."); - } - - return e.getKey(); - }, - e -> PredicatedIngredient.one(e.getValue()) - )), m -> m.put(" ", PredicatedIngredient.EMPTY)); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/recipe/ShapedSpecialRecipe.java b/src/main/java/com/minelittlepony/unicopia/world/recipe/ShapedSpecialRecipe.java deleted file mode 100644 index 38a5737b..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/recipe/ShapedSpecialRecipe.java +++ /dev/null @@ -1,100 +0,0 @@ -package com.minelittlepony.unicopia.world.recipe; - -import java.util.Random; - -import com.google.gson.JsonObject; -import com.minelittlepony.unicopia.world.recipe.ingredient.PredicatedIngredient; - -import net.minecraft.inventory.CraftingInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.recipe.Ingredient; -import net.minecraft.recipe.RecipeSerializer; -import net.minecraft.recipe.SpecialCraftingRecipe; -import net.minecraft.util.collection.DefaultedList; -import net.minecraft.util.Identifier; -import net.minecraft.util.JsonHelper; -import net.minecraft.network.PacketByteBuf; -import net.minecraft.world.World; - -public class ShapedSpecialRecipe extends SpecialCraftingRecipe { - - private static final Random RANDOM = new Random(); - - private final Pattern pattern; - private final PredicatedIngredient output; - private final String group; - - public ShapedSpecialRecipe(Identifier id, String group, Pattern pattern, PredicatedIngredient output) { - super(id); - this.group = group; - this.pattern = pattern; - this.output = output; - } - - @Override - public boolean matches(CraftingInventory inv, World world) { - return pattern.matches(inv); - } - - @Override - public ItemStack craft(CraftingInventory inv) { - return getOutput().copy(); - } - - @Override - public boolean fits(int width, int height) { - return width * height >= pattern.size(); - } - - @Override - public ItemStack getOutput() { - return output.getStack(RANDOM); - } - - @Override - public String getGroup() { - return this.group; - } - - @Override - public RecipeSerializer getSerializer() { - return URecipes.CRAFTING_SHAPED; - } - - @Override - public boolean isIgnoredInRecipeBook() { - return false; - } - - @Override - public DefaultedList getPreviewInputs() { - return PredicatedIngredient.preview(pattern.matrix); - } - - public static class Serializer implements RecipeSerializer { - @Override - public ShapedSpecialRecipe read(Identifier id, JsonObject json) { - return new ShapedSpecialRecipe(id, - JsonHelper.getString(json, "group", ""), - Pattern.read(json), - PredicatedIngredient.one(json.get("result")) - ); - } - - @Override - public ShapedSpecialRecipe read(Identifier id, PacketByteBuf buf) { - return new ShapedSpecialRecipe(id, - buf.readString(32767), - Pattern.read(buf), - PredicatedIngredient.read(buf) - ); - } - - @Override - public void write(PacketByteBuf buf, ShapedSpecialRecipe recipe) { - buf.writeString(recipe.group); - recipe.pattern.write(buf); - recipe.output.write(buf); - } - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/recipe/ShapelessSpecialRecipe.java b/src/main/java/com/minelittlepony/unicopia/world/recipe/ShapelessSpecialRecipe.java deleted file mode 100644 index ca0d79c2..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/recipe/ShapelessSpecialRecipe.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.minelittlepony.unicopia.world.recipe; - -import com.google.gson.JsonObject; -import com.google.gson.JsonParseException; -import com.minelittlepony.unicopia.world.recipe.ingredient.PredicatedIngredient; - -import net.minecraft.inventory.CraftingInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.recipe.Ingredient; -import net.minecraft.recipe.RecipeSerializer; -import net.minecraft.recipe.SpecialCraftingRecipe; -import net.minecraft.util.collection.DefaultedList; -import net.minecraft.util.Identifier; -import net.minecraft.util.JsonHelper; -import net.minecraft.network.PacketByteBuf; -import net.minecraft.world.World; - -public class ShapelessSpecialRecipe extends SpecialCraftingRecipe { - - private final String group; - private final PredicatedIngredient output; - - private final DefaultedList input; - - public ShapelessSpecialRecipe(Identifier id, String group, PredicatedIngredient output, DefaultedList input) { - super(id); - this.group = group; - this.output = output; - this.input = input; - - if (input.isEmpty()) { - throw new JsonParseException("No ingredients for shapeless recipe"); - } - if (input.size() > 9) { - throw new JsonParseException("Too many ingredients for shapeless recipe"); - } - } - - @Override - public boolean matches(CraftingInventory inv, World world) { - return Utils.matchShapeless(input, inv, 1); - } - - @Override - public ItemStack craft(CraftingInventory inv) { - return getOutput().copy(); - } - - @Override - public boolean fits(int width, int height) { - return width * height >= input.size(); - } - - @Override - public ItemStack getOutput() { - return output.getStack(Utils.RANDOM); - } - - @Override - public String getGroup() { - return group; - } - - @Override - public RecipeSerializer getSerializer() { - return URecipes.CRAFTING_SHAPELESS; - } - - @Override - public DefaultedList getPreviewInputs() { - return PredicatedIngredient.preview(input); - } - - @Override - public boolean isIgnoredInRecipeBook() { - return false; - } - - public static class Serializer implements RecipeSerializer { - @Override - public ShapelessSpecialRecipe read(Identifier identifier, JsonObject json) { - return new ShapelessSpecialRecipe(identifier, - JsonHelper.getString(json, "group", ""), - PredicatedIngredient.one(json.get("result")), - PredicatedIngredient.many(JsonHelper.getArray(json, "ingredients")) - ); - } - - @Override - public ShapelessSpecialRecipe read(Identifier identifier, PacketByteBuf buf) { - return new ShapelessSpecialRecipe(identifier, - buf.readString(32767), - PredicatedIngredient.read(buf), - Utils.read(buf, PredicatedIngredient.EMPTY, PredicatedIngredient::read)); - } - - @Override - public void write(PacketByteBuf buf, ShapelessSpecialRecipe recipe) { - buf.writeString(recipe.group); - recipe.output.write(buf); - buf.writeVarInt(recipe.input.size()); - Utils.write(buf, recipe.input, PredicatedIngredient::write); - } - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/recipe/SpellBookRecipe.java b/src/main/java/com/minelittlepony/unicopia/world/recipe/SpellBookRecipe.java deleted file mode 100644 index fe9f1a29..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/recipe/SpellBookRecipe.java +++ /dev/null @@ -1,122 +0,0 @@ -package com.minelittlepony.unicopia.world.recipe; - -import com.google.gson.JsonObject; -import com.minelittlepony.unicopia.world.container.SpellBookContainer; -import com.minelittlepony.unicopia.world.item.UItems; -import com.minelittlepony.unicopia.world.recipe.ingredient.PredicatedIngredient; - -import net.minecraft.inventory.CraftingInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.recipe.Ingredient; -import net.minecraft.recipe.Recipe; -import net.minecraft.recipe.RecipeSerializer; -import net.minecraft.recipe.RecipeType; -import net.minecraft.util.collection.DefaultedList; -import net.minecraft.util.Identifier; -import net.minecraft.util.JsonHelper; -import net.minecraft.network.PacketByteBuf; -import net.minecraft.world.World; - -/** - * Spellbook recipe accepting an item to enchant, a number of ingredients to use, an ingredient to compose the output. - */ -public class SpellBookRecipe implements Recipe { - - private final Identifier id; - private final PredicatedIngredient input; - private final PredicatedIngredient output; - private final DefaultedList ingredients; - - - public SpellBookRecipe(Identifier id, String group, PredicatedIngredient input, PredicatedIngredient output, DefaultedList ingredients) { - this.id = id; - this.input = input; - this.output = output; - this.ingredients = ingredients; - } - - @Override - public boolean matches(CraftingInventory inv, World world) { - - ItemStack enchantedStack = ((SpellBookContainer.SBInventory)inv).getCraftResultMatrix().getStack(0); - - if (enchantedStack.isEmpty() || enchantedStack.getItem() == null) { - return false; - } - - if (!input.matches(enchantedStack, enchantedStack.getCount())) { - return false; - } - - return Utils.matchShapeless(ingredients, inv, enchantedStack.getCount()); - } - - @Override - public Identifier getId() { - return id; - } - - @Override - public ItemStack craft(CraftingInventory inv) { - return getOutput(); - } - - @Override - public boolean fits(int width, int height) { - return width * height < ingredients.size(); - } - - @Override - public DefaultedList getPreviewInputs() { - return PredicatedIngredient.preview(ingredients, DefaultedList.copyOf(null, input.getPreview())); - } - - @Override - public ItemStack getOutput() { - return output.getStack(Utils.RANDOM); - } - - @Override - public ItemStack getRecipeKindIcon() { - return new ItemStack(UItems.GEM); - } - - @Override - public RecipeSerializer getSerializer() { - return URecipes.ENCHANTING_SPELL_SERIALIZER; - } - - @Override - public RecipeType getType() { - return URecipes.SPELL_BOOK; - } - - static class Serializer implements RecipeSerializer { - @Override - public SpellBookRecipe read(Identifier id, JsonObject json) { - return new SpellBookRecipe(id, - JsonHelper.getString(json, "group", ""), - PredicatedIngredient.one(JsonHelper.getObject(json, "input")), - PredicatedIngredient.one(JsonHelper.getObject(json, "result")), - PredicatedIngredient.many(JsonHelper.getArray(json, "ingredients")) - ); - } - - @Override - public SpellBookRecipe read(Identifier id, PacketByteBuf buf) { - return new SpellBookRecipe(id, - buf.readString(32767), - PredicatedIngredient.read(buf), - PredicatedIngredient.read(buf), - Utils.read(buf, PredicatedIngredient.EMPTY, PredicatedIngredient::read) - ); - } - - @Override - public void write(PacketByteBuf buf, SpellBookRecipe recipe) { - recipe.input.write(buf); - recipe.output.write(buf); - Utils.write(buf, recipe.ingredients, PredicatedIngredient::write); - } - } -} \ No newline at end of file diff --git a/src/main/java/com/minelittlepony/unicopia/world/recipe/URecipes.java b/src/main/java/com/minelittlepony/unicopia/world/recipe/URecipes.java deleted file mode 100644 index f2477d79..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/recipe/URecipes.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.minelittlepony.unicopia.world.recipe; - -import net.minecraft.recipe.Recipe; -import net.minecraft.recipe.RecipeSerializer; -import net.minecraft.recipe.RecipeType; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; - -public interface URecipes { - RecipeType SPELL_BOOK = register("spell_book"); - - RecipeSerializer ENCHANTING_SPELL_SERIALIZER = register("enchanting_spell", new SpellBookRecipe.Serializer()); - RecipeSerializer CRAFTING_SHAPELESS = register("crafting_shapeless", new ShapelessSpecialRecipe.Serializer()); - RecipeSerializer CRAFTING_SHAPED = register("crafting_shaped", new ShapedSpecialRecipe.Serializer()); - - static > RecipeType register(final String id) { - return Registry.register(Registry.RECIPE_TYPE, new Identifier("unicopia", id), new RecipeType() { - @Override - public String toString() { - return id; - } - }); - } - - static , T extends Recipe> S register(String id, S serializer) { - return Registry.register(Registry.RECIPE_SERIALIZER, new Identifier("unicopia", id), serializer); - } - - static void bootstrap() {} -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/recipe/Utils.java b/src/main/java/com/minelittlepony/unicopia/world/recipe/Utils.java deleted file mode 100644 index 2fcf6ca1..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/recipe/Utils.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.minelittlepony.unicopia.world.recipe; - -import java.util.List; -import java.util.Random; -import java.util.function.BiConsumer; -import java.util.function.Function; - -import com.google.common.collect.Lists; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParseException; -import com.minelittlepony.unicopia.world.recipe.ingredient.PredicatedIngredient; - -import net.minecraft.inventory.Inventory; -import net.minecraft.item.ItemStack; -import net.minecraft.util.collection.DefaultedList; -import net.minecraft.util.Identifier; -import net.minecraft.util.JsonHelper; -import net.minecraft.network.PacketByteBuf; - -public final class Utils { - private Utils() {} - - public static final Random RANDOM = new Random(); - - public static DefaultedList read(PacketByteBuf buf, T def, Function reader) { - DefaultedList list = DefaultedList.ofSize(buf.readInt(), def); - for (int i = 0; i < list.size(); i++) { - list.set(i, reader.apply(buf)); - } - return list; - } - - public static void write(PacketByteBuf buf, DefaultedList list, BiConsumer writer) { - buf.writeInt(list.size()); - list.forEach(i -> writer.accept(i, buf)); - } - - public static Identifier asIdentifier(JsonElement json) { - return new Identifier(json.getAsString()); - } - - public static Identifier getIdentifier(JsonObject json, String property) { - return new Identifier(JsonHelper.getString(json, property)); - } - - public static T require(T reference, String errorMessage) { - if (reference == null) { - throw new JsonParseException(errorMessage); - } - return reference; - } - - public static boolean matchShapeless(DefaultedList ingredients, C inv, int mult) { - if (mult == 0) { - return false; - } - - List toMatch = Lists.newArrayList(ingredients); - - for (int i = 0; i < inv.size(); i++) { - ItemStack stack = inv.getStack(i); - - if (!stack.isEmpty()) { - if (toMatch.isEmpty() || !removeMatch(toMatch, stack, mult)) { - return false; - } - } - } - - return toMatch.isEmpty(); - } - - private static boolean removeMatch(List toMatch, ItemStack stack, int materialMult) { - return toMatch.stream() - .filter(s -> s.matches(stack, materialMult)) - .findFirst() - .filter(toMatch::remove) - .isPresent(); - } - -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/CompoundCondition.java b/src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/CompoundCondition.java deleted file mode 100644 index ebab7de6..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/CompoundCondition.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.minelittlepony.unicopia.world.recipe.enchanting; - -import java.util.List; -import java.util.function.Predicate; -import java.util.stream.Stream; - -import com.google.common.collect.Lists; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; - -public class CompoundCondition implements IUnlockCondition { - - final Op operation; - - final List> conditions = Lists.newArrayList(); - - CompoundCondition(JsonObject json) { - require(json, "operation"); - require(json, "conditions"); - - operation = Op.valueOf(json.get("operation").getAsString().toUpperCase()); - - json.get("conditions").getAsJsonArray().forEach(this::addElement); - } - - void addElement(JsonElement element) { - JsonObject obj = element.getAsJsonObject(); - - conditions.add(Pages.instance().createCondition(obj)); - } - - @Override - public boolean accepts(IUnlockEvent event) { - return true; - } - - @Override - public boolean matches(PageOwner owner, IUnlockEvent event) { - return operation.test.apply(conditions.stream(), condition -> condition.accepts(event) && condition.matches(owner, event)); - } - - enum Op { - AND(Stream::allMatch), - OR(Stream::anyMatch); - - final Test test; - - Op(Test test) { - this.test = test; - } - - interface Test { - boolean apply(Stream> stream, Predicate> predicate); - } - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/IConditionFactory.java b/src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/IConditionFactory.java deleted file mode 100644 index 36dcb7bb..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/IConditionFactory.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.minelittlepony.unicopia.world.recipe.enchanting; - -import com.google.gson.JsonObject; - -@FunctionalInterface -public interface IConditionFactory { - IUnlockCondition create(JsonObject json); -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/IPageUnlockListener.java b/src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/IPageUnlockListener.java deleted file mode 100644 index 9aa95228..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/IPageUnlockListener.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.minelittlepony.unicopia.world.recipe.enchanting; - -@FunctionalInterface -public interface IPageUnlockListener { - /** - * Called when a page is unlocked. - * - * @param page The page that has been unlocked - * @return True to allow, false to block. - */ - boolean onPageUnlocked(Page page); -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/IUnlockCondition.java b/src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/IUnlockCondition.java deleted file mode 100644 index 3ebfb662..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/IUnlockCondition.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.minelittlepony.unicopia.world.recipe.enchanting; - -import com.google.gson.JsonObject; -import com.google.gson.JsonParseException; - -/** - * A PageEvent for determining when certain pages must be unlocked. - */ -public interface IUnlockCondition { - - /** - * Returns true if event instanceof T - */ - default boolean accepts(IUnlockEvent event) { - return true; - } - - /** - * Checks if this event's conditions are met. - * @param prop PlayerExtension for the player doing the crafting - * @param stack ItemStack crafted - */ - boolean matches(PageOwner owner, T event); - - default void require(JsonObject json, String memberName) { - if (!json.has(memberName)) { - throw new JsonParseException(String.format("%s condition must have a %s", getClass().getSimpleName(), memberName)); - } - } -} \ No newline at end of file diff --git a/src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/IUnlockEvent.java b/src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/IUnlockEvent.java deleted file mode 100644 index 48d2f151..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/IUnlockEvent.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.minelittlepony.unicopia.world.recipe.enchanting; - -public interface IUnlockEvent { - -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/Page.java b/src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/Page.java deleted file mode 100644 index 17b9e943..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/Page.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.minelittlepony.unicopia.world.recipe.enchanting; - -import net.minecraft.util.Identifier; - -/** - * A spellbook page - */ -public interface Page extends Comparable { - /** - * Gets the index. - * This is the position the page appears in the book gui. - */ - int getIndex(); - - /** - * The unique name of this page. - */ - Identifier getName(); - - /** - * Tests unlock conditions for this page. - * Returns true if the owner is permitted to read this page. - */ - boolean canUnlock(PageOwner owner, IUnlockEvent event); - - /** - * Gets the texture. - * This is what's shown when this page is opened in the book gui. - */ - Identifier getTexture(); - - /** - * The default state. - */ - PageState getDefaultState(); - - Page next(); - - Page prev(); -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/PageInstance.java b/src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/PageInstance.java deleted file mode 100644 index 77b10052..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/PageInstance.java +++ /dev/null @@ -1,109 +0,0 @@ -package com.minelittlepony.unicopia.world.recipe.enchanting; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import com.google.gson.JsonObject; -import com.google.gson.annotations.Expose; - -import net.minecraft.util.Identifier; - -class PageInstance implements Page { - - int index; - - @Nullable - Identifier parent; - - @Nonnull - Identifier name; - - @Nonnull - Identifier texture; - - @Nullable - IUnlockCondition condition; - - @Expose - PageState state = PageState.LOCKED; - - PageInstance(Identifier id, JsonObject json) { - this.name = id; - - if (json.has("parent")) { - parent = new Identifier(json.get("parent").getAsString()); - } - - if (json.has("state")) { - state = PageState.of(json.get("state").getAsString()); - } - - if (json.has("condition")) { - condition = Pages.instance().createCondition(json.get("condition").getAsJsonObject()); - } - - String full = json.get("texture").getAsString(); - String[] loc = full.split(":"); - if (loc.length < 2) { - loc = new String[] { "minecraft", full }; - } - - if ("minecraft".equals(loc[0]) && !"minecraft".equals(id.getNamespace())) { - loc[0] = id.getNamespace(); - } - - texture = new Identifier(loc[0], String.format("textures/pages/%s.png", loc[1])); - } - - @Override - public int getIndex() { - return index; - } - - @Override - public Identifier getName() { - return name; - } - - @Override - public Identifier getTexture() { - return texture; - } - - @Override - public PageState getDefaultState() { - return state; - } - - @Override - public boolean canUnlock(PageOwner owner, IUnlockEvent event) { - return condition == null || condition.accepts(event) && condition.matches(owner, event); - } - - @Override - public Page next() { - int i = Math.min(Pages.instance().getTotalPages() - 1, index + 1); - if (i == index) { - return this; - } - return Pages.instance().getByIndex(i); - } - - @Override - public Page prev() { - if (index <= 0) { - return this; - } - return Pages.instance().getByIndex(index - 1); - } - - @Override - public int compareTo(Page o) { - return getIndex() - o.getIndex(); - } - - @Override - public boolean equals(Object o) { - return o instanceof Page && getName().equals(((Page)o).getName()); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/PageOwner.java b/src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/PageOwner.java deleted file mode 100644 index 7f1c2463..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/PageOwner.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.minelittlepony.unicopia.world.recipe.enchanting; - -import java.util.Map; -import java.util.function.Function; - -import javax.annotation.Nonnull; - -import com.minelittlepony.unicopia.network.Transmittable; - -import net.minecraft.util.Identifier; - -/** - * Interface for things that own and can unlock pages. - * - */ -public interface PageOwner extends Transmittable { - - @Nonnull - Map getPageStates(); - - default void setPageState(Page page, PageState state) { - if (state == PageState.LOCKED) { - getPageStates().remove(page.getName()); - } else { - getPageStates().put(page.getName(), state); - } - sendCapabilities(true); - } - - default PageState getPageState(Page page) { - return getPageStates().getOrDefault(page.getName(), page.getDefaultState()); - } - - default boolean hasPageStateRelative(Page page, PageState state, Function iter) { - for (Page prev = null; - (page = iter.apply(page)) != null && page != prev; - prev = page - ) { - if (getPageState(page) == state) { - return true; - } - } - return false; - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/PageState.java b/src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/PageState.java deleted file mode 100644 index 98ca4234..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/PageState.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.minelittlepony.unicopia.world.recipe.enchanting; - -public enum PageState { - LOCKED, - UNREAD, - READ; - - public boolean isLocked() { - return this == LOCKED; - } - - public boolean isUnread() { - return this == UNREAD; - } - - public static PageState of(String s) { - try { - if (s != null) - return valueOf(s.toUpperCase()); - } catch (Throwable e) {} - - return PageState.LOCKED; - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/PageStateCondition.java b/src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/PageStateCondition.java deleted file mode 100644 index 895a060b..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/PageStateCondition.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.minelittlepony.unicopia.world.recipe.enchanting; - -import com.google.gson.JsonObject; - -import net.minecraft.util.Identifier; - -public class PageStateCondition implements IUnlockCondition { - - Identifier page; - - PageState state; - - PageStateCondition(JsonObject json) { - require(json, "page"); - require(json, "state"); - - page = new Identifier(json.get("page").getAsString()); - state = PageState.of(json.get("state").getAsString()); - } - - @Override - public boolean matches(PageOwner owner, IUnlockEvent event) { - Page ipage = Pages.instance().getByName(page); - - if (ipage != null) { - return owner.getPageState(ipage) == state; - } - - return false; - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/Pages.java b/src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/Pages.java deleted file mode 100644 index ef5e6c9d..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/Pages.java +++ /dev/null @@ -1,134 +0,0 @@ -package com.minelittlepony.unicopia.world.recipe.enchanting; - -import java.util.List; -import java.util.Map; -import java.util.function.Predicate; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import javax.annotation.Nullable; - -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import net.fabricmc.fabric.api.resource.IdentifiableResourceReloadListener; -import net.minecraft.resource.JsonDataLoader; -import net.minecraft.resource.ResourceManager; -import net.minecraft.util.Identifier; -import net.minecraft.util.Util; -import net.minecraft.util.profiler.Profiler; - -public class Pages extends JsonDataLoader implements IdentifiableResourceReloadListener { - private static final Identifier ID = new Identifier("unicopia", "pages"); - private static final Gson GSON = new GsonBuilder() - .setPrettyPrinting() - .disableHtmlEscaping() - .create(); - - private static final Pages instance = new Pages(); - - public static Pages instance() { - return instance; - } - - private final Map pages = Maps.newHashMap(); - private List pagesByIndex = Lists.newArrayList(); - - private final Map conditionFactories = Util.make(Maps.newHashMap(), m -> { - m.put("unicopia:compound_condition", CompoundCondition::new); - m.put("unicopia:page_state", PageStateCondition::new); - m.put("unicopia:spell_crafting", SpellCraftingEvent.Condition::new); - }); - - Pages() { - super(GSON, "pages"); - } - - @Override - public Identifier getFabricId() { - return ID; - } - - @Override - protected void apply(Map data, ResourceManager manager, Profiler profiled) { - pages.clear(); - data.forEach((id, json) -> pages.put(id, new PageInstance(id, json.getAsJsonObject()))); - - pagesByIndex = pages.values().stream().sorted(this::comparePages).collect(Collectors.toList()); - - int i = 0; - - for (PageInstance page : pagesByIndex) { - page.index = i++; - } - } - - protected int comparePages(PageInstance a, PageInstance b) { - if (a.parent == null && b.parent == null) { - return 0; - } - - if (a.parent == null) { - return -1; - } - - if (b.parent == null) { - return 1; - } - - if (a.parent.equals(b.name)) { - return 1; - } - - if (b.parent.equals(a.name)) { - return -1; - } - - return a.name.compareTo(b.name); - } - - @SuppressWarnings("unchecked") - IUnlockCondition createCondition(JsonObject json) { - String key = json.get("key").getAsString(); - - return (IUnlockCondition)conditionFactories.get(key).create(json); - } - - @Nullable - public Page getByName(Identifier name) { - return pages.get(name); - } - - @Nullable - public Page getByIndex(int index) { - if (index < 0 || index >= pagesByIndex.size()) { - return null; - } - return pagesByIndex.get(index); - } - - public Stream getUnlockablePages(Predicate predicate) { - return pages.values().stream().map(Page.class::cast).filter(predicate); - } - - public void triggerUnlockEvent(PageOwner owner, IUnlockEvent event, @Nullable IPageUnlockListener unlockListener) { - pages.values().stream() - .filter(page -> page.canUnlock(owner, event)) - .forEach(page -> unlockPage(owner, page, unlockListener)); - } - - public void unlockPage(PageOwner owner, Page page, @Nullable IPageUnlockListener unlockListener) { - if (owner.getPageState(page).isLocked()) { - if (unlockListener == null || unlockListener.onPageUnlocked(page)) { - owner.setPageState(page, PageState.UNREAD); - } - } - } - - public int getTotalPages() { - return pages.size(); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/SpellCraftingEvent.java b/src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/SpellCraftingEvent.java deleted file mode 100644 index 131b9a48..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/recipe/enchanting/SpellCraftingEvent.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.minelittlepony.unicopia.world.recipe.enchanting; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import com.google.gson.JsonObject; -import com.google.gson.annotations.Expose; -import com.minelittlepony.unicopia.magic.Affinity; -import com.minelittlepony.unicopia.magic.spell.SpellRegistry; -import com.minelittlepony.unicopia.world.item.MagicGemItem; - -import net.minecraft.item.ItemStack; - -/** - * A basic event for unlocking a page when a gem is crafted for the given spell - */ -public class SpellCraftingEvent { - - public static void trigger(PageOwner owner, ItemStack stack, @Nullable IPageUnlockListener unlockListener) { - Pages.instance().triggerUnlockEvent(owner, new Event(stack), unlockListener); - } - - static class Event implements IUnlockEvent { - final ItemStack stack; - - Event(ItemStack stack) { - this.stack = stack; - } - } - - static class Condition implements IUnlockCondition { - @Nonnull - Affinity affinity; - - @Expose - String spell; - - Condition(JsonObject json) { - require(json, "affinity"); - require(json, "spell"); - - affinity = Affinity.of(json.get("affinity").getAsString()); - spell = json.get("spell").getAsString(); - } - - @Override - public boolean accepts(IUnlockEvent event) { - return event instanceof Event; - } - - @Override - public boolean matches(PageOwner prop, Event event) { - if (!event.stack.isEmpty() && event.stack.getItem() instanceof MagicGemItem) { - return ((MagicGemItem)event.stack.getItem()).getAffinity() == affinity - && SpellRegistry.getKeyFromStack(event.stack).equals(spell); - } - - return false; - } - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/ChoicePredicate.java b/src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/ChoicePredicate.java deleted file mode 100644 index 5c7701b1..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/ChoicePredicate.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.minelittlepony.unicopia.world.recipe.ingredient; - -import java.util.Random; -import java.util.stream.Stream; - -import com.google.gson.JsonArray; -import com.minelittlepony.unicopia.world.recipe.Utils; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.collection.DefaultedList; -import net.minecraft.network.PacketByteBuf; - -/** - * Requires only one of the sub-ingredients to match when matching. - * Makes a random choice from a pool of alternatives when crafting. - */ -class ChoicePredicate implements Predicate { - static Predicate read(JsonArray arr) { - return new ChoicePredicate(PredicatedIngredient.many(arr)); - } - - private final DefaultedList options; - - ChoicePredicate(DefaultedList options) { - this.options = options; - } - - @Override - public ItemStack applyModifiers(ItemStack output, Random random) { - return options.get((int)(random.nextFloat() * options.size())).getStack(random); - } - - @Override - public boolean matches(ItemStack stack, int materialMult) { - return options.stream().anyMatch(i -> i.matches(stack, materialMult)); - } - - @Override - public Stream getMatchingStacks() { - return options.stream().flatMap(PredicatedIngredient::getMatchingStacks).distinct(); - } - - @Override - public PredicateSerializer getSerializer() { - return PredicateSerializer.CHOICE; - } - - static final class Serializer implements PredicateSerializer { - @Override - public Predicate read(PacketByteBuf buf) { - return new ChoicePredicate(Utils.read(buf, PredicatedIngredient.EMPTY, PredicatedIngredient::read)); - } - - @Override - public void write(PacketByteBuf buf, ChoicePredicate predicate) { - Utils.write(buf, predicate.options, PredicatedIngredient::write); - } - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/DamagePredicate.java b/src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/DamagePredicate.java deleted file mode 100644 index 27975dc2..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/DamagePredicate.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.minelittlepony.unicopia.world.recipe.ingredient; - -import java.util.HashMap; -import java.util.Map; -import java.util.Random; -import java.util.function.BiPredicate; -import java.util.stream.Stream; - -import com.google.gson.JsonObject; -import com.minelittlepony.unicopia.world.recipe.Utils; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.JsonHelper; -import net.minecraft.network.PacketByteBuf; -import net.minecraft.util.Util; - -/** - * Tests for whether a tag contains the input when matching. - * Supplies a random item from the tag as the output when crafting. - */ -class DamagePredicate implements Predicate { - private static final Map> OPERATIONS = Util.make(new HashMap<>(), map -> { - map.put("==", (a, b) -> a == b); - map.put("!=", (a, b) -> a != b); - map.put("<", (a, b) -> a < b); - map.put("<=", (a, b) -> a <= b); - map.put(">", (a, b) -> a > b); - map.put("<=", (a, b) -> a <= b); - }); - - private final String op; - private final int damage; - - private final BiPredicate operation; - - DamagePredicate(int damage, String op) { - this.op = op.trim(); - this.damage = damage; - this.operation = Utils.require(OPERATIONS.get(op), "Invalid damage tag '" + op + "' " + damage); - } - - @Override - public ItemStack applyModifiers(ItemStack output, Random random) { - output.setDamage(damage); - return output; - } - - @Override - public Stream getMatchingStacks() { - return Stream.empty(); - } - - @Override - public boolean matches(ItemStack other, int materialMult) { - return !other.isEmpty() && operation.test(other.getDamage(), damage); - } - - @Override - public PredicateSerializer getSerializer() { - return PredicateSerializer.DAMAGE; - } - - static final class Serializer implements PredicateSerializer, PredicateSerializer.JsonReader { - @Override - public Predicate read(PacketByteBuf buf) { - int count = buf.readInt(); - if (count == 0) { - return Predicate.EMPTY; - } - return new DamagePredicate(buf.readInt(), buf.readString(32767)); - } - - @Override - public void write(PacketByteBuf buf, DamagePredicate predicate) { - buf.writeInt(predicate.damage); - buf.writeString(predicate.op); - } - - @Override - public Predicate read(JsonObject json) { - if (!json.has("damage")) { - return Predicate.EMPTY; - } - - JsonObject o = JsonHelper.getObject(json, "damage"); - return new DamagePredicate( - JsonHelper.getInt(o, "damage"), - JsonHelper.getString(o, "op") - ); - } - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/EnchantmentPredicate.java b/src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/EnchantmentPredicate.java deleted file mode 100644 index 2b785453..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/EnchantmentPredicate.java +++ /dev/null @@ -1,89 +0,0 @@ -package com.minelittlepony.unicopia.world.recipe.ingredient; - -import java.util.Random; -import java.util.stream.Stream; - -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.minelittlepony.unicopia.world.recipe.Utils; - -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.util.Identifier; -import net.minecraft.util.JsonHelper; -import net.minecraft.network.PacketByteBuf; -import net.minecraft.util.registry.Registry; - -/** - * A predicate that tests for a specific enchantment on an input when matching. - * Appends that enchantment to the output when crafting. - */ -class EnchantmentPredicate implements Predicate { - private final int level; - private final Enchantment enchantment; - - EnchantmentPredicate(Identifier id, int level) { - this.enchantment = Utils.require(Registry.ENCHANTMENT.get(id), "Invalid enchantment tag '" + id + "'"); - this.level = level; - } - - @Override - public ItemStack applyModifiers(ItemStack output, Random random) { - if (output.isEmpty()) { - output = new ItemStack(Items.ENCHANTED_BOOK); - } - output.addEnchantment(enchantment, level); - return output; - } - - @Override - public boolean matches(ItemStack stack, int materialMult) { - return EnchantmentHelper.getLevel(enchantment, stack) >= level; - } - - @Override - public Stream getMatchingStacks() { - return Stream.empty(); - } - - @Override - public PredicateSerializer getSerializer() { - return PredicateSerializer.ENCHANTMENT; - } - - static final class Serializer implements PredicateSerializer, PredicateSerializer.JsonReader { - @Override - public Predicate read(PacketByteBuf buf) { - int level = buf.readInt(); - if (level == 0) { - return Predicate.EMPTY; - } - return new EnchantmentPredicate(buf.readIdentifier(), level); - } - - @Override - public void write(PacketByteBuf buf, EnchantmentPredicate predicate) { - buf.writeInt(predicate.level); - buf.writeIdentifier(Registry.ENCHANTMENT.getId(predicate.enchantment)); - } - - @Override - public Predicate read(JsonObject json) { - if (!json.has("enchantment")) { - return Predicate.EMPTY; - } - - JsonElement e = json.get("enchantment"); - - if (e.isJsonObject()) { - JsonObject o = e.getAsJsonObject(); - return new EnchantmentPredicate(Utils.getIdentifier(o, "id"), Math.max(1, JsonHelper.getInt(o, "level", 1))); - } - - return new EnchantmentPredicate(Utils.asIdentifier(e), 1); - } - } - -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/PotionPredicate.java b/src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/PotionPredicate.java deleted file mode 100644 index b689f0a0..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/PotionPredicate.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.minelittlepony.unicopia.world.recipe.ingredient; - -import java.util.Random; -import java.util.stream.Stream; - -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParseException; -import com.minelittlepony.unicopia.world.recipe.Utils; - -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionUtil; -import net.minecraft.potion.Potions; -import net.minecraft.util.Identifier; -import net.minecraft.util.JsonHelper; -import net.minecraft.network.PacketByteBuf; -import net.minecraft.util.registry.Registry; - -/** - * A predicate that tests for a specific enchantment on an input when matching. - * Appends that enchantment to the output when crafting. - */ -class PotionPredicate implements Predicate { - private final Potion potion; - - PotionPredicate(Identifier id, int level) { - this.potion = Registry.POTION.get(id); - if (potion == Potions.EMPTY) { - throw new JsonParseException("Invalid potion tag '" + id + "'"); - } - } - - @Override - public ItemStack applyModifiers(ItemStack output, Random random) { - if (output.isEmpty()) { - output = new ItemStack(Items.POTION); - } - PotionUtil.setPotion(output, potion); - - return output; - } - - @Override - public boolean matches(ItemStack stack, int materialMult) { - return PotionUtil.getPotion(stack) == potion; - } - - @Override - public Stream getMatchingStacks() { - return Stream.empty(); - } - - @Override - public PredicateSerializer getSerializer() { - return PredicateSerializer.ENCHANTMENT; - } - - static final class Serializer implements PredicateSerializer, PredicateSerializer.JsonReader { - @Override - public Predicate read(PacketByteBuf buf) { - return new PotionPredicate(buf.readIdentifier(), 1); - } - - @Override - public void write(PacketByteBuf buf, PotionPredicate predicate) { - buf.writeIdentifier(Registry.POTION.getId(predicate.potion)); - } - - @Override - public Predicate read(JsonObject json) { - if (!json.has("potion")) { - return Predicate.EMPTY; - } - - JsonElement e = json.get("potion"); - - if (e.isJsonObject()) { - JsonObject o = e.getAsJsonObject(); - return new PotionPredicate(Utils.getIdentifier(o, "id"), Math.max(1, JsonHelper.getInt(o, "level", 1))); - } - - return new PotionPredicate(Utils.asIdentifier(e), 1); - } - } - -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/Predicate.java b/src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/Predicate.java deleted file mode 100644 index 90bc2204..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/Predicate.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.minelittlepony.unicopia.world.recipe.ingredient; - -import java.util.Random; -import java.util.stream.Stream; - -import net.minecraft.item.ItemStack; -import net.minecraft.network.PacketByteBuf; - -public interface Predicate { - Predicate EMPTY = new Predicate() { - @Override - public Stream getMatchingStacks() { - return Stream.empty(); - } - @Override - public boolean matches(ItemStack stack, int materialMult) { - return true; - } - - @Override - public PredicateSerializer getSerializer() { - return PredicateSerializer.EMPTY; - } - }; - - Stream getMatchingStacks(); - - boolean matches(ItemStack stack, int materialMult); - - PredicateSerializer getSerializer(); - - default ItemStack applyModifiers(ItemStack output, Random random) { - return output; - } - - default void write(PacketByteBuf buf) { - @SuppressWarnings("unchecked") - PredicateSerializer serializer = (PredicateSerializer)getSerializer(); - buf.writeIdentifier(PredicateSerializer.REGISTRY.getId(serializer)); - serializer.write(buf, this); - } - - static Predicate read(PacketByteBuf buf) { - return PredicateSerializer.REGISTRY.get(buf.readIdentifier()).read(buf); - } -} \ No newline at end of file diff --git a/src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/PredicateSerializer.java b/src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/PredicateSerializer.java deleted file mode 100644 index a96b8e8d..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/PredicateSerializer.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.minelittlepony.unicopia.world.recipe.ingredient; - -import com.google.gson.JsonObject; -import com.minelittlepony.unicopia.util.Registries; - -import net.minecraft.util.Identifier; -import net.minecraft.network.PacketByteBuf; -import net.minecraft.util.registry.Registry; - -public interface PredicateSerializer { - Registry> REGISTRY = Registries.createSimple(new Identifier("unicopia", "recipe_predicate")); - Registry JSON_READERS = Registries.createSimple(new Identifier("unicopia", "recipe_predicate_reader")); - - PredicateSerializer EMPTY = register("empty", new PredicateSerializer() { - @Override - public Predicate read(PacketByteBuf buf) { - return Predicate.EMPTY; - } - - @Override - public void write(PacketByteBuf buf, Predicate predicate) { - } - }); - PredicateSerializer STACK = register("stack", new StackPredicate.Serializer()); - PredicateSerializer TAG = register("tag", new TagPredicate.Serializer()); - PredicateSerializer CHOICE = register("choice", new ChoicePredicate.Serializer()); - PredicateSerializer SPELL = register("spell", new SpellPredicate.Serializer()); - PredicateSerializer ENCHANTMENT = register("enchantment", new EnchantmentPredicate.Serializer()); - PredicateSerializer POTION = register("potion", new PotionPredicate.Serializer()); - PredicateSerializer DAMAGE = register("damage", new DamagePredicate.Serializer()); - PredicateSerializer TOXICITY = register("toxicity", new ToxicityPredicate.Serializer()); - - static PredicateSerializer register(String name, PredicateSerializer entry) { - Identifier id = new Identifier("unicopia", name); - if (entry instanceof JsonReader) { - Registry.register(JSON_READERS, id, (JsonReader)entry); - } - return Registry.register(REGISTRY, id, entry); - } - - Predicate read(PacketByteBuf buf); - - void write(PacketByteBuf buf, T predicate); - - @FunctionalInterface - interface JsonReader { - Predicate read(JsonObject json); - } -} \ No newline at end of file diff --git a/src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/PredicatedIngredient.java b/src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/PredicatedIngredient.java deleted file mode 100644 index 5cf0b46e..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/PredicatedIngredient.java +++ /dev/null @@ -1,121 +0,0 @@ -package com.minelittlepony.unicopia.world.recipe.ingredient; - -import java.util.List; -import java.util.Random; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import javax.annotation.concurrent.Immutable; - -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParseException; -import com.minelittlepony.unicopia.world.recipe.Utils; - -import net.minecraft.item.ItemStack; -import net.minecraft.recipe.Ingredient; -import net.minecraft.util.collection.DefaultedList; -import net.minecraft.util.Lazy; -import net.minecraft.network.PacketByteBuf; - -@Immutable -public class PredicatedIngredient { - public static final PredicatedIngredient EMPTY = new PredicatedIngredient(DefaultedList.of()); - - private final DefaultedList predicates; - - private final Lazy> matchingStacks; - private final Lazy preview; - - PredicatedIngredient(DefaultedList predicates) { - this.predicates = predicates; - this.matchingStacks = new Lazy<>(() -> { - return this.predicates.stream() - .flatMap(Predicate::getMatchingStacks) - .filter(s -> matches(s, 1)) - .collect(Collectors.toList()); - }); - this.preview = new Lazy<>(() -> Ingredient.ofStacks(getMatchingStacks().toArray(ItemStack[]::new))); - } - - public Stream getMatchingStacks() { - return matchingStacks.get().stream(); - } - - public net.minecraft.recipe.Ingredient getPreview() { - return preview.get(); - } - - public ItemStack getStack(Random random) { - ItemStack[] output = new ItemStack[] { ItemStack.EMPTY.copy() }; - - predicates.forEach(p -> output[0] = p.applyModifiers(output[0], random)); - - return output[0]; - } - - public boolean matches(ItemStack other, int materialMult) { - return predicates.stream().allMatch(p -> p.matches(other, materialMult)); - } - - public void write(PacketByteBuf buf) { - Utils.write(buf, predicates, Predicate::write); - } - - public static PredicatedIngredient read(PacketByteBuf buf) { - return new PredicatedIngredient(Utils.read(buf, Predicate.EMPTY, Predicate::read)); - } - - public static PredicatedIngredient one(JsonElement json) { - - if (json.isJsonArray()) { - return new PredicatedIngredient(DefaultedList.copyOf(Predicate.EMPTY, ChoicePredicate.read(json.getAsJsonArray()))); - } - - JsonObject obj = json.getAsJsonObject(); - - Predicate primary = StackPredicate.read(obj); - Predicate secondary = TagPredicate.read(obj); - if (primary != Predicate.EMPTY && secondary != Predicate.EMPTY) { - throw new JsonParseException("Invalid ingredient. Cannot have both an item and a tag requirement."); - } - - DefaultedList predicates = Stream.concat( - Stream.of(primary, secondary), - PredicateSerializer.JSON_READERS.stream().map(reader -> reader.read(obj)) - ) - .filter(i -> i != Predicate.EMPTY) - .collect(Collectors.toCollection(DefaultedList::of)); - - if (predicates.isEmpty()) { - return EMPTY; - } - - return new PredicatedIngredient(predicates); - } - - public static DefaultedList many(JsonArray arr) { - - if (arr.size() == 0) { - throw new JsonParseException("Recipe cannot have 0 ingredients"); - } - - DefaultedList ingredients = DefaultedList.ofSize(arr.size(), EMPTY); - - for (int i = 0; i < arr.size(); i++) { - ingredients.set(i, one(arr.get(i))); - } - - return ingredients; - } - - public static DefaultedList preview(DefaultedList input) { - return preview(input, DefaultedList.of()); - } - - public static DefaultedList preview(DefaultedList input, DefaultedList output) { - input.stream().map(PredicatedIngredient::getPreview).forEach(output::add); - return output; - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/SpellPredicate.java b/src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/SpellPredicate.java deleted file mode 100644 index 7b0aaebc..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/SpellPredicate.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.minelittlepony.unicopia.world.recipe.ingredient; - -import java.util.Random; -import java.util.stream.Stream; - -import com.google.gson.JsonObject; -import com.minelittlepony.unicopia.magic.Spell; -import com.minelittlepony.unicopia.magic.spell.SpellRegistry; -import com.minelittlepony.unicopia.world.item.UItems; -import com.minelittlepony.unicopia.world.recipe.Utils; - -import net.minecraft.item.ItemStack; -import net.minecraft.network.PacketByteBuf; - -/** - * A predicate that tests for a specific spell on an input when matching. - * Appends that spell to the output when crafting. - */ -class SpellPredicate implements Predicate { - private final Spell spell; - - SpellPredicate(String spell) { - this.spell = Utils.require(SpellRegistry.instance().getSpellFromName(spell), "Unknown spell tag '" + spell + "'"); - } - - @Override - public ItemStack applyModifiers(ItemStack output, Random random) { - if (output.isEmpty()) { - output = new ItemStack(UItems.GEM); - } - return SpellRegistry.instance().enchantStack(output, spell.getName()); - } - - @Override - public boolean matches(ItemStack stack, int materialMult) { - return SpellRegistry.getKeyFromStack(stack).equals(spell.getName()); - } - - @Override - public Stream getMatchingStacks() { - return Stream.empty(); - } - - @Override - public PredicateSerializer getSerializer() { - return PredicateSerializer.SPELL; - } - - static final class Serializer implements PredicateSerializer, PredicateSerializer.JsonReader { - @Override - public Predicate read(PacketByteBuf buf) { - int level = buf.readInt(); - if (level == 0) { - return SpellPredicate.EMPTY; - } - return new SpellPredicate(buf.readString()); - } - - @Override - public void write(PacketByteBuf buf, SpellPredicate predicate) { - buf.writeString(predicate.spell.getName()); - } - - @Override - public Predicate read(JsonObject json) { - if (!json.has("spell")) { - return SpellPredicate.EMPTY; - } - return new SpellPredicate(json.get("spell").getAsString()); - } - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/StackPredicate.java b/src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/StackPredicate.java deleted file mode 100644 index 093f3d18..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/StackPredicate.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.minelittlepony.unicopia.world.recipe.ingredient; - -import java.util.Random; -import java.util.stream.Stream; - -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonSyntaxException; -import com.minelittlepony.unicopia.world.recipe.Utils; - -import net.minecraft.item.Item; -import net.minecraft.item.ItemGroup; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.util.collection.DefaultedList; -import net.minecraft.util.JsonHelper; -import net.minecraft.network.PacketByteBuf; -import net.minecraft.util.registry.Registry; - -/** - * Tests for a specific item, stack size, and damage value when matching. - * Presents that item as the output when crafting. - */ -class StackPredicate implements Predicate { - static Predicate read(JsonObject json) { - if (!json.has("item")) { - return EMPTY; - } - - JsonElement e = json.get("item"); - - if (e.isJsonArray()) { - return ChoicePredicate.read(e.getAsJsonArray()); - } - - int count = Math.max(1, JsonHelper.getInt(json, "count", 1)); - - if (e.isJsonObject()) { - JsonObject o = e.getAsJsonObject(); - - Item item = o.has("item") ? Registry.ITEM.get(Utils.getIdentifier(o, "item")) : Items.AIR; - return new StackPredicate(new ItemStack(item, count)); - } - - return new StackPredicate(new ItemStack(Registry.ITEM.get(Utils.asIdentifier(e)), count)); - } - - private final ItemStack stack; - - StackPredicate(ItemStack stack) { - this.stack = stack; - if (stack.isEmpty()) { - throw new JsonSyntaxException("Unknown item tag"); - } - } - - @Override - public ItemStack applyModifiers(ItemStack output, Random random) { - return output.isEmpty() ? stack.copy() : output; - } - - @Override - public Stream getMatchingStacks() { - if (!stack.isEmpty()) { - DefaultedList subItems = DefaultedList.of(); - stack.getItem().appendStacks(ItemGroup.SEARCH, subItems); - - return subItems.stream(); - } - - return Stream.of(stack); - } - - @Override - public boolean matches(ItemStack other, int materialMult) { - if (other.isEmpty() != stack.isEmpty()) { - return false; - } - - if (other.isEmpty()) { - return true; - } - - return ItemStack.areItemsEqual(stack, other) - && other.getCount() >= (materialMult * stack.getCount()); - } - - @Override - public PredicateSerializer getSerializer() { - return PredicateSerializer.STACK; - } - - static final class Serializer implements PredicateSerializer { - @Override - public Predicate read(PacketByteBuf buf) { - return new StackPredicate(buf.readItemStack()); - } - - @Override - public void write(PacketByteBuf buf, StackPredicate predicate) { - buf.writeItemStack(predicate.stack); - } - - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/TagPredicate.java b/src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/TagPredicate.java deleted file mode 100644 index 0a47353d..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/TagPredicate.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.minelittlepony.unicopia.world.recipe.ingredient; - -import java.util.Random; -import java.util.stream.Stream; - -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.minelittlepony.unicopia.world.recipe.Utils; - -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.tag.ItemTags; -import net.minecraft.tag.Tag; -import net.minecraft.util.Identifier; -import net.minecraft.util.JsonHelper; -import net.minecraft.network.PacketByteBuf; - -/** - * Tests for whether a tag contains the input when matching. - * Supplies a random item from the tag as the output when crafting. - */ -class TagPredicate implements Predicate { - static Predicate read(JsonObject json) { - if (!json.has("tag")) { - return Predicate.EMPTY; - } - - JsonElement e = json.get("tag"); - if (e.isJsonObject()) { - JsonObject o = e.getAsJsonObject(); - return new TagPredicate(Utils.getIdentifier(o, "id"), Math.max(1, JsonHelper.getInt(o, "count", 1))); - } - - return new TagPredicate(Utils.asIdentifier(e), 1); - } - - private final Identifier tagId; - private final Tag tag; - private final int count; - - TagPredicate(Identifier res, int count) { - tagId = res; - tag = Utils.require(ItemTags.getContainer().get(res), "Unknown item tag '" + res + "'"); - this.count = count; - } - - @Override - public ItemStack applyModifiers(ItemStack output, Random random) { - return output.isEmpty() ? new ItemStack(tag.getRandom(random)) : output; - } - - @Override - public Stream getMatchingStacks() { - return tag.values().stream().map(ItemStack::new); - } - - @Override - public boolean matches(ItemStack other, int materialMult) { - return !other.isEmpty() - && tag.contains(other.getItem()) - && other.getCount() > (count * materialMult); - } - - @Override - public void write(PacketByteBuf buf) { - buf.writeInt(count); - buf.writeIdentifier(tagId); - } - - @Override - public PredicateSerializer getSerializer() { - return PredicateSerializer.TAG; - } - - static final class Serializer implements PredicateSerializer { - @Override - public Predicate read(PacketByteBuf buf) { - int count = buf.readInt(); - if (count == 0) { - return Predicate.EMPTY; - } - return new TagPredicate(buf.readIdentifier(), count); - } - - @Override - public void write(PacketByteBuf buf, TagPredicate predicate) { - buf.writeInt(predicate.count); - buf.writeIdentifier(predicate.tagId); - } - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/ToxicityPredicate.java b/src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/ToxicityPredicate.java deleted file mode 100644 index cbe0e485..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/recipe/ingredient/ToxicityPredicate.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.minelittlepony.unicopia.world.recipe.ingredient; - -import java.util.Random; -import java.util.stream.Stream; - -import com.google.gson.JsonObject; -import com.minelittlepony.unicopia.toxin.Toxicity; -import com.minelittlepony.unicopia.world.recipe.Utils; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.JsonHelper; -import net.minecraft.network.PacketByteBuf; - -/** - * A predicate that tests for a specific spell on an input when matching. - * Appends that spell to the output when crafting. - */ -class ToxicityPredicate implements Predicate { - private final Toxicity toxicity; - - ToxicityPredicate(String name) { - this.toxicity = Utils.require(Toxicity.byName(name), "Unknown toxicity tag '" + name + "'"); - } - - @Override - public ItemStack applyModifiers(ItemStack output, Random random) { - return toxicity.ontoStack(output); - } - - @Override - public boolean matches(ItemStack stack, int materialMult) { - return Toxicity.fromStack(stack) == toxicity; - } - - @Override - public Stream getMatchingStacks() { - return Stream.empty(); - } - - @Override - public PredicateSerializer getSerializer() { - return PredicateSerializer.TOXICITY; - } - - public static final class Serializer implements PredicateSerializer, PredicateSerializer.JsonReader { - - @Override - public Predicate read(PacketByteBuf buf) { - return new ToxicityPredicate(Toxicity.values()[buf.readInt()].name()); - } - - @Override - public void write(PacketByteBuf buf, ToxicityPredicate predicate) { - buf.writeInt(predicate.toxicity.ordinal()); - } - - @Override - public Predicate read(JsonObject json) { - if (!json.has("toxicity")) { - return Predicate.EMPTY; - } - - return new ToxicityPredicate(JsonHelper.getString(json, "toxicity")); - } - - } - -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/structure/CloudDungeonFeature.java b/src/main/java/com/minelittlepony/unicopia/world/structure/CloudDungeonFeature.java deleted file mode 100644 index c1ffc057..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/structure/CloudDungeonFeature.java +++ /dev/null @@ -1,106 +0,0 @@ -package com.minelittlepony.unicopia.world.structure; - -import java.util.Random; -import com.mojang.serialization.Codec; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.structure.SimpleStructurePiece; -import net.minecraft.structure.StructureManager; -import net.minecraft.structure.StructurePieceType; -import net.minecraft.structure.StructurePlacementData; -import net.minecraft.structure.StructureStart; -import net.minecraft.structure.processor.BlockIgnoreStructureProcessor; -import net.minecraft.util.BlockMirror; -import net.minecraft.util.BlockRotation; -import net.minecraft.util.Identifier; -import net.minecraft.util.math.BlockBox; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.WorldAccess; -import net.minecraft.world.biome.Biome; -import net.minecraft.world.gen.chunk.ChunkGenerator; -import net.minecraft.world.gen.feature.DefaultFeatureConfig; -import net.minecraft.world.gen.feature.StructureFeature; - -class CloudDungeonFeature extends StructureFeature { - private static final BlockPos POS = new BlockPos(4, 0, 15); - private static final Identifier[] VARIANTS = new Identifier[] { - new Identifier("unicopia", "cloud/center"), - new Identifier("unicopia", "cloud/island"), - new Identifier("unicopia", "cloud/large_ruin"), - new Identifier("unicopia", "cloud/ruin_segment"), - new Identifier("unicopia", "cloud/small"), - new Identifier("unicopia", "cloud/huge_ruin/one"), - new Identifier("unicopia", "cloud/huge_ruin/two"), - new Identifier("unicopia", "cloud/huge_ruin/three"), - new Identifier("unicopia", "cloud/huge_ruin/four") - }; - - public CloudDungeonFeature(Codec codec) { - super(codec); - } - - @Override - public StructureStartFactory getStructureStartFactory() { - return Start::new; - } - - public static class Start extends StructureStart { - public Start(StructureFeature feature, int x, int z, BlockBox bound, int var6, long var7) { - super(feature, x, z, bound, var6, var7); - } - - @Override - public void init(ChunkGenerator generator, StructureManager manager, int x, int z, Biome biome, DefaultFeatureConfig featureConfig) { - - BlockRotation rotation = BlockRotation.values()[random.nextInt(BlockRotation.values().length)]; - BlockPos pos = new BlockPos(x * 16, 150, z * 16); - - Identifier template = VARIANTS[random.nextInt(VARIANTS.length) % VARIANTS.length]; - children.add(new Piece(manager, template, pos, rotation)); - setBoundingBoxFromChildren(); - } - } - - public static class Piece extends SimpleStructurePiece { - - public static final StructurePieceType TYPE = Piece::new; - - private final BlockRotation rotation; - private final Identifier template; - - public Piece(StructureManager manager, Identifier template, BlockPos pos, BlockRotation rotation) { - super(TYPE, 0); - this.pos = pos; - this.rotation = rotation; - this.template = template; - init(manager); - - } - - public Piece(StructureManager manager, CompoundTag tag) { - super(TYPE, tag); - this.template = new Identifier(tag.getString("Template")); - this.rotation = BlockRotation.valueOf(tag.getString("Rot")); - init(manager); - } - - @Override - protected void toNbt(CompoundTag tag) { - super.toNbt(tag); - tag.putString("Template", template.toString()); - tag.putString("Rot", rotation.name()); - } - - private void init(StructureManager manager) { - setStructureData(manager.getStructureOrBlank(template), pos, new StructurePlacementData() - .setRotation(rotation) - .setMirror(BlockMirror.NONE) - .setPosition(POS) - .addProcessor(BlockIgnoreStructureProcessor.IGNORE_AIR_AND_STRUCTURE_BLOCKS)); - } - - @Override - protected void handleMetadata(String key, BlockPos pos, WorldAccess world, Random rand, BlockBox box) { - - } - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/structure/CustomSaplingGenerator.java b/src/main/java/com/minelittlepony/unicopia/world/structure/CustomSaplingGenerator.java deleted file mode 100644 index f3282a75..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/structure/CustomSaplingGenerator.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.minelittlepony.unicopia.world.structure; - -import java.util.Random; -import javax.annotation.Nullable; - -import com.google.common.collect.ImmutableList; -import com.minelittlepony.unicopia.world.block.UBlocks; - -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.block.sapling.SaplingGenerator; -import net.minecraft.world.gen.decorator.BeehiveTreeDecorator; -import net.minecraft.world.gen.feature.ConfiguredFeature; -import net.minecraft.world.gen.feature.Feature; -import net.minecraft.world.gen.feature.TreeFeatureConfig; -import net.minecraft.world.gen.feature.size.TwoLayersFeatureSize; -import net.minecraft.world.gen.foliage.BlobFoliagePlacer; -import net.minecraft.world.gen.stateprovider.SimpleBlockStateProvider; -import net.minecraft.world.gen.trunk.StraightTrunkPlacer; - -public class CustomSaplingGenerator extends SaplingGenerator { - public static final CustomSaplingGenerator APPLE_TREE = new CustomSaplingGenerator(5, Blocks.OAK_LOG.getDefaultState(), UBlocks.APPLE_LEAVES.getDefaultState()); - - public final TreeFeatureConfig fancyConfig; - public final TreeFeatureConfig fancyHiveConfig; - public final TreeFeatureConfig hiveConfig; - public final TreeFeatureConfig config; - - public CustomSaplingGenerator(int height, BlockState log, BlockState leaves) { - fancyConfig = new TreeFeatureConfig.Builder( - new SimpleBlockStateProvider(log), - new SimpleBlockStateProvider(leaves), - new BlobFoliagePlacer(2, 0, 0, 0, 3), - new StraightTrunkPlacer(height, 2, 0), - new TwoLayersFeatureSize(1, 0, 1)) - .build(); - fancyHiveConfig = new TreeFeatureConfig.Builder( - new SimpleBlockStateProvider(log), - new SimpleBlockStateProvider(leaves), - new BlobFoliagePlacer(2, 0, 0, 0, 3), - new StraightTrunkPlacer(height, 2, 0), - new TwoLayersFeatureSize(1, 0, 1)) - .decorators(ImmutableList.of(new BeehiveTreeDecorator(0.05F))) - .build(); - - hiveConfig = new TreeFeatureConfig.Builder( - new SimpleBlockStateProvider(log), - new SimpleBlockStateProvider(leaves), - new BlobFoliagePlacer(2, 0, 0, 0, 3), - new StraightTrunkPlacer(height, height / 2, (height * 2) / 3), - new TwoLayersFeatureSize(1, 0, 1)) - .ignoreVines() - .decorators(ImmutableList.of(new BeehiveTreeDecorator(0.05F))) - .build(); - - config = new TreeFeatureConfig.Builder( - new SimpleBlockStateProvider(log), - new SimpleBlockStateProvider(leaves), - new BlobFoliagePlacer(2, 0, 0, 0, 3), - new StraightTrunkPlacer(height, height / 2, (height * 2) / 3), - new TwoLayersFeatureSize(1, 0, 1)) - .ignoreVines() - .build(); - } - - @Override - @Nullable - protected ConfiguredFeature createTreeFeature(Random random, boolean hives) { - return Feature.TREE.configure(random.nextInt(10) == 0 - ? (hives ? fancyHiveConfig : fancyConfig) - : (hives ? hiveConfig : config) - ); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/structure/RuinFeature.java b/src/main/java/com/minelittlepony/unicopia/world/structure/RuinFeature.java deleted file mode 100644 index 19319996..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/structure/RuinFeature.java +++ /dev/null @@ -1,103 +0,0 @@ -package com.minelittlepony.unicopia.world.structure; - -import java.util.Random; - -import com.mojang.serialization.Codec; - -import net.minecraft.nbt.CompoundTag; -import net.minecraft.structure.SimpleStructurePiece; -import net.minecraft.structure.StructureManager; -import net.minecraft.structure.StructurePieceType; -import net.minecraft.structure.StructurePlacementData; -import net.minecraft.structure.StructureStart; -import net.minecraft.structure.processor.BlockIgnoreStructureProcessor; -import net.minecraft.util.BlockMirror; -import net.minecraft.util.BlockRotation; -import net.minecraft.util.Identifier; -import net.minecraft.util.math.BlockBox; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.WorldAccess; -import net.minecraft.world.biome.Biome; -import net.minecraft.world.gen.chunk.ChunkGenerator; -import net.minecraft.world.gen.feature.DefaultFeatureConfig; -import net.minecraft.world.gen.feature.StructureFeature; - -class RuinFeature extends StructureFeature { - private static final BlockPos POS = new BlockPos(4, 0, 15); - private static final Identifier[] VARIANTS = new Identifier[] { - new Identifier("unicopia", "ground/tower"), - new Identifier("unicopia", "ground/temple_with_book"), - new Identifier("unicopia", "ground/temple_without_book"), - new Identifier("unicopia", "ground/wizard_tower_red"), - new Identifier("unicopia", "ground/wizard_tower_blue") - }; - - public RuinFeature(Codec func) { - super(func); - } - - @Override - public StructureStartFactory getStructureStartFactory() { - return Start::new; - } - - public static class Start extends StructureStart { - public Start(StructureFeature feature, int x, int z, BlockBox bound, int var6, long var7) { - super(feature, x, z, bound, var6, var7); - } - - @Override - public void init(ChunkGenerator generator, StructureManager manager, int x, int z, Biome biome, DefaultFeatureConfig featureConfig) { - - BlockRotation rotation = BlockRotation.values()[random.nextInt(BlockRotation.values().length)]; - BlockPos pos = new BlockPos(x * 16, 150, z * 16); - - Identifier template = VARIANTS[random.nextInt(VARIANTS.length) % VARIANTS.length]; - children.add(new Piece(manager, template, pos, rotation)); - setBoundingBoxFromChildren(); - } - } - - public static class Piece extends SimpleStructurePiece { - - public static final StructurePieceType TYPE = Piece::new; - - private final BlockRotation rotation; - private final Identifier template; - - public Piece(StructureManager manager, Identifier template, BlockPos pos, BlockRotation rotation) { - super(TYPE, 0); - this.pos = pos; - this.rotation = rotation; - this.template = template; - init(manager); - - } - - public Piece(StructureManager manager, CompoundTag tag) { - super(TYPE, tag); - this.template = new Identifier(tag.getString("Template")); - this.rotation = BlockRotation.valueOf(tag.getString("Rot")); - init(manager); - } - - @Override - protected void toNbt(CompoundTag compoundTag_1) { - super.toNbt(compoundTag_1); - compoundTag_1.putString("Template", template.toString()); - compoundTag_1.putString("Rot", rotation.name()); - } - - private void init(StructureManager manager) { - setStructureData(manager.getStructureOrBlank(template), pos, new StructurePlacementData() - .setRotation(rotation) - .setMirror(BlockMirror.NONE) - .setPosition(POS) - .addProcessor(BlockIgnoreStructureProcessor.IGNORE_AIR_AND_STRUCTURE_BLOCKS)); - } - - @Override - protected void handleMetadata(String var1, BlockPos var2, WorldAccess var3, Random var4, BlockBox var5) { - } - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/structure/StructureFeatureBuilder.java b/src/main/java/com/minelittlepony/unicopia/world/structure/StructureFeatureBuilder.java deleted file mode 100644 index 9292e7a4..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/structure/StructureFeatureBuilder.java +++ /dev/null @@ -1,108 +0,0 @@ -package com.minelittlepony.unicopia.world.structure; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.function.Function; - -import com.google.common.collect.ImmutableMap; -import com.minelittlepony.unicopia.mixin.MixinStructureFeature; -import com.minelittlepony.unicopia.mixin.MixinStructuresConfig; -import com.mojang.serialization.Codec; - -import net.minecraft.structure.StructurePieceType; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; -import net.minecraft.world.biome.Biome; -import net.minecraft.world.gen.GenerationStep; -import net.minecraft.world.gen.chunk.StructureConfig; -import net.minecraft.world.gen.chunk.StructuresConfig; -import net.minecraft.world.gen.feature.ConfiguredStructureFeature; -import net.minecraft.world.gen.feature.FeatureConfig; -import net.minecraft.world.gen.feature.StructureFeature; - -public class StructureFeatureBuilder, C extends FeatureConfig> { - private final Identifier id; - - private final Codec codec; - - private final Function, T> factory; - - private GenerationStep.Feature step; - - private StructureConfig config = new StructureConfig(0, 0, 1); - - private List biomes = new ArrayList<>(); - - private final Map pieces = new HashMap<>(); - - public StructureFeatureBuilder(Identifier id, Codec codec, Function, T> factory) { - this.id = id; - this.codec = codec; - this.factory = factory; - } - - public StructureFeatureBuilder biomes(C config, Biome...biomes) { - this.biomes.add(new ConfiguredBiomes(config, biomes)); - return this; - } - - public StructureFeatureBuilder config(int spacing, int separation, int seed) { - if (spacing >= separation) { - throw new IllegalArgumentException("Spacing must be less than separation"); - } - config = new StructureConfig(spacing, separation, seed); - return this; - } - - public StructureFeatureBuilder step(GenerationStep.Feature step) { - this.step = step; - return this; - } - - public StructureFeatureBuilder piece(String name, StructurePieceType piece) { - if (!pieces.containsValue(piece)) { - pieces.put(name, piece); - } - return this; - } - - public T build() { - T feature = factory.apply(codec); - - Map, StructureConfig> configs = new HashMap<>(StructuresConfig.DEFAULT_STRUCTURES); - configs.put(feature, config); - - MixinStructuresConfig.setDefaultConfigs(ImmutableMap.copyOf(configs)); - - MixinStructureFeature.register(id.toString(), feature, step); - - pieces.forEach((name, piece) -> { - Registry.register(Registry.STRUCTURE_PIECE, new Identifier(id.getNamespace(), id.getPath() + "/" + name), piece); - }); - - if (!biomes.isEmpty()) { - biomes.forEach(set -> set.configure(feature)); - } - - return feature; - } - - class ConfiguredBiomes { - private final C config; - private final Biome[] biomes; - - ConfiguredBiomes(C config, Biome[] biomes) { - this.config = config; - this.biomes = biomes; - } - - void configure(T feature) { - ConfiguredStructureFeature> configuredFeature = feature.configure(config); - for (Biome biome : biomes) { - biome.addStructureFeature(configuredFeature); - } - } - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/structure/StructureRegistry.java b/src/main/java/com/minelittlepony/unicopia/world/structure/StructureRegistry.java deleted file mode 100644 index 4255429a..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/structure/StructureRegistry.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.minelittlepony.unicopia.world.structure; - -import java.util.function.Function; - -import com.mojang.serialization.Codec; - -import net.minecraft.util.Identifier; -import net.minecraft.world.gen.feature.FeatureConfig; -import net.minecraft.world.gen.feature.StructureFeature; - -public class StructureRegistry { - public static , C extends FeatureConfig> StructureFeatureBuilder start(Identifier id, Codec codec, Function, T> factory) { - return new StructureFeatureBuilder<>(id, codec, factory); - } - -} diff --git a/src/main/java/com/minelittlepony/unicopia/world/structure/UStructures.java b/src/main/java/com/minelittlepony/unicopia/world/structure/UStructures.java deleted file mode 100644 index 75de7156..00000000 --- a/src/main/java/com/minelittlepony/unicopia/world/structure/UStructures.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.minelittlepony.unicopia.world.structure; - -import com.google.common.collect.ImmutableList; - -import net.minecraft.structure.StructurePieceType; -import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; -import net.minecraft.world.biome.Biome; -import net.minecraft.world.biome.Biomes; -import net.minecraft.world.gen.GenerationStep; -import net.minecraft.world.gen.decorator.CountExtraChanceDecoratorConfig; -import net.minecraft.world.gen.decorator.Decorator; -import net.minecraft.world.gen.feature.DefaultFeatureConfig; -import net.minecraft.world.gen.feature.Feature; -import net.minecraft.world.gen.feature.RandomFeatureConfig; -import net.minecraft.world.gen.feature.StructureFeature; - -public interface UStructures { - StructureFeature CLOUD_HOUSE = StructureRegistry.start( - new Identifier("unicopia", "cloud_house"), DefaultFeatureConfig.CODEC, CloudDungeonFeature::new) - .config(0, 12, 143592) - .biomes(DefaultFeatureConfig.INSTANCE, Biomes.OCEAN, Biomes.WOODED_BADLANDS_PLATEAU, Biomes.DESERT, Biomes.DESERT_HILLS, Biomes.JUNGLE, Biomes.JUNGLE_HILLS, Biomes.SWAMP, Biomes.SWAMP_HILLS, Biomes.ICE_SPIKES, Biomes.TAIGA) - .piece("cloud_house", CloudDungeonFeature.Piece.TYPE) - .build(); - - StructureFeature RUIN = StructureRegistry.start( - new Identifier("unicopia", "ruin"), DefaultFeatureConfig.CODEC, RuinFeature::new) - .config(0, 12, 39548) - .biomes(DefaultFeatureConfig.INSTANCE, Biomes.TAIGA, Biomes.TAIGA_HILLS, Biomes.GIANT_TREE_TAIGA, Biomes.GIANT_TREE_TAIGA_HILLS, Biomes.SNOWY_TAIGA, Biomes.SNOWY_TAIGA_HILLS, Biomes.GIANT_SPRUCE_TAIGA, Biomes.GIANT_TREE_TAIGA_HILLS, Biomes.SNOWY_TAIGA_MOUNTAINS, Biomes.DARK_FOREST, Biomes.DARK_FOREST_HILLS) - .piece("ruin", RuinFeature.Piece.TYPE) - .build(); - - static StructurePieceType part(String id, StructurePieceType type) { - return Registry.register(Registry.STRUCTURE_PIECE, new Identifier("unicopia", id), type); - } - - static void bootstrap() { - Registry.BIOME.forEach(biome -> { - Biome.Category category = biome.getCategory(); - - if (category == Biome.Category.FOREST) { - biome.addFeature(GenerationStep.Feature.VEGETAL_DECORATION, - Feature.RANDOM_SELECTOR.configure(new RandomFeatureConfig(ImmutableList.of( - Feature.TREE.configure(CustomSaplingGenerator.APPLE_TREE.hiveConfig).withChance(0.02F), - Feature.TREE.configure(CustomSaplingGenerator.APPLE_TREE.fancyConfig).withChance(0.01F)), - Feature.TREE.configure(CustomSaplingGenerator.APPLE_TREE.config) - )) - .createDecoratedFeature(Decorator.COUNT_EXTRA_HEIGHTMAP.configure(new CountExtraChanceDecoratorConfig(0, 0.1F, 3)))); - } - }); - } -} diff --git a/src/main/resources/assets/unicopia/advancements/bag_of_holding.json b/src/main/resources/assets/unicopia/advancements/bag_of_holding.json deleted file mode 100644 index 436099e0..00000000 --- a/src/main/resources/assets/unicopia/advancements/bag_of_holding.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "parent": "unicopia:just_the_beginning", - "display": { - "icon": { - "item": "unicopia:bag_of_holding" - }, - "title": { - "translate": "advancements.adventure.bag_of_holding.title" - }, - "description": { - "translate": "advancements.adventure.bag_of_holding.description" - }, - "frame": "challenge" - }, - "criteria": { - "death_by_bag_of_holding": { - "trigger": "unicopia:death_by_bag_of_holding", - "conditions": { - "advancement": "minecraft:adventure/root" - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/advancements/bag_of_holding_2.json b/src/main/resources/assets/unicopia/advancements/bag_of_holding_2.json deleted file mode 100644 index e0086833..00000000 --- a/src/main/resources/assets/unicopia/advancements/bag_of_holding_2.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "display": { - "icon": { - "item": "unicopia:bag_of_holding" - }, - "title": { - "translate": "advancements.adventure.bag_of_holding_2.title" - }, - "description": { - "translate": "advancements.adventure.bag_of_holding_2.description" - }, - "frame": "challenge" - }, - "parent": "unicopia:bag_of_holding", - "criteria": { - "death_by_bag_of_holding": { - "trigger": "unicopia:death_by_bag_of_holding", - "conditions": { - "advancement": "unicopia:bag_of_holding" - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/advancements/bag_of_holding_3.json b/src/main/resources/assets/unicopia/advancements/bag_of_holding_3.json deleted file mode 100644 index b5da8685..00000000 --- a/src/main/resources/assets/unicopia/advancements/bag_of_holding_3.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "display": { - "icon": { - "item": "unicopia:bag_of_holding" - }, - "title": { - "translate": "advancements.adventure.bag_of_holding_3.title" - }, - "description": { - "translate": "advancements.adventure.bag_of_holding_3.description" - }, - "frame": "challenge" - }, - "parent": "unicopia:bag_of_holding_2", - "criteria": { - "death_by_bag_of_holding": { - "trigger": "unicopia:death_by_bag_of_holding", - "conditions": { - "advancement": "unicopia:bag_of_holding_2" - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/advancements/first_staff.json b/src/main/resources/assets/unicopia/advancements/first_staff.json deleted file mode 100644 index e486897b..00000000 --- a/src/main/resources/assets/unicopia/advancements/first_staff.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "parent": "unicopia:just_the_beginning", - "rewards": { - "recipes": [ - "unicopia:spellbook" - ] - }, - "display": { - "icon": { - "item": "unicopia:staff_meadow_brook" - }, - "title": { - "translate": "advancements.adventure.first_staff.title" - }, - "description": { - "translate": "advancements.adventure.first_staff.description" - } - }, - "criteria": { - "meadow_brook": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { "item": "unicopia:staff_meadow_brook" } - ] - } - } - }, - "requirements": [ [ "meadow_brook" ] ] -} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/advancements/just_a_stick.json b/src/main/resources/assets/unicopia/advancements/just_a_stick.json deleted file mode 100644 index 58d6bfdb..00000000 --- a/src/main/resources/assets/unicopia/advancements/just_a_stick.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "parent": "unicopia:first_staff", - "rewards": { - "experience": 10 - }, - "display": { - "icon": { - "item": "unicopia:staff_meadow_brook" - }, - "title": { - "translate": "advancements.adventure.just_a_stick.title" - }, - "description": { - "translate": "advancements.adventure.just_a_stick.description" - } - }, - "criteria": { - "break_brook": { - "trigger": "minecraft:item_durability_changed", - "conditions": { - "item": { - "item": "minecraft:diamond_hoe" - }, - "durability": -1 - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/advancements/just_the_beginning.json b/src/main/resources/assets/unicopia/advancements/just_the_beginning.json deleted file mode 100644 index 45c3ddc9..00000000 --- a/src/main/resources/assets/unicopia/advancements/just_the_beginning.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "parent": "minecraft:adventure/root", - "rewards": { - "recipes": [ - "unicopia:spellbook" - ] - }, - "display": { - "icon": { - "item": "unicopia:spellbook" - }, - "title": { - "translate": "advancements.adventure.unicopia_beginning.title" - }, - "description": { - "translate": "advancements.adventure.unicopia_beginning.description" - } - }, - "criteria": { - "gem": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { "item": "unicopia:gem" } - ] - } - }, - "curse": { - "trigger": "minecraft:inventory_changed", - "conditions": { - "items": [ - { "item": "unicopia:corrupted_gem" } - ] - } - } - }, - "requirements": [ [ "gem", "curse" ] ] -} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/blockstates/alfalfa_crops.json b/src/main/resources/assets/unicopia/blockstates/alfalfa_crops.json deleted file mode 100644 index 96a99cdb..00000000 --- a/src/main/resources/assets/unicopia/blockstates/alfalfa_crops.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "variants": { - "age=0,half=top": { "model": "unicopia:block/alfalfa_crops/stage0" }, - "age=1,half=top": { "model": "unicopia:block/alfalfa_crops/stage1" }, - "age=2,half=top": { "model": "unicopia:block/alfalfa_crops/stage2" }, - "age=3,half=top": { "model": "unicopia:block/alfalfa_crops/stage3" }, - "age=4,half=top": { "model": "unicopia:block/alfalfa_crops/stage4" }, - "age=0,half=middle": { "model": "unicopia:block/alfalfa_crops/shaft" }, - "age=1,half=middle": { "model": "unicopia:block/alfalfa_crops/shaft" }, - "age=2,half=middle": { "model": "unicopia:block/alfalfa_crops/shaft" }, - "age=3,half=middle": { "model": "unicopia:block/alfalfa_crops/shaft" }, - "age=4,half=middle": { "model": "unicopia:block/alfalfa_crops/shaft" }, - "age=0,half=bottom": { "model": "unicopia:block/alfalfa_crops/stage0" }, - "age=1,half=bottom": { "model": "unicopia:block/alfalfa_crops/stage1" }, - "age=2,half=bottom": { "model": "unicopia:block/alfalfa_crops/stage2" }, - "age=3,half=bottom": { "model": "unicopia:block/alfalfa_crops/stage3" }, - "age=4,half=bottom": { "model": "unicopia:block/alfalfa_crops/shaft" } - } -} diff --git a/src/main/resources/assets/unicopia/blockstates/apple_leaves.json b/src/main/resources/assets/unicopia/blockstates/apple_leaves.json deleted file mode 100644 index 59ab42ec..00000000 --- a/src/main/resources/assets/unicopia/blockstates/apple_leaves.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "variants": { - "heavy=false": { "model": "unicopia:block/apple_leaves" }, - "heavy=true": { "model": "unicopia:block/apple_leaves_heavy" } - } -} diff --git a/src/main/resources/assets/unicopia/blockstates/apple_sapling.json b/src/main/resources/assets/unicopia/blockstates/apple_sapling.json deleted file mode 100644 index e44e4db1..00000000 --- a/src/main/resources/assets/unicopia/blockstates/apple_sapling.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "variants": { - "stage=0": { "model": "unicopia:block/apple_sapling" }, - "stage=1": { "model": "unicopia:block/apple_sapling" } - } -} diff --git a/src/main/resources/assets/unicopia/blockstates/bakery_door.json b/src/main/resources/assets/unicopia/blockstates/bakery_door.json deleted file mode 100644 index 2a94f01e..00000000 --- a/src/main/resources/assets/unicopia/blockstates/bakery_door.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "variants": { - "facing=east,half=lower,hinge=left,open=false": { "model": "unicopia:block/door/bakery_bottom" }, - "facing=south,half=lower,hinge=left,open=false": { "model": "unicopia:block/door/bakery_bottom", "y": 90 }, - "facing=west,half=lower,hinge=left,open=false": { "model": "unicopia:block/door/bakery_bottom", "y": 180 }, - "facing=north,half=lower,hinge=left,open=false": { "model": "unicopia:block/door/bakery_bottom", "y": 270 }, - "facing=east,half=lower,hinge=right,open=false": { "model": "unicopia:block/door/bakery_bottom_rh" }, - "facing=south,half=lower,hinge=right,open=false": { "model": "unicopia:block/door/bakery_bottom_rh", "y": 90 }, - "facing=west,half=lower,hinge=right,open=false": { "model": "unicopia:block/door/bakery_bottom_rh", "y": 180 }, - "facing=north,half=lower,hinge=right,open=false": { "model": "unicopia:block/door/bakery_bottom_rh", "y": 270 }, - - "facing=east,half=lower,hinge=left,open=true": { "model": "unicopia:block/door/bakery_bottom_rh", "y": 90 }, - "facing=south,half=lower,hinge=left,open=true": { "model": "unicopia:block/door/bakery_bottom_rh", "y": 180 }, - "facing=west,half=lower,hinge=left,open=true": { "model": "unicopia:block/door/bakery_bottom_rh", "y": 270 }, - "facing=north,half=lower,hinge=left,open=true": { "model": "unicopia:block/door/bakery_bottom_rh" }, - "facing=east,half=lower,hinge=right,open=true": { "model": "unicopia:block/door/bakery_bottom", "y": 270 }, - "facing=south,half=lower,hinge=right,open=true": { "model": "unicopia:block/door/bakery_bottom" }, - "facing=west,half=lower,hinge=right,open=true": { "model": "unicopia:block/door/bakery_bottom", "y": 90 }, - "facing=north,half=lower,hinge=right,open=true": { "model": "unicopia:block/door/bakery_bottom", "y": 180 }, - - "facing=east,half=upper,hinge=left,open=false": { "model": "unicopia:block/door/bakery_top" }, - "facing=south,half=upper,hinge=left,open=false": { "model": "unicopia:block/door/bakery_top", "y": 90 }, - "facing=west,half=upper,hinge=left,open=false": { "model": "unicopia:block/door/bakery_top", "y": 180 }, - "facing=north,half=upper,hinge=left,open=false": { "model": "unicopia:block/door/bakery_top", "y": 270 }, - "facing=east,half=upper,hinge=right,open=false": { "model": "unicopia:block/door/bakery_top_rh" }, - "facing=south,half=upper,hinge=right,open=false": { "model": "unicopia:block/door/bakery_top_rh", "y": 90 }, - "facing=west,half=upper,hinge=right,open=false": { "model": "unicopia:block/door/bakery_top_rh", "y": 180 }, - "facing=north,half=upper,hinge=right,open=false": { "model": "unicopia:block/door/bakery_top_rh", "y": 270 }, - - "facing=east,half=upper,hinge=left,open=true": { "model": "unicopia:block/door/bakery_top_rh", "y": 90 }, - "facing=south,half=upper,hinge=left,open=true": { "model": "unicopia:block/door/bakery_top_rh", "y": 180 }, - "facing=west,half=upper,hinge=left,open=true": { "model": "unicopia:block/door/bakery_top_rh", "y": 270 }, - "facing=north,half=upper,hinge=left,open=true": { "model": "unicopia:block/door/bakery_top_rh" }, - "facing=east,half=upper,hinge=right,open=true": { "model": "unicopia:block/door/bakery_top", "y": 270 }, - "facing=south,half=upper,hinge=right,open=true": { "model": "unicopia:block/door/bakery_top" }, - "facing=west,half=upper,hinge=right,open=true": { "model": "unicopia:block/door/bakery_top", "y": 90 }, - "facing=north,half=upper,hinge=right,open=true": { "model": "unicopia:block/door/bakery_top", "y": 180 } - } -} diff --git a/src/main/resources/assets/unicopia/blockstates/chiseled_chitin_shell_block.json b/src/main/resources/assets/unicopia/blockstates/chiseled_chitin_shell_block.json deleted file mode 100644 index 753a0be4..00000000 --- a/src/main/resources/assets/unicopia/blockstates/chiseled_chitin_shell_block.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "variants": { - "facing=up": { "model": "unicopia:block/chiseled_chitin_shell_block" }, - "facing=down": { "model": "unicopia:block/chiseled_chitin_shell_block", "x": 180 }, - "facing=north": { "model": "unicopia:block/chiseled_chitin_shell_block", "x": 90 }, - "facing=south": { "model": "unicopia:block/chiseled_chitin_shell_block", "x": -90 }, - "facing=east": { "model": "unicopia:block/chiseled_chitin_shell_block", "x": 90, "y": 90 }, - "facing=west": { "model": "unicopia:block/chiseled_chitin_shell_block", "x": 90, "y": -90 } - } -} diff --git a/src/main/resources/assets/unicopia/blockstates/chiseled_marble_block.json b/src/main/resources/assets/unicopia/blockstates/chiseled_marble_block.json deleted file mode 100644 index 55f4e052..00000000 --- a/src/main/resources/assets/unicopia/blockstates/chiseled_marble_block.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "variants": { - "": { "model": "unicopia:block/chiseled_marble_block" } - } -} diff --git a/src/main/resources/assets/unicopia/blockstates/chitin_shell_block.json b/src/main/resources/assets/unicopia/blockstates/chitin_shell_block.json deleted file mode 100644 index 900a6d84..00000000 --- a/src/main/resources/assets/unicopia/blockstates/chitin_shell_block.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "covering=uncovered": { "model": "unicopia:block/chitin_shell_block" }, - "covering=covered": { "model": "unicopia:block/chitin_shell_block_covered" }, - "covering=snow_covered": { "model": "unicopia:block/chitin_shell_block_snow" } - } -} diff --git a/src/main/resources/assets/unicopia/blockstates/chitin_shell_slab.json b/src/main/resources/assets/unicopia/blockstates/chitin_shell_slab.json deleted file mode 100644 index 93712870..00000000 --- a/src/main/resources/assets/unicopia/blockstates/chitin_shell_slab.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "variants": { - "type=bottom": { "model": "unicopia:block/chitin_shell_slab" }, - "type=top,covering=uncovered": { "model": "unicopia:block/chitin_shell_slab_top" }, - "type=top,covering=covered": { "model": "unicopia:block/chitin_shell_slab_top_covered" }, - "type=top,covering=snow_covered": { "model": "unicopia:block/chitin_shell_slab_top_snow" }, - "type=double,covering=uncovered": { "model": "unicopia:block/chitin_shell_block" }, - "type=double,covering=covered": { "model": "unicopia:block/chitin_shell_block_covered" }, - "type=double,covering=snow_covered": { "model": "unicopia:block/chitin_shell_block_snow" } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/blockstates/chitin_shell_stairs.json b/src/main/resources/assets/unicopia/blockstates/chitin_shell_stairs.json deleted file mode 100644 index 99aa567a..00000000 --- a/src/main/resources/assets/unicopia/blockstates/chitin_shell_stairs.json +++ /dev/null @@ -1,129 +0,0 @@ -{ - "variants": { - "facing=east,half=bottom,shape=straight,covering=uncovered": { "model": "unicopia:block/chitin_shell_stairs" }, - "facing=west,half=bottom,shape=straight,covering=uncovered": { "model": "unicopia:block/chitin_shell_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=straight,covering=uncovered": { "model": "unicopia:block/chitin_shell_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=straight,covering=uncovered": { "model": "unicopia:block/chitin_shell_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_right,covering=uncovered": { "model": "unicopia:block/chitin_shell_outer_stairs" }, - "facing=west,half=bottom,shape=outer_right,covering=uncovered": { "model": "unicopia:block/chitin_shell_outer_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=outer_right,covering=uncovered": { "model": "unicopia:block/chitin_shell_outer_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=outer_right,covering=uncovered": { "model": "unicopia:block/chitin_shell_outer_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_left,covering=uncovered": { "model": "unicopia:block/chitin_shell_outer_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=outer_left,covering=uncovered": { "model": "unicopia:block/chitin_shell_outer_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=outer_left,covering=uncovered": { "model": "unicopia:block/chitin_shell_outer_stairs" }, - "facing=north,half=bottom,shape=outer_left,covering=uncovered": { "model": "unicopia:block/chitin_shell_outer_stairs", "y": 180, "uvlock": true }, - "facing=east,half=bottom,shape=inner_right,covering=uncovered": { "model": "unicopia:block/chitin_shell_inner_stairs" }, - "facing=west,half=bottom,shape=inner_right,covering=uncovered": { "model": "unicopia:block/chitin_shell_inner_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=inner_right,covering=uncovered": { "model": "unicopia:block/chitin_shell_inner_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=inner_right,covering=uncovered": { "model": "unicopia:block/chitin_shell_inner_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=inner_left,covering=uncovered": { "model": "unicopia:block/chitin_shell_inner_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=inner_left,covering=uncovered": { "model": "unicopia:block/chitin_shell_inner_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=inner_left,covering=uncovered": { "model": "unicopia:block/chitin_shell_inner_stairs" }, - "facing=north,half=bottom,shape=inner_left,covering=uncovered": { "model": "unicopia:block/chitin_shell_inner_stairs", "y": 180, "uvlock": true }, - - "facing=east,half=top,shape=straight,covering=uncovered": { "model": "unicopia:block/chitin_shell_stairs_top", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=straight,covering=uncovered": { "model": "unicopia:block/chitin_shell_stairs_top", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=straight,covering=uncovered": { "model": "unicopia:block/chitin_shell_stairs_top", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=straight,covering=uncovered": { "model": "unicopia:block/chitin_shell_stairs_top", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_right,covering=uncovered": { "model": "unicopia:block/chitin_shell_outer_stairs_top", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=outer_right,covering=uncovered": { "model": "unicopia:block/chitin_shell_outer_stairs_top", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=outer_right,covering=uncovered": { "model": "unicopia:block/chitin_shell_outer_stairs_top", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=outer_right,covering=uncovered": { "model": "unicopia:block/chitin_shell_outer_stairs_top", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=outer_left,covering=uncovered": { "model": "unicopia:block/chitin_shell_outer_stairs_top", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=outer_left,covering=uncovered": { "model": "unicopia:block/chitin_shell_outer_stairs_top", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=outer_left,covering=uncovered": { "model": "unicopia:block/chitin_shell_outer_stairs_top", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=outer_left,covering=uncovered": { "model": "unicopia:block/chitin_shell_outer_stairs_top", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=inner_right,covering=uncovered": { "model": "unicopia:block/chitin_shell_inner_stairs_top", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=inner_right,covering=uncovered": { "model": "unicopia:block/chitin_shell_inner_stairs_top", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=inner_right,covering=uncovered": { "model": "unicopia:block/chitin_shell_inner_stairs_top", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=inner_right,covering=uncovered": { "model": "unicopia:block/chitin_shell_inner_stairs_top", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=inner_left,covering=uncovered": { "model": "unicopia:block/chitin_shell_inner_stairs_top", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=inner_left,covering=uncovered": { "model": "unicopia:block/chitin_shell_inner_stairs_top", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=inner_left,covering=uncovered": { "model": "unicopia:block/chitin_shell_inner_stairs_top", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=inner_left,covering=uncovered": { "model": "unicopia:block/chitin_shell_inner_stairs_top", "x": 180, "y": 270, "uvlock": true }, - - "facing=east,half=bottom,shape=straight,covering=covered": { "model": "unicopia:block/chitin_shell_stairs_covered" }, - "facing=west,half=bottom,shape=straight,covering=covered": { "model": "unicopia:block/chitin_shell_stairs_covered", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=straight,covering=covered": { "model": "unicopia:block/chitin_shell_stairs_covered", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=straight,covering=covered": { "model": "unicopia:block/chitin_shell_stairs_covered", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_right,covering=covered": { "model": "unicopia:block/chitin_shell_outer_stairs_covered" }, - "facing=west,half=bottom,shape=outer_right,covering=covered": { "model": "unicopia:block/chitin_shell_outer_stairs_covered", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=outer_right,covering=covered": { "model": "unicopia:block/chitin_shell_outer_stairs_covered", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=outer_right,covering=covered": { "model": "unicopia:block/chitin_shell_outer_stairs_covered", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_left,covering=covered": { "model": "unicopia:block/chitin_shell_outer_stairs_covered", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=outer_left,covering=covered": { "model": "unicopia:block/chitin_shell_outer_stairs_covered", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=outer_left,covering=covered": { "model": "unicopia:block/chitin_shell_outer_stairs_covered" }, - "facing=north,half=bottom,shape=outer_left,covering=covered": { "model": "unicopia:block/chitin_shell_outer_stairs_covered", "y": 180, "uvlock": true }, - "facing=east,half=bottom,shape=inner_right,covering=covered": { "model": "unicopia:block/chitin_shell_inner_stairs_covered" }, - "facing=west,half=bottom,shape=inner_right,covering=covered": { "model": "unicopia:block/chitin_shell_inner_stairs_covered", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=inner_right,covering=covered": { "model": "unicopia:block/chitin_shell_inner_stairs_covered", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=inner_right,covering=covered": { "model": "unicopia:block/chitin_shell_inner_stairs_covered", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=inner_left,covering=covered": { "model": "unicopia:block/chitin_shell_inner_stairs_covered", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=inner_left,covering=covered": { "model": "unicopia:block/chitin_shell_inner_stairs_covered", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=inner_left,covering=covered": { "model": "unicopia:block/chitin_shell_inner_stairs_covered" }, - "facing=north,half=bottom,shape=inner_left,covering=covered": { "model": "unicopia:block/chitin_shell_inner_stairs_covered", "y": 180, "uvlock": true }, - - "facing=east,half=top,shape=straight,covering=covered": { "model": "unicopia:block/chitin_shell_stairs_top_covered", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=straight,covering=covered": { "model": "unicopia:block/chitin_shell_stairs_top_covered", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=straight,covering=covered": { "model": "unicopia:block/chitin_shell_stairs_top_covered", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=straight,covering=covered": { "model": "unicopia:block/chitin_shell_stairs_top_covered", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_right,covering=covered": { "model": "unicopia:block/chitin_shell_outer_stairs_top_covered", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=outer_right,covering=covered": { "model": "unicopia:block/chitin_shell_outer_stairs_top_covered", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=outer_right,covering=covered": { "model": "unicopia:block/chitin_shell_outer_stairs_top_covered", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=outer_right,covering=covered": { "model": "unicopia:block/chitin_shell_outer_stairs_top_covered", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=outer_left,covering=covered": { "model": "unicopia:block/chitin_shell_outer_stairs_top_covered", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=outer_left,covering=covered": { "model": "unicopia:block/chitin_shell_outer_stairs_top_covered", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=outer_left,covering=covered": { "model": "unicopia:block/chitin_shell_outer_stairs_top_covered", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=outer_left,covering=covered": { "model": "unicopia:block/chitin_shell_outer_stairs_top_covered", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=inner_right,covering=covered": { "model": "unicopia:block/chitin_shell_inner_stairs_top_covered", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=inner_right,covering=covered": { "model": "unicopia:block/chitin_shell_inner_stairs_top_covered", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=inner_right,covering=covered": { "model": "unicopia:block/chitin_shell_inner_stairs_top_covered", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=inner_right,covering=covered": { "model": "unicopia:block/chitin_shell_inner_stairs_top_covered", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=inner_left,covering=covered": { "model": "unicopia:block/chitin_shell_inner_stairs_top_covered", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=inner_left,covering=covered": { "model": "unicopia:block/chitin_shell_inner_stairs_top_covered", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=inner_left,covering=covered": { "model": "unicopia:block/chitin_shell_inner_stairs_top_covered", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=inner_left,covering=covered": { "model": "unicopia:block/chitin_shell_inner_stairs_top_covered", "x": 180, "y": 270, "uvlock": true }, - - "facing=east,half=bottom,shape=straight,covering=snow_covered": { "model": "unicopia:block/chitin_shell_stairs" }, - "facing=west,half=bottom,shape=straight,covering=snow_covered": { "model": "unicopia:block/chitin_shell_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=straight,covering=snow_covered": { "model": "unicopia:block/chitin_shell_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=straight,covering=snow_covered": { "model": "unicopia:block/chitin_shell_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_right,covering=snow_covered": { "model": "unicopia:block/chitin_shell_outer_stairs" }, - "facing=west,half=bottom,shape=outer_right,covering=snow_covered": { "model": "unicopia:block/chitin_shell_outer_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=outer_right,covering=snow_covered": { "model": "unicopia:block/chitin_shell_outer_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=outer_right,covering=snow_covered": { "model": "unicopia:block/chitin_shell_outer_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_left,covering=snow_covered": { "model": "unicopia:block/chitin_shell_outer_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=outer_left,covering=snow_covered": { "model": "unicopia:block/chitin_shell_outer_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=outer_left,covering=snow_covered": { "model": "unicopia:block/chitin_shell_outer_stairs" }, - "facing=north,half=bottom,shape=outer_left,covering=snow_covered": { "model": "unicopia:block/chitin_shell_outer_stairs", "y": 180, "uvlock": true }, - "facing=east,half=bottom,shape=inner_right,covering=snow_covered": { "model": "unicopia:block/chitin_shell_inner_stairs" }, - "facing=west,half=bottom,shape=inner_right,covering=snow_covered": { "model": "unicopia:block/chitin_shell_inner_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=inner_right,covering=snow_covered": { "model": "unicopia:block/chitin_shell_inner_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=inner_right,covering=snow_covered": { "model": "unicopia:block/chitin_shell_inner_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=inner_left,covering=snow_covered": { "model": "unicopia:block/chitin_shell_inner_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=inner_left,covering=snow_covered": { "model": "unicopia:block/chitin_shell_inner_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=inner_left,covering=snow_covered": { "model": "unicopia:block/chitin_shell_inner_stairs" }, - "facing=north,half=bottom,shape=inner_left,covering=snow_covered": { "model": "unicopia:block/chitin_shell_inner_stairs", "y": 180, "uvlock": true }, - - "facing=east,half=top,shape=straight,covering=snow_covered": { "model": "unicopia:block/chitin_shell_stairs_top", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=straight,covering=snow_covered": { "model": "unicopia:block/chitin_shell_stairs_top", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=straight,covering=snow_covered": { "model": "unicopia:block/chitin_shell_stairs_top", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=straight,covering=snow_covered": { "model": "unicopia:block/chitin_shell_stairs_top", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_right,covering=snow_covered": { "model": "unicopia:block/chitin_shell_outer_stairs_top", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=outer_right,covering=snow_covered": { "model": "unicopia:block/chitin_shell_outer_stairs_top", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=outer_right,covering=snow_covered": { "model": "unicopia:block/chitin_shell_outer_stairs_top", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=outer_right,covering=snow_covered": { "model": "unicopia:block/chitin_shell_outer_stairs_top", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=outer_left,covering=snow_covered": { "model": "unicopia:block/chitin_shell_outer_stairs_top", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=outer_left,covering=snow_covered": { "model": "unicopia:block/chitin_shell_outer_stairs_top", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=outer_left,covering=snow_covered": { "model": "unicopia:block/chitin_shell_outer_stairs_top", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=outer_left,covering=snow_covered": { "model": "unicopia:block/chitin_shell_outer_stairs_top", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=inner_right,covering=snow_covered": { "model": "unicopia:block/chitin_shell_inner_stairs_top", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=inner_right,covering=snow_covered": { "model": "unicopia:block/chitin_shell_inner_stairs_top", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=inner_right,covering=snow_covered": { "model": "unicopia:block/chitin_shell_inner_stairs_top", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=inner_right,covering=snow_covered": { "model": "unicopia:block/chitin_shell_inner_stairs_top", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=inner_left,covering=snow_covered": { "model": "unicopia:block/chitin_shell_inner_stairs_top", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=inner_left,covering=snow_covered": { "model": "unicopia:block/chitin_shell_inner_stairs_top", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=inner_left,covering=snow_covered": { "model": "unicopia:block/chitin_shell_inner_stairs_top", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=inner_left,covering=snow_covered": { "model": "unicopia:block/chitin_shell_inner_stairs_top", "x": 180, "y": 270, "uvlock": true } - } -} diff --git a/src/main/resources/assets/unicopia/blockstates/cloud_anvil.json b/src/main/resources/assets/unicopia/blockstates/cloud_anvil.json deleted file mode 100644 index 667c820b..00000000 --- a/src/main/resources/assets/unicopia/blockstates/cloud_anvil.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "variants": { - "facing=south": { "model": "unicopia:block/cloud_anvil" }, - "facing=west": { "model": "unicopia:block/cloud_anvil", "y": 90 }, - "facing=north": { "model": "unicopia:block/cloud_anvil", "y": 180 }, - "facing=east": { "model": "unicopia:block/cloud_anvil", "y": 270 } - } -} diff --git a/src/main/resources/assets/unicopia/blockstates/cloud_block.json b/src/main/resources/assets/unicopia/blockstates/cloud_block.json deleted file mode 100644 index c974c23e..00000000 --- a/src/main/resources/assets/unicopia/blockstates/cloud_block.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "variants": { - "": { "model": "unicopia:block/cloud_block" } - } -} diff --git a/src/main/resources/assets/unicopia/blockstates/cloud_farmland.json b/src/main/resources/assets/unicopia/blockstates/cloud_farmland.json deleted file mode 100644 index c1bdf151..00000000 --- a/src/main/resources/assets/unicopia/blockstates/cloud_farmland.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "variants": { - "moisture=0": { "model": "unicopia:block/farmland/dry" }, - "moisture=1": { "model": "unicopia:block/farmland/dry" }, - "moisture=2": { "model": "unicopia:block/farmland/dry" }, - "moisture=3": { "model": "unicopia:block/farmland/dry" }, - "moisture=4": { "model": "unicopia:block/farmland/dry" }, - "moisture=5": { "model": "unicopia:block/farmland/dry" }, - "moisture=6": { "model": "unicopia:block/farmland/dry" }, - "moisture=7": { "model": "unicopia:block/farmland/wet" } - } -} diff --git a/src/main/resources/assets/unicopia/blockstates/cloud_fence.json b/src/main/resources/assets/unicopia/blockstates/cloud_fence.json deleted file mode 100644 index a55bc4df..00000000 --- a/src/main/resources/assets/unicopia/blockstates/cloud_fence.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "multipart": [ - { "apply": { "model": "unicopia:block/cloud_fence_post" }}, - { "when": { "north": "true" }, - "apply": { "model": "unicopia:block/cloud_fence_side", "uvlock": true } - }, - { "when": { "east": "true" }, - "apply": { "model": "unicopia:block/cloud_fence_side", "y": 90, "uvlock": true } - }, - { "when": { "south": "true" }, - "apply": { "model": "unicopia:block/cloud_fence_side", "y": 180, "uvlock": true } - }, - { "when": { "west": "true" }, - "apply": { "model": "unicopia:block/cloud_fence_side", "y": 270, "uvlock": true } - } - ] -} diff --git a/src/main/resources/assets/unicopia/blockstates/cloud_slab.json b/src/main/resources/assets/unicopia/blockstates/cloud_slab.json deleted file mode 100644 index 18549f01..00000000 --- a/src/main/resources/assets/unicopia/blockstates/cloud_slab.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "type=bottom": { "model": "unicopia:block/cloud_slab" }, - "type=top": { "model": "unicopia:block/cloud_slab_top" }, - "type=double": { "model": "unicopia:block/cloud_block" } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/blockstates/cloud_stairs.json b/src/main/resources/assets/unicopia/blockstates/cloud_stairs.json deleted file mode 100644 index 3ff98bcd..00000000 --- a/src/main/resources/assets/unicopia/blockstates/cloud_stairs.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "variants": { - "facing=east,half=bottom,shape=straight": { "model": "unicopia:block/cloud_stairs" }, - "facing=west,half=bottom,shape=straight": { "model": "unicopia:block/cloud_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=straight": { "model": "unicopia:block/cloud_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=straight": { "model": "unicopia:block/cloud_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_right": { "model": "unicopia:block/cloud_outer_stairs" }, - "facing=west,half=bottom,shape=outer_right": { "model": "unicopia:block/cloud_outer_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=outer_right": { "model": "unicopia:block/cloud_outer_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=outer_right": { "model": "unicopia:block/cloud_outer_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_left": { "model": "unicopia:block/cloud_outer_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=outer_left": { "model": "unicopia:block/cloud_outer_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=outer_left": { "model": "unicopia:block/cloud_outer_stairs" }, - "facing=north,half=bottom,shape=outer_left": { "model": "unicopia:block/cloud_outer_stairs", "y": 180, "uvlock": true }, - "facing=east,half=bottom,shape=inner_right": { "model": "unicopia:block/cloud_inner_stairs" }, - "facing=west,half=bottom,shape=inner_right": { "model": "unicopia:block/cloud_inner_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=inner_right": { "model": "unicopia:block/cloud_inner_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=inner_right": { "model": "unicopia:block/cloud_inner_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=inner_left": { "model": "unicopia:block/cloud_inner_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=inner_left": { "model": "unicopia:block/cloud_inner_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=inner_left": { "model": "unicopia:block/cloud_inner_stairs" }, - "facing=north,half=bottom,shape=inner_left": { "model": "unicopia:block/cloud_inner_stairs", "y": 180, "uvlock": true }, - - "facing=east,half=top,shape=straight": { "model": "unicopia:block/cloud_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=straight": { "model": "unicopia:block/cloud_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=straight": { "model": "unicopia:block/cloud_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=straight": { "model": "unicopia:block/cloud_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_right": { "model": "unicopia:block/cloud_outer_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=outer_right": { "model": "unicopia:block/cloud_outer_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=outer_right": { "model": "unicopia:block/cloud_outer_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=outer_right": { "model": "unicopia:block/cloud_outer_stairs", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=outer_left": { "model": "unicopia:block/cloud_outer_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=outer_left": { "model": "unicopia:block/cloud_outer_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=outer_left": { "model": "unicopia:block/cloud_outer_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=outer_left": { "model": "unicopia:block/cloud_outer_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=inner_right": { "model": "unicopia:block/cloud_inner_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=inner_right": { "model": "unicopia:block/cloud_inner_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=inner_right": { "model": "unicopia:block/cloud_inner_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=inner_right": { "model": "unicopia:block/cloud_inner_stairs", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=inner_left": { "model": "unicopia:block/cloud_inner_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=inner_left": { "model": "unicopia:block/cloud_inner_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=inner_left": { "model": "unicopia:block/cloud_inner_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=inner_left": { "model": "unicopia:block/cloud_inner_stairs", "x": 180, "y": 270, "uvlock": true } - } -} diff --git a/src/main/resources/assets/unicopia/blockstates/cloudsdale_tomato_plant.json b/src/main/resources/assets/unicopia/blockstates/cloudsdale_tomato_plant.json deleted file mode 100644 index f0ed5793..00000000 --- a/src/main/resources/assets/unicopia/blockstates/cloudsdale_tomato_plant.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "variants": { - "age=0": { "model": "unicopia:block/tomato_plant/stage0" }, - "age=1": { "model": "unicopia:block/tomato_plant/stage1" }, - "age=2": { "model": "unicopia:block/tomato_plant/stage1" }, - "age=3": { "model": "unicopia:block/tomato_plant/stage2" }, - "age=4": { "model": "unicopia:block/tomato_plant/stage2" }, - "age=5": { "model": "unicopia:block/tomato_plant/stage3" }, - "age=6": { "model": "unicopia:block/tomato_plant/stage4" }, - "age=7": { "model": "unicopia:block/tomato_plant/stage4" } - } -} diff --git a/src/main/resources/assets/unicopia/blockstates/dense_cloud_block.json b/src/main/resources/assets/unicopia/blockstates/dense_cloud_block.json deleted file mode 100644 index a7bf1bde..00000000 --- a/src/main/resources/assets/unicopia/blockstates/dense_cloud_block.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "variants": { - "": { "model": "unicopia:block/dense_cloud_block" } - } -} diff --git a/src/main/resources/assets/unicopia/blockstates/dense_cloud_pillar.json b/src/main/resources/assets/unicopia/blockstates/dense_cloud_pillar.json deleted file mode 100644 index 9a802e08..00000000 --- a/src/main/resources/assets/unicopia/blockstates/dense_cloud_pillar.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "axis=y": { "model": "unicopia:block/dense_cloud_pillar" }, - "axis=z": { "model": "unicopia:block/dense_cloud_pillar", "x": 90 }, - "axis=x": { "model": "unicopia:block/dense_cloud_pillar", "x": 90, "y": 90 } - } -} diff --git a/src/main/resources/assets/unicopia/blockstates/dense_cloud_slab.json b/src/main/resources/assets/unicopia/blockstates/dense_cloud_slab.json deleted file mode 100644 index 69a494dd..00000000 --- a/src/main/resources/assets/unicopia/blockstates/dense_cloud_slab.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "type=bottom": { "model": "unicopia:block/dense_cloud_slab" }, - "type=top": { "model": "unicopia:block/dense_cloud_slab_top" }, - "type=double": { "model": "unicopia:block/dense_cloud_block" } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/blockstates/dense_cloud_stairs.json b/src/main/resources/assets/unicopia/blockstates/dense_cloud_stairs.json deleted file mode 100644 index d4415747..00000000 --- a/src/main/resources/assets/unicopia/blockstates/dense_cloud_stairs.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "variants": { - "facing=east,half=bottom,shape=straight": { "model": "unicopia:block/dense_cloud_stairs" }, - "facing=west,half=bottom,shape=straight": { "model": "unicopia:block/dense_cloud_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=straight": { "model": "unicopia:block/dense_cloud_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=straight": { "model": "unicopia:block/dense_cloud_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_right": { "model": "unicopia:block/dense_cloud_outer_stairs" }, - "facing=west,half=bottom,shape=outer_right": { "model": "unicopia:block/dense_cloud_outer_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=outer_right": { "model": "unicopia:block/dense_cloud_outer_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=outer_right": { "model": "unicopia:block/dense_cloud_outer_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_left": { "model": "unicopia:block/dense_cloud_outer_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=outer_left": { "model": "unicopia:block/dense_cloud_outer_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=outer_left": { "model": "unicopia:block/dense_cloud_outer_stairs" }, - "facing=north,half=bottom,shape=outer_left": { "model": "unicopia:block/dense_cloud_outer_stairs", "y": 180, "uvlock": true }, - "facing=east,half=bottom,shape=inner_right": { "model": "unicopia:block/dense_cloud_inner_stairs" }, - "facing=west,half=bottom,shape=inner_right": { "model": "unicopia:block/dense_cloud_inner_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=inner_right": { "model": "unicopia:block/dense_cloud_inner_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=inner_right": { "model": "unicopia:block/dense_cloud_inner_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=inner_left": { "model": "unicopia:block/dense_cloud_inner_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=inner_left": { "model": "unicopia:block/dense_cloud_inner_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=inner_left": { "model": "unicopia:block/dense_cloud_inner_stairs" }, - "facing=north,half=bottom,shape=inner_left": { "model": "unicopia:block/dense_cloud_inner_stairs", "y": 180, "uvlock": true }, - - "facing=east,half=top,shape=straight": { "model": "unicopia:block/dense_cloud_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=straight": { "model": "unicopia:block/dense_cloud_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=straight": { "model": "unicopia:block/dense_cloud_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=straight": { "model": "unicopia:block/dense_cloud_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_right": { "model": "unicopia:block/dense_cloud_outer_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=outer_right": { "model": "unicopia:block/dense_cloud_outer_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=outer_right": { "model": "unicopia:block/dense_cloud_outer_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=outer_right": { "model": "unicopia:block/dense_cloud_outer_stairs", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=outer_left": { "model": "unicopia:block/dense_cloud_outer_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=outer_left": { "model": "unicopia:block/dense_cloud_outer_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=outer_left": { "model": "unicopia:block/dense_cloud_outer_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=outer_left": { "model": "unicopia:block/dense_cloud_outer_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=inner_right": { "model": "unicopia:block/dense_cloud_inner_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=inner_right": { "model": "unicopia:block/dense_cloud_inner_stairs", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=inner_right": { "model": "unicopia:block/dense_cloud_inner_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=inner_right": { "model": "unicopia:block/dense_cloud_inner_stairs", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=inner_left": { "model": "unicopia:block/dense_cloud_inner_stairs", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=inner_left": { "model": "unicopia:block/dense_cloud_inner_stairs", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=inner_left": { "model": "unicopia:block/dense_cloud_inner_stairs", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=inner_left": { "model": "unicopia:block/dense_cloud_inner_stairs", "x": 180, "y": 270, "uvlock": true } - } -} diff --git a/src/main/resources/assets/unicopia/blockstates/diamond_door.json b/src/main/resources/assets/unicopia/blockstates/diamond_door.json deleted file mode 100644 index 41f1c53f..00000000 --- a/src/main/resources/assets/unicopia/blockstates/diamond_door.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "variants": { - "facing=east,half=lower,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/diamond_bottom" }, - "facing=south,half=lower,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/diamond_bottom", "y": 90 }, - "facing=west,half=lower,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/diamond_bottom", "y": 180 }, - "facing=north,half=lower,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/diamond_bottom", "y": 270 }, - "facing=east,half=lower,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/diamond_bottom_rh" }, - "facing=south,half=lower,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/diamond_bottom_rh", "y": 90 }, - "facing=west,half=lower,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/diamond_bottom_rh", "y": 180 }, - "facing=north,half=lower,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/diamond_bottom_rh", "y": 270 }, - "facing=east,half=lower,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/diamond_bottom_rh", "y": 90 }, - "facing=south,half=lower,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/diamond_bottom_rh", "y": 180 }, - "facing=west,half=lower,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/diamond_bottom_rh", "y": 270 }, - "facing=north,half=lower,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/diamond_bottom_rh" }, - "facing=east,half=lower,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/diamond_bottom", "y": 270 }, - "facing=south,half=lower,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/diamond_bottom" }, - "facing=west,half=lower,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/diamond_bottom", "y": 90 }, - "facing=north,half=lower,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/diamond_bottom", "y": 180 }, - "facing=east,half=upper,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/diamond_top" }, - "facing=south,half=upper,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/diamond_top", "y": 90 }, - "facing=west,half=upper,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/diamond_top", "y": 180 }, - "facing=north,half=upper,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/diamond_top", "y": 270 }, - "facing=east,half=upper,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/diamond_top_rh" }, - "facing=south,half=upper,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/diamond_top_rh", "y": 90 }, - "facing=west,half=upper,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/diamond_top_rh", "y": 180 }, - "facing=north,half=upper,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/diamond_top_rh", "y": 270 }, - "facing=east,half=upper,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/diamond_top_rh", "y": 90 }, - "facing=south,half=upper,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/diamond_top_rh", "y": 180 }, - "facing=west,half=upper,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/diamond_top_rh", "y": 270 }, - "facing=north,half=upper,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/diamond_top_rh" }, - "facing=east,half=upper,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/diamond_top", "y": 270 }, - "facing=south,half=upper,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/diamond_top" }, - "facing=west,half=upper,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/diamond_top", "y": 90 }, - "facing=north,half=upper,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/diamond_top", "y": 180 }, - "facing=east,half=lower,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/diamond_bottom" }, - "facing=south,half=lower,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/diamond_bottom", "y": 90 }, - "facing=west,half=lower,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/diamond_bottom", "y": 180 }, - "facing=north,half=lower,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/diamond_bottom", "y": 270 }, - "facing=east,half=lower,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/diamond_bottom_rh" }, - "facing=south,half=lower,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/diamond_bottom_rh", "y": 90 }, - "facing=west,half=lower,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/diamond_bottom_rh", "y": 180 }, - "facing=north,half=lower,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/diamond_bottom_rh", "y": 270 }, - "facing=east,half=lower,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/diamond_bottom_rh", "y": 90 }, - "facing=south,half=lower,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/diamond_bottom_rh", "y": 180 }, - "facing=west,half=lower,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/diamond_bottom_rh", "y": 270 }, - "facing=north,half=lower,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/diamond_bottom_rh" }, - "facing=east,half=lower,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/diamond_bottom", "y": 270 }, - "facing=south,half=lower,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/diamond_bottom" }, - "facing=west,half=lower,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/diamond_bottom", "y": 90 }, - "facing=north,half=lower,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/diamond_bottom", "y": 180 }, - "facing=east,half=upper,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/diamond_top" }, - "facing=south,half=upper,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/diamond_top", "y": 90 }, - "facing=west,half=upper,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/diamond_top", "y": 180 }, - "facing=north,half=upper,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/diamond_top", "y": 270 }, - "facing=east,half=upper,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/diamond_top_rh" }, - "facing=south,half=upper,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/diamond_top_rh", "y": 90 }, - "facing=west,half=upper,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/diamond_top_rh", "y": 180 }, - "facing=north,half=upper,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/diamond_top_rh", "y": 270 }, - "facing=east,half=upper,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/diamond_top_rh", "y": 90 }, - "facing=south,half=upper,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/diamond_top_rh", "y": 180 }, - "facing=west,half=upper,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/diamond_top_rh", "y": 270 }, - "facing=north,half=upper,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/diamond_top_rh" }, - "facing=east,half=upper,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/diamond_top", "y": 270 }, - "facing=south,half=upper,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/diamond_top" }, - "facing=west,half=upper,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/diamond_top", "y": 90 }, - "facing=north,half=upper,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/diamond_top", "y": 180 } - } -} diff --git a/src/main/resources/assets/unicopia/blockstates/enchanted_cloud_block.json b/src/main/resources/assets/unicopia/blockstates/enchanted_cloud_block.json deleted file mode 100644 index 9aed5728..00000000 --- a/src/main/resources/assets/unicopia/blockstates/enchanted_cloud_block.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "covering=uncovered": { "model": "unicopia:block/enchanted_cloud_block" }, - "covering=covered": { "model": "unicopia:block/enchanted_cloud_block_covered" }, - "covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_block" } - } -} diff --git a/src/main/resources/assets/unicopia/blockstates/enchanted_cloud_slab.json b/src/main/resources/assets/unicopia/blockstates/enchanted_cloud_slab.json deleted file mode 100644 index 74b93348..00000000 --- a/src/main/resources/assets/unicopia/blockstates/enchanted_cloud_slab.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "variants": { - "type=bottom": { "model": "unicopia:block/enchanted_cloud_slab" }, - "type=top,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_slab_top" }, - "type=top,covering=covered": { "model": "unicopia:block/enchanted_cloud_slab_top_covered" }, - "type=top,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_slab_top" }, - "type=double,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_block" }, - "type=double,covering=covered": { "model": "unicopia:block/enchanted_cloud_block_covered" }, - "type=double,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_block" } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/blockstates/enchanted_cloud_stairs.json b/src/main/resources/assets/unicopia/blockstates/enchanted_cloud_stairs.json deleted file mode 100644 index 529de69f..00000000 --- a/src/main/resources/assets/unicopia/blockstates/enchanted_cloud_stairs.json +++ /dev/null @@ -1,130 +0,0 @@ -{ - "variants": { - - "facing=east,half=bottom,shape=straight,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_stairs" }, - "facing=west,half=bottom,shape=straight,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=straight,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=straight,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_right,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_outer_stairs" }, - "facing=west,half=bottom,shape=outer_right,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_outer_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=outer_right,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_outer_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=outer_right,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_outer_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_left,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_outer_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=outer_left,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_outer_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=outer_left,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_outer_stairs" }, - "facing=north,half=bottom,shape=outer_left,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_outer_stairs", "y": 180, "uvlock": true }, - "facing=east,half=bottom,shape=inner_right,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_inner_stairs" }, - "facing=west,half=bottom,shape=inner_right,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_inner_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=inner_right,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_inner_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=inner_right,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_inner_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=inner_left,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_inner_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=inner_left,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_inner_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=inner_left,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_inner_stairs" }, - "facing=north,half=bottom,shape=inner_left,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_inner_stairs", "y": 180, "uvlock": true }, - - "facing=east,half=top,shape=straight,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_stairs_top", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=straight,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_stairs_top", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=straight,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_stairs_top", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=straight,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_stairs_top", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_right,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_outer_stairs_top", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=outer_right,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_outer_stairs_top", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=outer_right,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_outer_stairs_top", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=outer_right,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_outer_stairs_top", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=outer_left,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_outer_stairs_top", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=outer_left,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_outer_stairs_top", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=outer_left,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_outer_stairs_top", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=outer_left,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_outer_stairs_top", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=inner_right,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_inner_stairs_top", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=inner_right,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_inner_stairs_top", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=inner_right,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_inner_stairs_top", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=inner_right,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_inner_stairs_top", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=inner_left,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_inner_stairs_top", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=inner_left,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_inner_stairs_top", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=inner_left,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_inner_stairs_top", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=inner_left,covering=uncovered": { "model": "unicopia:block/enchanted_cloud_inner_stairs_top", "x": 180, "y": 270, "uvlock": true }, - - "facing=east,half=bottom,shape=straight,covering=covered": { "model": "unicopia:block/enchanted_cloud_stairs_covered" }, - "facing=west,half=bottom,shape=straight,covering=covered": { "model": "unicopia:block/enchanted_cloud_stairs_covered", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=straight,covering=covered": { "model": "unicopia:block/enchanted_cloud_stairs_covered", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=straight,covering=covered": { "model": "unicopia:block/enchanted_cloud_stairs_covered", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_right,covering=covered": { "model": "unicopia:block/enchanted_cloud_outer_stairs_covered" }, - "facing=west,half=bottom,shape=outer_right,covering=covered": { "model": "unicopia:block/enchanted_cloud_outer_stairs_covered", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=outer_right,covering=covered": { "model": "unicopia:block/enchanted_cloud_outer_stairs_covered", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=outer_right,covering=covered": { "model": "unicopia:block/enchanted_cloud_outer_stairs_covered", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_left,covering=covered": { "model": "unicopia:block/enchanted_cloud_outer_stairs_covered", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=outer_left,covering=covered": { "model": "unicopia:block/enchanted_cloud_outer_stairs_covered", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=outer_left,covering=covered": { "model": "unicopia:block/enchanted_cloud_outer_stairs_covered" }, - "facing=north,half=bottom,shape=outer_left,covering=covered": { "model": "unicopia:block/enchanted_cloud_outer_stairs_covered", "y": 180, "uvlock": true }, - "facing=east,half=bottom,shape=inner_right,covering=covered": { "model": "unicopia:block/enchanted_cloud_inner_stairs_covered" }, - "facing=west,half=bottom,shape=inner_right,covering=covered": { "model": "unicopia:block/enchanted_cloud_inner_stairs_covered", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=inner_right,covering=covered": { "model": "unicopia:block/enchanted_cloud_inner_stairs_covered", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=inner_right,covering=covered": { "model": "unicopia:block/enchanted_cloud_inner_stairs_covered", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=inner_left,covering=covered": { "model": "unicopia:block/enchanted_cloud_inner_stairs_covered", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=inner_left,covering=covered": { "model": "unicopia:block/enchanted_cloud_inner_stairs_covered", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=inner_left,covering=covered": { "model": "unicopia:block/enchanted_cloud_inner_stairs_covered" }, - "facing=north,half=bottom,shape=inner_left,covering=covered": { "model": "unicopia:block/enchanted_cloud_inner_stairs_covered", "y": 180, "uvlock": true }, - - "facing=east,half=top,shape=straight,covering=covered": { "model": "unicopia:block/enchanted_cloud_stairs_top_covered", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=straight,covering=covered": { "model": "unicopia:block/enchanted_cloud_stairs_top_covered", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=straight,covering=covered": { "model": "unicopia:block/enchanted_cloud_stairs_top_covered", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=straight,covering=covered": { "model": "unicopia:block/enchanted_cloud_stairs_top_covered", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_right,covering=covered": { "model": "unicopia:block/enchanted_cloud_outer_stairs_top_covered", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=outer_right,covering=covered": { "model": "unicopia:block/enchanted_cloud_outer_stairs_top_covered", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=outer_right,covering=covered": { "model": "unicopia:block/enchanted_cloud_outer_stairs_top_covered", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=outer_right,covering=covered": { "model": "unicopia:block/enchanted_cloud_outer_stairs_top_covered", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=outer_left,covering=covered": { "model": "unicopia:block/enchanted_cloud_outer_stairs_top_covered", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=outer_left,covering=covered": { "model": "unicopia:block/enchanted_cloud_outer_stairs_top_covered", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=outer_left,covering=covered": { "model": "unicopia:block/enchanted_cloud_outer_stairs_top_covered", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=outer_left,covering=covered": { "model": "unicopia:block/enchanted_cloud_outer_stairs_top_covered", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=inner_right,covering=covered": { "model": "unicopia:block/enchanted_cloud_inner_stairs_top_covered", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=inner_right,covering=covered": { "model": "unicopia:block/enchanted_cloud_inner_stairs_top_covered", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=inner_right,covering=covered": { "model": "unicopia:block/enchanted_cloud_inner_stairs_top_covered", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=inner_right,covering=covered": { "model": "unicopia:block/enchanted_cloud_inner_stairs_top_covered", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=inner_left,covering=covered": { "model": "unicopia:block/enchanted_cloud_inner_stairs_top_covered", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=inner_left,covering=covered": { "model": "unicopia:block/enchanted_cloud_inner_stairs_top_covered", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=inner_left,covering=covered": { "model": "unicopia:block/enchanted_cloud_inner_stairs_top_covered", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=inner_left,covering=covered": { "model": "unicopia:block/enchanted_cloud_inner_stairs_top_covered", "x": 180, "y": 270, "uvlock": true }, - - "facing=east,half=bottom,shape=straight,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_stairs" }, - "facing=west,half=bottom,shape=straight,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=straight,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=straight,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_right,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_outer_stairs" }, - "facing=west,half=bottom,shape=outer_right,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_outer_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=outer_right,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_outer_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=outer_right,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_outer_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=outer_left,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_outer_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=outer_left,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_outer_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=outer_left,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_outer_stairs" }, - "facing=north,half=bottom,shape=outer_left,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_outer_stairs", "y": 180, "uvlock": true }, - "facing=east,half=bottom,shape=inner_right,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_inner_stairs" }, - "facing=west,half=bottom,shape=inner_right,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_inner_stairs", "y": 180, "uvlock": true }, - "facing=south,half=bottom,shape=inner_right,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_inner_stairs", "y": 90, "uvlock": true }, - "facing=north,half=bottom,shape=inner_right,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_inner_stairs", "y": 270, "uvlock": true }, - "facing=east,half=bottom,shape=inner_left,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_inner_stairs", "y": 270, "uvlock": true }, - "facing=west,half=bottom,shape=inner_left,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_inner_stairs", "y": 90, "uvlock": true }, - "facing=south,half=bottom,shape=inner_left,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_inner_stairs" }, - "facing=north,half=bottom,shape=inner_left,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_inner_stairs", "y": 180, "uvlock": true }, - - "facing=east,half=top,shape=straight,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_stairs_top", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=straight,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_stairs_top", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=straight,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_stairs_top", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=straight,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_stairs_top", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=outer_right,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_outer_stairs_top", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=outer_right,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_outer_stairs_top", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=outer_right,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_outer_stairs_top", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=outer_right,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_outer_stairs_top", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=outer_left,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_outer_stairs_top", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=outer_left,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_outer_stairs_top", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=outer_left,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_outer_stairs_top", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=outer_left,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_outer_stairs_top", "x": 180, "y": 270, "uvlock": true }, - "facing=east,half=top,shape=inner_right,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_inner_stairs_top", "x": 180, "y": 90, "uvlock": true }, - "facing=west,half=top,shape=inner_right,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_inner_stairs_top", "x": 180, "y": 270, "uvlock": true }, - "facing=south,half=top,shape=inner_right,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_inner_stairs_top", "x": 180, "y": 180, "uvlock": true }, - "facing=north,half=top,shape=inner_right,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_inner_stairs_top", "x": 180, "uvlock": true }, - "facing=east,half=top,shape=inner_left,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_inner_stairs_top", "x": 180, "uvlock": true }, - "facing=west,half=top,shape=inner_left,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_inner_stairs_top", "x": 180, "y": 180, "uvlock": true }, - "facing=south,half=top,shape=inner_left,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_inner_stairs_top", "x": 180, "y": 90, "uvlock": true }, - "facing=north,half=top,shape=inner_left,covering=snow_covered": { "model": "unicopia:block/enchanted_cloud_inner_stairs_top", "x": 180, "y": 270, "uvlock": true } - } -} diff --git a/src/main/resources/assets/unicopia/blockstates/enchanted_torch.json b/src/main/resources/assets/unicopia/blockstates/enchanted_torch.json deleted file mode 100644 index 8675f0d6..00000000 --- a/src/main/resources/assets/unicopia/blockstates/enchanted_torch.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "variants": { - "lit=true": { "model": "unicopia:block/enchanted_torch_lit" }, - "lit=false": { "model": "unicopia:block/enchanted_torch" } - } -} diff --git a/src/main/resources/assets/unicopia/blockstates/enchanted_wall_torch.json b/src/main/resources/assets/unicopia/blockstates/enchanted_wall_torch.json deleted file mode 100644 index ab188f8f..00000000 --- a/src/main/resources/assets/unicopia/blockstates/enchanted_wall_torch.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "variants": { - "facing=east,lit=true": { "model": "unicopia:block/enchanted_wall_torch_lit" }, - "facing=south,lit=true": { "model": "unicopia:block/enchanted_wall_torch_lit", "y": 90 }, - "facing=west,lit=true": { "model": "unicopia:block/enchanted_wall_torch_lit", "y": 180 }, - "facing=north,lit=true": { "model": "unicopia:block/enchanted_wall_torch_lit", "y": 270 }, - "facing=east,lit=false": { "model": "unicopia:block/enchanted_wall_torch" }, - "facing=south,lit=false": { "model": "unicopia:block/enchanted_wall_torch", "y": 90 }, - "facing=west,lit=false": { "model": "unicopia:block/enchanted_wall_torch", "y": 180 }, - "facing=north,lit=false": { "model": "unicopia:block/enchanted_wall_torch", "y": 270 } - } -} diff --git a/src/main/resources/assets/unicopia/blockstates/flower_pot.json b/src/main/resources/assets/unicopia/blockstates/flower_pot.json deleted file mode 100644 index 0e6dc8ca..00000000 --- a/src/main/resources/assets/unicopia/blockstates/flower_pot.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "plant=empty": { "model": "minecraft:block/flower_pot" }, - "plant=quill": { "model": "unicopia:block/flower_pot/feather" }, - "plant=meadowbrook": { "model": "unicopia:block/flower_pot/meadowbrook" } - } -} diff --git a/src/main/resources/assets/unicopia/blockstates/hive_wall_block.json b/src/main/resources/assets/unicopia/blockstates/hive_wall_block.json deleted file mode 100644 index 9f06e73c..00000000 --- a/src/main/resources/assets/unicopia/blockstates/hive_wall_block.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "variants": { - "axis=x,state=growing": { "model": "unicopia:block/hive_growing", "x": 90 }, - "axis=y,state=growing": { "model": "unicopia:block/hive_growing" }, - "axis=z,state=growing": { "model": "unicopia:block/hive_growing", "x": 90, "y": 90 }, - "axis=x,state=stable": { "model": "unicopia:block/hive_stable", "x": 90 }, - "axis=y,state=stable": { "model": "unicopia:block/hive_stable" }, - "axis=z,state=stable": { "model": "unicopia:block/hive_stable", "x": 90, "y": 90 }, - "axis=x,state=dying": { "model": "unicopia:block/hive_dying", "x": 90 }, - "axis=y,state=dying": { "model": "unicopia:block/hive_dying" }, - "axis=z,state=dying": { "model": "unicopia:block/hive_dying", "x": 90, "y": 90 } - } -} diff --git a/src/main/resources/assets/unicopia/blockstates/library_door.json b/src/main/resources/assets/unicopia/blockstates/library_door.json deleted file mode 100644 index 68053603..00000000 --- a/src/main/resources/assets/unicopia/blockstates/library_door.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "variants": { - "facing=east,half=lower,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/library_bottom" }, - "facing=south,half=lower,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/library_bottom", "y": 90 }, - "facing=west,half=lower,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/library_bottom", "y": 180 }, - "facing=north,half=lower,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/library_bottom", "y": 270 }, - "facing=east,half=lower,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/library_bottom_rh" }, - "facing=south,half=lower,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/library_bottom_rh", "y": 90 }, - "facing=west,half=lower,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/library_bottom_rh", "y": 180 }, - "facing=north,half=lower,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/library_bottom_rh", "y": 270 }, - "facing=east,half=lower,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/library_bottom_rh", "y": 90 }, - "facing=south,half=lower,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/library_bottom_rh", "y": 180 }, - "facing=west,half=lower,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/library_bottom_rh", "y": 270 }, - "facing=north,half=lower,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/library_bottom_rh" }, - "facing=east,half=lower,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/library_bottom", "y": 270 }, - "facing=south,half=lower,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/library_bottom" }, - "facing=west,half=lower,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/library_bottom", "y": 90 }, - "facing=north,half=lower,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/library_bottom", "y": 180 }, - "facing=east,half=upper,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/library_top" }, - "facing=south,half=upper,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/library_top", "y": 90 }, - "facing=west,half=upper,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/library_top", "y": 180 }, - "facing=north,half=upper,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/library_top", "y": 270 }, - "facing=east,half=upper,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/library_top_rh" }, - "facing=south,half=upper,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/library_top_rh", "y": 90 }, - "facing=west,half=upper,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/library_top_rh", "y": 180 }, - "facing=north,half=upper,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/library_top_rh", "y": 270 }, - "facing=east,half=upper,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/library_top_rh", "y": 90 }, - "facing=south,half=upper,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/library_top_rh", "y": 180 }, - "facing=west,half=upper,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/library_top_rh", "y": 270 }, - "facing=north,half=upper,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/library_top_rh" }, - "facing=east,half=upper,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/library_top", "y": 270 }, - "facing=south,half=upper,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/library_top" }, - "facing=west,half=upper,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/library_top", "y": 90 }, - "facing=north,half=upper,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/library_top", "y": 180 }, - "facing=east,half=lower,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/library_bottom" }, - "facing=south,half=lower,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/library_bottom", "y": 90 }, - "facing=west,half=lower,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/library_bottom", "y": 180 }, - "facing=north,half=lower,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/library_bottom", "y": 270 }, - "facing=east,half=lower,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/library_bottom_rh" }, - "facing=south,half=lower,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/library_bottom_rh", "y": 90 }, - "facing=west,half=lower,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/library_bottom_rh", "y": 180 }, - "facing=north,half=lower,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/library_bottom_rh", "y": 270 }, - "facing=east,half=lower,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/library_bottom_rh", "y": 90 }, - "facing=south,half=lower,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/library_bottom_rh", "y": 180 }, - "facing=west,half=lower,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/library_bottom_rh", "y": 270 }, - "facing=north,half=lower,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/library_bottom_rh" }, - "facing=east,half=lower,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/library_bottom", "y": 270 }, - "facing=south,half=lower,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/library_bottom" }, - "facing=west,half=lower,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/library_bottom", "y": 90 }, - "facing=north,half=lower,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/library_bottom", "y": 180 }, - "facing=east,half=upper,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/library_top" }, - "facing=south,half=upper,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/library_top", "y": 90 }, - "facing=west,half=upper,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/library_top", "y": 180 }, - "facing=north,half=upper,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/library_top", "y": 270 }, - "facing=east,half=upper,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/library_top_rh" }, - "facing=south,half=upper,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/library_top_rh", "y": 90 }, - "facing=west,half=upper,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/library_top_rh", "y": 180 }, - "facing=north,half=upper,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/library_top_rh", "y": 270 }, - "facing=east,half=upper,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/library_top_rh", "y": 90 }, - "facing=south,half=upper,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/library_top_rh", "y": 180 }, - "facing=west,half=upper,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/library_top_rh", "y": 270 }, - "facing=north,half=upper,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/library_top_rh" }, - "facing=east,half=upper,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/library_top", "y": 270 }, - "facing=south,half=upper,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/library_top" }, - "facing=west,half=upper,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/library_top", "y": 90 }, - "facing=north,half=upper,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/library_top", "y": 180 } - } -} diff --git a/src/main/resources/assets/unicopia/blockstates/misted_glass_door.json b/src/main/resources/assets/unicopia/blockstates/misted_glass_door.json deleted file mode 100644 index 1c0bbdfe..00000000 --- a/src/main/resources/assets/unicopia/blockstates/misted_glass_door.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "variants": { - "facing=east,half=lower,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/mist_bottom" }, - "facing=south,half=lower,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/mist_bottom", "y": 90 }, - "facing=west,half=lower,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/mist_bottom", "y": 180 }, - "facing=north,half=lower,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/mist_bottom", "y": 270 }, - "facing=east,half=lower,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/mist_bottom_rh" }, - "facing=south,half=lower,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/mist_bottom_rh", "y": 90 }, - "facing=west,half=lower,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/mist_bottom_rh", "y": 180 }, - "facing=north,half=lower,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/mist_bottom_rh", "y": 270 }, - "facing=east,half=lower,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/mist_bottom_rh", "y": 90 }, - "facing=south,half=lower,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/mist_bottom_rh", "y": 180 }, - "facing=west,half=lower,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/mist_bottom_rh", "y": 270 }, - "facing=north,half=lower,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/mist_bottom_rh" }, - "facing=east,half=lower,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/mist_bottom", "y": 270 }, - "facing=south,half=lower,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/mist_bottom" }, - "facing=west,half=lower,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/mist_bottom", "y": 90 }, - "facing=north,half=lower,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/mist_bottom", "y": 180 }, - "facing=east,half=upper,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/mist_top" }, - "facing=south,half=upper,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/mist_top", "y": 90 }, - "facing=west,half=upper,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/mist_top", "y": 180 }, - "facing=north,half=upper,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/mist_top", "y": 270 }, - "facing=east,half=upper,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/mist_top_rh" }, - "facing=south,half=upper,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/mist_top_rh", "y": 90 }, - "facing=west,half=upper,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/mist_top_rh", "y": 180 }, - "facing=north,half=upper,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/mist_top_rh", "y": 270 }, - "facing=east,half=upper,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/mist_top_rh", "y": 90 }, - "facing=south,half=upper,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/mist_top_rh", "y": 180 }, - "facing=west,half=upper,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/mist_top_rh", "y": 270 }, - "facing=north,half=upper,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/mist_top_rh" }, - "facing=east,half=upper,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/mist_top", "y": 270 }, - "facing=south,half=upper,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/mist_top" }, - "facing=west,half=upper,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/mist_top", "y": 90 }, - "facing=north,half=upper,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/mist_top", "y": 180 }, - "facing=east,half=lower,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/mist_bottom" }, - "facing=south,half=lower,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/mist_bottom", "y": 90 }, - "facing=west,half=lower,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/mist_bottom", "y": 180 }, - "facing=north,half=lower,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/mist_bottom", "y": 270 }, - "facing=east,half=lower,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/mist_bottom_rh" }, - "facing=south,half=lower,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/mist_bottom_rh", "y": 90 }, - "facing=west,half=lower,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/mist_bottom_rh", "y": 180 }, - "facing=north,half=lower,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/mist_bottom_rh", "y": 270 }, - "facing=east,half=lower,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/mist_bottom_rh", "y": 90 }, - "facing=south,half=lower,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/mist_bottom_rh", "y": 180 }, - "facing=west,half=lower,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/mist_bottom_rh", "y": 270 }, - "facing=north,half=lower,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/mist_bottom_rh" }, - "facing=east,half=lower,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/mist_bottom", "y": 270 }, - "facing=south,half=lower,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/mist_bottom" }, - "facing=west,half=lower,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/mist_bottom", "y": 90 }, - "facing=north,half=lower,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/mist_bottom", "y": 180 }, - "facing=east,half=upper,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/mist_top" }, - "facing=south,half=upper,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/mist_top", "y": 90 }, - "facing=west,half=upper,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/mist_top", "y": 180 }, - "facing=north,half=upper,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/mist_top", "y": 270 }, - "facing=east,half=upper,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/mist_top_rh" }, - "facing=south,half=upper,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/mist_top_rh", "y": 90 }, - "facing=west,half=upper,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/mist_top_rh", "y": 180 }, - "facing=north,half=upper,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/mist_top_rh", "y": 270 }, - "facing=east,half=upper,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/mist_top_rh", "y": 90 }, - "facing=south,half=upper,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/mist_top_rh", "y": 180 }, - "facing=west,half=upper,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/mist_top_rh", "y": 270 }, - "facing=north,half=upper,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/mist_top_rh" }, - "facing=east,half=upper,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/mist_top", "y": 270 }, - "facing=south,half=upper,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/mist_top" }, - "facing=west,half=upper,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/mist_top", "y": 90 }, - "facing=north,half=upper,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/mist_top", "y": 180 } - } -} diff --git a/src/main/resources/assets/unicopia/blockstates/slime_drip.json b/src/main/resources/assets/unicopia/blockstates/slime_drip.json deleted file mode 100644 index 1330929a..00000000 --- a/src/main/resources/assets/unicopia/blockstates/slime_drip.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "variants": { - "age=0,shape=bulb": { "model": "unicopia:block/slime_drip/bulb_stage0" }, - "age=1,shape=bulb": { "model": "unicopia:block/slime_drip/bulb_stage0" }, - "age=2,shape=bulb": { "model": "unicopia:block/slime_drip/bulb_stage1" }, - "age=3,shape=bulb": { "model": "unicopia:block/slime_drip/bulb_stage1" }, - "age=4,shape=bulb": { "model": "unicopia:block/slime_drip/bulb_stage2" }, - "age=5,shape=bulb": { "model": "unicopia:block/slime_drip/bulb_stage2" }, - "age=6,shape=bulb": { "model": "unicopia:block/slime_drip/bulb_stage3" }, - "age=7,shape=bulb": { "model": "unicopia:block/slime_drip/bulb_stage3" }, - "age=0,shape=tail": { "model": "unicopia:block/slime_drip/tail_stage0" }, - "age=1,shape=tail": { "model": "unicopia:block/slime_drip/tail_stage0" }, - "age=2,shape=tail": { "model": "unicopia:block/slime_drip/tail_stage1" }, - "age=3,shape=tail": { "model": "unicopia:block/slime_drip/tail_stage1" }, - "age=4,shape=tail": { "model": "unicopia:block/slime_drip/tail_stage2" }, - "age=5,shape=tail": { "model": "unicopia:block/slime_drip/tail_stage2" }, - "age=6,shape=tail": { "model": "unicopia:block/slime_drip/tail_stage3" }, - "age=7,shape=tail": { "model": "unicopia:block/slime_drip/tail_stage3" } - } -} diff --git a/src/main/resources/assets/unicopia/blockstates/slime_layer.json b/src/main/resources/assets/unicopia/blockstates/slime_layer.json deleted file mode 100644 index 59818564..00000000 --- a/src/main/resources/assets/unicopia/blockstates/slime_layer.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "variants": { - "layers=1": { "model": "unicopia:block/slime_layer/layer_2" }, - "layers=2": { "model": "unicopia:block/slime_layer/layer_4" }, - "layers=3": { "model": "unicopia:block/slime_layer/layer_6" }, - "layers=4": { "model": "unicopia:block/slime_layer/layer_8" }, - "layers=5": { "model": "unicopia:block/slime_layer/layer_10" }, - "layers=6": { "model": "unicopia:block/slime_layer/layer_12" }, - "layers=7": { "model": "unicopia:block/slime_layer/layer_14" }, - "layers=8": { "model": "minecraft:block/slime_block" } - } -} diff --git a/src/main/resources/assets/unicopia/blockstates/smooth_marble_block.json b/src/main/resources/assets/unicopia/blockstates/smooth_marble_block.json deleted file mode 100644 index f948d99b..00000000 --- a/src/main/resources/assets/unicopia/blockstates/smooth_marble_block.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "variants": { - "": { "model": "unicopia:block/smooth_marble_block" } - } -} diff --git a/src/main/resources/assets/unicopia/blockstates/smooth_marble_slab.json b/src/main/resources/assets/unicopia/blockstates/smooth_marble_slab.json deleted file mode 100644 index b7c9e048..00000000 --- a/src/main/resources/assets/unicopia/blockstates/smooth_marble_slab.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "type=bottom": { "model": "unicopia:block/smooth_marble_slab" }, - "type=top": { "model": "unicopia:block/smooth_marble_slab_top" }, - "type=double": { "model": "unicopia:block/smooth_marble_block" } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/blockstates/stick.json b/src/main/resources/assets/unicopia/blockstates/stick.json deleted file mode 100644 index b90bed6c..00000000 --- a/src/main/resources/assets/unicopia/blockstates/stick.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "variants": { - "": { "model": "unicopia:block/tomato_plant/stage0" } - } -} diff --git a/src/main/resources/assets/unicopia/blockstates/sugar_block.json b/src/main/resources/assets/unicopia/blockstates/sugar_block.json deleted file mode 100644 index 290628ff..00000000 --- a/src/main/resources/assets/unicopia/blockstates/sugar_block.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "variants": { - "": { "model": "unicopia:block/sugar_block" } - } -} diff --git a/src/main/resources/assets/unicopia/blockstates/tomato_plant.json b/src/main/resources/assets/unicopia/blockstates/tomato_plant.json deleted file mode 100644 index f0ed5793..00000000 --- a/src/main/resources/assets/unicopia/blockstates/tomato_plant.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "variants": { - "age=0": { "model": "unicopia:block/tomato_plant/stage0" }, - "age=1": { "model": "unicopia:block/tomato_plant/stage1" }, - "age=2": { "model": "unicopia:block/tomato_plant/stage1" }, - "age=3": { "model": "unicopia:block/tomato_plant/stage2" }, - "age=4": { "model": "unicopia:block/tomato_plant/stage2" }, - "age=5": { "model": "unicopia:block/tomato_plant/stage3" }, - "age=6": { "model": "unicopia:block/tomato_plant/stage4" }, - "age=7": { "model": "unicopia:block/tomato_plant/stage4" } - } -} diff --git a/src/main/resources/assets/unicopia/lang/en_us.json b/src/main/resources/assets/unicopia/lang/en_us.json index 4c51a6ce..02af8a14 100644 --- a/src/main/resources/assets/unicopia/lang/en_us.json +++ b/src/main/resources/assets/unicopia/lang/en_us.json @@ -1,77 +1,7 @@ { - "block.unicopia.cloud_block": "Block of Cloud", - "block.unicopia.dense_cloud_block": "Dense Cloud", - "block.unicopia.enchanted_cloud_block": "Enchanted Cloud", - - "block.unicopia.dense_cloud_pillar": "Dense Cloud Pillar", - - "block.unicopia.cloud_slab": "Cloud Slab", - "block.unicopia.dense_cloud_slab": "Dense Cloud Slab", - "block.unicopia.enchanted_cloud_slab": "Enchanted Cloud Slab", - - "block.unicopia.cloud_stairs": "Cloud Stairs", - "block.unicopia.dense_cloud_stairs": "Dense Cloud Stairs", - "block.unicopia.enchanted_cloud_stairs": "Enchanted Cloud Stairs", - - "block.unicopia.cloud_fence": "Cloud Fence", - "block.unicopia.cloud_farmland": "Tilled Clouds", - "block.unicopia.cloud_anvil": "Cloud Anvil", - - "block.unicopia.hive_wall_block": "Hive Wall Block", - "block.unicopia.chitin_shell_block": "Chitin Shell Block", - "block.unicopia.chitin_shell_stairs": "Chitin Shell Stairs", - "block.unicopia.chitin_shell_slab": "Chitin Shell Slab", - "block.unicopia.chiseled_chitin_shell_block": "Chiseled Chitin Shell Block", - "block.unicopia.chitin_shell": "Chitin Shell", - "block.unicopia.slime_drop": "Slimey Plant", - "block.unicopia.slime_layer": "Slime", - - "block.unicopia.chiseled_marble_block": "Chiseled Marble Block", - "block.unicopia.smooth_marble_block": "Smooth Marble Block", - "block.unicopia.smooth_marble_slab": "Smooth Marble Slab", - - "block.unicopia.apple_leaves": "Apple Leaves", - "block.unicopia.apple_sapling": "Apple Seeds", - - "block.unicopia.sugar_block": "Block of Sugar", - - "block.unicopia.enchanted_torch": "Enchanted Torch", - - "block.unicopia.misted_glass_door": "Misted Glass Door", - "block.unicopia.library_door": "Dutch Library Door", - "block.unicopia.bakery_door": "Dutch Bakery Door", - "block.unicopia.diamond_door": "Diamond Door", - - "item.unicopia.cloud_spawn_egg": "Cloud Spawn Egg", - "item.unicopia.butterfly_spawn_egg": "Butterfly Spawn Egg", - - "item.unicopia.cloud_matter": "Lump of Cloud", - "item.unicopia.racing_cloud_spawner": "Racing Cloud", - "item.unicopia.construction_cloud_spawner": "Construction Cloud", - "item.unicopia.wild_cloud_spawner": "Wild Cloud", - - "item.unicopia.dew_drop": "Dew Drop", - "item.unicopia.chitin_shell": "Chitinous Shell", - - "item.unicopia.cucoon": "Cucoon", - "item.unicopia.moss": "Moss", - "item.unicopia.meadow_brook_staff": "Meadow Brook's Staff", - "item.unicopia.meadow_brook_staff.tagline": "It's a big stick", - "item.unicopia.remembrance_staff": "Staff of Remembrance", - "item.unicopia.spear": "Spear", - "item.unicopia.alicorn_amulet": "The Alicorn Amulet", - "item.unicopia.alicorn_amulet.tagline": "Time Worn: %s", "block.unicopia.bed.youAreAMonster": "You may not rest here, you are the monster", - "item.unicopia.gem": "Gem", - "item.unicopia.gem.enchanted": "Gem of %s", - "item.unicopia.corrupted_gem": "Fractured Gem", - "item.unicopia.corrupted_gem.enchanted": "Fractured Gem of %s", - - "item.unicopia.spellbook": "Spellbook", - "item.unicopia.bag_of_holding": "Bag of Holding", - "item.unicopia.green_apple": "Granny Smith Apple", "item.unicopia.sweet_apple": "Sweet Apple Acres Apple", "item.unicopia.sour_apple": "Sour Apple", @@ -79,31 +9,6 @@ "item.unicopia.cooked_zap_apple": "Cooked Zap Apple", "item.unicopia.zap_apple": "Zap Apple", - "item.unicopia.apple_seeds": "Apple Seeds", - - "item.unicopia.tomato": "Tomato", - "item.unicopia.rotten_tomato": "Rotten Tomato", - "item.unicopia.tomato_seeds": "Tomato Seeds", - - "item.unicopia.cloudsdale_tomato": "Cloudsdale Tomato", - "item.unicopia.rotten_cloudsdale_tomato": "Rotten Cloudsdale Tomato", - - "item.unicopia.alfalfa_leaves": "Alfalfa", - "item.unicopia.alfalfa_seeds": "Grain", - - "item.unicopia.cereal": "Breakfast Cereal", - "item.unicopia.boop_o_roops": "Boop 'o Roops", - "item.unicopia.daffodil_daisy_sandwich": "Daffodil Daisy Sandwich", - "item.unicopia.hay_burger": "Hay Burger", - "item.unicopia.hay_fries": "Hay Fries", - "item.unicopia.salad": "Salad", - "item.unicopia.wheat_worms": "Wheat Worms", - "item.unicopia.apple_cider": "Apple Cider", - "item.unicopia.mug": "Mug", - - "item.unicopia.juice": "Juice", - "item.unicopia.burned_juice": "Burned Juice", - "item.unicopia.music_disc_pet": "Music Disc", "item.unicopia.music_disc_pet.desc": "Danial Ingram - pet", "item.unicopia.music_disc_popular": "Music Disc", @@ -305,19 +210,6 @@ "death.attack.food_poisoning": "%1$s died of food poisoning", "death.attack.food_poisoning.attacker": "%2$s poisoned %1$s to death", - "advancements.adventure.bag_of_holding.title": "Read the Manual", - "advancements.adventure.bag_of_holding.description": "Successfully die using the Bag of Holding", - "advancements.adventure.bag_of_holding_2.title": "Oops! I did it again", - "advancements.adventure.bag_of_holding_2.description": "Die by the Bag of Holding a second time", - "advancements.adventure.bag_of_holding_3.title": "Oh come on!", - "advancements.adventure.bag_of_holding_3.description": "-_-", - "advancements.adventure.first_staff.title": "Baby Steps", - "advancements.adventure.first_staff.description": "Craft your first staff", - "advancements.adventure.just_a_stick.title": "Old 'n Busted", - "advancements.adventure.just_a_stick.description": "It's a stick. What did you expect?", - "advancements.adventure.unicopia_beginning.title": "Just the beginning...", - "advancements.adventure.unicopia_beginning.description": "Found your first gem, but what can it do?", - "effect.food_poisoning": "Food Poisoning", "unicopia.subtitle.flap_wings": "Wing Flaps", diff --git a/src/main/resources/assets/unicopia/models/block/alfalfa_crops/shaft.json b/src/main/resources/assets/unicopia/models/block/alfalfa_crops/shaft.json deleted file mode 100644 index fff5865a..00000000 --- a/src/main/resources/assets/unicopia/models/block/alfalfa_crops/shaft.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/crop", - "textures": { - "crop": "unicopia:blocks/alfalfa/shaft" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/alfalfa_crops/stage0.json b/src/main/resources/assets/unicopia/models/block/alfalfa_crops/stage0.json deleted file mode 100644 index 6b5849d9..00000000 --- a/src/main/resources/assets/unicopia/models/block/alfalfa_crops/stage0.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/crop", - "textures": { - "crop": "unicopia:blocks/alfalfa/stage_0" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/alfalfa_crops/stage1.json b/src/main/resources/assets/unicopia/models/block/alfalfa_crops/stage1.json deleted file mode 100644 index bf8b82df..00000000 --- a/src/main/resources/assets/unicopia/models/block/alfalfa_crops/stage1.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/crop", - "textures": { - "crop": "unicopia:blocks/alfalfa/stage_1" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/alfalfa_crops/stage2.json b/src/main/resources/assets/unicopia/models/block/alfalfa_crops/stage2.json deleted file mode 100644 index 4b66d294..00000000 --- a/src/main/resources/assets/unicopia/models/block/alfalfa_crops/stage2.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/crop", - "textures": { - "crop": "unicopia:blocks/alfalfa/stage_2" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/alfalfa_crops/stage3.json b/src/main/resources/assets/unicopia/models/block/alfalfa_crops/stage3.json deleted file mode 100644 index 2998e970..00000000 --- a/src/main/resources/assets/unicopia/models/block/alfalfa_crops/stage3.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/crop", - "textures": { - "crop": "unicopia:blocks/alfalfa/stage_3" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/alfalfa_crops/stage4.json b/src/main/resources/assets/unicopia/models/block/alfalfa_crops/stage4.json deleted file mode 100644 index a53a783c..00000000 --- a/src/main/resources/assets/unicopia/models/block/alfalfa_crops/stage4.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/crop", - "textures": { - "crop": "unicopia:blocks/alfalfa/stage_4" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/apple_leaves.json b/src/main/resources/assets/unicopia/models/block/apple_leaves.json deleted file mode 100644 index ff8128c3..00000000 --- a/src/main/resources/assets/unicopia/models/block/apple_leaves.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/leaves", - "textures": { - "all": "unicopia:blocks/leaves_apple" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/apple_leaves_heavy.json b/src/main/resources/assets/unicopia/models/block/apple_leaves_heavy.json deleted file mode 100644 index 11f22539..00000000 --- a/src/main/resources/assets/unicopia/models/block/apple_leaves_heavy.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "parent": "block/leaves", - "textures": { - "all": "unicopia:blocks/leaves_apple", - "fruit": "minecraft:item/apple" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 16, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#all", "tintindex": 0, "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#all", "tintindex": 0, "cullface": "up" }, - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#all", "tintindex": 0, "cullface": "north" }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#all", "tintindex": 0, "cullface": "south" }, - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#all", "tintindex": 0, "cullface": "west" }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#all", "tintindex": 0, "cullface": "east" } - } - }, - { "from": [ 0.8, 0, 8 ], - "to": [ 15.2, 16, 8 ], - "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#fruit" }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#fruit" } - } - }, - { "from": [ 8, 0, 0.8 ], - "to": [ 8, 16, 15.2 ], - "rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, - "shade": false, - "faces": { - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#fruit" }, - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#fruit" } - } - } - ] -} diff --git a/src/main/resources/assets/unicopia/models/block/apple_sapling.json b/src/main/resources/assets/unicopia/models/block/apple_sapling.json deleted file mode 100644 index 7e308cfb..00000000 --- a/src/main/resources/assets/unicopia/models/block/apple_sapling.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cross", - "textures": { - "cross": "unicopia:blocks/sapling_apple" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/chiseled_chitin_shell_block.json b/src/main/resources/assets/unicopia/models/block/chiseled_chitin_shell_block.json deleted file mode 100644 index 8b2206ab..00000000 --- a/src/main/resources/assets/unicopia/models/block/chiseled_chitin_shell_block.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "bottom": "unicopia:blocks/chitin_block_covered", - "particle": "unicopia:blocks/chitin_block_uncovered", - "top": "unicopia:blocks/chitin_block_chissled_full", - "side": "unicopia:blocks/chitin_block_chissled_half" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 16, 16 ], - "faces": { - "down": { "texture": "#bottom", "cullface": "down" }, - "up": { "texture": "#top", "cullface": "up" }, - "north": { "texture": "#side", "cullface": "north" }, - "south": { "texture": "#side", "cullface": "south" }, - "west": { "texture": "#side", "cullface": "west" }, - "east": { "texture": "#side", "cullface": "east" } - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/block/chiseled_marble_block.json b/src/main/resources/assets/unicopia/models/block/chiseled_marble_block.json deleted file mode 100644 index 155c6ad4..00000000 --- a/src/main/resources/assets/unicopia/models/block/chiseled_marble_block.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "block/cube_column", - "textures": { - "end": "unicopia:blocks/smooth_marble_block", - "side": "unicopia:blocks/chiseled_marble_block_side" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/block/chitin_shell_block.json b/src/main/resources/assets/unicopia/models/block/chitin_shell_block.json deleted file mode 100644 index 63d5ccde..00000000 --- a/src/main/resources/assets/unicopia/models/block/chitin_shell_block.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "bottom": "unicopia:blocks/chitin_block_covered", - "top": "unicopia:blocks/chitin_block_top", - "side": "unicopia:blocks/chitin_block_uncovered", - "particle": "#side" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 16, 16 ], - "faces": { - "down": { "texture": "#bottom", "cullface": "down" }, - "up": { "texture": "#top", "cullface": "up" }, - "north": { "texture": "#side", "cullface": "north" }, - "south": { "texture": "#side", "cullface": "south" }, - "west": { "texture": "#side", "cullface": "west" }, - "east": { "texture": "#side", "cullface": "east" } - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/block/chitin_shell_block_covered.json b/src/main/resources/assets/unicopia/models/block/chitin_shell_block_covered.json deleted file mode 100644 index 4f6cc99c..00000000 --- a/src/main/resources/assets/unicopia/models/block/chitin_shell_block_covered.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/cube_bottom_top", - "textures": { - "bottom": "unicopia:blocks/chitin_block_covered", - "top": "unicopia:blocks/chitin_block_top", - "side": "unicopia:blocks/chitin_block_covered" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/block/chitin_shell_block_snow.json b/src/main/resources/assets/unicopia/models/block/chitin_shell_block_snow.json deleted file mode 100644 index fca60bf2..00000000 --- a/src/main/resources/assets/unicopia/models/block/chitin_shell_block_snow.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/cube_bottom_top", - "textures": { - "bottom": "unicopia:blocks/chitin_block_covered", - "top": "unicopia:blocks/chitin_block_top", - "side": "unicopia:blocks/chitin_block_snow_covered" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/block/chitin_shell_inner_stairs.json b/src/main/resources/assets/unicopia/models/block/chitin_shell_inner_stairs.json deleted file mode 100644 index 0510a007..00000000 --- a/src/main/resources/assets/unicopia/models/block/chitin_shell_inner_stairs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ "parent": "unicopia:block/cloud_inner_stairs", - "textures": { - "bottom": "unicopia:blocks/chitin_block_covered", - "top": "unicopia:blocks/chitin_block_top", - "side": "unicopia:blocks/chitin_block_uncovered", - "step": "unicopia:blocks/chitin_shell_slab_side_uncovered" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/chitin_shell_inner_stairs_covered.json b/src/main/resources/assets/unicopia/models/block/chitin_shell_inner_stairs_covered.json deleted file mode 100644 index 11a1ab8c..00000000 --- a/src/main/resources/assets/unicopia/models/block/chitin_shell_inner_stairs_covered.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "parent": "unicopia:block/chitin_shell_inner_stairs", - "textures": { - "side": "unicopia:blocks/chitin_block_covered" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/chitin_shell_inner_stairs_top.json b/src/main/resources/assets/unicopia/models/block/chitin_shell_inner_stairs_top.json deleted file mode 100644 index 29cdd722..00000000 --- a/src/main/resources/assets/unicopia/models/block/chitin_shell_inner_stairs_top.json +++ /dev/null @@ -1,6 +0,0 @@ -{ "parent": "unicopia:block/chitin_shell_inner_stairs", - "textures": { - "bottom": "unicopia:blocks/chitin_block_top", - "top": "unicopia:blocks/chitin_block_covered" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/chitin_shell_inner_stairs_top_covered.json b/src/main/resources/assets/unicopia/models/block/chitin_shell_inner_stairs_top_covered.json deleted file mode 100644 index a9e68d59..00000000 --- a/src/main/resources/assets/unicopia/models/block/chitin_shell_inner_stairs_top_covered.json +++ /dev/null @@ -1,6 +0,0 @@ -{ "parent": "unicopia:block/chitin_shell_inner_stairs_top", - "textures": { - "side": "unicopia:blocks/chitin_block_covered", - "step": "unicopia:blocks/chitin_block_covered" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/chitin_shell_outer_stairs.json b/src/main/resources/assets/unicopia/models/block/chitin_shell_outer_stairs.json deleted file mode 100644 index 36c37729..00000000 --- a/src/main/resources/assets/unicopia/models/block/chitin_shell_outer_stairs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ "parent": "unicopia:block/cloud_outer_stairs", - "textures": { - "bottom": "unicopia:blocks/chitin_block_covered", - "top": "unicopia:blocks/chitin_block_top", - "side": "unicopia:blocks/chitin_block_uncovered", - "step": "unicopia:blocks/chitin_shell_slab_side_uncovered" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/chitin_shell_outer_stairs_covered.json b/src/main/resources/assets/unicopia/models/block/chitin_shell_outer_stairs_covered.json deleted file mode 100644 index 616eb06a..00000000 --- a/src/main/resources/assets/unicopia/models/block/chitin_shell_outer_stairs_covered.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "parent": "unicopia:block/chitin_shell_outer_stairs", - "textures": { - "side": "unicopia:blocks/chitin_block_covered" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/chitin_shell_outer_stairs_top.json b/src/main/resources/assets/unicopia/models/block/chitin_shell_outer_stairs_top.json deleted file mode 100644 index f8d50c20..00000000 --- a/src/main/resources/assets/unicopia/models/block/chitin_shell_outer_stairs_top.json +++ /dev/null @@ -1,6 +0,0 @@ -{ "parent": "unicopia:block/chitin_shell_outer_stairs", - "textures": { - "bottom": "unicopia:blocks/chitin_block_top", - "top": "unicopia:blocks/chitin_block_covered" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/chitin_shell_outer_stairs_top_covered.json b/src/main/resources/assets/unicopia/models/block/chitin_shell_outer_stairs_top_covered.json deleted file mode 100644 index 7c766964..00000000 --- a/src/main/resources/assets/unicopia/models/block/chitin_shell_outer_stairs_top_covered.json +++ /dev/null @@ -1,6 +0,0 @@ -{ "parent": "unicopia:block/chitin_shell_outer_stairs_top", - "textures": { - "side": "unicopia:blocks/chitin_block_covered", - "step": "unicopia:blocks/chitin_block_covered" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/chitin_shell_slab.json b/src/main/resources/assets/unicopia/models/block/chitin_shell_slab.json deleted file mode 100644 index af6b37e0..00000000 --- a/src/main/resources/assets/unicopia/models/block/chitin_shell_slab.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/slab", - "textures": { - "bottom": "unicopia:blocks/chitin_block_covered", - "top": "unicopia:blocks/chitin_block_top", - "side": "unicopia:blocks/chitin_shell_slab_side_uncovered" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/chitin_shell_slab_top.json b/src/main/resources/assets/unicopia/models/block/chitin_shell_slab_top.json deleted file mode 100644 index b90dad4d..00000000 --- a/src/main/resources/assets/unicopia/models/block/chitin_shell_slab_top.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/slab_top", - "textures": { - "bottom": "unicopia:blocks/chitin_block_covered", - "top": "unicopia:blocks/chitin_block_top", - "side": "unicopia:blocks/chitin_shell_slab_side_uncovered" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/chitin_shell_slab_top_covered.json b/src/main/resources/assets/unicopia/models/block/chitin_shell_slab_top_covered.json deleted file mode 100644 index 9067f181..00000000 --- a/src/main/resources/assets/unicopia/models/block/chitin_shell_slab_top_covered.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/slab_top", - "textures": { - "bottom": "unicopia:blocks/chitin_block_covered", - "top": "unicopia:blocks/chitin_block_top", - "side": "unicopia:blocks/chitin_block_covered" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/chitin_shell_slab_top_snow.json b/src/main/resources/assets/unicopia/models/block/chitin_shell_slab_top_snow.json deleted file mode 100644 index 9cf2e30f..00000000 --- a/src/main/resources/assets/unicopia/models/block/chitin_shell_slab_top_snow.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/slab_top", - "textures": { - "bottom": "unicopia:blocks/chitin_block_covered", - "top": "unicopia:blocks/chitin_block_top", - "side": "unicopia:blocks/chitin_block_snow_covered" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/chitin_shell_stairs.json b/src/main/resources/assets/unicopia/models/block/chitin_shell_stairs.json deleted file mode 100644 index a9519ac1..00000000 --- a/src/main/resources/assets/unicopia/models/block/chitin_shell_stairs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ "parent": "unicopia:block/cloud_stairs", - "textures": { - "bottom": "unicopia:blocks/chitin_block_covered", - "top": "unicopia:blocks/chitin_block_top", - "side": "unicopia:blocks/chitin_block_uncovered", - "step": "unicopia:blocks/chitin_shell_slab_side_uncovered" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/chitin_shell_stairs_covered.json b/src/main/resources/assets/unicopia/models/block/chitin_shell_stairs_covered.json deleted file mode 100644 index 7d04771b..00000000 --- a/src/main/resources/assets/unicopia/models/block/chitin_shell_stairs_covered.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "parent": "unicopia:block/chitin_shell_stairs", - "textures": { - "side": "unicopia:blocks/chitin_block_covered" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/chitin_shell_stairs_top.json b/src/main/resources/assets/unicopia/models/block/chitin_shell_stairs_top.json deleted file mode 100644 index 17474c39..00000000 --- a/src/main/resources/assets/unicopia/models/block/chitin_shell_stairs_top.json +++ /dev/null @@ -1,6 +0,0 @@ -{ "parent": "unicopia:block/chitin_shell_stairs", - "textures": { - "bottom": "unicopia:blocks/chitin_block_top", - "top": "unicopia:blocks/chitin_block_covered" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/chitin_shell_stairs_top_covered.json b/src/main/resources/assets/unicopia/models/block/chitin_shell_stairs_top_covered.json deleted file mode 100644 index 9abd45af..00000000 --- a/src/main/resources/assets/unicopia/models/block/chitin_shell_stairs_top_covered.json +++ /dev/null @@ -1,6 +0,0 @@ -{ "parent": "unicopia:block/chitin_shell_stairs_top", - "textures": { - "side": "unicopia:blocks/chitin_block_covered", - "step": "unicopia:blocks/chitin_block_covered" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/cloud_anvil.json b/src/main/resources/assets/unicopia/models/block/cloud_anvil.json deleted file mode 100644 index 82d878fe..00000000 --- a/src/main/resources/assets/unicopia/models/block/cloud_anvil.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/anvil", - "textures": { - "particle": "unicopia:blocks/cloud_block", - "body": "unicopia:blocks/cloud_block", - "top": "unicopia:blocks/cloud_block" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/cloud_block.json b/src/main/resources/assets/unicopia/models/block/cloud_block.json deleted file mode 100644 index 13cddf88..00000000 --- a/src/main/resources/assets/unicopia/models/block/cloud_block.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "unicopia:blocks/cloud_block" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/block/cloud_cube.json b/src/main/resources/assets/unicopia/models/block/cloud_cube.json deleted file mode 100644 index 5bf3dc59..00000000 --- a/src/main/resources/assets/unicopia/models/block/cloud_cube.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "parent": "block/cube_all", - "display": { - "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } - }, - "elements": [ - { - "from": [ 2, 4, 2 ], - "to": [ 14, 12, 14 ], - "faces": { - "down": { "texture": "#down" }, - "up": { "texture": "#up" }, - "north": { "texture": "#north" }, - "south": { "texture": "#south" }, - "west": { "texture": "#west" }, - "east": { "texture": "#east" } - } - } - ] -} diff --git a/src/main/resources/assets/unicopia/models/block/cloud_fence_inventory.json b/src/main/resources/assets/unicopia/models/block/cloud_fence_inventory.json deleted file mode 100644 index 3a8dbc3b..00000000 --- a/src/main/resources/assets/unicopia/models/block/cloud_fence_inventory.json +++ /dev/null @@ -1,69 +0,0 @@ -{ "parent": "block/block", - "display": { - "gui": { - "rotation": [ 30, 135, 0 ], - "translation": [ 0, 0, 0], - "scale":[ 0.625, 0.625, 0.625 ] - }, - "fixed": { - "rotation": [ 0, 90, 0 ], - "translation": [ 0, 0, 0], - "scale":[ 0.5, 0.5, 0.5 ] - } - }, - "ambientocclusion": false, - "textures": { - "texture": "unicopia:blocks/dense_cloud_block", - "particle": "#texture" - }, - "elements": [ - { "from": [ 6, 0, 0 ], - "to": [ 10, 16, 4 ], - "faces": { - "down": { "uv": [ 6, 0, 10, 4 ], "texture": "#texture", "cullface": "down" }, - "up": { "uv": [ 6, 0, 10, 4 ], "texture": "#texture" }, - "north": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" }, - "south": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" }, - "west": { "uv": [ 0, 0, 4, 16 ], "texture": "#texture" }, - "east": { "uv": [ 0, 0, 4, 16 ], "texture": "#texture" } - }, - "__comment": "Left post" - }, - { "from": [ 6, 0, 12 ], - "to": [ 10, 16, 16 ], - "faces": { - "down": { "uv": [ 6, 12, 10, 16 ], "texture": "#texture", "cullface": "down" }, - "up": { "uv": [ 6, 12, 10, 16 ], "texture": "#texture" }, - "north": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" }, - "south": { "uv": [ 6, 0, 10, 16 ], "texture": "#texture" }, - "west": { "uv": [ 12, 0, 16, 16 ], "texture": "#texture" }, - "east": { "uv": [ 12, 0, 16, 16 ], "texture": "#texture" } - }, - "__comment": "Right post" - }, - { "from": [ 7, 10, -2 ], - "to": [ 9, 15, 18 ], - "faces": { - "down": { "uv": [ 7, 0, 9, 16 ], "texture": "#texture" }, - "up": { "uv": [ 7, 0, 9, 16 ], "texture": "#texture" }, - "north": { "uv": [ 7, 1, 9, 3 ], "texture": "#texture" }, - "south": { "uv": [ 7, 1, 9, 3 ], "texture": "#texture" }, - "west": { "uv": [ 0, 1, 16, 3 ], "texture": "#texture" }, - "east": { "uv": [ 0, 1, 16, 3 ], "texture": "#texture" } - }, - "__comment": "Top bar" - }, - { "from": [ 7, 6, -2 ], - "to": [ 9, 9, 18 ], - "faces": { - "down": { "uv": [ 7, 0, 9, 16 ], "texture": "#texture" }, - "up": { "uv": [ 7, 0, 9, 16 ], "texture": "#texture" }, - "north": { "uv": [ 7, 9, 9, 11 ], "texture": "#texture" }, - "south": { "uv": [ 7, 9, 9, 11 ], "texture": "#texture" }, - "west": { "uv": [ 0, 9, 16, 11 ], "texture": "#texture" }, - "east": { "uv": [ 0, 9, 16, 11 ], "texture": "#texture" } - }, - "__comment": "Lower bar" - } - ] -} diff --git a/src/main/resources/assets/unicopia/models/block/cloud_fence_post.json b/src/main/resources/assets/unicopia/models/block/cloud_fence_post.json deleted file mode 100644 index 136ccb27..00000000 --- a/src/main/resources/assets/unicopia/models/block/cloud_fence_post.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/fence_post", - "textures": { - "texture": "unicopia:blocks/dense_cloud_block" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/cloud_fence_side.json b/src/main/resources/assets/unicopia/models/block/cloud_fence_side.json deleted file mode 100644 index c8f185a0..00000000 --- a/src/main/resources/assets/unicopia/models/block/cloud_fence_side.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "textures": { - "texture": "unicopia:blocks/dense_cloud_block", - "particle": "#texture" - }, - "elements": [ - { "from": [ 7, 10, 0 ], - "to": [ 9, 15, 9 ], - "faces": { - "down": { "uv": [ 7, 0, 9, 9 ], "texture": "#texture" }, - "up": { "uv": [ 7, 0, 9, 9 ], "texture": "#texture" }, - "north": { "uv": [ 7, 1, 9, 4 ], "texture": "#texture", "cullface": "north" }, - "west": { "uv": [ 0, 1, 9, 4 ], "texture": "#texture" }, - "east": { "uv": [ 0, 1, 9, 4 ], "texture": "#texture" } - }, - "__comment": "top bar" - }, - { "from": [ 7, 6, 0 ], - "to": [ 9, 9, 9 ], - "faces": { - "down": { "uv": [ 7, 0, 9, 9 ], "texture": "#texture" }, - "up": { "uv": [ 7, 0, 9, 9 ], "texture": "#texture" }, - "north": { "uv": [ 7, 7, 9, 10 ], "texture": "#texture", "cullface": "north" }, - "west": { "uv": [ 0, 7, 9, 10 ], "texture": "#texture" }, - "east": { "uv": [ 0, 7, 9, 10 ], "texture": "#texture" } - }, - "__comment": "lower bar" - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/block/cloud_inner_stairs.json b/src/main/resources/assets/unicopia/models/block/cloud_inner_stairs.json deleted file mode 100644 index a6cfc4b5..00000000 --- a/src/main/resources/assets/unicopia/models/block/cloud_inner_stairs.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "textures": { - "bottom": "unicopia:blocks/cloud_block", - "top": "#bottom", - "particle": "#bottom", - "side": "#bottom", - "step": "#bottom" - }, - "elements": [ - { - "from": [0, 0, 0], - "to": [8, 8, 8], - "faces": { - "north": {"uv": [0, 8, 8, 16], "texture": "#step", "cullface": "north"}, - "west": {"uv": [0, 8, 8, 16], "texture": "#step", "cullface": "west"}, - "up": {"uv": [0, 0, 8, 8], "texture": "#top"}, - "down": {"uv": [0, 0, 8, 8], "texture": "#bottom", "cullface": "down"} - } - }, - { - "from": [8, 0, 0], - "to": [16, 16, 16], - "faces": { - "north": {"uv": [0, 0, 8, 16], "texture": "#side", "cullface": "north"}, - "east": {"uv": [0, 0, 16, 16], "texture": "#side", "cullface": "east"}, - "south": {"uv": [8, 0, 16, 16], "texture": "#side", "cullface": "south"}, - "up": {"uv": [8, 0, 16, 16], "texture": "#top", "cullface": "up"}, - "down": {"uv": [0, 0, 8, 16], "texture": "#bottom"} - } - }, - { - "from": [0, 0, 8], - "to": [8, 16, 16], - "faces": { - "south": {"uv": [0, 0, 8, 16], "texture": "#side", "cullface": "south"}, - "west": {"uv": [8, 0, 16, 16], "texture": "#side", "cullface": "west"}, - "up": {"uv": [0, 8, 8, 16], "texture": "#top", "cullface": "up"}, - "down": {"uv": [0, 0, 8, 8], "texture": "#bottom"} - } - }, - { - "from": [8, 16, 8], - "to": [0, 8, 0], - "faces": { - "north": {"uv": [8, 0, 16, 8], "rotation": 180, "texture": "#side"}, - "west": {"uv": [0, 0, 8, 8], "rotation": 180, "texture": "#side"} - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/block/cloud_outer_stairs.json b/src/main/resources/assets/unicopia/models/block/cloud_outer_stairs.json deleted file mode 100644 index 284d73ee..00000000 --- a/src/main/resources/assets/unicopia/models/block/cloud_outer_stairs.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "textures": { - "bottom": "unicopia:blocks/cloud_block", - "top": "#bottom", - "particle": "#bottom", - "side": "#bottom", - "step": "#bottom" - }, - "elements": [ - { - "from": [0, 0, 0], - "to": [16, 8, 8], - "faces": { - "north": {"uv": [0, 8, 16, 16], "texture": "#step", "cullface": "north"}, - "east": {"uv": [8, 8, 16, 16], "texture": "#step", "cullface": "east"}, - "west": {"uv": [0, 8, 8, 16], "texture": "#step", "cullface": "west"}, - "up": {"uv": [0, 0, 16, 8], "texture": "#top"}, - "down": {"uv": [0, 8, 16, 16], "texture": "#bottom", "cullface": "down"} - } - }, - { - "from": [8, 8, 8], - "to": [16, 16, 16], - "faces": { - "north": {"uv": [0, 0, 8, 8], "texture": "#side"}, - "east": {"uv": [0, 0, 8, 8], "texture": "#side", "cullface": "east"}, - "south": {"uv": [8, 0, 16, 8], "texture": "#side", "cullface": "south"}, - "west": {"uv": [8, 0, 16, 8], "texture": "#side"}, - "up": {"uv": [8, 8, 16, 16], "texture": "#top", "cullface": "up"} - } - }, - { - "from": [8, 0, 8], - "to": [16, 8, 16], - "faces": { - "east": {"uv": [0, 8, 8, 16], "texture": "#side", "cullface": "east"}, - "south": {"uv": [8, 8, 16, 16], "texture": "#side", "cullface": "south"}, - "up": {"uv": [8, 8, 16, 16], "texture": "#top", "cullface": "up"}, - "down": {"uv": [8, 0, 16, 8], "texture": "#bottom"} - } - }, - { - "from": [0, 0, 8], - "to": [8, 8, 16], - "faces": { - "south": {"uv": [0, 8, 8, 16], "texture": "#step"}, - "west": {"uv": [8, 8, 16, 16], "texture": "#step"}, - "up": {"uv": [0, 8, 8, 16], "texture": "#top"}, - "down": {"uv": [0, 0, 8, 8], "texture": "#bottom"} - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/block/cloud_slab.json b/src/main/resources/assets/unicopia/models/block/cloud_slab.json deleted file mode 100644 index f5970338..00000000 --- a/src/main/resources/assets/unicopia/models/block/cloud_slab.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/slab", - "textures": { - "bottom": "unicopia:blocks/cloud_block", - "top": "#bottom", - "side": "#bottom" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/cloud_slab_top.json b/src/main/resources/assets/unicopia/models/block/cloud_slab_top.json deleted file mode 100644 index 24367361..00000000 --- a/src/main/resources/assets/unicopia/models/block/cloud_slab_top.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/slab_top", - "textures": { - "bottom": "unicopia:blocks/cloud_block", - "top": "#bottom", - "side": "#bottom" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/cloud_stairs.json b/src/main/resources/assets/unicopia/models/block/cloud_stairs.json deleted file mode 100644 index 3bd3cac3..00000000 --- a/src/main/resources/assets/unicopia/models/block/cloud_stairs.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "credit": "Made with Blockbench", - "parent": "block/block", - "textures": { - "bottom": "unicopia:blocks/cloud_block", - "particle": "#bottom", - "top": "#bottom", - "side": "#bottom", - "step": "#bottom" - }, - "elements": [ - { - "name": "bottom", - "from": [0, 0, 0], - "to": [8, 8, 16], - "faces": { - "north": {"uv": [8, 8, 16, 16], "texture": "#step", "cullface": "north"}, - "south": {"uv": [0, 8, 8, 16], "texture": "#step", "cullface": "south"}, - "west": {"uv": [0, 8, 16, 16], "texture": "#step", "cullface": "west"}, - "up": {"uv": [0, 0, 8, 16], "texture": "#top"}, - "down": {"uv": [0, 0, 8, 16], "texture": "#bottom", "cullface": "down"} - } - }, - { - "name": "middle", - "from": [8, 8, 0], - "to": [16, 16, 16], - "faces": { - "west": {"uv": [0, 0, 16, 8], "texture": "#side"} - } - }, - { - "name": "top", - "from": [8, 0, 0], - "to": [16, 16, 16], - "faces": { - "north": {"uv": [0, 0, 8, 16], "texture": "#side", "cullface": "north"}, - "east": {"uv": [0, 0, 16, 16], "texture": "#side", "cullface": "east"}, - "south": {"uv": [8, 0, 16, 16], "texture": "#side", "cullface": "south"}, - "up": {"uv": [8, 0, 16, 16], "texture": "#top", "cullface": "up"}, - "down": {"uv": [8, 0, 16, 16], "texture": "#bottom"} - } - } - ], - "display": { - "thirdperson_lefthand": { - "rotation": [75, -135, 0], - "translation": [0, 2.5, 0], - "scale": [0.375, 0.375, 0.375] - }, - "gui": { - "rotation": [30, 135, 0], - "scale": [0.625, 0.625, 0.625] - }, - "head": { - "rotation": [0, -90, 0] - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/block/dense_cloud_block.json b/src/main/resources/assets/unicopia/models/block/dense_cloud_block.json deleted file mode 100644 index 248cb21d..00000000 --- a/src/main/resources/assets/unicopia/models/block/dense_cloud_block.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "unicopia:blocks/dense_cloud_block" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/dense_cloud_inner_stairs.json b/src/main/resources/assets/unicopia/models/block/dense_cloud_inner_stairs.json deleted file mode 100644 index 36c712d8..00000000 --- a/src/main/resources/assets/unicopia/models/block/dense_cloud_inner_stairs.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "parent": "unicopia:block/cloud_inner_stairs", - "textures": { - "bottom": "unicopia:blocks/dense_cloud_block" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/dense_cloud_outer_stairs.json b/src/main/resources/assets/unicopia/models/block/dense_cloud_outer_stairs.json deleted file mode 100644 index f5ea8c9a..00000000 --- a/src/main/resources/assets/unicopia/models/block/dense_cloud_outer_stairs.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "parent": "unicopia:block/cloud_outer_stairs", - "textures": { - "bottom": "unicopia:blocks/dense_cloud_block" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/dense_cloud_pillar.json b/src/main/resources/assets/unicopia/models/block/dense_cloud_pillar.json deleted file mode 100644 index c8c1ae98..00000000 --- a/src/main/resources/assets/unicopia/models/block/dense_cloud_pillar.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "block/cube_column", - "textures": { - "end": "unicopia:blocks/dense_cloud_pillar_end", - "side": "unicopia:blocks/dense_cloud_pillar" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/dense_cloud_slab.json b/src/main/resources/assets/unicopia/models/block/dense_cloud_slab.json deleted file mode 100644 index cc1cd112..00000000 --- a/src/main/resources/assets/unicopia/models/block/dense_cloud_slab.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/slab", - "textures": { - "bottom": "unicopia:blocks/dense_cloud_block", - "top": "unicopia:blocks/dense_cloud_block", - "side": "unicopia:blocks/dense_cloud_block" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/dense_cloud_slab_top.json b/src/main/resources/assets/unicopia/models/block/dense_cloud_slab_top.json deleted file mode 100644 index 2ab860b2..00000000 --- a/src/main/resources/assets/unicopia/models/block/dense_cloud_slab_top.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/slab_top", - "textures": { - "bottom": "unicopia:blocks/dense_cloud_block", - "top": "unicopia:blocks/dense_cloud_block", - "side": "unicopia:blocks/dense_cloud_block" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/dense_cloud_stairs.json b/src/main/resources/assets/unicopia/models/block/dense_cloud_stairs.json deleted file mode 100644 index 054171b9..00000000 --- a/src/main/resources/assets/unicopia/models/block/dense_cloud_stairs.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "parent": "unicopia:block/cloud_stairs", - "textures": { - "bottom": "unicopia:blocks/dense_cloud_block" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/door/bakery_bottom.json b/src/main/resources/assets/unicopia/models/block/door/bakery_bottom.json deleted file mode 100644 index aba04d30..00000000 --- a/src/main/resources/assets/unicopia/models/block/door/bakery_bottom.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "unicopia:block/door/bottom", - "textures": { - "bottom": "unicopia:blocks/bakery_door_lower", - "top": "unicopia:blocks/bakery_door_upper" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/door/bakery_bottom_rh.json b/src/main/resources/assets/unicopia/models/block/door/bakery_bottom_rh.json deleted file mode 100644 index 027e41f0..00000000 --- a/src/main/resources/assets/unicopia/models/block/door/bakery_bottom_rh.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "unicopia:block/door/bottom_rh", - "textures": { - "bottom": "unicopia:blocks/bakery_door_lower", - "top": "unicopia:blocks/bakery_door_upper" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/door/bakery_top.json b/src/main/resources/assets/unicopia/models/block/door/bakery_top.json deleted file mode 100644 index 81d3a6fa..00000000 --- a/src/main/resources/assets/unicopia/models/block/door/bakery_top.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "unicopia:block/door/top", - "textures": { - "bottom": "unicopia:blocks/bakery_door_lower", - "top": "unicopia:blocks/bakery_door_upper" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/door/bakery_top_rh.json b/src/main/resources/assets/unicopia/models/block/door/bakery_top_rh.json deleted file mode 100644 index fb542607..00000000 --- a/src/main/resources/assets/unicopia/models/block/door/bakery_top_rh.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "unicopia:block/door/top_rh", - "textures": { - "bottom": "unicopia:blocks/bakery_door_lower", - "top": "unicopia:blocks/bakery_door_upper" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/door/bottom.json b/src/main/resources/assets/unicopia/models/block/door/bottom.json deleted file mode 100644 index 3b908ce3..00000000 --- a/src/main/resources/assets/unicopia/models/block/door/bottom.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#bottom" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 3, 16, 16 ], - "faces": { - "up": { "uv": [ 13, 0, 16, 16 ], "texture": "#bottom", "cullface": "up" }, - "down": { "uv": [ 13, 0, 16, 16 ], "texture": "#bottom", "cullface": "down" }, - "north": { "uv": [ 3, 0, 0, 16 ], "texture": "#bottom", "cullface": "north" }, - "south": { "uv": [ 0, 0, 3, 16 ], "texture": "#bottom", "cullface": "south" }, - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "west" }, - "east": { "uv": [ 16, 0, 0, 16 ], "texture": "#bottom" } - } - } - ] -} diff --git a/src/main/resources/assets/unicopia/models/block/door/bottom_rh.json b/src/main/resources/assets/unicopia/models/block/door/bottom_rh.json deleted file mode 100644 index b5093774..00000000 --- a/src/main/resources/assets/unicopia/models/block/door/bottom_rh.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#bottom" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 3, 16, 16 ], - "faces": { - "up": { "uv": [ 13, 0, 16, 16 ], "texture": "#bottom", "cullface": "up" }, - "down": { "uv": [ 13, 0, 16, 16 ], "texture": "#bottom", "cullface": "down" }, - "north": { "uv": [ 3, 0, 0, 16 ], "texture": "#bottom", "cullface": "north" }, - "south": { "uv": [ 0, 0, 3, 16 ], "texture": "#bottom", "cullface": "south" }, - "west": { "uv": [ 16, 0, 0, 16 ], "texture": "#bottom", "cullface": "west" }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom" } - } - } - ] -} diff --git a/src/main/resources/assets/unicopia/models/block/door/diamond_bottom.json b/src/main/resources/assets/unicopia/models/block/door/diamond_bottom.json deleted file mode 100644 index ffc0fe60..00000000 --- a/src/main/resources/assets/unicopia/models/block/door/diamond_bottom.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "unicopia:block/door/bottom", - "textures": { - "bottom": "unicopia:blocks/diamond_door_lower", - "top": "unicopia:blocks/diamond_door_upper" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/door/diamond_bottom_rh.json b/src/main/resources/assets/unicopia/models/block/door/diamond_bottom_rh.json deleted file mode 100644 index 37769ba6..00000000 --- a/src/main/resources/assets/unicopia/models/block/door/diamond_bottom_rh.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "unicopia:block/door/bottom_rh", - "textures": { - "bottom": "unicopia:blocks/diamond_door_lower", - "top": "unicopia:blocks/diamond_door_upper" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/door/diamond_top.json b/src/main/resources/assets/unicopia/models/block/door/diamond_top.json deleted file mode 100644 index 567731e7..00000000 --- a/src/main/resources/assets/unicopia/models/block/door/diamond_top.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "unicopia:block/door/top", - "textures": { - "bottom": "unicopia:blocks/diamond_door_lower", - "top": "unicopia:blocks/diamond_door_upper" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/door/diamond_top_rh.json b/src/main/resources/assets/unicopia/models/block/door/diamond_top_rh.json deleted file mode 100644 index c1589b77..00000000 --- a/src/main/resources/assets/unicopia/models/block/door/diamond_top_rh.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "unicopia:block/door/top_rh", - "textures": { - "bottom": "unicopia:blocks/diamond_door_lower", - "top": "unicopia:blocks/diamond_door_upper" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/door/library_bottom.json b/src/main/resources/assets/unicopia/models/block/door/library_bottom.json deleted file mode 100644 index 41d0c1ae..00000000 --- a/src/main/resources/assets/unicopia/models/block/door/library_bottom.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "unicopia:block/door/bottom", - "textures": { - "bottom": "unicopia:blocks/library_door_lower", - "top": "unicopia:blocks/library_door_upper" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/door/library_bottom_rh.json b/src/main/resources/assets/unicopia/models/block/door/library_bottom_rh.json deleted file mode 100644 index e682b626..00000000 --- a/src/main/resources/assets/unicopia/models/block/door/library_bottom_rh.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "unicopia:block/door/bottom_rh", - "textures": { - "bottom": "unicopia:blocks/library_door_lower", - "top": "unicopia:blocks/library_door_upper" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/door/library_top.json b/src/main/resources/assets/unicopia/models/block/door/library_top.json deleted file mode 100644 index a3d4c7d4..00000000 --- a/src/main/resources/assets/unicopia/models/block/door/library_top.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "unicopia:block/door/top", - "textures": { - "bottom": "unicopia:blocks/library_door_lower", - "top": "unicopia:blocks/library_door_upper" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/door/library_top_rh.json b/src/main/resources/assets/unicopia/models/block/door/library_top_rh.json deleted file mode 100644 index 706f18b8..00000000 --- a/src/main/resources/assets/unicopia/models/block/door/library_top_rh.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "unicopia:block/door/top_rh", - "textures": { - "bottom": "unicopia:blocks/library_door_lower", - "top": "unicopia:blocks/library_door_upper" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/door/mist_bottom.json b/src/main/resources/assets/unicopia/models/block/door/mist_bottom.json deleted file mode 100644 index 0ce7dd18..00000000 --- a/src/main/resources/assets/unicopia/models/block/door/mist_bottom.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/door_bottom", - "textures": { - "bottom": "unicopia:blocks/misted_glass_door_lower", - "top": "unicopia:blocks/misted_glass_door_upper" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/door/mist_bottom_rh.json b/src/main/resources/assets/unicopia/models/block/door/mist_bottom_rh.json deleted file mode 100644 index 3c7939df..00000000 --- a/src/main/resources/assets/unicopia/models/block/door/mist_bottom_rh.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "block/door_bottom_rh", - "textures": { - "bottom": "unicopia:blocks/misted_glass_door_lower", - "top": "unicopia:blocks/misted_glass_door_upper" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/door/mist_top.json b/src/main/resources/assets/unicopia/models/block/door/mist_top.json deleted file mode 100644 index a2e12c77..00000000 --- a/src/main/resources/assets/unicopia/models/block/door/mist_top.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "block/door_top", - "textures": { - "bottom": "unicopia:blocks/misted_glass_door_lower", - "top": "unicopia:blocks/misted_glass_door_upper" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/door/mist_top_rh.json b/src/main/resources/assets/unicopia/models/block/door/mist_top_rh.json deleted file mode 100644 index 60b06cb6..00000000 --- a/src/main/resources/assets/unicopia/models/block/door/mist_top_rh.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "block/door_top_rh", - "textures": { - "bottom": "unicopia:blocks/misted_glass_door_lower", - "top": "unicopia:blocks/misted_glass_door_upper" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/door/top.json b/src/main/resources/assets/unicopia/models/block/door/top.json deleted file mode 100644 index 77b93084..00000000 --- a/src/main/resources/assets/unicopia/models/block/door/top.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#top" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 3, 16, 16 ], - "faces": { - "up": { "uv": [ 13, 0, 16, 16 ], "texture": "#bottom", "cullface": "up" }, - "down": { "uv": [ 13, 0, 16, 16 ], "texture": "#bottom", "cullface": "down" }, - "north": { "uv": [ 3, 0, 0, 16 ], "texture": "#top", "cullface": "north" }, - "south": { "uv": [ 0, 0, 3, 16 ], "texture": "#top", "cullface": "south" }, - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#top", "cullface": "west" }, - "east": { "uv": [ 16, 0, 0, 16 ], "texture": "#top" } - } - } - ] -} diff --git a/src/main/resources/assets/unicopia/models/block/door/top_rh.json b/src/main/resources/assets/unicopia/models/block/door/top_rh.json deleted file mode 100644 index 9bea9d05..00000000 --- a/src/main/resources/assets/unicopia/models/block/door/top_rh.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#top" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 3, 16, 16 ], - "faces": { - "up": { "uv": [ 13, 0, 16, 16 ], "texture": "#bottom", "cullface": "up" }, - "down": { "uv": [ 13, 0, 16, 16 ], "texture": "#bottom", "cullface": "down" }, - "north": { "uv": [ 3, 0, 0, 16 ], "texture": "#top", "cullface": "north" }, - "south": { "uv": [ 0, 0, 3, 16 ], "texture": "#top", "cullface": "south" }, - "west": { "uv": [ 16, 0, 0, 16 ], "texture": "#top", "cullface": "west" }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" } - } - } - ] -} diff --git a/src/main/resources/assets/unicopia/models/block/enchanted_cloud_block.json b/src/main/resources/assets/unicopia/models/block/enchanted_cloud_block.json deleted file mode 100644 index e05f2707..00000000 --- a/src/main/resources/assets/unicopia/models/block/enchanted_cloud_block.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "unicopia:block/chitin_shell_block", - "textures": { - "top": "unicopia:blocks/enchanted_cloud_block_top", - "side": "unicopia:blocks/enchanted_cloud_block", - "bottom": "unicopia:blocks/enchanted_cloud_block_bottom" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/block/enchanted_cloud_block_covered.json b/src/main/resources/assets/unicopia/models/block/enchanted_cloud_block_covered.json deleted file mode 100644 index 787f7449..00000000 --- a/src/main/resources/assets/unicopia/models/block/enchanted_cloud_block_covered.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "unicopia:block/chitin_shell_block", - "textures": { - "top": "unicopia:blocks/enchanted_cloud_block_top", - "side": "unicopia:blocks/enchanted_cloud_block_bottom", - "bottom": "unicopia:blocks/enchanted_cloud_block_bottom" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/block/enchanted_cloud_inner_stairs.json b/src/main/resources/assets/unicopia/models/block/enchanted_cloud_inner_stairs.json deleted file mode 100644 index dda42727..00000000 --- a/src/main/resources/assets/unicopia/models/block/enchanted_cloud_inner_stairs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ "parent": "unicopia:block/cloud_inner_stairs", - "textures": { - "bottom": "unicopia:blocks/enchanted_cloud_block_bottom", - "top": "unicopia:blocks/enchanted_cloud_block_top", - "side": "unicopia:blocks/enchanted_cloud_block", - "step": "unicopia:blocks/enchanted_cloud_slab_side" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/enchanted_cloud_inner_stairs_covered.json b/src/main/resources/assets/unicopia/models/block/enchanted_cloud_inner_stairs_covered.json deleted file mode 100644 index 007049ce..00000000 --- a/src/main/resources/assets/unicopia/models/block/enchanted_cloud_inner_stairs_covered.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "parent": "unicopia:block/enchanted_cloud_inner_stairs", - "textures": { - "side": "unicopia:blocks/enchanted_cloud_block_bottom" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/enchanted_cloud_inner_stairs_top.json b/src/main/resources/assets/unicopia/models/block/enchanted_cloud_inner_stairs_top.json deleted file mode 100644 index da90db89..00000000 --- a/src/main/resources/assets/unicopia/models/block/enchanted_cloud_inner_stairs_top.json +++ /dev/null @@ -1,6 +0,0 @@ -{ "parent": "unicopia:block/enchanted_cloud_inner_stairs", - "textures": { - "bottom": "unicopia:blocks/enchanted_cloud_block_top", - "top": "unicopia:blocks/enchanted_cloud_block_bottom" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/enchanted_cloud_inner_stairs_top_covered.json b/src/main/resources/assets/unicopia/models/block/enchanted_cloud_inner_stairs_top_covered.json deleted file mode 100644 index e30506d5..00000000 --- a/src/main/resources/assets/unicopia/models/block/enchanted_cloud_inner_stairs_top_covered.json +++ /dev/null @@ -1,6 +0,0 @@ -{ "parent": "unicopia:block/enchanted_cloud_inner_stairs_top", - "textures": { - "side": "unicopia:blocks/enchanted_cloud_block_bottom", - "step": "unicopia:blocks/enchanted_cloud_block_bottom" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/enchanted_cloud_outer_stairs.json b/src/main/resources/assets/unicopia/models/block/enchanted_cloud_outer_stairs.json deleted file mode 100644 index ec2e4196..00000000 --- a/src/main/resources/assets/unicopia/models/block/enchanted_cloud_outer_stairs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ "parent": "unicopia:block/cloud_outer_stairs", - "textures": { - "bottom": "unicopia:blocks/enchanted_cloud_block_bottom", - "top": "unicopia:blocks/enchanted_cloud_block_top", - "side": "unicopia:blocks/enchanted_cloud_block", - "step": "unicopia:blocks/enchanted_cloud_slab_side" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/enchanted_cloud_outer_stairs_covered.json b/src/main/resources/assets/unicopia/models/block/enchanted_cloud_outer_stairs_covered.json deleted file mode 100644 index 37541446..00000000 --- a/src/main/resources/assets/unicopia/models/block/enchanted_cloud_outer_stairs_covered.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "parent": "unicopia:block/enchanted_cloud_outer_stairs", - "textures": { - "side": "unicopia:blocks/enchanted_cloud_block_bottom" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/enchanted_cloud_outer_stairs_top.json b/src/main/resources/assets/unicopia/models/block/enchanted_cloud_outer_stairs_top.json deleted file mode 100644 index eb27b107..00000000 --- a/src/main/resources/assets/unicopia/models/block/enchanted_cloud_outer_stairs_top.json +++ /dev/null @@ -1,6 +0,0 @@ -{ "parent": "unicopia:block/enchanted_cloud_outer_stairs", - "textures": { - "bottom": "unicopia:blocks/enchanted_cloud_block_top", - "top": "unicopia:blocks/enchanted_cloud_block_bottom" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/enchanted_cloud_outer_stairs_top_covered.json b/src/main/resources/assets/unicopia/models/block/enchanted_cloud_outer_stairs_top_covered.json deleted file mode 100644 index 23dd5673..00000000 --- a/src/main/resources/assets/unicopia/models/block/enchanted_cloud_outer_stairs_top_covered.json +++ /dev/null @@ -1,6 +0,0 @@ -{ "parent": "unicopia:block/enchanted_cloud_outer_stairs_top", - "textures": { - "side": "unicopia:blocks/enchanted_cloud_block_bottom", - "step": "unicopia:blocks/enchanted_cloud_block_bottom" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/enchanted_cloud_slab.json b/src/main/resources/assets/unicopia/models/block/enchanted_cloud_slab.json deleted file mode 100644 index 73fe68d2..00000000 --- a/src/main/resources/assets/unicopia/models/block/enchanted_cloud_slab.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/slab", - "textures": { - "bottom": "unicopia:blocks/enchanted_cloud_block_bottom", - "top": "unicopia:blocks/enchanted_cloud_block_top", - "side": "unicopia:blocks/enchanted_cloud_slab_side" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/enchanted_cloud_slab_top.json b/src/main/resources/assets/unicopia/models/block/enchanted_cloud_slab_top.json deleted file mode 100644 index 50c05000..00000000 --- a/src/main/resources/assets/unicopia/models/block/enchanted_cloud_slab_top.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/slab_top", - "textures": { - "bottom": "unicopia:blocks/enchanted_cloud_block_bottom", - "top": "unicopia:blocks/enchanted_cloud_block_top", - "side": "unicopia:blocks/enchanted_cloud_slab_side" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/enchanted_cloud_slab_top_covered.json b/src/main/resources/assets/unicopia/models/block/enchanted_cloud_slab_top_covered.json deleted file mode 100644 index 34305af1..00000000 --- a/src/main/resources/assets/unicopia/models/block/enchanted_cloud_slab_top_covered.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/slab_top", - "textures": { - "bottom": "unicopia:blocks/enchanted_cloud_block_bottom", - "top": "unicopia:blocks/enchanted_cloud_block_top", - "side": "unicopia:blocks/enchanted_cloud_block_bottom" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/enchanted_cloud_stairs.json b/src/main/resources/assets/unicopia/models/block/enchanted_cloud_stairs.json deleted file mode 100644 index ecef7bc6..00000000 --- a/src/main/resources/assets/unicopia/models/block/enchanted_cloud_stairs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ "parent": "unicopia:block/cloud_stairs", - "textures": { - "bottom": "unicopia:blocks/enchanted_cloud_block_bottom", - "top": "unicopia:blocks/enchanted_cloud_block_top", - "side": "unicopia:blocks/enchanted_cloud_block", - "step": "unicopia:blocks/enchanted_cloud_slab_side" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/enchanted_cloud_stairs_covered.json b/src/main/resources/assets/unicopia/models/block/enchanted_cloud_stairs_covered.json deleted file mode 100644 index 0a739ac6..00000000 --- a/src/main/resources/assets/unicopia/models/block/enchanted_cloud_stairs_covered.json +++ /dev/null @@ -1,5 +0,0 @@ -{ "parent": "unicopia:block/enchanted_cloud_stairs", - "textures": { - "side": "unicopia:blocks/enchanted_cloud_block_bottom" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/enchanted_cloud_stairs_top.json b/src/main/resources/assets/unicopia/models/block/enchanted_cloud_stairs_top.json deleted file mode 100644 index 0b2921f2..00000000 --- a/src/main/resources/assets/unicopia/models/block/enchanted_cloud_stairs_top.json +++ /dev/null @@ -1,6 +0,0 @@ -{ "parent": "unicopia:block/enchanted_cloud_stairs", - "textures": { - "bottom": "unicopia:blocks/enchanted_cloud_block_top", - "top": "unicopia:blocks/enchanted_cloud_block_bottom" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/enchanted_cloud_stairs_top_covered.json b/src/main/resources/assets/unicopia/models/block/enchanted_cloud_stairs_top_covered.json deleted file mode 100644 index 60d6cc9b..00000000 --- a/src/main/resources/assets/unicopia/models/block/enchanted_cloud_stairs_top_covered.json +++ /dev/null @@ -1,6 +0,0 @@ -{ "parent": "unicopia:block/enchanted_cloud_stairs_top", - "textures": { - "side": "unicopia:blocks/enchanted_cloud_block_bottom", - "step": "unicopia:blocks/enchanted_cloud_block_bottom" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/enchanted_torch.json b/src/main/resources/assets/unicopia/models/block/enchanted_torch.json deleted file mode 100644 index e2f757b8..00000000 --- a/src/main/resources/assets/unicopia/models/block/enchanted_torch.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "unicopia:block/torch_tall", - "textures": { - "torch": "unicopia:blocks/enchanted_torch" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/enchanted_torch_lit.json b/src/main/resources/assets/unicopia/models/block/enchanted_torch_lit.json deleted file mode 100644 index 9e40ebbb..00000000 --- a/src/main/resources/assets/unicopia/models/block/enchanted_torch_lit.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "unicopia:block/torch_tall", - "textures": { - "torch": "unicopia:blocks/enchanted_torch_lit" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/enchanted_wall_torch.json b/src/main/resources/assets/unicopia/models/block/enchanted_wall_torch.json deleted file mode 100644 index 33e4bc78..00000000 --- a/src/main/resources/assets/unicopia/models/block/enchanted_wall_torch.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "unicopia:block/torch_tall_wall", - "textures": { - "torch": "unicopia:blocks/enchanted_torch" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/enchanted_wall_torch_lit.json b/src/main/resources/assets/unicopia/models/block/enchanted_wall_torch_lit.json deleted file mode 100644 index 7b371b9b..00000000 --- a/src/main/resources/assets/unicopia/models/block/enchanted_wall_torch_lit.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "unicopia:block/torch_tall_wall", - "textures": { - "torch": "unicopia:blocks/enchanted_torch_lit" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/farmland/dry.json b/src/main/resources/assets/unicopia/models/block/farmland/dry.json deleted file mode 100644 index e56f2010..00000000 --- a/src/main/resources/assets/unicopia/models/block/farmland/dry.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/farmland", - "textures": { - "particle": "unicopia:blocks/cloud_block", - "dirt": "unicopia:blocks/cloud_block", - "top": "unicopia:blocks/cloud_farmland_dry" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/farmland/wet.json b/src/main/resources/assets/unicopia/models/block/farmland/wet.json deleted file mode 100644 index ecca44e6..00000000 --- a/src/main/resources/assets/unicopia/models/block/farmland/wet.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/farmland", - "textures": { - "particle": "unicopia:blocks/cloud_block", - "dirt": "unicopia:blocks/cloud_block", - "top": "unicopia:blocks/cloud_farmland_wet" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/hive_dying.json b/src/main/resources/assets/unicopia/models/block/hive_dying.json deleted file mode 100644 index 2cc313f4..00000000 --- a/src/main/resources/assets/unicopia/models/block/hive_dying.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "block/cube_column", - "textures": { - "end": "unicopia:blocks/hive_dying", - "side": "unicopia:blocks/hive_end" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/block/hive_growing.json b/src/main/resources/assets/unicopia/models/block/hive_growing.json deleted file mode 100644 index 6033917a..00000000 --- a/src/main/resources/assets/unicopia/models/block/hive_growing.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "block/cube_column", - "textures": { - "end": "unicopia:blocks/hive_growing", - "side": "unicopia:blocks/hive_end" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/block/hive_stable.json b/src/main/resources/assets/unicopia/models/block/hive_stable.json deleted file mode 100644 index d7f469ea..00000000 --- a/src/main/resources/assets/unicopia/models/block/hive_stable.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "block/cube_column", - "textures": { - "end": "unicopia:blocks/hive_stable", - "side": "unicopia:blocks/hive_end" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/block/slime_drip/bulb_stage0.json b/src/main/resources/assets/unicopia/models/block/slime_drip/bulb_stage0.json deleted file mode 100644 index bc9a35be..00000000 --- a/src/main/resources/assets/unicopia/models/block/slime_drip/bulb_stage0.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "textures": { - "bulb": "unicopia:blocks/slime_bulb", - "tail": "unicopia:blocks/slime_tail", - "particle": "unicopia:blocks/slime_bulb" - }, - "elements": [ - { "from": [ 7, 8, 7 ], - "to": [ 9, 16, 9 ], - "faces": { - "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#tail", "cullface": "up" }, - "north": { "uv": [ 7, 8, 9, 16 ], "texture": "#tail", "cullface": "north" }, - "south": { "uv": [ 7, 8, 9, 16 ], "texture": "#tail", "cullface": "south" }, - "west": { "uv": [ 7, 8, 9, 16 ], "texture": "#tail", "cullface": "west" }, - "east": { "uv": [ 7, 8, 9, 16 ], "texture": "#tail", "cullface": "east" } - } - }, - { "from": [ 6, 1, 6 ], - "to": [ 10, 8, 10 ], - "faces": { - "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#bulb" }, - "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#bulb" }, - "north": { "uv": [ 6, 1, 10, 8 ], "texture": "#bulb" }, - "south": { "uv": [ 6, 1, 10, 8 ], "texture": "#bulb" }, - "west": { "uv": [ 6, 1, 10, 8 ], "texture": "#bulb" }, - "east": { "uv": [ 6, 1, 10, 8 ], "texture": "#bulb" } - } - } - ] -} diff --git a/src/main/resources/assets/unicopia/models/block/slime_drip/bulb_stage1.json b/src/main/resources/assets/unicopia/models/block/slime_drip/bulb_stage1.json deleted file mode 100644 index 4f21c21d..00000000 --- a/src/main/resources/assets/unicopia/models/block/slime_drip/bulb_stage1.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "textures": { - "bulb": "unicopia:blocks/slime_bulb", - "tail": "unicopia:blocks/slime_tail", - "particle": "unicopia:blocks/slime_bulb" - }, - "elements": [ - { "from": [ 6, 8, 6 ], - "to": [ 10, 16, 10 ], - "faces": { - "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#tail", "cullface": "up" }, - "north": { "uv": [ 6, 8, 10, 16 ], "texture": "#tail", "cullface": "north" }, - "south": { "uv": [ 6, 8, 10, 16 ], "texture": "#tail", "cullface": "south" }, - "west": { "uv": [ 6, 8, 10, 16 ], "texture": "#tail", "cullface": "west" }, - "east": { "uv": [ 6, 8, 10, 16 ], "texture": "#tail", "cullface": "east" } - } - }, - { "from": [ 4, 0, 4 ], - "to": [ 12, 9, 12 ], - "faces": { - "up": { "uv": [ 4, 4, 12, 12 ], "texture": "#bulb" }, - "down": { "uv": [ 4, 4, 12, 12 ], "texture": "#bulb" }, - "north": { "uv": [ 4, 0, 12, 9 ], "texture": "#bulb" }, - "south": { "uv": [ 4, 0, 12, 9 ], "texture": "#bulb" }, - "west": { "uv": [ 4, 0, 12, 9 ], "texture": "#bulb" }, - "east": { "uv": [ 4, 0, 12, 9 ], "texture": "#bulb" } - } - } - ] -} diff --git a/src/main/resources/assets/unicopia/models/block/slime_drip/bulb_stage2.json b/src/main/resources/assets/unicopia/models/block/slime_drip/bulb_stage2.json deleted file mode 100644 index 6c9da095..00000000 --- a/src/main/resources/assets/unicopia/models/block/slime_drip/bulb_stage2.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "textures": { - "bulb": "unicopia:blocks/slime_bulb", - "tail": "unicopia:blocks/slime_tail", - "particle": "unicopia:blocks/slime_bulb" - }, - "elements": [ - { "from": [ 5, 8, 5 ], - "to": [ 11, 16, 11 ], - "faces": { - "up": { "uv": [ 5, 5, 11, 11 ], "texture": "#tail", "cullface": "up" }, - "north": { "uv": [ 5, 8, 11, 16 ], "texture": "#tail", "cullface": "north" }, - "south": { "uv": [ 5, 8, 11, 16 ], "texture": "#tail", "cullface": "south" }, - "west": { "uv": [ 5, 8, 11, 16 ], "texture": "#tail", "cullface": "west" }, - "east": { "uv": [ 5, 8, 11, 16 ], "texture": "#tail", "cullface": "east" } - } - }, - { "from": [ 3, 0, 3 ], - "to": [ 13, 10, 13 ], - "faces": { - "up": { "uv": [ 3, 3, 13, 13 ], "texture": "#bulb" }, - "down": { "uv": [ 3, 3, 13, 13 ], "texture": "#bulb" }, - "north": { "uv": [ 3, 0, 13, 10 ], "texture": "#bulb" }, - "south": { "uv": [ 3, 0, 13, 10 ], "texture": "#bulb" }, - "west": { "uv": [ 3, 0, 13, 10 ], "texture": "#bulb" }, - "east": { "uv": [ 3, 0, 13, 10 ], "texture": "#bulb" } - } - } - ] -} diff --git a/src/main/resources/assets/unicopia/models/block/slime_drip/bulb_stage3.json b/src/main/resources/assets/unicopia/models/block/slime_drip/bulb_stage3.json deleted file mode 100644 index ab89631e..00000000 --- a/src/main/resources/assets/unicopia/models/block/slime_drip/bulb_stage3.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "textures": { - "bulb": "unicopia:blocks/slime_bulb", - "tail": "unicopia:blocks/slime_tail", - "particle": "unicopia:blocks/slime_bulb" - }, - "elements": [ - { "from": [ 4, 8, 4 ], - "to": [ 12, 16, 12 ], - "faces": { - "up": { "uv": [ 4, 4, 12, 12 ], "texture": "#tail", "cullface": "up" }, - "north": { "uv": [ 4, 8, 12, 16 ], "texture": "#tail", "cullface": "north" }, - "south": { "uv": [ 4, 8, 12, 16 ], "texture": "#tail", "cullface": "south" }, - "west": { "uv": [ 4, 8, 12, 16 ], "texture": "#tail", "cullface": "west" }, - "east": { "uv": [ 4, 8, 12, 16 ], "texture": "#tail", "cullface": "east" } - } - }, - { "from": [ 2, 0, 2 ], - "to": [ 14, 12, 14 ], - "faces": { - "up": { "uv": [ 2, 2, 14, 14 ], "texture": "#bulb" }, - "down": { "uv": [ 2, 2, 14, 14 ], "texture": "#bulb" }, - "north": { "uv": [ 2, 0, 14, 12 ], "texture": "#bulb" }, - "south": { "uv": [ 2, 0, 14, 12 ], "texture": "#bulb" }, - "west": { "uv": [ 2, 0, 14, 12 ], "texture": "#bulb" }, - "east": { "uv": [ 2, 0, 14, 12 ], "texture": "#bulb" } - } - } - ] -} diff --git a/src/main/resources/assets/unicopia/models/block/slime_drip/tail_stage0.json b/src/main/resources/assets/unicopia/models/block/slime_drip/tail_stage0.json deleted file mode 100644 index 02950255..00000000 --- a/src/main/resources/assets/unicopia/models/block/slime_drip/tail_stage0.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "textures": { - "tail": "unicopia:blocks/slime_tail", - "particle": "unicopia:blocks/slime_tail" - }, - "elements": [ - { "from": [ 7, 0, 7 ], - "to": [ 9, 16, 9 ], - "faces": { - "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#tail", "cullface": "up" }, - "down": { "uv": [ 7, 7, 9, 9 ], "texture": "#tail", "cullface": "down" }, - "north": { "uv": [ 7, 0, 9, 16 ], "texture": "#tail", "cullface": "north" }, - "south": { "uv": [ 7, 0, 9, 16 ], "texture": "#tail", "cullface": "south" }, - "west": { "uv": [ 7, 0, 9, 16 ], "texture": "#tail", "cullface": "west" }, - "east": { "uv": [ 7, 0, 9, 16 ], "texture": "#tail", "cullface": "east" } - } - } - ] -} diff --git a/src/main/resources/assets/unicopia/models/block/slime_drip/tail_stage1.json b/src/main/resources/assets/unicopia/models/block/slime_drip/tail_stage1.json deleted file mode 100644 index 49bcbe69..00000000 --- a/src/main/resources/assets/unicopia/models/block/slime_drip/tail_stage1.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "textures": { - "tail": "unicopia:blocks/slime_tail", - "particle": "unicopia:blocks/slime_tail" - }, - "elements": [ - { "from": [ 6, 0, 6 ], - "to": [ 10, 16, 10 ], - "faces": { - "up": { "uv": [ 6, 6, 10, 10 ], "texture": "#tail", "cullface": "up" }, - "down": { "uv": [ 6, 6, 10, 10 ], "texture": "#tail", "cullface": "down" }, - "north": { "uv": [ 6, 0, 10, 16 ], "texture": "#tail", "cullface": "north" }, - "south": { "uv": [ 6, 0, 10, 16 ], "texture": "#tail", "cullface": "south" }, - "west": { "uv": [ 6, 0, 10, 16 ], "texture": "#tail", "cullface": "west" }, - "east": { "uv": [ 6, 0, 10, 16 ], "texture": "#tail", "cullface": "east" } - } - } - ] -} diff --git a/src/main/resources/assets/unicopia/models/block/slime_drip/tail_stage2.json b/src/main/resources/assets/unicopia/models/block/slime_drip/tail_stage2.json deleted file mode 100644 index 525e65f7..00000000 --- a/src/main/resources/assets/unicopia/models/block/slime_drip/tail_stage2.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "textures": { - "tail": "unicopia:blocks/slime_tail", - "particle": "unicopia:blocks/slime_tail" - }, - "elements": [ - { "from": [ 5, 0, 5 ], - "to": [ 11, 16, 11 ], - "faces": { - "up": { "uv": [ 5, 5, 11, 11 ], "texture": "#tail", "cullface": "up" }, - "down": { "uv": [ 5, 5, 11, 11 ], "texture": "#tail", "cullface": "down" }, - "north": { "uv": [ 5, 0, 11, 16 ], "texture": "#tail", "cullface": "north" }, - "south": { "uv": [ 5, 0, 11, 16 ], "texture": "#tail", "cullface": "south" }, - "west": { "uv": [ 5, 0, 11, 16 ], "texture": "#tail", "cullface": "west" }, - "east": { "uv": [ 5, 0, 11, 16 ], "texture": "#tail", "cullface": "east" } - } - } - ] -} diff --git a/src/main/resources/assets/unicopia/models/block/slime_drip/tail_stage3.json b/src/main/resources/assets/unicopia/models/block/slime_drip/tail_stage3.json deleted file mode 100644 index a05b652f..00000000 --- a/src/main/resources/assets/unicopia/models/block/slime_drip/tail_stage3.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "textures": { - "tail": "unicopia:blocks/slime_tail", - "particle": "unicopia:blocks/slime_tail" - }, - "elements": [ - { "from": [ 4, 0, 4 ], - "to": [ 12, 16, 12 ], - "faces": { - "up": { "uv": [ 4, 4, 12, 12 ], "texture": "#tail", "cullface": "up" }, - "down": { "uv": [ 4, 4, 12, 12 ], "texture": "#tail", "cullface": "down" }, - "north": { "uv": [ 4, 0, 12, 16 ], "texture": "#tail", "cullface": "north" }, - "south": { "uv": [ 4, 0, 12, 16 ], "texture": "#tail", "cullface": "south" }, - "west": { "uv": [ 4, 0, 12, 16 ], "texture": "#tail", "cullface": "west" }, - "east": { "uv": [ 4, 0, 12, 16 ], "texture": "#tail", "cullface": "east" } - } - } - ] -} diff --git a/src/main/resources/assets/unicopia/models/block/slime_layer/layer_10.json b/src/main/resources/assets/unicopia/models/block/slime_layer/layer_10.json deleted file mode 100644 index c7db3d4e..00000000 --- a/src/main/resources/assets/unicopia/models/block/slime_layer/layer_10.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "textures": { - "particle": "minecraft:block/slime_block", - "texture": "minecraft:block/slime_block" - }, - "elements": [ - { "from": [ 3, 3, 3 ], - "to": [ 13, 9, 13 ], - "faces": { - "down": { "uv": [ 3, 3, 13, 13 ], "texture": "#texture" }, - "up": { "uv": [ 3, 3, 13, 13 ], "texture": "#texture" }, - "north": { "uv": [ 3, 3, 9, 13 ], "texture": "#texture" }, - "south": { "uv": [ 3, 3, 9, 13 ], "texture": "#texture" }, - "west": { "uv": [ 3, 3, 9, 13 ], "texture": "#texture" }, - "east": { "uv": [ 3, 3, 9, 13 ], "texture": "#texture" } - } - }, - { "from": [ 0, 0, 0 ], - "to": [ 16, 10, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, - "north": { "uv": [ 0, 6, 16, 16 ], "texture": "#texture", "cullface": "north" }, - "south": { "uv": [ 0, 6, 16, 16 ], "texture": "#texture", "cullface": "south" }, - "west": { "uv": [ 0, 6, 16, 16 ], "texture": "#texture", "cullface": "west" }, - "east": { "uv": [ 0, 6, 16, 16 ], "texture": "#texture", "cullface": "east" } - } - } - ] -} diff --git a/src/main/resources/assets/unicopia/models/block/slime_layer/layer_12.json b/src/main/resources/assets/unicopia/models/block/slime_layer/layer_12.json deleted file mode 100644 index a82b2823..00000000 --- a/src/main/resources/assets/unicopia/models/block/slime_layer/layer_12.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "textures": { - "particle": "minecraft:block/slime_block", - "texture": "minecraft:block/slime_block" - }, - "elements": [ - { "from": [ 3, 3, 3 ], - "to": [ 13, 11, 13 ], - "faces": { - "down": { "uv": [ 3, 3, 13, 13 ], "texture": "#texture" }, - "up": { "uv": [ 3, 3, 13, 13 ], "texture": "#texture" }, - "north": { "uv": [ 3, 3, 11, 13 ], "texture": "#texture" }, - "south": { "uv": [ 3, 3, 11, 13 ], "texture": "#texture" }, - "west": { "uv": [ 3, 3, 11, 13 ], "texture": "#texture" }, - "east": { "uv": [ 3, 3, 11, 13 ], "texture": "#texture" } - } - }, - { "from": [ 0, 0, 0 ], - "to": [ 16, 12, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, - "north": { "uv": [ 0, 4, 16, 16 ], "texture": "#texture", "cullface": "north" }, - "south": { "uv": [ 0, 4, 16, 16 ], "texture": "#texture", "cullface": "south" }, - "west": { "uv": [ 0, 4, 16, 16 ], "texture": "#texture", "cullface": "west" }, - "east": { "uv": [ 0, 4, 16, 16 ], "texture": "#texture", "cullface": "east" } - } - } - ] -} diff --git a/src/main/resources/assets/unicopia/models/block/slime_layer/layer_14.json b/src/main/resources/assets/unicopia/models/block/slime_layer/layer_14.json deleted file mode 100644 index ae50cec1..00000000 --- a/src/main/resources/assets/unicopia/models/block/slime_layer/layer_14.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "textures": { - "particle": "minecraft:block/slime_block", - "texture": "minecraft:block/slime_block" - }, - "elements": [ - { "from": [ 3, 3, 3 ], - "to": [ 13, 13, 13 ], - "faces": { - "down": { "uv": [ 3, 3, 13, 13 ], "texture": "#texture" }, - "up": { "uv": [ 3, 3, 13, 13 ], "texture": "#texture" }, - "north": { "uv": [ 3, 3, 13, 13 ], "texture": "#texture" }, - "south": { "uv": [ 3, 3, 13, 13 ], "texture": "#texture" }, - "west": { "uv": [ 3, 3, 13, 13 ], "texture": "#texture" }, - "east": { "uv": [ 3, 3, 13, 13 ], "texture": "#texture" } - } - }, - { "from": [ 0, 0, 0 ], - "to": [ 16, 14, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, - "north": { "uv": [ 0, 2, 16, 16 ], "texture": "#texture" }, - "south": { "uv": [ 0, 2, 16, 16 ], "texture": "#texture" }, - "west": { "uv": [ 0, 2, 16, 16 ], "texture": "#texture" }, - "east": { "uv": [ 0, 2, 16, 16 ], "texture": "#texture" } - } - } - ] -} diff --git a/src/main/resources/assets/unicopia/models/block/slime_layer/layer_2.json b/src/main/resources/assets/unicopia/models/block/slime_layer/layer_2.json deleted file mode 100644 index 7679c043..00000000 --- a/src/main/resources/assets/unicopia/models/block/slime_layer/layer_2.json +++ /dev/null @@ -1,19 +0,0 @@ -{ "parent": "block/thin_block", - "textures": { - "particle": "minecraft:block/slime_block", - "texture": "minecraft:block/slime_block" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 2, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, - "north": { "uv": [ 0, 14, 16, 16 ], "texture": "#texture", "cullface": "north" }, - "south": { "uv": [ 0, 14, 16, 16 ], "texture": "#texture", "cullface": "south" }, - "west": { "uv": [ 0, 14, 16, 16 ], "texture": "#texture", "cullface": "west" }, - "east": { "uv": [ 0, 14, 16, 16 ], "texture": "#texture", "cullface": "east" } - } - } - ] -} diff --git a/src/main/resources/assets/unicopia/models/block/slime_layer/layer_4.json b/src/main/resources/assets/unicopia/models/block/slime_layer/layer_4.json deleted file mode 100644 index b309cad5..00000000 --- a/src/main/resources/assets/unicopia/models/block/slime_layer/layer_4.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "textures": { - "particle": "minecraft:block/slime_block", - "texture": "minecraft:block/slime_block" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 4, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, - "north": { "uv": [ 0, 12, 16, 16 ], "texture": "#texture", "cullface": "north" }, - "south": { "uv": [ 0, 12, 16, 16 ], "texture": "#texture", "cullface": "south" }, - "west": { "uv": [ 0, 12, 16, 16 ], "texture": "#texture", "cullface": "west" }, - "east": { "uv": [ 0, 12, 16, 16 ], "texture": "#texture", "cullface": "east" } - } - } - ] -} diff --git a/src/main/resources/assets/unicopia/models/block/slime_layer/layer_6.json b/src/main/resources/assets/unicopia/models/block/slime_layer/layer_6.json deleted file mode 100644 index 2d9a3a5e..00000000 --- a/src/main/resources/assets/unicopia/models/block/slime_layer/layer_6.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "textures": { - "particle": "minecraft:block/slime_block", - "texture": "minecraft:block/slime_block" - }, - "elements": [ - { "from": [ 3, 3, 3 ], - "to": [ 13, 5, 13 ], - "faces": { - "down": { "uv": [ 3, 3, 13, 13 ], "texture": "#texture" }, - "up": { "uv": [ 3, 3, 13, 13 ], "texture": "#texture" }, - "north": { "uv": [ 3, 3, 5, 13 ], "texture": "#texture" }, - "south": { "uv": [ 3, 3, 5, 13 ], "texture": "#texture" }, - "west": { "uv": [ 3, 3, 5, 13 ], "texture": "#texture" }, - "east": { "uv": [ 3, 3, 5, 13 ], "texture": "#texture" } - } - }, - { "from": [ 0, 0, 0 ], - "to": [ 16, 6, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, - "north": { "uv": [ 0, 10, 16, 16 ], "texture": "#texture", "cullface": "north" }, - "south": { "uv": [ 0, 10, 16, 16 ], "texture": "#texture", "cullface": "south" }, - "west": { "uv": [ 0, 10, 16, 16 ], "texture": "#texture", "cullface": "west" }, - "east": { "uv": [ 0, 10, 16, 16 ], "texture": "#texture", "cullface": "east" } - } - } - ] -} diff --git a/src/main/resources/assets/unicopia/models/block/slime_layer/layer_8.json b/src/main/resources/assets/unicopia/models/block/slime_layer/layer_8.json deleted file mode 100644 index 428e84f9..00000000 --- a/src/main/resources/assets/unicopia/models/block/slime_layer/layer_8.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "textures": { - "particle": "minecraft:block/slime_block", - "texture": "minecraft:block/slime_block" - }, - "elements": [ - { "from": [ 3, 3, 3 ], - "to": [ 13, 7, 13 ], - "faces": { - "down": { "uv": [ 3, 3, 13, 13 ], "texture": "#texture" }, - "up": { "uv": [ 3, 3, 13, 13 ], "texture": "#texture" }, - "north": { "uv": [ 3, 3, 7, 13 ], "texture": "#texture" }, - "south": { "uv": [ 3, 3, 7, 13 ], "texture": "#texture" }, - "west": { "uv": [ 3, 3, 7, 13 ], "texture": "#texture" }, - "east": { "uv": [ 3, 3, 7, 13 ], "texture": "#texture" } - } - }, - { "from": [ 0, 0, 0 ], - "to": [ 16, 8, 16 ], - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" }, - "north": { "uv": [ 0, 8, 16, 16 ], "texture": "#texture", "cullface": "north" }, - "south": { "uv": [ 0, 8, 16, 16 ], "texture": "#texture", "cullface": "south" }, - "west": { "uv": [ 0, 8, 16, 16 ], "texture": "#texture", "cullface": "west" }, - "east": { "uv": [ 0, 8, 16, 16 ], "texture": "#texture", "cullface": "east" } - } - } - ] -} diff --git a/src/main/resources/assets/unicopia/models/block/smooth_marble_block.json b/src/main/resources/assets/unicopia/models/block/smooth_marble_block.json deleted file mode 100644 index ff4864c2..00000000 --- a/src/main/resources/assets/unicopia/models/block/smooth_marble_block.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "unicopia:blocks/smooth_marble_block" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/block/smooth_marble_slab.json b/src/main/resources/assets/unicopia/models/block/smooth_marble_slab.json deleted file mode 100644 index b36d5b16..00000000 --- a/src/main/resources/assets/unicopia/models/block/smooth_marble_slab.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/slab", - "textures": { - "bottom": "unicopia:blocks/smooth_marble_block", - "top": "unicopia:blocks/smooth_marble_block", - "side": "unicopia:blocks/smooth_marble_block" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/smooth_marble_slab_top.json b/src/main/resources/assets/unicopia/models/block/smooth_marble_slab_top.json deleted file mode 100644 index 30c6419e..00000000 --- a/src/main/resources/assets/unicopia/models/block/smooth_marble_slab_top.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "block/slab_top", - "textures": { - "bottom": "unicopia:blocks/smooth_marble_block", - "top": "unicopia:blocks/smooth_marble_block", - "side": "unicopia:blocks/smooth_marble_block" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/sugar_block.json b/src/main/resources/assets/unicopia/models/block/sugar_block.json deleted file mode 100644 index fa4597e9..00000000 --- a/src/main/resources/assets/unicopia/models/block/sugar_block.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "unicopia:blocks/sugar_block" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/block/tomato_plant/stage0.json b/src/main/resources/assets/unicopia/models/block/tomato_plant/stage0.json deleted file mode 100644 index 4d744f15..00000000 --- a/src/main/resources/assets/unicopia/models/block/tomato_plant/stage0.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "textures": { - "stick_top": "minecraft:block/oak_log_top", - "stick_side": "minecraft:block/oak_log", - "particle": "minecraft:block/oak_log" - }, - "elements": [ - { "from": [ 7, -1, 7 ], - "to": [ 9, 15, 9 ], - "faces": { - "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#stick_top", "cullface": "up" }, - "down": { "uv": [ 7, 7, 9, 9 ], "texture": "#stick_top", "cullface": "down" }, - "north": { "uv": [ 0, 0, 2, 16 ], "texture": "#stick_side", "cullface": "north" }, - "south": { "uv": [ 0, 0, 2, 16 ], "texture": "#stick_side", "cullface": "south" }, - "west": { "uv": [ 0, 0, 2, 16 ], "texture": "#stick_side", "cullface": "west" }, - "east": { "uv": [ 0, 0, 2, 16 ], "texture": "#stick_side", "cullface": "east" } - } - } - ] -} diff --git a/src/main/resources/assets/unicopia/models/block/tomato_plant/stage1.json b/src/main/resources/assets/unicopia/models/block/tomato_plant/stage1.json deleted file mode 100644 index 8af58efd..00000000 --- a/src/main/resources/assets/unicopia/models/block/tomato_plant/stage1.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "parent": "unicopia:block/tomato_plant/stage0", - "textures": { - "crop": "unicopia:blocks/tomato_plant/stage_1" - }, - "elements": [ - { "from": [ 7, -1, 7 ], - "to": [ 9, 15, 9 ], - "faces": { - "up": { "uv": [ 7, 7, 9, 9 ], "texture": "#stick_top", "cullface": "up" }, - "down": { "uv": [ 7, 7, 9, 9 ], "texture": "#stick_top", "cullface": "down" }, - "north": { "uv": [ 0, 0, 2, 16 ], "texture": "#stick_side", "cullface": "north" }, - "south": { "uv": [ 0, 0, 2, 16 ], "texture": "#stick_side", "cullface": "south" }, - "west": { "uv": [ 0, 0, 2, 16 ], "texture": "#stick_side", "cullface": "west" }, - "east": { "uv": [ 0, 0, 2, 16 ], "texture": "#stick_side", "cullface": "east" } - } - }, - { "from": [ 0.8, 0, 8 ], - "to": [ 15.2, 16, 8 ], - "rotation": { - "origin": [ 8, 8, 8 ], - "axis": "y", - "angle": 45, - "rescale": true - }, - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#crop" }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#crop" } - } - }, - { "from": [ 8, 0, 0.8 ], - "to": [ 8, 16, 15.2 ], - "rotation": { - "origin": [ 8, 8, 8 ], - "axis": "y", - "angle": 45, - "rescale": true - }, - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#crop" }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#crop" } - } - } - ] -} diff --git a/src/main/resources/assets/unicopia/models/block/tomato_plant/stage2.json b/src/main/resources/assets/unicopia/models/block/tomato_plant/stage2.json deleted file mode 100644 index 26870c55..00000000 --- a/src/main/resources/assets/unicopia/models/block/tomato_plant/stage2.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "unicopia:block/tomato_plant/stage1", - "textures": { - "crop": "unicopia:blocks/tomato_plant/stage_2" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/tomato_plant/stage3.json b/src/main/resources/assets/unicopia/models/block/tomato_plant/stage3.json deleted file mode 100644 index 1ca02e78..00000000 --- a/src/main/resources/assets/unicopia/models/block/tomato_plant/stage3.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "unicopia:block/tomato_plant/stage1", - "textures": { - "crop": "unicopia:blocks/tomato_plant/stage_3" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/tomato_plant/stage4.json b/src/main/resources/assets/unicopia/models/block/tomato_plant/stage4.json deleted file mode 100644 index 3829a8fe..00000000 --- a/src/main/resources/assets/unicopia/models/block/tomato_plant/stage4.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "unicopia:block/tomato_plant/stage1", - "textures": { - "crop": "unicopia:blocks/tomato_plant/stage_4" - } -} diff --git a/src/main/resources/assets/unicopia/models/block/torch_tall.json b/src/main/resources/assets/unicopia/models/block/torch_tall.json deleted file mode 100644 index 0e47119a..00000000 --- a/src/main/resources/assets/unicopia/models/block/torch_tall.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#torch" - }, - "elements": [ - { "from": [ 7, 0, 7 ], - "to": [ 9, 16, 9 ], - "shade": false, - "faces": { - "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#torch" }, - "up": { "uv": [ 7, 0, 9, 2 ], "texture": "#torch" }, - "north": { "uv": [ 7, 0, 9, 16 ], "texture": "#torch" }, - "south": { "uv": [ 7, 0, 9, 16 ], "texture": "#torch" }, - "west": { "uv": [ 7, 0, 9, 16 ], "texture": "#torch" }, - "east": { "uv": [ 7, 0, 9, 16 ], "texture": "#torch" } - } - } - ] -} diff --git a/src/main/resources/assets/unicopia/models/block/torch_tall_wall.json b/src/main/resources/assets/unicopia/models/block/torch_tall_wall.json deleted file mode 100644 index 52ae4f46..00000000 --- a/src/main/resources/assets/unicopia/models/block/torch_tall_wall.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "ambientocclusion": false, - "textures": { - "particle": "#torch" - }, - "elements": [ - { "from": [ -1, 3.5, 7 ], - "to": [ 1, 19.5, 9 ], - "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, - "shade": false, - "faces": { - "down": { "uv": [ 7, 13, 9, 15 ], "texture": "#torch" }, - "up": { "uv": [ 7, 0, 9, 2 ], "texture": "#torch" } - } - }, - { "from": [ -1, 3.5, 0 ], - "to": [ 1, 19.5, 16 ], - "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, - "shade": false, - "faces": { - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" } - } - }, - { "from": [ -8, 3.5, 7 ], - "to": [ 8, 19.5, 9 ], - "rotation": { "origin": [ 0, 3.5, 8 ], "axis": "z", "angle": -22.5 }, - "shade": false, - "faces": { - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" } - } - } - ] -} diff --git a/src/main/resources/assets/unicopia/models/item/alfalfa_leaves.json b/src/main/resources/assets/unicopia/models/item/alfalfa_leaves.json deleted file mode 100644 index acbc2406..00000000 --- a/src/main/resources/assets/unicopia/models/item/alfalfa_leaves.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "unicopia:item/alfalfa_leaves" - } -} diff --git a/src/main/resources/assets/unicopia/models/item/alfalfa_seeds.json b/src/main/resources/assets/unicopia/models/item/alfalfa_seeds.json deleted file mode 100644 index 6ef6c0e6..00000000 --- a/src/main/resources/assets/unicopia/models/item/alfalfa_seeds.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "unicopia:item/alfalfa_seeds" - } -} diff --git a/src/main/resources/assets/unicopia/models/item/alicorn_amulet.json b/src/main/resources/assets/unicopia/models/item/alicorn_amulet.json deleted file mode 100644 index 1606db9f..00000000 --- a/src/main/resources/assets/unicopia/models/item/alicorn_amulet.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "unicopia:item/alicorn_amulet" - }, - "display": { - "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } - } -} diff --git a/src/main/resources/assets/unicopia/models/item/apple_cider.json b/src/main/resources/assets/unicopia/models/item/apple_cider.json deleted file mode 100644 index 4f3020f4..00000000 --- a/src/main/resources/assets/unicopia/models/item/apple_cider.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "unicopia:item/mug", - "textures": { - "layer0": "unicopia:item/apple_cider" - } -} diff --git a/src/main/resources/assets/unicopia/models/item/apple_leaves.json b/src/main/resources/assets/unicopia/models/item/apple_leaves.json deleted file mode 100644 index 799437da..00000000 --- a/src/main/resources/assets/unicopia/models/item/apple_leaves.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "unicopia:block/apple_leaves" -} diff --git a/src/main/resources/assets/unicopia/models/item/apple_seeds.json b/src/main/resources/assets/unicopia/models/item/apple_seeds.json deleted file mode 100644 index 7cbb88a9..00000000 --- a/src/main/resources/assets/unicopia/models/item/apple_seeds.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "unicopia:item/apple_seeds" - } -} diff --git a/src/main/resources/assets/unicopia/models/item/bag_of_holding.json b/src/main/resources/assets/unicopia/models/item/bag_of_holding.json deleted file mode 100644 index 73fc0d5c..00000000 --- a/src/main/resources/assets/unicopia/models/item/bag_of_holding.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "unicopia:item/bag_of_holding" - } -} diff --git a/src/main/resources/assets/unicopia/models/item/bakery_door.json b/src/main/resources/assets/unicopia/models/item/bakery_door.json deleted file mode 100644 index 2cbad7a1..00000000 --- a/src/main/resources/assets/unicopia/models/item/bakery_door.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "unicopia:item/bakery_door" - } -} diff --git a/src/main/resources/assets/unicopia/models/item/boop_o_roops.json b/src/main/resources/assets/unicopia/models/item/boop_o_roops.json deleted file mode 100644 index 30df4316..00000000 --- a/src/main/resources/assets/unicopia/models/item/boop_o_roops.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "unicopia:item/boop_o_roops" - } -} diff --git a/src/main/resources/assets/unicopia/models/item/burned_juice.json b/src/main/resources/assets/unicopia/models/item/burned_juice.json deleted file mode 100644 index a12a89b8..00000000 --- a/src/main/resources/assets/unicopia/models/item/burned_juice.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "unicopia:item/burned_juice" - } -} diff --git a/src/main/resources/assets/unicopia/models/item/butterfly_spawn_egg.json b/src/main/resources/assets/unicopia/models/item/butterfly_spawn_egg.json deleted file mode 100644 index 765225c9..00000000 --- a/src/main/resources/assets/unicopia/models/item/butterfly_spawn_egg.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "item/template_spawn_egg" -} diff --git a/src/main/resources/assets/unicopia/models/item/cereal.json b/src/main/resources/assets/unicopia/models/item/cereal.json deleted file mode 100644 index a92340ba..00000000 --- a/src/main/resources/assets/unicopia/models/item/cereal.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "unicopia:item/cereal" - } -} diff --git a/src/main/resources/assets/unicopia/models/item/chiseled_chitin_shell_block.json b/src/main/resources/assets/unicopia/models/item/chiseled_chitin_shell_block.json deleted file mode 100644 index d5f9ef48..00000000 --- a/src/main/resources/assets/unicopia/models/item/chiseled_chitin_shell_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "unicopia:block/chiseled_chitin_shell_block" -} diff --git a/src/main/resources/assets/unicopia/models/item/chiseled_marble_block.json b/src/main/resources/assets/unicopia/models/item/chiseled_marble_block.json deleted file mode 100644 index 093b18b0..00000000 --- a/src/main/resources/assets/unicopia/models/item/chiseled_marble_block.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "unicopia:block/chiseled_marble_block", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} diff --git a/src/main/resources/assets/unicopia/models/item/chitin_shell.json b/src/main/resources/assets/unicopia/models/item/chitin_shell.json deleted file mode 100644 index 2a249fba..00000000 --- a/src/main/resources/assets/unicopia/models/item/chitin_shell.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "unicopia:item/chitin_shell" - } -} diff --git a/src/main/resources/assets/unicopia/models/item/chitin_shell_block.json b/src/main/resources/assets/unicopia/models/item/chitin_shell_block.json deleted file mode 100644 index 46af308e..00000000 --- a/src/main/resources/assets/unicopia/models/item/chitin_shell_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "unicopia:block/chitin_shell_block" -} diff --git a/src/main/resources/assets/unicopia/models/item/chitin_shell_slab.json b/src/main/resources/assets/unicopia/models/item/chitin_shell_slab.json deleted file mode 100644 index 0011881e..00000000 --- a/src/main/resources/assets/unicopia/models/item/chitin_shell_slab.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "unicopia:block/chitin_shell_slab", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} diff --git a/src/main/resources/assets/unicopia/models/item/chitin_shell_stairs.json b/src/main/resources/assets/unicopia/models/item/chitin_shell_stairs.json deleted file mode 100644 index 70447878..00000000 --- a/src/main/resources/assets/unicopia/models/item/chitin_shell_stairs.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "unicopia:block/chitin_shell_stairs" -} diff --git a/src/main/resources/assets/unicopia/models/item/cloud_anvil.json b/src/main/resources/assets/unicopia/models/item/cloud_anvil.json deleted file mode 100644 index 1dc50bda..00000000 --- a/src/main/resources/assets/unicopia/models/item/cloud_anvil.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "unicopia:block/cloud_anvil" -} diff --git a/src/main/resources/assets/unicopia/models/item/cloud_block.json b/src/main/resources/assets/unicopia/models/item/cloud_block.json deleted file mode 100644 index 5294cbc4..00000000 --- a/src/main/resources/assets/unicopia/models/item/cloud_block.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "unicopia:block/cloud_block", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} diff --git a/src/main/resources/assets/unicopia/models/item/cloud_farmland.json b/src/main/resources/assets/unicopia/models/item/cloud_farmland.json deleted file mode 100644 index e2d5e31a..00000000 --- a/src/main/resources/assets/unicopia/models/item/cloud_farmland.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "unicopia:block/farmland/dry" -} diff --git a/src/main/resources/assets/unicopia/models/item/cloud_fence.json b/src/main/resources/assets/unicopia/models/item/cloud_fence.json deleted file mode 100644 index 5f97615b..00000000 --- a/src/main/resources/assets/unicopia/models/item/cloud_fence.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "unicopia:block/cloud_fence_inventory" -} diff --git a/src/main/resources/assets/unicopia/models/item/cloud_matter.json b/src/main/resources/assets/unicopia/models/item/cloud_matter.json deleted file mode 100644 index dc6fc761..00000000 --- a/src/main/resources/assets/unicopia/models/item/cloud_matter.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "unicopia:item/cloud_matter" - }, - "display": { - "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } - } -} diff --git a/src/main/resources/assets/unicopia/models/item/cloud_slab.json b/src/main/resources/assets/unicopia/models/item/cloud_slab.json deleted file mode 100644 index 0eb609ab..00000000 --- a/src/main/resources/assets/unicopia/models/item/cloud_slab.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "unicopia:block/cloud_slab", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} diff --git a/src/main/resources/assets/unicopia/models/item/cloud_spawn_egg.json b/src/main/resources/assets/unicopia/models/item/cloud_spawn_egg.json deleted file mode 100644 index 765225c9..00000000 --- a/src/main/resources/assets/unicopia/models/item/cloud_spawn_egg.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "item/template_spawn_egg" -} diff --git a/src/main/resources/assets/unicopia/models/item/cloud_stairs.json b/src/main/resources/assets/unicopia/models/item/cloud_stairs.json deleted file mode 100644 index 971b7b9a..00000000 --- a/src/main/resources/assets/unicopia/models/item/cloud_stairs.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "unicopia:block/cloud_stairs" -} diff --git a/src/main/resources/assets/unicopia/models/item/cloudsdale_tomato.json b/src/main/resources/assets/unicopia/models/item/cloudsdale_tomato.json deleted file mode 100644 index dfe20694..00000000 --- a/src/main/resources/assets/unicopia/models/item/cloudsdale_tomato.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "unicopia:item/tomato" - } -} diff --git a/src/main/resources/assets/unicopia/models/item/construction_cloud_spawner.json b/src/main/resources/assets/unicopia/models/item/construction_cloud_spawner.json deleted file mode 100644 index 542a675b..00000000 --- a/src/main/resources/assets/unicopia/models/item/construction_cloud_spawner.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "unicopia:block/cloud_cube", - "textures": { - "all": "unicopia:entity/cloud_spawner" - } -} diff --git a/src/main/resources/assets/unicopia/models/item/corrupted_gem.json b/src/main/resources/assets/unicopia/models/item/corrupted_gem.json deleted file mode 100644 index e253f118..00000000 --- a/src/main/resources/assets/unicopia/models/item/corrupted_gem.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "unicopia:item/corrupted_gem", - "layer1": "unicopia:item/corrupted_gem_overlay" - }, - "display": { - "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } - } -} diff --git a/src/main/resources/assets/unicopia/models/item/cucoon.json b/src/main/resources/assets/unicopia/models/item/cucoon.json deleted file mode 100644 index 864da648..00000000 --- a/src/main/resources/assets/unicopia/models/item/cucoon.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "unicopia:item/cucoon" - } -} diff --git a/src/main/resources/assets/unicopia/models/item/daffodil_daisy_sandwich.json b/src/main/resources/assets/unicopia/models/item/daffodil_daisy_sandwich.json deleted file mode 100644 index 68ee4c6a..00000000 --- a/src/main/resources/assets/unicopia/models/item/daffodil_daisy_sandwich.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "unicopia:item/daffodil_daisy_sandwich" - } -} diff --git a/src/main/resources/assets/unicopia/models/item/dense_cloud_block.json b/src/main/resources/assets/unicopia/models/item/dense_cloud_block.json deleted file mode 100644 index 59677ea7..00000000 --- a/src/main/resources/assets/unicopia/models/item/dense_cloud_block.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "unicopia:block/dense_cloud_block", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} diff --git a/src/main/resources/assets/unicopia/models/item/dense_cloud_pillar.json b/src/main/resources/assets/unicopia/models/item/dense_cloud_pillar.json deleted file mode 100644 index 3a126ba4..00000000 --- a/src/main/resources/assets/unicopia/models/item/dense_cloud_pillar.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "unicopia:block/dense_cloud_pillar", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} diff --git a/src/main/resources/assets/unicopia/models/item/dense_cloud_slab.json b/src/main/resources/assets/unicopia/models/item/dense_cloud_slab.json deleted file mode 100644 index 391d435d..00000000 --- a/src/main/resources/assets/unicopia/models/item/dense_cloud_slab.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "unicopia:block/dense_cloud_slab", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} diff --git a/src/main/resources/assets/unicopia/models/item/dense_cloud_stairs.json b/src/main/resources/assets/unicopia/models/item/dense_cloud_stairs.json deleted file mode 100644 index 2f6d2f1b..00000000 --- a/src/main/resources/assets/unicopia/models/item/dense_cloud_stairs.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "unicopia:block/dense_cloud_stairs" -} diff --git a/src/main/resources/assets/unicopia/models/item/dew_drop.json b/src/main/resources/assets/unicopia/models/item/dew_drop.json deleted file mode 100644 index dd06a590..00000000 --- a/src/main/resources/assets/unicopia/models/item/dew_drop.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "unicopia:item/dew_drop" - }, - "display": { - "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } - } -} diff --git a/src/main/resources/assets/unicopia/models/item/diamond_door.json b/src/main/resources/assets/unicopia/models/item/diamond_door.json deleted file mode 100644 index f34f4821..00000000 --- a/src/main/resources/assets/unicopia/models/item/diamond_door.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "unicopia:item/diamond_door" - } -} diff --git a/src/main/resources/assets/unicopia/models/item/enchanted_cloud_block.json b/src/main/resources/assets/unicopia/models/item/enchanted_cloud_block.json deleted file mode 100644 index 60932b39..00000000 --- a/src/main/resources/assets/unicopia/models/item/enchanted_cloud_block.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "unicopia:block/enchanted_cloud_block", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} diff --git a/src/main/resources/assets/unicopia/models/item/enchanted_cloud_slab.json b/src/main/resources/assets/unicopia/models/item/enchanted_cloud_slab.json deleted file mode 100644 index 22bb2a3d..00000000 --- a/src/main/resources/assets/unicopia/models/item/enchanted_cloud_slab.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "unicopia:block/enchanted_cloud_slab", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} diff --git a/src/main/resources/assets/unicopia/models/item/enchanted_cloud_stairs.json b/src/main/resources/assets/unicopia/models/item/enchanted_cloud_stairs.json deleted file mode 100644 index bd5daabf..00000000 --- a/src/main/resources/assets/unicopia/models/item/enchanted_cloud_stairs.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "unicopia:block/enchanted_cloud_stairs" -} diff --git a/src/main/resources/assets/unicopia/models/item/enchanted_torch.json b/src/main/resources/assets/unicopia/models/item/enchanted_torch.json deleted file mode 100644 index b20c33ef..00000000 --- a/src/main/resources/assets/unicopia/models/item/enchanted_torch.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "unicopia:blocks/enchanted_torch_lit" - } -} diff --git a/src/main/resources/assets/unicopia/models/item/gem.json b/src/main/resources/assets/unicopia/models/item/gem.json deleted file mode 100644 index 71f14755..00000000 --- a/src/main/resources/assets/unicopia/models/item/gem.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "unicopia:item/gem", - "layer1": "unicopia:item/gem_overlay" - }, - "display": { - "thirdperson": { - "rotation": [ -90, 0, 0 ], - "translation": [ 0, 1, -3 ], - "scale": [ 0.55, 0.55, 0.55 ] - }, - "firstperson": { - "rotation": [ 0, -135, 25 ], - "translation": [ 0, 4, 2 ], - "scale": [ 1.7, 1.7, 1.7 ] - } - } -} diff --git a/src/main/resources/assets/unicopia/models/item/handheld_staff.json b/src/main/resources/assets/unicopia/models/item/handheld_staff.json deleted file mode 100644 index 6a51bd98..00000000 --- a/src/main/resources/assets/unicopia/models/item/handheld_staff.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "parent": "item/handheld", - "display": { - "thirdperson_righthand": { - "rotation": [ 0, 90, 55 ], - "translation": [ 0, 4.0, 2.5 ], - "scale": [ 1.25, 1.25, 1.25 ] - }, - "thirdperson_lefthand": { - "rotation": [ 0, -90, -55 ], - "translation": [ 0, 4.0, 2.5 ], - "scale": [ 1.25, 1.25, 1.25 ] - }, - "firstperson_righthand": { - "rotation": [ 0, 90, 25 ], - "translation": [ 0, 1.9, 0.8 ], - "scale": [ 0.88, 0.88, 0.88 ] - }, - "firstperson_lefthand": { - "rotation": [ 0, -90, -25 ], - "translation": [ 0, 1.9, 0.8 ], - "scale": [ 0.88, 0.88, 0.88 ] - } - } -} diff --git a/src/main/resources/assets/unicopia/models/item/hay_burger.json b/src/main/resources/assets/unicopia/models/item/hay_burger.json deleted file mode 100644 index 21dd88c2..00000000 --- a/src/main/resources/assets/unicopia/models/item/hay_burger.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "unicopia:item/hay_burger" - } -} diff --git a/src/main/resources/assets/unicopia/models/item/hay_fries.json b/src/main/resources/assets/unicopia/models/item/hay_fries.json deleted file mode 100644 index 7634cbb5..00000000 --- a/src/main/resources/assets/unicopia/models/item/hay_fries.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "unicopia:item/hay_fries" - } -} diff --git a/src/main/resources/assets/unicopia/models/item/hive_wall_block.json b/src/main/resources/assets/unicopia/models/item/hive_wall_block.json deleted file mode 100644 index 8a38250c..00000000 --- a/src/main/resources/assets/unicopia/models/item/hive_wall_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "unicopia:block/hive_growing" -} diff --git a/src/main/resources/assets/unicopia/models/item/juice.json b/src/main/resources/assets/unicopia/models/item/juice.json deleted file mode 100644 index 616a1ef5..00000000 --- a/src/main/resources/assets/unicopia/models/item/juice.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "unicopia:item/juice" - } -} diff --git a/src/main/resources/assets/unicopia/models/item/library_door.json b/src/main/resources/assets/unicopia/models/item/library_door.json deleted file mode 100644 index fd548d58..00000000 --- a/src/main/resources/assets/unicopia/models/item/library_door.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "unicopia:item/library_door" - } -} diff --git a/src/main/resources/assets/unicopia/models/item/meadow_brook_staff.json b/src/main/resources/assets/unicopia/models/item/meadow_brook_staff.json deleted file mode 100644 index aeaf16f0..00000000 --- a/src/main/resources/assets/unicopia/models/item/meadow_brook_staff.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "unicopia:item/handheld_staff", - "textures": { - "layer0": "unicopia:item/meadow_brook_staff" - } -} diff --git a/src/main/resources/assets/unicopia/models/item/misted_glass_door.json b/src/main/resources/assets/unicopia/models/item/misted_glass_door.json deleted file mode 100644 index 0e126a3b..00000000 --- a/src/main/resources/assets/unicopia/models/item/misted_glass_door.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "unicopia:item/misted_glass_door" - } -} diff --git a/src/main/resources/assets/unicopia/models/item/moss.json b/src/main/resources/assets/unicopia/models/item/moss.json deleted file mode 100644 index 47ddfb01..00000000 --- a/src/main/resources/assets/unicopia/models/item/moss.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "unicopia:item/moss" - } -} diff --git a/src/main/resources/assets/unicopia/models/item/mug.json b/src/main/resources/assets/unicopia/models/item/mug.json deleted file mode 100644 index 78012844..00000000 --- a/src/main/resources/assets/unicopia/models/item/mug.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "parent": "item/handheld", - "textures": { - "layer0": "unicopia:item/mug" - }, - "display": { - "thirdperson_righthand": { - "rotation": [ 0, -90, -55 ], - "translation": [ 0, 4.0, 0.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "thirdperson_lefthand": { - "rotation": [ 0, 90, 55 ], - "translation": [ 0, 4.0, 0.5 ], - "scale": [ 0.85, 0.85, 0.85 ] - }, - "firstperson_righthand": { - "rotation": [ 0, -90, 25 ], - "translation": [ 1.13, 3.2, 1.13 ], - "scale": [ 0.68, 0.68, 0.68 ] - }, - "firstperson_lefthand": { - "rotation": [ 0, 90, -25 ], - "translation": [ 1.13, 3.2, 1.13 ], - "scale": [ 0.68, 0.68, 0.68 ] - } - } -} diff --git a/src/main/resources/assets/unicopia/models/item/racing_cloud_spawner.json b/src/main/resources/assets/unicopia/models/item/racing_cloud_spawner.json deleted file mode 100644 index 542a675b..00000000 --- a/src/main/resources/assets/unicopia/models/item/racing_cloud_spawner.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "unicopia:block/cloud_cube", - "textures": { - "all": "unicopia:entity/cloud_spawner" - } -} diff --git a/src/main/resources/assets/unicopia/models/item/remembrance_staff.json b/src/main/resources/assets/unicopia/models/item/remembrance_staff.json deleted file mode 100644 index 68e2efdd..00000000 --- a/src/main/resources/assets/unicopia/models/item/remembrance_staff.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "unicopia:item/handheld_staff", - "textures": { - "layer0": "unicopia:item/remembrance_staff" - } -} diff --git a/src/main/resources/assets/unicopia/models/item/rotten_cloudsdale_tomato.json b/src/main/resources/assets/unicopia/models/item/rotten_cloudsdale_tomato.json deleted file mode 100644 index b5a25d36..00000000 --- a/src/main/resources/assets/unicopia/models/item/rotten_cloudsdale_tomato.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "unicopia:item/rotten_tomato" - } -} diff --git a/src/main/resources/assets/unicopia/models/item/rotten_tomato.json b/src/main/resources/assets/unicopia/models/item/rotten_tomato.json deleted file mode 100644 index b5a25d36..00000000 --- a/src/main/resources/assets/unicopia/models/item/rotten_tomato.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "unicopia:item/rotten_tomato" - } -} diff --git a/src/main/resources/assets/unicopia/models/item/salad.json b/src/main/resources/assets/unicopia/models/item/salad.json deleted file mode 100644 index cbf2ff97..00000000 --- a/src/main/resources/assets/unicopia/models/item/salad.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "unicopia:item/salad" - } -} diff --git a/src/main/resources/assets/unicopia/models/item/slime_layer.json b/src/main/resources/assets/unicopia/models/item/slime_layer.json deleted file mode 100644 index 53d6975a..00000000 --- a/src/main/resources/assets/unicopia/models/item/slime_layer.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "unicopia:block/slime_layer/layer_2" -} diff --git a/src/main/resources/assets/unicopia/models/item/smooth_marble_block.json b/src/main/resources/assets/unicopia/models/item/smooth_marble_block.json deleted file mode 100644 index 544dca6a..00000000 --- a/src/main/resources/assets/unicopia/models/item/smooth_marble_block.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "unicopia:block/smooth_marble_block", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} diff --git a/src/main/resources/assets/unicopia/models/item/smooth_marble_slab.json b/src/main/resources/assets/unicopia/models/item/smooth_marble_slab.json deleted file mode 100644 index bc670293..00000000 --- a/src/main/resources/assets/unicopia/models/item/smooth_marble_slab.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "parent": "unicopia:block/smooth_marble_slab", - "display": { - "thirdperson": { - "rotation": [ 10, -45, 170 ], - "translation": [ 0, 1.5, -2.75 ], - "scale": [ 0.375, 0.375, 0.375 ] - } - } -} diff --git a/src/main/resources/assets/unicopia/models/item/spear.json b/src/main/resources/assets/unicopia/models/item/spear.json deleted file mode 100644 index 72b8f7d6..00000000 --- a/src/main/resources/assets/unicopia/models/item/spear.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "unicopia:item/handheld_staff", - "textures": { - "layer0": "unicopia:item/wooden_spear" - } -} diff --git a/src/main/resources/assets/unicopia/models/item/spellbook.json b/src/main/resources/assets/unicopia/models/item/spellbook.json deleted file mode 100644 index 2f2a4302..00000000 --- a/src/main/resources/assets/unicopia/models/item/spellbook.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "unicopia:item/spellbook" - } -} diff --git a/src/main/resources/assets/unicopia/models/item/sugar_block.json b/src/main/resources/assets/unicopia/models/item/sugar_block.json deleted file mode 100644 index d39df35c..00000000 --- a/src/main/resources/assets/unicopia/models/item/sugar_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "unicopia:block/sugar_block" -} diff --git a/src/main/resources/assets/unicopia/models/item/tomato.json b/src/main/resources/assets/unicopia/models/item/tomato.json deleted file mode 100644 index dfe20694..00000000 --- a/src/main/resources/assets/unicopia/models/item/tomato.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "unicopia:item/tomato" - } -} diff --git a/src/main/resources/assets/unicopia/models/item/tomato_seeds.json b/src/main/resources/assets/unicopia/models/item/tomato_seeds.json deleted file mode 100644 index 0f5a7698..00000000 --- a/src/main/resources/assets/unicopia/models/item/tomato_seeds.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "unicopia:item/tomato_seeds" - } -} diff --git a/src/main/resources/assets/unicopia/models/item/wheat_worms.json b/src/main/resources/assets/unicopia/models/item/wheat_worms.json deleted file mode 100644 index b5dd6e0f..00000000 --- a/src/main/resources/assets/unicopia/models/item/wheat_worms.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "unicopia:item/wheat_worms" - } -} diff --git a/src/main/resources/assets/unicopia/models/item/wild_cloud_spawner.json b/src/main/resources/assets/unicopia/models/item/wild_cloud_spawner.json deleted file mode 100644 index 542a675b..00000000 --- a/src/main/resources/assets/unicopia/models/item/wild_cloud_spawner.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "unicopia:block/cloud_cube", - "textures": { - "all": "unicopia:entity/cloud_spawner" - } -} diff --git a/src/main/resources/assets/unicopia/sounds/cicada/cicada_4.ogg b/src/main/resources/assets/unicopia/sounds/cicada/cicada_4.ogg deleted file mode 100644 index e11bac078dca18d13f1ca81a58d1f066de8592b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60898 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 diff --git a/src/main/resources/assets/unicopia/sounds/cicada/cicada_6.ogg b/src/main/resources/assets/unicopia/sounds/cicada/cicada_6.ogg deleted file mode 100644 index 8c776bd3de3c86f80776022a98f8b99a07f26e95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40139 zcmeFYcT`hP*C>2afY1X32-VO#(xr$72pA9)0)$Wvy(?YB79b#9x^(F!6zKvsKzfs2 zEffo2N5n4opugvNpYQ$dy7yb_uJ6A)YciQLvuF01U1sko=d`D%B>)Bf35h5FX4s;i z#X^K3VdsKeyn_#lpt!n!Kmz{)cR)@bwETBCXbAzIwgMJQICb{_TS$Zb?Me=WAbAIP zDV`4U#Q1r;5dR>+7-LkFlvR{elvFX&r~S`*2L!nXyPpk_Ip`fi_qVBxz5x*eAixr3 zQ%pZ)GSwOYkN`jymto8BFqWyvERnvDlZijb^()2aWXAWSU6Ygt{*_?V+_(V%4p5{S zQ_5Z%`%GwgqNP%TinY8?X;xtv5-e7=7<)fUx}L3Ut@J%RAtQlcwWR~c4PfyiF(|@8 z;u0qkiw2WxfUKRY4F#Z__27DKNdOkO#KH{MJIGM_vAh4^y!@>X*aG1b}G?Z}@YP3mk zd`kTEj=Tkz`jo1nrIndA7(yLw!rT|aLKng=+vddBcU-pZh_PRcar_eFjE?;$e!cwc z%R&4zbPNP27Sqb!kSP`AFJ0Fvg;8Vcpn%%}NidA*qB7}a#+4pE4c__fUbXH1qs{W8 z%`AUFK(4|M-UcZ4&a3=?MGxC-_y2vwdJV|}Sdf;3fr5j9;)VqA!612tKNKDUK%Qa= z^8G<-CxX=mgO7soLJ{!IAA*fV3h^?0|kdcY7i7=g4At-br*uo7C=%Q zP~?9dBLBz>I1rISk8B?bLN(R-4_PQ+x9Adt0n1-ZAV6Hnb4=c3-luUbw!9a`HK_cV zo_MQ#sm_|5{68G@o8a33c_}lJ+h3eJnHM}^%#v5}H+O+EpP{~H8Z6^`RlqjD=M2Jm zPvw{5~&o)5DvM{mQk!cBvUS&oML2B6Kzi5ld1@b`ZID2 z08o*Cr1)RSA5s1*#pUStAkRU-1f34xIqi= zThTUeCs&b4Fp;VFt5G0RF>a}P^n8DmBsM2#M5YSVivMKX2k}Q7LR0?{AAJa4v#DbtOM^K+5C|FzR{;xF#tesOc zn^6M^n*{)T0PwuLayEjE(D4G2>_buZnmI*flqgb02FuIA_f3R zcfTO~Kkw%Md+C2e2%$&=z_n5mPk`VkG{w~xn=a2xwgt>!;rv(>5*6I17}SrM2UY4N~^2_)_V- zN?Mm9i0IKD69qbVUU~m6Rx?9^voJUtJM!kej6djsMr&XOA!pRgK*$BUQm?$q8X9Ox zuzvvOLLGVI4$5etb%7oLSvxLdxl_Esc3lnfFsr}Me8n`{c2|SkC;&Q8OIhx=^s5I? z&GG=S+6@6P-3aaB>Slz1S;q$e#osIn#DTJqbIo)a(|RSYZ=(FN zAed960u8!1H7M5uA15R%}OhsHsU zAU6&OB{6!yqZ%5G34EFX2^DkT@6u?md)p7_zYyxYazOmoUELtvL*4m04$QYaGXR_p z007xW=TK@!X;U|7=%5GolB$f50evodk#eLyUM42>|0(_u3fP8%{AY!tk>vbOE|BRz zS1tdwe)<11w`k{E-$n$`6EQHXEj3xSPP~vig`StcnG--Tf?U^&Q{EKMOgAy%)=$!s zmdMJsOQ_e6Q$|#j&)WGZ^E}dGC@IghOOR<_2N?vGfkUx#U>2#!v`bWIN9X&AfL!wh z%Uo4W+Q2e!D8BM0onTp0KiW6hP&(iKpw_ouUFJpb$)-6w*Sa>zvZVBbvbwf;(M*EM z0Ll`~9OyO{*AT?~lhukQ>J zgbBp)r@{nWvZC}E|5jwCgK!o9RDg)U{{N`}5rN(OZ2@KuT=1*|*n`ZUwB{fOKK@Pr zR#bq9z{0;p2Z+GOfBO4_D3c)j_Ys_aVF$CHn5;tIDb`YIRJ1gAWAnpTfRTewL`GRlkK<3Z4)7HK@B~U+oYzZD?W4!A`Zy!J ziRmeGaC(FMv4mIvfH3_jY43s%r^tB0zk#@k6XXie&)`b1Qwj$ z-I#UbjH(w&uqdldi!t_q*xUsrhVyn^^7&Juw=#ZYJuX<;d;g{B{uW{1(b)f1Go8@; zFMgM!i(D&91X6Ci8?WsbCure{WbraytEH|h-qU{EfuA9BP1oZ_`dsM56`s5MEg>fJ z_yhp09u5>6vJ~l8yq#&}rtE&3t+|Terj6{wRzqTTeIl+aze*aSKBp=D=r$Red0dci5X8{x+xj)YN?49trWI;|YNK`*3X7ms+* z69Q}D2&xOEd6a=w)QDyMtRXX>`>yEWd3u&f5zNYw)*)7wUgch4BWwe|dFkqA-;CeO z#C(x!pL*h7{kq$>{3*+xV{C+;PMIvCFa%t}?kF%m8gyIPeG z^NOsE?r5ga_jYuNguX_fk@@*5ew4v{nzjD!cw)|?`nS@}Yh$zh^=C!1T#cG^;_h(P z-$+-iKXuJ2y-_2#l`luMpm~8is^4sqqSJ%G!e?pIb#PK-Ub@w5LfCbK&y&nr-gK!n zIuwj4gy}_f7YdD&?B|Cut$I;a)5Ox6)IF5NsPnEtA?9~c|Ljlg@EuwqpArqL~fC;n$a#)jQvMys%SFWKMC3ec1%)`?7TsPVsSkcl;*cQHv zwF;c-8-SFC4(6&@*=UIMYp?;tAU;S!q!Qq&#DNCjjRAS!(w=iQOZK5)9GWqbj^cUm zP~M@zVI+Pa5TV~8^F#jI?;|b1eTL^as8tlwX7(%_dJ_JQbF8EJ&LIFxy*8Rv z>v-ht8%3!|M>pl=G2E2Lwu*97^GPT$X{#(7w5S$uJHJ=|Ugt;r+4tWAUEkGyvHj84 zbUJ0?a>RJqjzP=0i}#6J-QX;0yS!SfviYZFM&YjOmC=J`BcRe)$o%og%rD@o2K(uxt zvv~Qu_3GBI)AP)xhY$q4<9o4@UJ=HRtBi3-L05G-(bmR0DduH!fjB-E0PE@dLSSWK zENfOa8epSXlZ;X^oBsCn9@~7XqTSi|XeIgb@&Oo9?v!cyrYNUta<2j%J3Zp$RP*aw zXEQxu)#39IM?W(u3X6J7! zIG)LnFN!bJ1U=M%RBoE8dx}%Yn8MZfhw>loM%;g``(CO}BO^34E~3&s-}c4SO&JFv z;+1!w7>*G zrXQ)kDiU|Pmv5_hJhv+0?ox5Fw#~xknW{wL=mF}RUN`tq8dfGllr%$YAP2Bg93Fvo z-dqMw#!bMaNOR$kTJt;z46WbzT*fTcT&PjTZW)_omwau~s?BI?&VO~{;u>31W$XZ> zgs+uQeTJ}EX4s0+<>uJ(Uolvf5{VuKhl|9p#&`ZJIWu%rF&IK$A7F%Qb>%xm7w=&W z@xYZY8;vj#IM32GOYz@(lsJBbjOL9Tr&A(R`>X(2uIhvMLa59hon%g_*X87$_3`Ve zLRS5PcmN0qkQH5LIU5p?CU&Rmq2Vdr3)&kO+JD~DCk^XVY--6QpPM<8ZesH+bE&(` zK6ouW+wdon!=`J+$GR^&1;-coIz5U*yRDOTt0v6QLP3F8HcJ+Zj=5HCUbDPBR?UGx zWSU~`$*X0$F=)k_2*&BbPEGTKNNXEpnW`jo0y#``jX-^#Ve0^7Krha|lGBxr4&f13 z-rZTR3RJ_GmDaiEbH(E;?KGg*r4Iv>^sI5{higa+48(*JDvc6-OL)9$E>2|Riqb=x zKFN~BycM5-x*89tS&^HMO1>4;F7Hzs7Tnw_abnTwEj?NM5Nnn$0U<;1I7$6%z|9tm z+l}LZN%x`wh{Bnj$;d)kN(>}GULab@Zj^qj%Mg3Ta)gOdGJcmqjSe`5ppIeHdPtkZ zv%Co0B1F-v{HIda6SJPm;A~+<1%4Obq$xYck3PiV(Dg1Ca1ZgN|1aj)v8s}R$oRFh zt<`}VCP(s*Xym1pA2yV%JpTFU#PJr6Ah%;_qh6y0-np5HF`Pv`Pd=%8c>5equ#9Ts zN6ZGwGXmwY=?0~_*@kcAksM*`WWInJ*!ZHi9f4Wh6}$ zLn&cj;QKmKZ&VZO4arfH$P?bsi_wzc~!Q_M$Qn%ML<8YB~g z`x(h~glHC_!v>=ij-`jurz~w(j67ks@_eo*Imm#53X&qfBu^G#{wi6g$PBQMQMbQ_ zLWoJ-1LYrdRH9V-Ta^w4O{@F*DA!Rz`csdd~J z^)S)45P6mzS%9R(Dc2;*<^wQMq`S2n=^)cSI`n|KS0X}8E_)qx7OpT@Q5j4CqSu!z zf}bfS=JFoDL3_q4wtH8XJFx}tZE8_=MYCkdc@Z((=kf-}0sxJr!fpd0V!G#CO*VYC z+25K8-1h0nT2y?4d=YP5|Isb@?yBb*?sjiWr{H%4jk^QpB=rWDNiBmqnPsP4TnUEe zs1~*9)Y-vK*A#F})DUkxkY#alAcZ4-z{wqMnG#s-FgTB;F-bk%)m>2u%#R6=kLUIL zGSp|wSm~g@l{Hsy-BaIOM{AmGa=WRc!4{Un3@64PvK=BT-o9pDvK+0GDFJyWdUZ-6 zKrE9DvfH=w>oA<){|43G*MdNECrTsS4a*TR@+9pdv0)>6f`zSfajtT}+4f<8mj}_$?k1mJ7faogM(hydb@W_7 zl6x|^Ux>Y3D%pEn=lzrD2k%#o+?4PiKI#)7e6uI1H{z_6$l%$|nvq8zswl$Jp-oQSc&NK(YBkN+QQlluU%t=epp6aCljEV87 z+6uY1=_K@dh4kG_;@jjykj0E!LdoNxDY>EX*#<5ts9aUi^HQP%DM67pg^sMn&`dfGDJPa{PB+oQs zfS`t1LR`a9dW=?))VSo~)eA>1DDVhN22KI3o-lrYp<>Tquw&_)S>4& zGr#BiZgm!7gHjua(tVZLsz2Uu6t1;x5N~{6%zDiasQ{eoa|m=cBT7JyBx#*K+o2DK z$aU~N+WxlJlp>Nkn;1!-CI@TN3~H1y3%-LRAT#w+rd~-TPG|W^xtx6XxmYl}6p-;~ zbsqF^d|30fm6o-Q)hlgPaFv&cQ?}#l!^R;Sl@fqS48Z=xYc~Hd)}o~gW#nqe1OaHU z3OI%=kfWo;QrZtZ*YgkAKah0 zuzzMx!zvO+gAuETZ+DbH#f!Ocy3=;yKj?uRqECfp{;b9xpKDUCZT*x<-cl8k%Lo7p ztUVn0^&SNVy;!ubzqzSX_aMxFp;2;M^8tTuTZT99y35ucoo}q>0Q-qs&*QR=we=|^ zhuzb9cPD1bkz=cLB7SaTc-?4Ves!bR$JdHooa~7NFg)k2+!_&!5#@CX(MT6yjV?=m z>~f}B17ZU3Gj&J=c+airS&QaymYUDILhEWOgG>#zOrs2F0B0raFHJh1}1>t)5!PXl-+ zd*6QxR=*i0x0Fy19_j3U!!c^x?jiG!->k+;j0%hHKzPDLlx|VtAEw;Y#HG*q%9WPb zmCpNow!E;zpFB(0ER!ZRm+==?_+-^AItyyE2wf|AxEP4g2=jxrhh47NT@O%as|R)= zhGj^Nt13iS5u`M$bH?cb{yqD&cFL3px#7&h<1>K+A;ksub7iuL9bIvD-7mMV5NuIx zPCn%vzOYeCJ%<}~S_vATW|nm&ypKs=@R&EnVNtsfirj$ZF^fJ%R8;EfXApV5mMLY_Kw_oG_>sBalJ%5sQ{<;Wn`wUxcmS`Dybd~O)%beYFoEy2am|FiV6 zzkkQiiShn1OGDAu$Ye5yh0hkPLWr{~5cAyh|rzem80ZAtskOFCv;@a%=a_I`(){nJ#P|VO+wkZ8ugfON$BKyZyg+$=|wNgvE=D@>m!|6Wo z*Xwy<@x<)nqx7U^L{@hUuIMNq5oPwg19f(W^zalpCQ-5o z-yq8v3FAv%7WED6pl24@P2cCB7sHWZb~@<+F-zS{;lx?i=m93Gkj%UMdlFmT5nFET zcHZ;a$+tR{&#*mexm4~syxL|;7AGl%$w#taP|QP&Yi)YtDp*vc|Ik-^{FRdFTk!i* z&vO`Vv8D6&wsoKD1$VR6CP!dCJ3qmrg@(O>xi>O*T80??PF?bxZ};%WyDazg^nk}G zt9%z+H|tMnpS@Mk_BKq_B_vflh0UlXH%AOT_|Uv=SKv^u+}5I^rs-W}DO z1WAT^pCZ3Sz&}tw764RS5l=8N9@fjH|MsTOYM4{zGjiS5rkn|LsOEVUh zo`ZEUub$zDW_F76dw(BRXjfrPxKGEYVlNu2I(@NUXmY1H%#TqlKv1(8hH*1eHhCl1 ziF-7rXPhTtuk=DD%uEUUB9sInSUVh-lT*nN#KE{w>dxUcTHHT|qg zKnX*gWFpN=cZ9whR(FDM-Q?U24BSG?Tv(Eb(*c%RU2yth=nwc)dRXWouKn>e!4$5V zQNufuoLD#s%ZBQ46F~toDXe?Ln3S7`dMZYvk>cj3Xi5!U27qLj-vEHu!?yFyT z8iX4Yj`@BC0Aep)^L1r0NX`t{mi*) z^!h9SeL@|C+--;PJL1C#b-m^$$~=x3UTwO;h;rHFnHebDF2o4dpgg`y6WTr8N36u9 zCnORh5=u3_w?wlLGH)`c08)3$q<5;-Y+brg2a|PminL{~g6^zxRJL2GLO4B-QO-c5 z=xx>t>v;bx{B*Z`oZ=jKzE%8AwpG5?DGjVnSQ%Wbzxj{QzRgUP{dz3A|469i*3|5 zyZ-{hh=r73NhROF1tCvce2YZPy|;d4QyR=SavDyWf>t(o!%oD-l_$DFwXJwc*Kjt@OHESsdR*D%62 zb`=T3h>v0^^4(afXd@g!L5myU&c98omtqaPv&(H@|>$ZvnoT zcY9vq6>Yx?8)ClWO+lMfi6<6tHTbVkMFNQUTNn3L0y z12W!G`WJGHUQKz*G_!QJ8}k#0HbeeznIIl?b{Zs>x@gZpWO-8>#{fKU+fQ$DRT$%T zeX<|r@v9o+=)B;orlr_r>j20PqYPNYS%UJkrMap_h{P?j`DU2AyT$p2EHz6n<${ z%t+hln29rI6>RNYlowO5M)Aqqe2wT={7t2ZI&%&&CU5}>p9b{x0`)#QryA2|!HIiJ z;|FwJ&J7zZ8 z(l{zJM>fyvlb=?5GKZD5-$)eavPIJ>8iI2_*^kUL;51KFAra3r2= z6%qg`+UBwlWgRLn<4(w%LJvHNacl^$Uem`!H+j9d~5Pbxw9p-|_SB7Y;5|$pnq5tz20I=K$ zMlEExX!)isR#msuSHBdH%W*`MC<^enD81C)*dNL7k8K*zWcQ@WE_=f z=m&9hZ6QW=GJ4&L;AeKPj^PIudaEm?k4OmkSgdC;5&IfPM16E6e3le~(4+ivqC-A3 zs`F+?OpIw9Dgo^x9x1~Gabjqpu&#FZ5*dgR?MO6jdbWJKu8Z9DB#tUJV+#mPE5OVc zqH2KRCowI27x{7{tqe$J%>1XNA`|8)YPEs%wv^lN1*sxuS#{~p&)i$^FnL$dCEcnb z5L=ix=#SDD>1P;*RSsXW`SILoSbA|G%B>mmbL^Cmf3+vhbvLr!oC>greqj2L&mK*Y z9;LZ3Qv?OzCCVgtO0rwsq$GG%N)P~?H2X}WGFf?rC+{NM?4X2oQHKwgVL*p(RlvMd z%+&l5Ro_;1nU~!LN#G&Wq<=vIqNVA=#mAM`SAN!APusZM{i}RRNL?|VQywPE*Q)bw zd(z=9&6#Wd{j+L2oLxd_BGn4AJ0J3xoX#roF(V;7Zf=Rx!y?Yc71ekX20YJ{)#OP|q@Sp$ zxlIclpSF8yw)F_}?LF3E_cIQHmQ9g%nHxM8YwjEqLv{-HsI6WCEG`)6-N~g{$@AP0 z89xONvD%8eJC!5pxj9pCEAoc2(> zyX~4OCHCIyyq2>v!F)jGRFGy!3fcrLwthEWrLspKK%NcapHM&D2Oj2*!4?G1f+el+fd zUy^gHkpIJFjq>mt4J6}(i!ucXx%X!aZP-6;e?Q_p@F>Y3uGOd^m{q1R`9->8kdNu- zs_nR+FQ>kt+vFdY+RE1WSdQ48Xnk%+>Y#leR;L-QL7O~G=rWV!;8|25o~Tv>7zui# zTnX)onmK0~PjkGT9;g>T@6|cm={9#aD_*5i#8=i) z%WbpLMDfCBn68`>p(Q5;7?kz$RiY4+AD5Y1&NwlNV@@@GaN*b-d49=RBZFnoQIxx` z_F4yyl5gZ@gbmF`CS6p1VG>=O5K|(k za-9bSrlVGcBlXqGUem)zVlE%SCefNutpf!*IzS1N{J8AyMu0cM2KhW_vf*Q<> zn|jyZUPlI8_u7Q6;CyBI?QY~$3gyrPfN80NNWrGD@*S;9!4>RErQ7MB7JDTo_!^bX zo*4dGxUDGmIQyA5-(Hz&FP>zfZBWYMdafEhZ|%~$6+TZNDnm*_paqA#v-?Vtn8XFd zfbJ%uX|y1MEGyj#ZyWMwpW`(0vY%!VbxhY(kr$#p-QdLwi(5IxqyWX2*{1ZSiGZ_Yr}R8K0i$S9eEyA#walwr%kxKk$+^#jZc zgJh>A#fZ+QE}nhoTKj@VU<}|zI9g}6>YKMC=lHo?k1*N}2vaJH zKN%Nq-W+QU?p8gSCjwCdqC;j5AM33jsaqF1fiMtf?$b9jlLtf@S-7T!l?*j3+J1iB z`l>O`bY5NsL zUYSN%Nj65F>fvjKB~!>^OU2#P7vPKoKj(foSW0VYm;=$ReQCa#%U7q@f#;EFl_+@E zfNYHB|M}v_aOT>vy`Q-4#?vcFiGG99Z;M1ru8HE@d<{5#EE~;UI|i*y)}3EepJh`Y zxKuT3-h6uNv7kAwel@Be{|8QOsP zcSmA7T*(2Y#Km-D{zg4OKAx_&7i}>DZ}dP4sS|BF?uuO~tY%Dwk?sWWgydu@PN>VT zscZz>`7#K-AYZ>6D{-rjW#($6C1EU^A@f{qWXmm+#%@+-3>;1Qr1hTpu-v%`OhGu2 z%E5{LbnfNu(C#m@s}JT_e|x2U9}d!rkB28M$z0$yyI26iY0%FJhE8M$| z&49D8oorG1>?#cCduwL+s)E{fOdy$aA^s*uy6sqK@xers(sCGaqTW9&I^gA<9}Bi| zOZBM1#f9S9WX3!nvAT`BzaEU&w;YmqIQ}F=sXv?8SLZmV+}5_PG3DH7YL4XR$5?{w9*VXIH?$C2)Px*MrY+a*KId56Cq|2nShz0pjA&>)#AM;6X%mCnlQ$0 z1?CkvHOX$+2hNt%MNc1(YC-APtfi)5jGGCaT#DXqV%br&?1@O3_!K^-WJx20?T$mC z-{W76k$EqPvg5&(Upwa*Y~CApkGo}@_!^PwxJE8Sajl;~M5Q*SIVXQ^k}6hh5UX^R zRI&Xn4D=^G- z*{HcV1$s_GNe|zK5=sOqdOdoehFeZAQpkDHc@|mPrn{OgFhwtku(>5%&2N#K7t#GB zR1Kisb5S3|WE;9>Q?TTdkY3DD6~d$j2?2+5`pO27X|wM_)|}EsOMnZn=klO2qRhq? zLk=&45)nsP@z5H1Kqcvh25UK7FA9bbhccdDu*(IIG7!7o9eue$k&V?=NVgB1(pK00 zbe^HnRb0T}&im_ESv5GCkqJOQy)Aj;D{Jtbs;kWMjA=N|4<-3@_!!`KhZ_MJ2vgj& zcc0dT%%7)sm}Cc?>H+0BC*=l{j5Pf0f^)ej&--@U!GPQ+R#5Oj7R#P3q2l*>JnWpB zvVgCv%8A*KnIAbSszw*|4@(POye@e}qh*YBxzpg<-LttYMY-VFl8{3Y>zT3BHBe zk&cGhcpud4FbDC=vg#bymkuYNMr z5uf&tIy6@uab9N1m7kV78E%r)1!Uu0F$7vb95e~CTdeV-SL)&nTu15HGEQOvZ7qge&;ny4L5gvTOLcDGnhZ_!yL6cbiWSK ziI0$&u|ACL)=Zxhp~us_hr4T%WOS@Z#g_&HqeL~JV zl9!)8FDly~=CU;$)^1D)n$MGn;7A36%2!x**N`GWqvRc;&t~~DqvWEViFTrifwHNsRrnrIhd^wW;A5%ay4u!qy3M|tHGj46yfB>DFe z>ft5yzjIAfpz`Fqn86fDdydpm2K*s&=2rq78JShOjDfc6XUlz|XpOp;C+@W+^9#M~ z2Pa`QD)Mvkx`Rh0di2Q}X*agkaPDV*=;ip8@$!k(;(jAfxfTRNQjrul@+ zeM<}lVVtfs$$@1N^$Ay|XB<;rh1+BLkp3Jh7AV>Zu^WhDp*|BCykn(Z=1Q&{f%x=*$Gg5K*Iu-3Q6&t;m*y7| zZ>4N{Nf-tO2ZARvDnpj3X`gnRDyFIr5m|m8`XYJhxQ6;dUrP{Yazbd%$H?-*qfcJH zUi$5LsNP$DDMuII%oK0uN|ze#Bj{3mg3ArCcAwfn8gq*oJC>NAw~!uNlp~VU-YKCy zPtoP}1CE0`ZWoMPdQw>oT5D7+EL%+DTu#t;$)`0NK(8Y_qikXIaJ#tWxN&m1f;AM! zKm{O+oO;(NR2#8o-RuOm6D-1r-9w)v)s1V8R?J&I*WY_u-euMA@i}|PnnRuY)XGW6 z7AdpSr)~;v{>r4)Sra9U4KZ*-c!q-v%aFqPXJZwmBg><^KrV~A&Q+6{48q&Jdv~^z za~}AZpMLd-<}z)&Yg*KaUL1S%G5Eo24a=d;ABXCmXhl`NgopU1NB86oE?J1fkA9?q z7aq8t4zd;5V-hbF-g~Dfuk-%(?fV>%E8lY8#NB)F+56SL$1|5sJ@7F1{xG-|92%W1 z%;U4Owj*5zvDb;@ykfgK2y&u0a00Eg{Jk!juTack`16be1VF}DF~mNf=xlC%_m=)5 zA%nSU?9w30%qIG_qnBF$)zFKK5#~26bPUNOtEX&#DZY+A8mY?jNs|(`nglc1%}vNIZR8puV^$Vy zzu*#0UKHS8vh{^3>enf6d~m;$4Pn8{Xe69X%5&72(W@4%HxiGR7R1B=BT0qGTD#bU z{-J@8wKj4wI7xQZ9SJ?9Lt{${=u&L7jz*ro?nMZsZSpFc9#ah8jNGC@Hf7iOZc|d< zy=&_i;d^m@QuoG^(C}~M;4_xk`1@ZkG8a1|BGPM0ZsyU3KY6?@_5JYx)#9tQFVlVL z%=@P|Hfi-74`1k`&+>BY(F(;bmELtTg|Z-u&{!1@h$vDY15kOHt+=pm<=NAhgkJ3Y zaP_zvb>1(l^!{PNdyiz6Ug>iJn7|LFkSm?237CJRh0`Q^25wDgmFvw8qR=}JZ957( zet!DW{ww$Gs0Ys%i`QzQsWP9{RPS()HC6g=0o1T~7B)xmSSC+|2|?!?0|&QhCIr#h zy-{XR$to4z{mT}dukbO2B z)+*c5>JJ{=zrWcmm>eXcd9-F(oe&!`7ln>yEkY^dsGmJlwob;shW)$k)# zn|YD~d)Lpi4$d8aGHX8b-15o_qnplFo?`~;!{@wT!4Cp*w(@cneI9sye`d|D)(ybg zg)XpEcheTh-S6z(<-3b%<+->LE4k&$oAdLxoLkmK1}G;KM_nA1Zmo45etWmB7~b@7 zrvqRl{rY_dh5`_vA%2Q|rxTxjMepVf!?&!99aHCV=9SkR#>puJ z>x~^%aC#E`khf@JjBof^@%moKC6yo8<>e(wi9l&HX%$q}iX~LUTHPfKZV$yEm7(Ug0j;JdbdvD6O>Rz+7@Jvl$zi4s#*r&a1W5gAr&{5SH2UNeT@K4oyx-BOj zY5fxNX#d*6ytkI;dH=D(w6TrAMweBJqg=XZ=1cCH zc}%WZ2It)kmfH|E`j11bV)|Nnhy*)bt{6?0kv@gP%6cccI9~9ZWuBXO-o+mf;~0iG z+kz3}InSjAi5$pH)3^5@w3HT(-{VA*exx5QdT*0-cF~%ZF6J@Yv_AAqt|nhA&$sYt z<8N<0-7D>L3h4I_U+TCbYh5aOLY;P0d{anbEW&**_0Fi)=a-ffIaA6zca|O(xc?Bj z)XW;f|NVvkVaGwWN4gjCuBPjLQ`NmHl0GcXKfoCLNX^h)BZfK_W!laXs!z6TpH5_2 zHomw#C3?Y}i5}m(PBi0CvjuvY&%9#id69ne45F`jR6}CyOyth%phH%|l25LT?r_NS zEPvt$o!5UZyR?B>FdTe?LnHGeKGv?<3^YJWis9RQ7xTD? zrwaoko*@H2y=z*?ty;+6F7sTG^{{@u|C#q4&zZAlzSqxP{85`eWpVk$sQ<}Wn=Fr! z<=sw&@qkZ9pN^S!a@Zch7@FG5;)sSAg`{1YV3|rvSAui%LI|9-HCIL22qP7wQ5Fs; zI2vp6vds=P6%5^>JXGhBd5?UMfV{JIm!r6MD_Ob< zjO-o}qKq-vWD_s{+a*TXGUjh31jyyNQ+-7>ebIV>rRZw4HqRR4&+m3>pH2loIC*a= z>5^b)wrb%`QNM=XXXo-4Htnlo$3}K*`J3;2Jfn`Pi8}OXF0)GZ0^JeMJkPF(z32NQ zZ(f-P-^%FRf@=6Z-g_@gS*NV6IVfpiFrpqx#nvR`E&>4*8GZCrZD)^Yr>81`XpAvEIm#S*vYaNz!y+JqFH zfj61q*e)q4F~Fm5o1QzU>l{Gw-MJcQoRQO_fosXLZOipB9|k`q?(TU#Z(PM-c|_49 zr0s5Yte306>#&cNQpq~XrA^~jAE%Bc-*VNk(K<~I>~TEvcp3Yw4KbBgm(dq-f)wP? z{Mv415@#&V#cFg@i775IMN<63%(Cd#gtw}tp(4wU_S^FG0T}9IJ}bQE-Mvh*Mzkn& z9k-J|^UW&zsa%uxP_9V$_o92I_r8@&h82HZ(`FCNy>OF|O?VX2sdxEqtwLCMSJ3rc z{Q3FzalF@-Vniy$t}l|W%K6J;#ND{bCm(azLoc0=Qs->5bGRDJ`gxH5$hWT@T`#9J z^nHzk`+WS8l7vm2BQ;1?tiPoBw=ie zMEOM=Ga!RQ_BaUsHyZo|=u)E5B_LuB?M@XyGd8-{=Q!bG=fq!`;yU*dMg@7t;Mcf? zdFx*LL1eha{#9Zwaq!}ENciJUpupA~h;Trh z>^_CELv1`?H^f{TD~k;xUpib)=HNv8V8LLNHb!o1=ysVQsetQO!;gp#{`^QaRy}m( zvNSql00t9n?03Ieze7Bh0__|}Fgadin0pf(JgSH~UA9%B6PyLDttVv)O(8|oDyA_- zja0H7dfsU@`?&=xDve&Wr*6ChalMN+|Lwz2kE^!zi~NDS*qqtMScThH&55ZdC!S1) zaVh)np9pQi&Lx>fIc|^7kC~djJ)aZTuk4@Dkl2gz?}9Q5B^iPcY=&_)D%&aZiUuTq z>ZE!KM`gbpY*{}~wBKbz!( z0Pr#5JP4y{DbokbS1XgxN+mp`tJe90aWoePpPcW>2R{cHxe1E4{J<(OFeFAhZ}Wt zh+nWZCKJX@w7+2};jz(=8JDSeLx~q+Gjlf8XAF|By&%R8xWSyvv!ikD=Y5N)6yN^J zOI^)XxW++WUl~aN%K%NR}E-U!9@(+H4 zX*S|-`HI8Jl8f@2QUR5SefzA8^0bHaX;bq@V%D!w8`7p6XwIV(CNIk^aD&5)xENSp0v7DvxlZKUh)Z5|Eq8juMNGR-?cX2 zWM8*XF>T>tAp&(s6P{mrAYRZc?oAMdwIyp?9~OVM`gLmQR|`q{9((wnChRgAC_Yz? zyS}f@7eMur1N#5u1;Fk_A^df$>tMCPb^=0h#^(CF!2sK`K6>-P{=^V1Eh&kH1G_O> z3dV+mj#iMY#A53`ByOoKsK@Jo?9U3SrtV^PN%8rb`rkP?uDnb0R@;f!$7mal!BrpY zkAXJHvVEWKjGlJA?r@6BOa^8&&I~G6wr>xG?AV;(y*O3y9r!B#=qtLlYZY|0svEKj zQ(vF@mP-TeCu2!%~6iza0x>O$=G28rwM_KVQ>C4Pz+`BoQ z-X@owXg|dD0>n+RH5{vJ2nr<=ZPoYL_nhUM@I!awCg)vK54>O3=3DBpg(q2?*aVP% zzfgeP+&obN!s0xUVE$I#YRk8*FsW`#-dHJmPp@8=qpLS;4XoQZ{ykM&o&f4}&*W^I zkK)Ithy^($MkW(LCD7e{@t$Xf#yei(N_$YootBp670JJD5Rt!OD-84Wu^nZ2$4Lta zZ*;pDz-A63$$(8ok;kYsQ7}dE_{qNB-f_1mIRLnOMr~fs&`k9Lg1amIQj~&ZzbL|Q zo~gJox_mvK21!8pL4SpT6Wkc4z+0H{EPhxX>@75gfI(H^1p+YCQ_^K>+~;g!H?rgN z`F`))$TX<7^B*&I_9sQyQjgo}p%n9mtuDAd+6*^+-PR1lMh=MPtm^9d-n6Wokz+u; z>`je@bt1UX%fH_6z z>-h+#BuGB_{g?64Kgn#|$=T7di#6?9DhyTg{D7OS`EHiVZNAI~yT| zXW0jq(#tK--}ak*^*uq{zi+l?PA38PAqukJW0XnoZ~u(Id)y=;rL zu&l2{Ow2>RszOyGk?oshRhy63=B?E1uVp#6=9Icad<~E^?XJ{24Y&i z9xHc0(#YLUAmtMT{Cr1#*MZ+aF}~U7V=Zc7xXWt=$9zqvVZDR_rlj81^ph1S9y5@8 zb?};5-)#9LoY3{@wN+&Bq!fqBK+xg)Rs{rY+IuB5zT89a3z(pMannXw_C^HIk-RcO1Ph0k->b1V1sXoEn?(@tkWbW zWz{0DpngEQq7iDMYVG%trC!TZsj7_(gN341Dq0Evc=)sG^&^>MKkY)?6HBJ!7Td>% zj}O`=#k8TqYq&c#yt&}v)i(OzPYBew%8gpf@cR%a8=3Od^y~TxEgRY8fFnH3&Ir}h zPmRoz3wK$2XvD|z_}L(IOp1E=h8h|xmVaABW#3Bb@5g=yeRJ)I4~opi;{m3Rp~P>Jw7{R_^&s3LSWt4b^_eu6yObic?R z>|C^;$t>0rBbxXfS>;Wbl88V9x^GDw3bQ&DLY#X_KSRV!DV8USnQ9$d7?oz>hH421#Z%qqckN{c@;i{N<4+ z)N1SO?V{Sqf$)W8%qce{1UD$?^z#O^>@kqQmv{hR!SR=Kfxsc-V*`?-E!VGnS%lZT zJ={s@Bg3~uVZkV3fw52S&)N4tn!^!?;?c(z2ejnv*H?Trz@L&FAo|BJ4b~2^57pEg zDPcs`i^Pa%g|rFMnHu>WE?n{F)pwn9OYTnTs0_6lE;Ls;gz0R`n%fD2&Ov|n)Muhh zicxL5ms%CZ#bB>igC?1kcN>*#`fh>rvZyYP#g>j)%SM;1YUknUeV88car^j4`4t5s znT!2Xh9vPBBAl9ll9nhqeFaI`Vi+@LMDe)MEcP8rZJT`fcC|#pb-JcZ9`SkSc7zDn z;+_eO;(8k!9;m~q_dmC@Lad?i$1mNj8|#DV5)N%6#1`eD6L+TPBD5r$EmN#kPf!r03dGCg$K{tn|3tOPuqi^Ej=BB2tYv18aFO0>VaRPnB~!E*{+R7kh7lr4 zI87)Y3=!5JH1ToEdd=9oAI;2;W>dKCu4^y%)VB>wmj~Sw9DqL%NRk56KV)JB7W5zT zW0(+T^2>dLZgLj<(sbwVoyUkj$MOk6;W4we+NFB4tJ0EcBg){nR=pYO%IWg~2p z9Pi+>i1#(Pcp;BFn?4U|BTD+7H&TmG41$pHzMWpqJmccEU-1Nu*4g+HO835Kk5v=+DBXMK`scpyY_Huv-p9OR727uCh^4g1 z`&D^yDVCcjg|Z272*XMM=w$Eo7Z~sE`nfJ!w|<-n$V6F*LP7@stl$33?d7GE0v&Ng zG)({*xe`%7NZvLRxv~|9A z^1q(1;|uaPRn!aOnHGd*q-z$I=!Q%r!Hzl4i76Gj$fOc%(@}dxuDYs_TbloK@TFu! zJb@($u5_mea|g16J6DrJ|9u2{9Gj>)IWn~!y3#7QyhrhNq-UH(%I|&2$=X~!+h=E) zgm4OMGs{@v?>-q>8P(9Aw5&GcnC?m|#m^UuVVW0*nMzhcnR>NKH_ond1$%r4cUFjB zAM~*D2Q$1lN?82x&nw~5h&UiKpIwlxT>`g;v5TaaNT@813%gg%M2i3%jCtR&8}ytuBD`_G#!+y-i(w_>HxU8QU;OVy z*<`^$6jF_JfYmNG01?f@L7+pC+xc!)dFkTxLQ~FSz_Z@741aILT<7Q9HxPQxG2r6W z&S2=Y-GJ}J7oHmi@i9`F2t)77PthZy=qFvs2KFK<#Z|fkl6@w>pVpXob-M|6?MRIK zSlj2=b6A~%?mH>`?!4*;059`D7-_-pEduZ4mP245=)FA9C5Dsed#V3?n{%N6&hiia zy#N`qxyhDAXe%(|@<0`R|ISN`-^j6aCabceLhg8Us?U3ZL z=GXt!*1F8czk$ZSy#Al=wXCd^B%xdf3c!rd&ve0!pB(Thv{xxx#HA3!w z`7U=>q0hNoA;eiS<+gF!A=7@NaCgVx(l@O5t4*ZI9Dxo&vf0}A2W$M#5g(>U($tBT zaI56wYMzd`rnS$?6Fzdnl{6cs_J+)N-{Q3Eiq^!9W(%_rBAjgKBQWS(7^m&uYxnB25OyVSE5Fkraio;{NQfOb!AOJVMdwW)4vFWn3gBM?kjZ)iGNQ@tH2 ztSJ8=-kO{68eTz?$v!{#V-udytr51tQSqUl3W2&NL4`&{O9QOY(~-yYF@VL`t|M&s zoTr|-1&~~hjqK(Jm|4QxWX?0=u3xO*i5JMx=%b85SxldJ3;jfaK$=1rYA198FOTXS z)V6{$%b-v3?}vs5IyAC-%S6o&v{=L!M@;$vwbwf4CSV7yJH!l{N&U8)#*9s9a zg1bR2v$bn!WuwiU?)XeLk1s@bCpd7O`tM@6j0_`|kR(TQl#* z-Szg3Bfq`lb4KV(J+VnUofl8YPPWplkwIu4u8I!%i_JHl`#A>PYmK@6&I+nXB2Dzg z^~Q!0_AkeBu!xQxJS9}^CEE6jS6#vra2X^JTY`ZpTh%w@V8Og%dp0GbZd{_mKK>xCybm-I)?u zzPOe7l^tpCE~(FUfsZwQbOWP{Q6Ife+;I z(bcW)2;XF}Gnc^rlhgx!c%Sz7Hi!B4?x1ZAF#<&(7PKV=t!+odBA`MHr1!+b#U?qV zpGC}qbk1Oa+K1K;W4rT^VP_eLRm;OGJHEx~(h6Vn|4zb-s~^HN7W#d^UDtiCDwequ zt)F~dIfh?~msPccWY`JCd}o}ddJ$CG-5x&g27X$4_9)~eU;1@8Q16P}ms3l5pl`#= ztD0_4F%F0md0I*fKQt*%WOU_3btJocrl;{fijBMObK3M`*4j`NFT_rqqww!m*#3Z| zQ14yQAimrh6-THS>Xvx_%{*$hVBgcyt|NKq;W#C%8^hyE9wPRUDKqZ4<2?};5RYHh zFUdXfoE>=dktYn7Hs0XdXo@BAJ|BB4jdXf9rcZ~Px^aSga8BW;2EdIVt+y4=Y9-I- zs4@elpS>-LX>VzHiV?34kY-I2LtpQ`y|7i6xL?=k@>y(WEy1#&X9hU4>w4-cEpQCj~6Yh`89GnEFdy98GOFy!3bY@*=DkkRi}ZBvXL{Yemnd)yKI& zqoAoY9+>SwO94{GLNi(uG6+9EhoHc?8d%iwG#{5_M{h36ihDT;3BD2E%SjK^s0K2R z!%2R7zWDX1Va3SvIQUGo>)qrvmKgmm6tBMMs)`R2InXESIL`w*g1y$LNGH4!~1 zn(9s_fNot6O6^@K`_lB`lAnWGIVaFOUluy`nPpCWe(OE2hws?yq0N_$mLFo^YE_KQ zW$bbgrk{_Ld`9OS$Y&+d5KG#pGxYKXtJSCM zy_AyNj67qFP8bcbWHv*9X7Im~h5#DK;@Yc#jS&V`@NWMP>^tqRrn&y3P=uJd>BOK% zfDOm~Vb;&^YndK-fk>CJ>E)O7CKq+CH%I{3!F7XCsY%%tm^AZ_LCm}Hx+g}TUO)c$ zO6zW#bV|B$UkK3wm$D|f*?5@d_+z0-U@#10gt26xPb<-Yt#W0+Rp*7`TBFZc4aF=O z>A0vQQ&U26EsFWRv=7k-ZT~cy4E<)B~2xHPmbU^!N3{@R^yg^h&U!Y?MV8XlZxm+)LY` zZyXL25%v*|A*b`BPF{am4_BjZ`8yOQZ72v75ZM<5caHVdcZ-T){5um*K-$)xqkAx7 zGb-WB?3U2u9+DiuR1c%qMO}q6ElqoqZbQaQ@jhiaHsLajXzTpLb@sJ3)1$-H^&#&h z`5FIp?tRo0riIz3%IQX&0j9(LEcZI+PG*u+8B27qyVO@K$jS=~2-~-He zyAU9k1Tg_jBspR&U5(UCEVAl+`4abvQ($`du0OV9#xnAN*^0)E>bb?d;WAXS0o=#pQ8zkT0gj z#~jRr4A)~#F%IU>LwEqIAbS!t(roLwzST^%1e$lM6-HzKHLQIDTNcGJWC3-qLWhau zQs&9$r%HCt`ZtEPfe(MX#b%N0tyk@Fkh`Y+LBZ^r{oaTM+q&HI+-q282-4cgZ}_9a zAP`xXg@+D+YIjqFg-`f*11NwYC(#D1k1nJecV>^)VvGI;qhZD5o25?|(?I@#wH_$Y zLCC~cB&2)oqT5R*y)sV-H$~aUhNR>&R<_mNnArYNcHDwk$JUvD^m8=+9Pi)7kB~i_ zp{tcnx3~bbf=KCKWk)iQ2=i3l)U$oN52NZjF{|p@(sS!Jb3CVch9V5yJnPbP3byw= zN#9jNb;G_Vi>*%&dHG6pDit<`7 zZk^Nb9f@mDQCu#iYwMY}q@N0I1`i(DMpyn7pA$OJCMT~-1UYZxklShjeQZl(e}x~O z{mi$ht1M0)s1y63{rflt7V~CkWqY_Uk5@P)$>5NoXln0F$wE`Xs}gMzjbgh==UGhq{HDsM~h@ za*N-0(iOdQ)ul1E{HQ33uW;aKja%{T!uH^EPrWz8PMgzp2NQG2^Sl*PyiY&Q|0r89 z-Bq27+=Lop6}EWVn-w9Mg{o7&)b_n^VX`9U*8y*1rwef$2p0T&xB zLTcF2elgaRJ#K0&>97sL`b*}J% zt=3T2<<{7uUrm{2b{Qztvz6PoI+SLDAbpwft`XEZxgWZL#Qm(H5@Sehr=N_eOcENAEijDlf7#5*+tKd#M$oV{D~U2EO&s)^b6R+y~U!R|$> z?BYr_jm|F`Tmki?WmyV6?jHhW5h-7@!PWXhvWXa#?B-JD=`!O^pfF7(x5~3f6WR{z z?KZ#jh10NZdKP%lj83~^mpvIY~jn?12zz)<1^&A;CG9_o+SWLvG`q3&1;IHi4mipCV zzc%*erMaMLer(>79faXGYmE{e&Qi@gy!hmLlGM-9*&l}xJsGaWylrf!r=rjKsta8{ zD$KD=u$1nMy_n#J__~tMA1a254&wvk&Fmh1_lKFJ+8Hc*dB(_2k4zikzr3LHJHovw8|QCIa}skCLW)~V0@Raw zS%O@O#W;oc4--pd;yp%qJ0fSeH+-Gp>hrAevp9H-*|hI6X9fGlM!Noqi*{JO!VqXxCILl=gWLO%?C>L zQjR7v^G!R1{|^knw~S#fz|0~JwBN3_r$gd^TQnp-3)u{&5)4O$$H&w}IpTcrZjUx3blDiVdkx)>caU+ksPO6vk;M1dT92=Wsm#NQH z?kR>oko;B6Y80u<7Sbi_dJxeND-%_mmtZp#Yy@m_qG0$i($w`AbI`?Dwa!Hvc<})# zSVZxw9nO}*qTll@z%n&XYnV!3LoVkn&Ncp_cQ!CLSzMursnjD@i!MCrb}8QPqbW)W zM}0}}kT8~CYJgq58hT!IcP8{PDmX$t`D$Z<{kWHw12HlmdcpMca!zX~qR4fns$o{q zu~pTT_!roVMa4lSk;Zq2a?ghaDzQ-U_7426ms$gYv%wmLVKoo{h==`nxZc09kr>C6 zLJw;OF`qZhg=e44_GL-f26Z4a=WzLN{wy$#B=8N@gy+W(_`pKexAZ@D`x zOFnK^ND^Tyn_iAvnl%i1H1uTV`9MieM_-t=P&!{T3Q3YpZ%&tS{LDG(KIirk=VlvD zub*$MX1!_>=GAQ&zP>hvE-o{S-@10OSEzf6yx{xVY=b zmm~}lnBrSs?v7`KoiTN*Jqa>+3LWG#h($YY*YkgKsaX~l^Z7I4W1SiYV8SVN@%lMl zk&G(r$e?EkekI!PKIg(7;4}NT`;ajrt^!rEo1f+pFHh|f)!whCysOo(SLTH{@9RQi zaMxAb{xNa*%&f08`j>CAa|ZCvwoWH9w>)U%j&sx1Oqmp(W^d2F)Kj5wLhMcxvjt4K zfvwJlbZ#5-VLn~~W&l9ab)LLRXPG8WUN*Tt@SbU6Q@GffPAOV>uj={Xw!cx8=J`{z z{(BSqY8=HS@L5yTA^58tWZh~9rzPR`J~R!!xSM~9SSzU zOtgo!h#f!7@9SIk|^i?Ms5|G_h@C_kFweTO`LEz@rSuN@uk9qpyM^Y{_9E|#$s%K9>cN|GYS#*p+Es@p36quNEAxyC_KaY z#e8o!yFaWmN#LJRx0E59ywuDOeu>3?(;AlP$?qK-V|qx2WZlU$G1Jj6)}?q|7AqzZ zV>heVa>xUit3j34Y#skhuqx_ZTMWrUJOdmj+MQMQ&?^?w+~B3d(y3&4A2Q?@Y}M6} zc&3KtXI=76R?>VccYV=4xUqU64xwlR^{o9 zF*V)yJnDezacHLJeTR2bu1i7RPdFPW`evwMe?-(ge3o($^t$lq)&@I*Njv)+stHcGK~gl%i}bhJTS=eb1B6V-!v7nN|K;aPH1{ ziQMHh{#s72eds}3F?qzrg{#qMFQmocu_mZeSE27shq84{-c%CCMz?S66#jRD8-q=6 zSYIk!RKSz+WaptSS*z=JB_KdcZ7-F@DYDX0_-FfHy}WeSl$*I(TSeT5vl_F$0lAsu(K!19ij0Tcw0O%Co0dhd5fvM>MP!;eqym@e>rtT zj3^EMqDd^+VN`GKjyyJ|_ILKz!ENoU`=zfn8C`hyb;stdPeVplre}ca5w*A5$6C$+ zPa?{Xh{~cZU45?}KU*nU+C6k&7|>h=CQ1Rsb7_{R0B<}=Q%x^;+?9c5b2Tvc5Gb3C zE`Vj^%?PJh$?yLA-tzY8#eK@oEuZE69Z{O5 zki5g=Z~+I`z{?|Qe-W;4Q$U8e%lS1gR_bN(yYaeylOmtV^odeO7RszzkSncS5f9_1 z3@0Bo5%#)BQ)m1`Or{LvUfrBhCyDvJmD|ryEX$t{sj}~C3tbO+?ex1RC#^OsENMK- z>k3V{%A)ykWUUw8#CN1-q+`;*6+P-3s>7U1+R;>c_N2;Q`zFlF0y)9*!9Tn9bpL4e zgrtq2EB!OYo`0?^pkBC6|B+S5ujf~f#wnqAu-lRsWONn?h82OwUZ!ttq_0fI&UYze zn&Yy@*9^hI&Q2Y9YW}BU{UPeTE!(SV#|fdWbw6R#8D-t#ox0(bV|FB?WC4Zc8Fnt( zSJ47{@cu?S^tL}aDAvKiR|5q5Hp1qF{T*?FuMn*B zy7M4$OkH=aqk;D;5y3|v)H;jx)3t;KhHwr8|1T8{Zl)Ig$?)-L{gk zy-*{Glfr}~^h8S8Qf5p!JpPc)cNSibB!Hg{U>sqbMl5g7D~c?I_JNwZ^2V{o!WC>L#yG- z523*At)1#E9m0dPggE_<*b5I+6v`P7SV1_`twS?NMhC!M>T2K;=?aD#KSfK|!LyqS78Oc8j&2h!_0=MaUqXf-gPs zRzrD%nZZEs)->27o1w^0D7<8*(03SsFkLu90{Dv&sjsNwBe&@{P-XeX;TytRz-im> zoXyVH_RWH}H9e=FWCL_fo*bTZ!&{P8ze>C8!s|!+ zrr9;znPn$8j07HhqvE!LZEt?KlL!hSjx%{5rN6$x@n+ z`id|55odI8gvHmcO9v!S!}i0Yd`UzxX5x7&(?+8`BLY)he+i_?3{|ovmMSUFen^vM z4YjQi;>9DZE56RCFmO!Jv1tWe%mmXX7F~eXa7>*Gl8=0ejw`rKpQzLcZ?LG>BgDdt zF{e{#XLAFPmVZ(uW~*T;q$_A}5^h4Zm`7KXyH6^pN2i&agTWgjV!WNMS?pYnGuryd zp~Pe}-D8_t)&u@WWv`@9b$*C^8Mh34J;9etm$AQy`}tmuQIA~It=8|KuXX1?lAb&F zz@OCy3bTJU`&dGh6co0CN(UJ}Jjy$9 za#o{7c82Nh(=R`t#%eP0u)zY^UrnO|VV7$AH@PAIBOA(yryM}`bdsIj(Z)zG=%?wx z!r!CRs#3zH_Qur^643Uj4%j8ESqZ+1_kB$C@?w>3woCNT1i)(T`{ z)w--Cr(H#UEBl1wapq7_V^g-MYS1=*P?>~#Y_fE0?kufn+oxBxTOQ<8 z54$jOhim@@)oFahi^i}7b>WMVVCmmlFNJ_V!BCgjN7P7C4Mmbz#5IMeQZB7;_5M)I zCjM1P)Fi*bi7`SxKO3|9LRn;}V8h2;N})JZbv$lLU|c>?;LnJ*V@9O6)=ceQDT>fQ zAxxWJOz3gB)dcGpiOb9P&KQYBC(R!} z{fo3yU(mcL`jU{05zo783WZPOQUuOtgULxj#dN1n%O61}SB*`o!={?_-6~s0&9!Y< zO~#szs9v5)Wlo+-Eot8c*ReT`jG};UdfjWe_*miil(pJhd8OMjG+g@lns@a4_)1~1 zoD0qrtc!}oMR$I@T}4i_p;Si8nxF2lmW0IQ(xI*H1KDMutU?CGNsL|1ZJ6XMHezURT)E zMTGsg@Cw_Goin!{&5HSwujWEqwv?u`4hyxaKZa-QE0<&%iY`5VRmB@_VK|05Ls%biJ}xT7Qa{QVj5 z8Tje<>Gl~fD`ljqud8GHT~EhAPuECMSI?Zw%_glhq%70Sb$X(YpGX$4=Ukew<4dJD9&Ex*Z!QPw(0h{-tjeZne{DK3$%S}OW&s{ zYdgHt$`~5rZ~TeUu^~8w?PvX1>ywZ^li*{5_fce5Rv1)ZUHYe7OFat~9wTtkg@TE_ zO-VHP+c3nWw2H{rq&#Ug(hAxvD_l&s$1gjr1Qsp;Z3t8*(@lnqOI!Kygc{Zw&m_Dy zp@NbszpbmTR>q4M6AzBo$<_uG=_BBI zHegM$RO%NTg8HT-YZHQL&!jSj>FtNLjbUzeDyhNB0}}CF)#7s zpd6*&OtbNEpubQ;S@PjNT`A^^5nOA~&ZmPQL)LD8uB(>F=hTcgu@&s(U>F*2`I}hF z-;la^*6_O=u^h4a;7RRt0(VeaA_0~{-j>f9k)^6EpD)TY@T(&jS^crR%5S*@%<@sL4=J^xdS&`Ns%&U*E&7^iX6YE!v?gI2i5j>a` z1i)7syq|q^zPy`DqoLB9HwqC&zJ{gEk)A1M5cWlroZJ_AT*g{*P=A8O)5!Y>#zeo@ z`KH7|ti}oCx(hixi%3m1D>K2y2leU|cT#BrmpC>SiiPzDCy2Gu7GIx4-*2V6>$%g6 z6e|kf3Qc8hiR6p{Ke`=f4Ali6a4^&Nm;i@W-BeVC0=f^$10WKh>bkx;WU>Hgs8Bl3 z!gFsR@sRy#+6zg*@-p%@mfg^|<932^kcSG6JN*x?*N}_Ln(e3#SGz$gADdD$*)Ux^ zRELFd{FdhXV+jd|%g3j9w^t2?75cy=xhEIQ((7_<2tpe=kWVAX#AFd(t57?rT`vSO zxu1|1SF3%6D|kAfa9>3`J)e@|N*;2HMIofP5fr2}`V}5k&X%7c5qt&$J}^}#y%9?U zM-h(JMRvabOWKPfe_XI=@&L~7T2~AbTsTo>h&@J&{m@2nkrDerf06zz`5ho4PcY{i za7I*%L)0&k3*R1e&olmkkiS-KGT)OWaFT~Ke|^VvCeQh8%k9`OH+H{E%nj9$KFE-}OysB$Go7(L1DgsVFKt9_T5WeO1 zSTZrFIQ}s)8#6y`!}<)h8ItP~6d51;b%n7Fd%-dOnLq)_y_)1D?9f00J65`=Bh?NL zJn%uiR~SS=kaV4wUgIDQ4=N{9Tn&n4 zyM4Y^PYk~WQiRl&-dCMYPo!T1@iSaJZ4s!5iE83}X}Z#HVIH$ZDb^}Tvg$ZUt#g&y zzgd5es*+wL>4b8Z3@#;D;o>^->huXKGm*lM;#eA)GO#0qmDsAG;y?x} zAN?d%u`3b_mVlsTFv9Yus>>wG1XYWphj>e28TK%&xaT0_7?QO1enJX}ItoszmQRN{ zBCvx4l>uL;*ZA)gR3}j7aaKb&%v`_gh}A;wUZQuV_1u$5b9+c2Ka$692HWr>k0vm zGuxtV9{snJ8>>LQ6GUD2wvh~a*mCs|v~*W*dX2wMo~$WHXp*vuMAJFfeOvw-Xy>i- z``|Tm%I?8qJ@ZfF-;hM5PkD2_$kpV(=+3P=h6GC*lK3Qrk>vtKHX^}R*q)SVl0Rt^ zDWI`YnJnT8)$ZDNU39pM{(Vty0yC80f@O%rts4V}%h$HFpwq>P{KwiiP#(MC%8b_nlo8z(R0_%;OgPp>VVyUE=&v zwdl$y$I-n>fASh1+Fmw;t7nAKbOkhZUFTw2{H}QR0}Bd zfp+M8fJI2%yzHyAVHA(#pSkAl;P-q5v2{g!FXYBZY!&@W4)$XZ-BJ8GB zDXmzv)+NJHfu&LkmCZ;Us)Q0nKwJfZB3pB0d2>fe-A^l;J9ts;G*}7c6Gc^C)Fj;c z0nE}bE@2qU05}jq(cFs_44zS}tZi7}ufA6aH~ytWl^(aWnB9&8Jh`7 z7$}Bsl5=Pd1c}f%$XNOrM1{vXxkdv*IYynteu`8ZSdEd@t(V#w(RZl6n2Cv(rW{5j zIWhWl&G{=-f{2v8=gzQjjCP2+>H{&L`i`Iw#juK!Aix8k#JGl4PQ6*pX}*M(Q7?J3 zvMiIZE6{&ur@By6ci6OK&PSuCfnBFCCU1wI0m=`8b%UQ8q4AB2_owW;@6Ao z!-`Oqt(`CMy~wn0hVpa4=%}8@?qaR73g614!@IfQk9Df-(tcK~1R0nqonZNF?#M`S zu07vDtCjJ`&up&6PA_pbpP{lc3vcj4K0qxQb=KT-ei!IsZt=n?i9gO$de@8WZi;Px zI=+r%zN;AKQO|p*`?&l?BWPmManzyJzpP7HuSv`{1$1zZ@^Yx6A5Oh(>P$^f}`wJ?>Orj4m? zt!7rF&M<$|?^tCjGOZI$wh&QyncdH9(EY;(Fa~*(G$?}>7G!x|bV*yhU6?T)40)KL7UcHx%{SqTx@j;wF$EfpR3Vb_ zZJeY~e(N-uY?)m`?CpQy^nc{*g>uS)L)8as(M{Hw9*a%6nHfCMP8tjyQ4=rFLOU+Q zeiWOQN~@@kGR0c9pL<*ME9pYP%1>krhl2QWNIci;OStX{0i12qAr&@ z_xn34;OFy0_)62V20F-`&*@#1!5So4n%jTlT}@WIjk-Q?h6?=2J}0=e4WpG$)}|Y4 z16=)pf<6u6`N-lgzEs07lrWK)z(LsaDk_i5FDtW@3YMrSj|?jzBe|%57(Pf#&Gk`h{A1PN@&X(f zJGa!qFT%oSSoOr)4*+8%duSy#tT-w;Wd&+fVKg;mdHr^W(k#@vmkBT*g1gnLhHdEw zd0i4O{}t6^mgoP5EthOufTC$*pbl+7zOUFz380CoD_vAb-aUN{WCiBVzsc4ODV`bn zmWU}Mnc?=Q`T;-DaQ!D)g+=c^W0qSdu1KUzJH6IKhk;eL#h{;4!Qz&lQ=`m3I7 zoJaJ05-8;7)^JoEd~W<(|4qrqT0uF><=;P5zejnXaoamzKo@fOufo7Hlu~Lm*m4xH zVYmcLZwlBQ-D05d->*^{6~EdsT&gh5(3H!Pt795|TL(Amk~fXz05ppw@t@gyk0SLZ zhHX&v#4ACtxN0FaTJQMm-J+m_?wH1+;B(C12(6Njknl`PNNMRU=G`^Y#fn06dLIE` zK(5lrnB$zgNtRg6+Pygz_dk&koo-qidKu8TjXxDvGevX4nVu*tmXQ1%M`P`tghn86 zDlrt&S`DK;-;8kzrndc0Y&CTXM*i3pnc6rm^;Vn_Y!P9r7Q&wx8J~^*({b zDp)d7c+u%SO14~hRRS&8R_^v}*Hc}j0bwN2?%dTPr%gDmE~M^U@#RoRlZO7KQbHG9 z?Ot?4)m^gb+^MLMU1W5226LbLmWV#b&lkV*xU+E^Ey2U^Y0ip|aQ`|k!Y8E2!R&O%X zuC86ME<@|f*HEj(IJ$4gAoqmVi+R4(4wtO9Iut>cy}!ApgacP=)R>=C(gXiry@JyJ z(F<^(SLbqiTnV0z)^{Bf9WA5JI8ZW*>!%|~uV4cr9HKsb*Ur8D1x0=NLoe36_yqQp zJbl2ATAu+sMo&9n%MOU45^{o}$QsrnWrjXgRy$?GLNJZOE2k;d>4RS>&*j8Z>qE=R z8mXSymhk`(HXvKDbrF*D`#m`zfV*>&Ip_kx?5%T1a40 z&@IJsC-pZTeNW^eJ(T8(nR)~zCs|>>aGeImpmAsbtcpD6pT~8Lam0M)2^NQxZjEO6 zgo`6V0P(<|2(|$ud?0f4*cqO*<(6XC5L1J0>`n`Dt{h-tLu^6$nAjGceL4QBQ6<+`-Z9ls>8cGew*BU5Zb38Y zA6V!2H47OwkUDA>W=Zr6SZaabPpiJG$|FTT57R(HJ6Ca*uvM#*R9h`qs|(v{itxX} zo0l%@E)BOZ5a>-PuhS7{Pu>?@?(Ce0TVme!O)%MkzCb9(6n zenQxyjSLz<0lx*ng*oTx(|B=<$pVoeHwZhl#r7vp+f}A(y=@(0sYOmBWsP)?YI7m9 zXz?)A#}a;qm@=yHVPq|qdAq-Q-@)nwZ%9x@=ux3*b$YGx zO_W_-eKa29I?WKpg@{Yy6wx4+xqOl`IM{y4$cl(N6;&T*xicU8>+Vg_S4UlFq)H-^ zrJD|-kguklvh4T zZW590-{r2fIa{@!jP2siy`CY!Ejk{t{s)zM_H z{SaStMke)28AUPL+FAy`#ba4clrtKxC5PqsuealC_MvM>H-w0bFNgm`H(Dp;839xS zx{liqb3#N(Kpaq)iv-vE0RWuOM*Bmqqnf*sU zCAT4;|sVJ1T}Z41a0CZm?X0xT1tl!h2YVZxAbj4Rh3gMq9-c3nqR)ly)on+?6rCdT4O+~lSp)!p{x&vV=xf;f{A_PLS^rg-`LhHw?(oDl6Axx%(@qxC z-r3EbUhi%#J3|tgI-^?XLFN&`Ud41#s1gVjRM04q(ji#b3`#VkAl0Gc5CO21Db!_W zVzo%i$d&L&D8QnQLob3!AQAw`2B_GA^qSKFtYL_j2xJR_Gz1bxV2luofOahi)@_4W z0Z63~kuWxhJ{3U$QX3Z-B#>jJr7||-*p?!&LqrtOs&=7ZtdgO;{{hkruVhD(2ap}c zMyS!MlcA{r56!53^2Tmm0x+vGC#5@t{rgtfQW!k_pqa_;Q(h;P!D53RJf4=i+g=Tq zdQQ%jk+5weEejH(1-Bg><{6E=`jk@2h&a9c2%lT>c>tu7G9xLm$$FoDz z{i*NhkbG#DLujy9N>|HSsYR}-8y{*BVd%gCQlx4pHA7+&qcL{a(%2zL6xrRg<^(N^ zVKDSkassxx1A86R$O8))Qk0<+!lCG{E_(t|6o_+)$-+X8O_*v2mWMdYQKC?xETkBz z#L9(rSmPwbazI29V^9hMRs|z)j8%bzvAkmY#snrtL^INAC^MOv!>WB^Nc-kaD)Tmu#eJj6n9 zYo!FlVgVcg5Q8xQKr8@|70NDToH3>@t1Ag)u!ugCEo+2<82;8%83}|0fY&F)o&zF4 z!VvxN(rmxocXv5P7;EjbzP`S#whc)!GwlHYpzFHyIPs(wvU@&z!A41r{F;3hpZ2qV z$#j5@N_)1q%xKg%uNp^r;X0ioLt%aVX;Z9kf{~rI_hDq0<-3LQkm1v=7E_)vTb(_E zB;DzVLdZ4Cz%SfiNAC=c$7V=AV?P$a6r5@OgljpAU9ARK5KsQ|iY9^%Ep%JwP6 z2{eT%r$=5wrK9^EX>fKP!*n4BZdXLQ1#%Dust8gk$|8Gulu|=93MrDoG7E~^$TC0~ z6axxnVE`yp3Iz&f$vrHg!UTmH0g#nWhin_EIsD+=*m%-@c13IFlZ9!M55}TE1*@{4 zM@+v9WNFUCi+e`zG6l)WFtTvucJ;`WZkm!6!#wLV4fxHTW-tEuv1b8%-DUB-dM=Q5te0HZexmG7s=^Hj72Kq0sx*j#0CR#gOpxS z6Ax`e0x%#BNInqmhqsY0zdW<|8uQ_7Z8z}lqis8D-Xca_rdmG$0N@(K82z88Qdp$R z{r|sq;Agt=+V}j6fu}j{&+9pExsFQa1G46JJsqCSMcrL2?Cm2X>4@*lDwG1<`W6+* z$=0cnO4m|DI@Z#5is@i+Ealp1Dp-gc4a7D}l@p2v5r(KK3es!nAdm|gAf|>jMHHt? za^cl3V6unC@nnZ4l4Ie?C=yzpqJd>lo+;zWP7u5(%8b@xM$S{BbQp!6A^V<0&TN4Z zB1udEQ7UWGdbJS;ni{4mQwso9b|>jLjuxdxwYp5KsY;H}#kOuM4z>YcNM-Df7z6{D z)S9f@nc)L7q2g-gYsAdN7W}Prz^@Fnuq;v6ySn5hRw1jS&W~FatvN93NIPpLD;P1f=!tLq8cD3Y7HyonzCe2SR#HZ=-6U# z1++)r73_UgkX2%UEIV^O&qX-_zzQHBj);l4FV*_?;?c5>ZVzO1yp~wKh~zjS

|y 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 diff --git a/src/main/resources/assets/unicopia/sounds/insect/insect_1.ogg b/src/main/resources/assets/unicopia/sounds/insect/insect_1.ogg deleted file mode 100644 index 725d3e397d47369ec2899de2042b4efebaaebee6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19361 zcmeFZWmuG7*EqUo=uT;smTr({KtMVMh6d?IkdhEY36Th^XXh?v**5dtsQHvz1G@sqwnHk1mNIbZe34W<042!n@$J2 z0t@u^wRiKoNPtJYym$c+(FFVZZiVSzK>oM8fV{{F&Y%saLj3ukjsWMMn#iC6I(C81 zlGlaAuM3Hah+IHig?>)A9lRZ#d=;Qf2PjiQ{34Up)6M=LI2hhPZ!VP^CNO{ifYXnG zPrcNSE{c*##ei|0MP<}uk5NU3>LH7mj^!|yUosoIP$kxq=fPMq3S0m@QVybxic=@pftCOG)k5KdZ@{`Lb=L>m!sB2q)8(;q<^wRsmYj8LTOv9Q4}hz zIg!;eP+?9<4TDI0nJt#6ZULUShrJ@LbWymHJP8j!ioBVMBvFaYiPV(*$rRSTz++i6^VHvDvAt59)#{&Qc2%&NsacGUCj~c0*=BZqN{inwmf#HU~UhFS8L`VZe zQnfp@1b^Wi0U#`tjw>~bD|L_ z#P}B+!Xf2^n{y?8tOyPx{$Dyk-H4!y6X}ikFC<4WXpt8aVP#fx*9*o+?1DOYq93Ki#?ljcC>HgkIm&58dBU8@fs%i+67yED3Nn@iOXg}AZ7 z$vKHlPzVp}mXxDi4}~;d1S6kmU!?h6RQ30<)3?o%OLGye=y;LwY^)Co>GyB1bKe&*+$Jcu})`EN^+PFEL-mKj>t=APoTe zUs=YfF8|wqVR=WzWk?Nq!AUX6Nh38>fYWS7fO$)pIL}~zJQ#p83*?CjfrIR={ z5w36e00RGFM#g>MNm`dq<i>_>_!j{HARVlu9Uf=VrRJJO3Zjezr;%#YMyUUj)18#irGXGj1d?GO znbJs5us??=p3{E9y{gcG6uDPgufgZi)G{O*&Cq1S^eD}cGPIJ@Ax?Qj5Ix4rjh!)8 ziKazoIq+RVk|QDFMFYwl*n1xqM1uh2|6&G!WC^k{d5Ss-ihsp9b#VmraU|a1{44&y zc_Ahw5Z~k>|F24*hCa(veO9IVS6tv7j>I^Qydfk#{@3pR-c}vdmMYbl{C~6sH6%a& z|Hiof*PZ?UEBOC91}Gs__a6G$ve7a%u!C3{;G;p!NtBBF7DpokPdBpcwFE5HNqMr+ zO+@$KxZs2`lqXr^fF_hNCK1d2@2pfPqtJ~~EdmW?xHA3s9D+)`lVFRZRLkP-64#Ao zSEVW=`Zv^nh9Jqz-~%aeks{Ln?vr$!6AVPGOJ_hfLDISz9ROw-TyX%{n&KAQldMc%TLc>IL3IEpiSvfDF7b`G_(YG#aQd&qeR*l#T4~L_mTc4h#Xn@2eNk zrBO>oyX9Pq;5KxG3;X397;7q3EiwRHw>SMF6t6wue`rNdt_Pf z2M`@ojSE!ZfF;h}Jm*tz{C-}`QPTly7d1dFVs_g8Hacmniwdx2jVp7@!C){oB&zzfP@UGZ0S`7G z7rS9FRc%6)x);?2SexTt^boT`+Zsp>P_s~eh7-7m2@FG6Cuf0d z<%Ghg34HN&<546Oh$1$AcmxjsT?}QkMnfXpY-mcRe$FUb6>hH52_%LUjYRTZiZa&X z<0?r*y7Qtak-U{@#43DT=|}+P9^gQ~XamM?w?mms@97lpEJ z5crGBoi>pRv_WY32Wf3Wo|YF_b7E}9LKJ~;W;Gk&G@tQ6;APF;LIVJwaS1>noY~~2 zG%pj0fP^F0g}y{EL?%Nfxf7)dFEj1>D zDBy2w5nrzoE4s;vp0e=l^BYy>VN0K}7s&S`SK;ODGjTBFjY1-|1e?v`wTenoky_Yk zvjovf^o&J3w%p25L`Pq2}}A)$}(mZPU&*@8P+KOu*u zfZ()+he$uevSoZ}b56Xd;?D)7far`B0CyvCfa=3U@oLVzOG)_jObyfk!W%0k#3T^U zKwN=FCdfcsL9RkrWDKSK4Y8#qTyW3d^$$`DO8Xm1M(+G8M5)D_cL8y+MB*)t{F_Uu z#Z!u={nv`A5}kGtLaIQcg$VVx92Xk0a4*sbiy-1@@kT>nrD@QRc}uCah`6Gtk-WU6 zv|5C0P$raStVL85MGZ0M1@55=w0I%vvPeV5F@y3oMiiZ02@(C3f24{dWb+iKA$bMW z9wVn9iWm&w!ru z)h_ZQhoqu1h=@oA00$RO9CW=0YkrjeaNL{BAc9rZIaakt#V5#sh?2?(hOmFAA_R=h ztkBk0h)kH!)`uD#He5DBWdZWS2waw2pB@_Tpl&j~F!s__v! zM^{fD|DbyjQLzchkbs07J-7$0T)7acsuF$-j7-cdm#|H6ZdHTFgN<WqSs{bAS@y*A||4!pd>CXARr_pr64CFA|rjBS6Nw6d0}K^?RbA` z`QuZPI_~j=jO)Q55 z?=TcUU(_?RG}+DhzPj4(5>B{hdFSPtA+u14p%(u2k5Ojz7(#@{P_T$1F`g|0*t%=> z?#;^T{j5*l&rcNJoqeO_d<3fxBJ|B1qADaYJ;;46KR36P8 z+I>e`60q8|zd5#JAXrTD0wUlyH4EZ7EPHs*%eI6p0^g^itZ4O4`MVI%+xkY)T3lYP z+(1%-6ql5X8Hb#%Swi?sO?JJ+P3!q@*SoYm87EG!y7RtZxb2<<65L@lZqyg95(IELqjjPOB z%BdOQ6ffP#W9p4EH(tw|Hvjmv+Su? zs1FLIycLe&(gqQ`ZG1Rgi35p!YSf=T{`u2+{HHVU&((8}Uw>9#jXRs)zjM_=jE-RK z-6IQu<&qvM;OeG=M~>(b&wa4(hPc7K%LJmvYJMuyeqp-dYWjOAIJRnt)tM21pC@{* zqh(xy)Xb=(ZndApWIP?IDBj94Q)~rBYjVa9mN3@uZ_j92(fPHP;qaF`w^#}zh+xZ! zeeJJ2!)8(GVXokCl`iQXlRMY2Gvk6y(KC=>U=_#`?^9|Zy3s0XMFFUyZQ%y#g_gC! z2v^#9JemmZj~-zaX_fRd=-gakR~y181KyF>v^6w*sw-kvp>R@72bdY2=l;gCSl&4G zP}Q*AovC-TKYq-1WTC!1PaiV+#oaS7{`fxjv>c`mOEWODXKC~dvQe>n?1wMVGf7~} z8iyCL7!mrC_94@ET;dK~kM>dXz0y9LSCGh_c6@vE%#{nJ8@5H$Ndonicl9wt4b6gm zyIN2?FuFw2#Tzj`VCi}((H8O2M?de!FzV%>*4q2$p_NAY&sN+Qn}a{}>>PU-awRT!pZr>k;4g}A>dc*dFYM>?Vh&@SKg{&KJmrhCZ&dgA5i3L$ zEn-p=MaYZWcDQX}Dt})GyIYWXHP3$+|E~L1@^TDUY^{B3(U+7hM8^Xpaip=uqCk#2 zpI3RFCYPG~H8ZTOT7=nlG94?&5=@;qihl0R8zhoe*}xHxQBGGS#jXd-aI=TO!ND|a zslu?t-uBDWL^0O7;Z)rI&}_Q>UemdKPRgyVK>XOxc++3!T!pthm7=#Fpf`--;5NXb zQ;9(#>>jbf-e|maZzg2aT3G#c0(<~YoV<;Tz^Q}K-L#?S*r#SU%!o!gYYzI=GC#aks;4cPh3Ec^u|ny{Z(h zl&<~CGMu}-OfzMbA|=W2$N54@33aaV#JWr@Trnz>E6x9IKJRMJHwsEJF1m$Tq3ze(`ws%ktQ zK#(O$2f~L+@d`$(;YAg0a@Y>~;nV53UHt-&zM{ z0hpSN6?-jnhR>cg5KKMQoJ0OfrVpR*v_mL}hw10OnyoDm4*z{`Bcy%j?be8SaqQFF zD$aOF$f7&E%QrlvSf%R zre!URNUB=`;kXukz6avUnqi0+_nzm2^65D|)<;g*4POej`8yOMl4kc`orNAe&l^5n z^eJwA+%+^>EI#A9o@79mx4}OB@=`C7mS%kGC5hwip}R_XHbMoiiXA$CzI`HByP{4e zxiIr#!ar0F_jqGohMPmw_pWD}+1~orQ)7~8Y+(m&N`7{B_OF|`fUcQy<@@OyBVMsi zTZ-%i!Pf+#hhL2!H(sCP(6Pz9df)qWbB|-v>c(Mqq+T`|DpeC2aYTvWWz_Zl@UN$p zAyuPZ`P!$IpB8u5dunGFf47AnnNIUcI++k&B9E-Zq)MT57s)V|V=?5PyKPzNKd6g; z8ro3@Qet{6CIWWZd_?BQ^5!4qjol3Oo1T3MIzDSq+NrOUVJRALB3x*wPNlK&5ypRt zuzRtn{F3?ON1a5MU{>=h?2S`|@ftA*FigDBzN^F#Y4X4+dN4l48E$K<`!&_q?r;er zr$w|DFDji|cd~~K4lye7VXjQPPoe>`__8Y1tk30Z>146^4~P)^XT&!s@uMZF#)<~y zF{ADk%|)ij^d#EvdpAMuSieuP7h&Fxw9)NbXKS4bh+b9(5^!hk^-Y#pm$%C-!xo+e z^ha%!+9LQqQB1PAu-vhXwO+{^6?=<}K4h~vls6c4!1)Wj-neF78)9PR*xap7>}YPm zSH&x52d^4Quhwmb5LFv^zKG>Aei;0;F7%z!8&z>f0U#~Yd#Pf%q|=wF{46BA^WGH) z@f51kde9Zl zFz)JKo6`vYKwkFnjY*E}htTuQ`{!GTQToF*>rN6F+H81QIqmb6{Bo1wNC&kb!Y5oz zsb(OSo7=FPM|VN0YBMgPE=?#(ywD$0Wu!1!StYUmP0c91@!kE-&u?dI!9AUcD{`^y z_`gIoU+%NUF-WW!XbFI-r7-DhRgK@z3w+%|PEUO~WRfim1$NqRk~r>E)BhP7>I7e# zSbqB|A{Olm>F`4}enK&^e8iauB{bb$d1DvVN@HW$+1c%For^hfp2wklRUpRed6Brk z;?-egQB^d}tzqD$({u?_8p81OiqRdlcb638Om!CNsoQ#p>~9=c{Xc51iNl3HS_8txHx; zWg>rM;pHGc&)mjANfpiu@-a>td`Mj-j5_A;5;R*)WpxM-iPS5Q+(Y|4ZmF>SX zrsLCxL)mU!605CHH(X6{hqZ|G-2!A0Mcj}! zYhRbL;-@uTdbA4z@whY*^W>xnZ#C)^4S3%8FLEV}G9lX(hdG@TSI%1T&|`SwN*t4| zD)b5AET=y~ua=5E?59{nKn5w1Zo@+d7h1yd?zl^j`qWDUzO4kAHZ3V!xH~a0h$Dh6{%K@bl@nL!g z?+?pAp4^89)U-GnaidJHsgKFtRF{K`?L=fV8psiXNRJqu7=~3XwDi*n8cG&_I3sGS}R_Y3wOgyZ|O=T3omT zm1!QZ_2bv=;P{h4xA-TvP?PiR>)dPODy6;ymt)GW7S2KkhV43qht}0ks3!XxmCL!b z%q%Q6uKDt-b64cXNFKrbUrtNqHADPh_JQSF)F!`i;AWP%{2%ZbTIngNKP;drVNK~m zElwL(iS*)n9Aey!@28hPKd1K!Y0Q~uT;?W(xWatt4*i-NaeAU02V;IXkk5tz+XdJn zre7ndO3O&rD*#uyGQ9m3-46lvds?%5{-jYxZ#?WL|1 z?vZPQ1`f;4#^t&m0fIy?y*riK!_t~vxCA8KkdIn^Pn(1pi=SXui9wnkFw`6AL0%IO zUr|&9;>lUd;Ik7p5#bXs!mjAC^d@< z!>TPNOzs_!GUtz&A^Qt>pML%x{zf2sK9Yq5yvF=Fa9zkLJI3f4unBRqf0*Nm({mR; zJz~t>l~6eQ_5>fGP38t`APd~GN3e(JejMsHEao47z%&Se8xjMzJ zZNfVZ1d+HFCN<9%?V>2Gh|l1*s#-sKO_S*Pr@4;2`mqQ$tJ6gDD21xZQxLYbSt;gB3^u zHf%?CLy8VY`^It>|Mv#lWJ#LC)Jy0Z33#p^(pj32B#Pe&o^{mfpa^W!&44qE#A`xB zRDv$Z@{EUC~@uZ-vB?lks-B3Zw{O5a)LKX9jbwsn+0;(uw zLLE^3ozCm}?xa=z?I!xe^yde&JJIvo`>RKBL#Qv5MXD!2nLpKn z7kLfVRFb+8quwuhtzH(nYshCKqN3tE)XGgrl|i7Rfw*B}lJT4ucxF>ZNiR&M+#nMq z5E&7UaQfBYB-4n#hjT3-U);H=Vysd`1Ot|g7TvMkO)e^i(rb#X8(@CP$f3^A4NwemmgbAmu9+B z?}c(uH*sDbR=1&&yioYgxeQUej_|Bsy>k@FJemSPlF+qLb_7o%&!ol%4QQ*!QJv_< z$bh`{^u6#(+IPZMlB*^pXdR^bisMie*N?~CN?nd(bbvU5jkOzF=4@SM-uX#DT;2Of z@gU%--T30-BAs%l{_Sl(w;ZQ-4|54za8GZ-T|O2rWp|YZ!AwycVRtv)&OiWEtg)B9 z^{J?{iD@pLcr{hi+~~G``0T?Ur<)nH29MK)0-u8@9Uv$VSqWs>=xBjK;i0_b$5Fj| zHP9sjDV$l3PdrbE%8)XeZlY_|k#z2_Oix2X>#DR+A4{mO)6MQ?_FBz)5*T)ICye`L`T0rJRYi&mca!h7Jx#L!=cq%NTB@P8@8n%k#bLy#q0z?ZgRuK5#RK7 z;KF`c#-457bnek-V=4`K;ehLJi22d0o4v7_e5{}sS;67m^VEzu;IkLB{(j7E4-4WT zBH`vcqZLl)xnyE&mQg({v!$?}Z-upy6ux>>;i%zW8M1PtMfkfrB*u;BzO<4)D>5Jv z?zV|gr>qC^t6I{>O4srRuogxst*oT!Iecfg);R9co*ccKLhW*V4WwLJzqD=h(ga#p zA}xYM`ld9swBBjNcwudM2H;)JD=hVMf-_~B4aG8Yq1DH)PL7Kho6cW<={Wf_&_>=l zpnLCV8Im@7;M*0QHLX1GDQvNhBKZSnJ&*vO)4OriTthi@1K8OEKCcwm?CHBGRVOQ# zAbpSN#nMf7W-~4J`9Px{xSmhA=AKuVD4zm}L$YXSSxPdtY%xxfXyW$i;8vSB=ES;2 zn}6d&mGIHA)y*Gre?lY29kfBOPKD0ZUNa)?!TXd-h%85YSOsU@x=SQcq9@N2r*{Qs zS^^)pe+c}@D7CBQIV*9SEJI2T3_ou#C+pQ~|3TJ`lC>KST@r=NA}45WgmZT(C>-vy z)2fwp`t90O7dg5F&XhQI9E8m@e^;~!$QLLb^z)N9llnjiMs$F(-c(&Ck?o9lVazU0 zBcw9ldk}rvJ~N=1RGDlPSNI`aDQ!ye(n9_1jhZH1BTXZ($@6N=w%lNx{Ki$+UUE{1 z);EN@C+CO)x-Mw_fSRQ19d+xnoi*7O*B#X;L4Yk2mt;CSyX!bKOaceJdS-f8Mxr*W zXaYs_NxLT%VC;PL;5P|Rhrd0qhj-DL*&V_Xy~w?!lM@rS`Ppkuzm1yk+Vv_}Tt1RM zxkTLbo-`BT!j+HAF-hez$KN<5cQgZe4)Q*cUK#lQT_j z4qn2Jou7XBW)R9E0U8bFisT_(jx7SkxhOuXMK?`j8WQkl@H+i8KDJuOG}j_3Uz6)~ z?!ZV@&mABF{gg{ zF4+?X5;-~oD$kzv^MgJqWDaD>AZ4FRrm9KK{%|FVOnf|@p*^|ZI8ioH6OP7WjBC(H z(c1jqTWCtKWDGL%dD-N{O3@|toJv`r{f}1jThkxLLTgKjCNpWy<6}r z{LQ#i69yT8nhySc{;JpwjMzd3)PclO6Mf+Gq?Z(%GX**+cKB2zU4rxrvesVMS>5MW z#Lc*kEnN}T?4|vXTC84xh?H@yPJrEkGNek+t7C)V zxg;HXoO1s@9t<=a!C8j%CUcJVcUBT)jf}0R+pVXqUP{wH$i{PBWKT_Gj6rE6D8h~P!JGJW9Tv?>t<>)( z8(%8F%A{lN&%~Ej%F4o(>S{ebnuN}By`MoRsl7IHXR=0RYauT{+qVRro&c1XEk5;g z80f@`_GdLUt!+3y@ShNnG#7r_aaR|Mu|c&>W2B}Vm5kQcHQn2-<{l_Q%Iy-mJlrcIXMudh0;TJBH&|I9Yd*}-7N_kBRdAzScX2^Ubz7cp(q1bvdZj283hxm{e!b;j+rZJgx7UijxB*q?L?_Gu~e0A zdRS9)%lYn);ZLhOeU@u~2|c8x znlJ-Cw>4*&uvHUY7-d2#&HhW}7{!H%$jb|n#g&@cQ|mVlx9<@3+JHl)EE1Pb-M4=* zGDi6w${>@;H2dKZrryhC>LK5o8m5~4mJ=i$sREDP`E;#Oeiif7sJHY5K~=?YNYl?b z=cahHS_td~<;%SDxgUZ5+6)BgbPYX~Im{XxLr-#C-d*78=<|4FckND7<&%@c^~{$! zVeYT2?%2D^f+?HplrBT8R-*KQe&odw!L0{MPK}RUEg)M3W%7E#cYFWNpl6K~l2e)I zp^ch*pDkrsv?;-K{kM@HYwJa%0F4As6gXymum*FlrE!k!AV~{NxcfS`OLnHE>eF#M zw><9V1xlh0z7-8x2=+JR#D%bVsg?(e9oq8mM=9a*D@lNAvx&F&)TP$GSlA7m_OdTs zWo3fuxJCMN4^dO3R}xz-HCrP|^Z>1Gh^6klC!e&4+hg5vdHnrhYdh0 zw@0!@qdt8Wkle<((tQS09U+lV59n8)(r!y4i6TX^;)+EG`4g_0;E}gav4|soDG1lv zU`>oF=TfG}cV06Cv@uv-S0#KhOZ?K>`)UnAp*i7Wy!Qh@$^0-u*APv(HT}BPTw>qs zRzUZg{SRhr69%0vDB%W-7TSwZ@ZI5&?p`=%`FdF_Iudt<+h55mIV;#$TS~NKRhVuH-0~Uvgqrx~{{HxJ9JHZ) zPiHP5SLRz?22suje+(v1}xtbRS9iUla-2ynv_V_*+$7HYvqS)rW)_Ktv=c! zYJpXoK(oM!r`Z_LcW7SB0Z2b1yIK>X)lXn+O{R68Cd`_1Uziq~*IT_7tDqaORmYeX zud1)%Y$;z8NT6|3D2c`lB;fgMGaB?fm2(JhqL~ziwqeTkHBC(T(ub|?Oy|0eYG2Pj z=<&4(89BbTmf>Ju#dvjg-`I$3*iKLqHZ|9WV7bdg=U_K*s7)w$P+d-#O*PmHAA8$a z)WSj>KuP?_qOW)?&bP66RoB|B#+u}AAZDb+?LK_OZ0_sjMx8m20LweYG0V@cb~0YJ zW$cF|O689oJ(V73#@O4xdR$6(&iG0J{xRiPQ4LJ#RFFPe3&{qz6`<`g+j%qKieEQc zkhFZ5uF;>KXPCH|rlNLTZNM^oepbu?X>{rL$H75gfNEbos3W&s zb0Z^-Gf+ds>M*@1PA2S<)J3hA3`V`2T4Vb47PRY`4dwI7tp!71pR;{Q^?v|FG9+K{ zwCc1cd%7%LALeVQ-Ah`)t^UN2x9UFdik=@fr8D0f`J!%#$XxDDjED7E10aJI+PCi{ zUP}KVXNG+%pk17?U*)lR_l#X41T;b>V69hnLjnC6c#EtDK6zboA8O3PR0^&-1facy zJHF@XP^D*tPgpHe^9vSC`eVFmCpdNae2;tdf0V(h&F0SJU9&%%Ve4Lo*)u^$?o8Zt z5&CeGbW)aQAIRGl-St{>`ZKso{Hxz&V2Yb^ZVOIg)e{xVm2|)P!Wxlgw|^Iv>CLSL z_0&;_WJ4os0|zzs!8O_(za}c`JpzLB^&2XJ_Q-%m?E z1Rf;=d*N&dTxq}Cbv;efn^U)93xEHjy?a07(bxT|#}40380YitJU{8k()cBy>V%pRb!^=2B2pG`Wo?P-SK6P_)JFOxR#X4~P~$2BuIVj z;K_>sJ;^Y5f^vL@=iqWEdBkn8t#i&>A+4;S62|1QZb1xJSp3f75%AM=5zhMAaQQ%= zL!!%;QG1+A^OE|HD@k052OVEN_x0Smb*{C75&CtsdjHSakJTp_K5!xP1cTa#eOe$x zResAT$a6m~wi;3xOP2mpcM|q|r&o2wXT~V0()Udehc9zB8Zp-xo~m+P;;m=skx>H^ zmQUATva%}9oqycM%>>0Ib*i=a41eiDXI89fjz$ZPD$|bjtk1Ns&W^sx))4?k57+Oe z8l$~JO#S^5;>OED5YIOCD)~}wr+&{UOBc?$ga#vK6*oq6LxZk36eY=U)UM69X*KOZ zvz1Z@%uvi8@cDhZsjobW_e1X0;zk`nBsdA7LqrJq^^DveE15k!|ED|D_t^wg)rU=AC4+IkJ#&N2g9UE*GeZiSW= zztV6t=eVLCW@aFZF}~A7TsgLlN2M_6JkzFtA*NJk&i9JWFZf96<9Q-&FadLW)ZTAM3{)5@%Rbl&9hj#c7V6zN9YM2T)G@&%uJpbf0iY;NE;{n{6MyB{Z4 zqfcQP+R$9OMDzqFkAt|%v)jO9&Y}m8#6N3y1I0|!W>Nh0=*JYMN?j6FrIp)x@3fod zLSC3$l?Yl3Nw1qyz`61brwJqyUdNFS*w;xj9v?} z=BrI<-%GuD7EY^R3EXxA;8*abZidKmgvOy&5onT&RsmaLk<(7QTMurWqt(lGdyh*) z6?T_R4ln)aTiTzVHmXX;@D&@SHnZ!tK%5CE{us=~MK9MptD~TFVj=-t?~Ai75=D9g zwrgfz7>Am{6EB-+CxlvRKK)#@I`46A(~)``2jm)qLx_*uw4-G|Lt2!+kjqa1=y<)K zP`~Ltrr~C)Rk_HoC+W4o(6TjZRWsgZa;psMTGC>85JKL`983Y)tpNSi@4vbo`n$zW zNPm((IlXoHDd9aOa!7yK(N^m&V$a>^YdkyBbKMJ6C71+EyGx5gPaGeg+qd-WK6(%p zTy~-c?NNctK_bjEvM{R6R5`%6?^+oA<-$@(dR` z44W3t)9K3<2R1a$z2J?;&{QyT?kOqj7W4klBlk)vr zsnhk=HEPAF#JDulz6rbIMWPsj~}nzjm=%^T8~KJNx8u-U$E?)$;*T_8);xCwGiYvtIC$w{?d65xa{To7e^JBBZ&0o9>3RZYb8}$!?X`t%M(68}_VCjQQ+r zu0n?Hb=rY9K5wnAQ)aH+nc*+?&ME4J+qS)8GuH9T@nWc_Xpv1xRw^umX#86F0ZV!hHba<@w7 zSe#jVN5hF3kzh%lbnh{v*GGJ}LCV7e*xm@5m4ognMpcdtI*qpvZWiNK7h175X~xx7 z%Vt$fF{_}$D$Y#>qOSR)lX7c_x1sHE{>Bn_wd{NZ4dyb{XmJxK1Fo6#C45T;Mmydp z(h_(qo~>gtm&?Utp7pc zZ+zdG<(*n3Ce*H!(lBo3quuY!hktf%hCL7d^82g0wmNjTu9@X`-^|gkSHDOu?U<`9 z_`a{*GCixi&lbt}b#t_acST1(v1x|Mqx#0E(x2Zwn1^{CE@ioWeDfDyU<`QP-}EP& zdHsI(!=LlxJ9p~`e&7Fd-pSM)|NKSmuFk8ob?@`uU;FD{zMZUY0MRBsVJR;;fztL*X@^WK#BX4X zVxhCS)a(ouEm_sB(PwuS+4)zjU!&<#uuZ`Q_-KPU>a!}Jbe*{eKX2M~!fvG6!auvn z*t(6&c-PD9x*y*Q7Jas8`EL1r(ZTeeipkFJEM7aM$btL6tJ1Z2^>9YaOl!n#X=+Th zWPJ(5zvM5maK>;x#$(O4uzzl|&}ZXiwUC3F$=j%CR#)2py)YC?qxNW`IlZiH!zD}* zOqtwF6n{_p#B4|U4*tEw0R@XtE*U{cHDqf?ZQ+(&qOI{*4iq|bd5h9<%Tz1HkJ)3P zMezHLRJrlJ!f!XIoW4VES8GIfN8SC(q~yLbgBT4-#HTO14qkQn?+z!!+-}}i4EH-e z&7#OW?@<(QIw{h0YD%222zJRiuElLMm|uR*Li{A1Nc;EtXiQi{Oe(Z9@fA4Xw=_iC z#2GI>_bQgv-3d7)FE-a54d#7z+2UrE8`6}^ZSg(?Y}TCXL|cqjE%uso$ z?ah1)n-IwY?V2PbPkv_Va@r5(XrU&>v+yc9IveFO(}s@9P_vU|n!j!tZf|@c1_@*F z<^)t^Cn_&L6U_ev?+swE)~v3b;89i1$`vXV^2;})-=NT2w+1APtt(MvTFnqdReb@k zT&=-wV*&35v@_go20%FJdkq2$r!0f%mJknV@`#QQDar( z-dP+|AzzsLDIz=^p!>d>K=>(V9L5moC7~ck*g5gM`hoJ1D|3B{s}%z`_qZxG1xE&% zShH%u?bSCQX-dz*rZ6qn7;t+Ov;y@Uc$ zwDcuAwB9Z8M!usq34zPH4pU2~0eYd!FNJq|5-eSh*gx%0Utc_V`>f+tH9t0=TK60$ z<6Eq|?4z3jd6*wY7M5sI@V)Nrb2i&+xC{dSnm4@wgGN1YN6Bj8AZemz}QOH zHPdokpAh%$Ms-FS`GH0cv7Ul4y&10(E`|p^W_mB6xO&VboUe}p7*=%|0maPQ^n|o< zUyG;d%PZp}a|Ruh$kKIyut{bQdR@&_F_MRdSU#d zMKaSeFB2_I14R*2W;rGrKo$G(V{dJpb(Z!dD?YY-$6!I@U$|gys`S-K>n{( zRZ1Vb?;TeUOQ4IfEgNsEZ*En+Xn0CNNyU%zxrvNvMx8%J&{Z-Z+BZHf`^VlvtgGxW z@o|y*zq0P|6(4$QeeaZUQb`1U3 zm=cc=PxOE?*Whf~b*4mFyo9mm8yOEbhPUJ`Zk-3P^&7l?lwF2b4IW9DvpE$qya z4ba8CYe45TKeXpE6IgbPApj38)+4`!PZ2=CzSHlyIlfolYij=pW3|XWJ_d~MpDfTZ zlx01>+;e6Ji^7I4`}hnx3TO1x(PN*QD55oPdsa|DZ?_Or5wo?>i1bm-& zybyg)u9K>2G_{?*Z{FfZ7XA7~vFVJ{@~tuaB?}t_lD=QzltR_ka4Ue(uXh{QkpbWd ziIPn_Ke8cne!vsfCi$>cq9G~v2`*{ln2~RT4vB)~waCj&0T1W^-g|{bwM3$Xtn~hh z(9PjCsT7@Ccyu;pz1PUw$69`y_ScNHtYO6h^&>9IzGZ*i=52jQsHUY`fPC?DX+71Z z?t@C&!WA#_#<7;7yWMZc=qu*`;3NaQNp|SNtQqK7DaOuw+nu8jBTdUwQ%b3SGqq|0 z2Jw8&S!b+ZqtmzJFF1{WFAKPE2G#Dri;TlqmQ?;)uv(VeT|5&^TfYSJ9KfIM7hCB! ziUf_L=3|eyv3_*^_A3-3QQ2l7kj5%A$#+T|i%E)xoZ8CM0wkc%rP_?53a- z$v~%Me5*Jo0?DW)!01xIps%!ttJRMj?|#ty^NW*DMuaIfs@{i%&Wssxy-n= zV`xVib4SZqq0q1{PHz#89>voPtE`V6%|B_eyUObF_s$hlqF}iO8e=)lcWwRH_zam> zxbL5mbW1CB3|2kXQt)adsi-#T&sz!vw0@6x&Vd*@`eK)&dMQZ&H@qxd`tq|eVbMO%#`^Z zfk}b%+upE6JZLJ#qcbwLZfvQgZt6LDMViNEO94=K94gu?f?&?OGA%@G(rtUk{Bq`z z`w@34-&#dXziKTGh#GBKg{%4a zs_ZQ`BydE8Glu5B3AtQ_`1usu$Xn#Si^|?p*M$+n`RX>5+ig9TcVNPq>^`pbb5y6Q zfrdScJ<%~Tfg>D~;+fvogE_8(1GuKc=><+-d9N|y%s-HXuoH9AiEwjQ7 zHKnF(+ijQ0W5^{xyg9pZi+s@zWr%0T8JiygYqZ*R$mLafK5cRJUfJ&)mpoj?@AMFA z2IC~lVzTSVO&AqFodUgATy ze;XA?$jh1ElN?tJ&LPjF?)LN^{(PulanGgnttcAZNt{pe9U3G}Rq*ku0DGA-eVk?xjKrECQKkVnAk7(BChVuw_@bDz)SR*? zAimNpQG0!NzWt}IypxQ3UrlLvd-l7}AD;R<22aI!)Nr$we-M?i%6~1^vf`5){IX6^n{+LOtXtmrR=3*njZw3VuWrbp5Jn zVZTvVvlJ*EJ_oix&n#U54)8D88E(=($)UuRkq~gsica%um zLNfo=>bmQD*;HxO8KRWL2qV%f&DBrj?!?bFZyXvW`BpIYWNdulynUbL=BpN~l}fT% zA}guO>G-TvQNakU7T%JZkG#P(yyIA z-!;2=O;NqPRxd9}_Wa&}H;_J33jKqmxF#~avW}A3e z-GBI19We*4G%u|LuDl9P{<$)WRN%1Sj}a7Z$!po9NDaBVS(T56B?}#7kqF=>zZmuH zb?h%QQ|@oan^#w#!l}v4Cnqs0`e9x%E9YM(H%}D@%MFh=L?ij8O|$2Fh+P^|?YFGN zlF0n0f@9!dtl{Gb*eH{JNjH4lp8vZ0^zFu-1jA>h`dqhCwe~+wSUiAX2nwk^t?55g zC%^k~lfMs7s-0DgyMscv>R|i#ZOVvnVX!3!ZIR5uc%nMjzfV2l&}s||)z)PWT6(g} zazmpQbEy7Y)mn1qbXH=+NQM?On{!9KxF6x~VcDfT%)<%|*6PqQKV69@t>k1T&S7}{ z)yA!D1+o?a%1cDel=*M^ECuJTTO(fsLyykJ&4?5-0X4!C|O} zC&biLb3TH1U4o5G(oma$Lb(%CW!PlHT)?$(Dc5a*DGKBf-H6xB@BOiskOhmRl{Qc1 znA}K=S|d))ivYHM&C{afrV@ggm&Snv&Tju#07L`3{O9u8fulA+hH6#-9=811R$jmU zfc)HqTN{=wf3BU+uRXx?;I0j+B{M0hQK+h_ihu$>k9_UTdgwhgHEa})yWXA3APd)t>{0nnAAQ`KYk_&z;2t+TNvv!+Nf}$UPhcpdUL62Mm2b6sW^_ z(}KeQ0sgi8Iva1~53p~j6~C76?Z{jC1C$$Itq7x~_bfCWs;a6Y0I=yzGQIhom$^4w z4$gVb#^-#a-!C%@J22(remi@d+dkv-*#)3RkPUZ#Mp1`!jdP*L4LltTlsbns*}NK- zqRe}M>>3In&BOE*NxpWQ-iQ0ey2jp)W&5hb$5lNsbeh@?AN}H}s^4rqlceaWM4w_C zeSxvTKb)6o(SfjFwe+rNj=zw~%gTgv|N3^Vy?5@Er%l@&+XYvsaVL)eQ zQmLvMstN%Bp!i4+trY*7Q<)K}hGOdN4G9~>A>#tXuj*CtRlx+IUIzV!>2tim>^6s&0|Njk z4$Wq-EvIaPN3hdtYOOs?YpvSx7N*(D!;0PLIc<861RWk$+u{pk0Q`V}vgEj+VMdnq zzb5;}o#grHVM9oeodN|A1OOhk{O>5d_zw6&O)+fw-&uI^9q@*lBB0WAMiEsJ1OWhq z5C8xGFt87R0oT->ef}&qkZu}2q_+x9_wxe`UHpay25ySZhEC{#o=O67Hsr2OXhuyF z%QlS}^>6-=ul#hLqAMBebl5LGsHWHh)DF}y)D**(|DA=G*a2UtDFOfh0000000000000004s3EC(*OVf diff --git a/src/main/resources/assets/unicopia/sounds/insect/insect_2.ogg b/src/main/resources/assets/unicopia/sounds/insect/insect_2.ogg deleted file mode 100644 index ac3b11695ff0026de2f19f1949fb4478c7c48089..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61348 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�k^?ChmcK#5+%HuCohdeUF5xUWzhr@ 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 diff --git a/src/main/resources/assets/unicopia/sounds/insect/insect_3.ogg b/src/main/resources/assets/unicopia/sounds/insect/insect_3.ogg deleted file mode 100644 index 72321d62fc30cfe3dd9df2323d570b628cd0b4ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97449 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 O0000N*?ku-TzLQfJy5|Y7!85p8Uh?XvBE&V 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

5vz0ZhPuA=hE`%X!06^TICnbtrRdC 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 Gi~b*cJWMzM diff --git a/src/main/resources/assets/unicopia/textures/entity/projectiles/spear.png b/src/main/resources/assets/unicopia/textures/entity/projectiles/spear.png deleted file mode 100644 index b1214231fe42ee29805dd6d6e0dd3a8101f8558f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJHcuDFkch*{6<=OltQTOo$dkgb zAgs$kV#2GAW_JEVSA*U({M6m|-*JbBe5MLWh-5N|aWTJY_^)AOWyK)Ix`4&aFNEi>fW!wAhn0+r`6NmYtYCJNHF(t! k$lha>a0MbXp`3wXLgMUmOgAFVdQ&MBb@0NE@;(EtDd diff --git a/src/main/resources/assets/unicopia/textures/environment/rainbow.png b/src/main/resources/assets/unicopia/textures/environment/rainbow.png deleted file mode 100644 index 018f310c071edad6ee5e3dfc024f601184e1137a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11349 zcmeHNS77-^z>x6aj7&~_Dm@B_&XGguJlpM~-b3v}nHJm_@!i~gJQAEg!e9`9>AJw_KwIONId=Do zHpdR}@>l^q|3i;vl80L%IXU1|M{|wEQ@Nw|(}6B+7`_xb-Tznr7aL%c^UVm*KK{*X zxg4i8GU}H=Q4iPHX*pr0EWxZA%-5pk9LUPU3jRE3n2%EAqp=>1$R=Ta;3^U~ttuLT zK4`=E_UIjXY`ObkV(1-x6lD^OX5cFEJ;KM2QU8v!!w$!#4=;nGgD!(F=vu4nt)Jd0 zc7$tW$}@O;)^hs+dahFnrq1^z1j?V`5y5RiBLzj4h)x8GMzM1Oh}zQrpwu;#fatAu zdD=4sF)`oSR(F4Cf6e?r!bfR|(9N6Wk#GI%$fIbL|9ue@Ih)JJ@fFJ7n6QXBOgn#VVI2g~Ae-pm- z7OPC7hwE&#f{;E&zV>=wWC(j5koebv(%042>YtrOJmJWJB>&zkA%^w3{)J~k%YSy} z5`3jle1ce9IA2dn`$odSs#b)LWK(%xewnc=J^}6?)z>F%igAigqz@Zs=1&t&Bs~<) z9tzV~%NX9kSsI?H6;UGL0poyTI`r@p-P`qb&KUt$;UBQ(A3l{`sPj(($r+q8x6>SG z=q13c89CbP-(8HuD*g;X76E&@XxFg&r>dGnhIL$y&|-#Da4@El^hUnX1ttI|c_^B1Bv^ z)NE&1EkPL=p;6!pH^XJ*>EgcroH4CSL2a0K92Rf5cW?9buKL09`mFbK?=IyN14aNa zpky6-Ua?kJf&VskXpW%onACw|tr`427qlYkFL@VpF!xWampVz1jK#@bz z3A6#kElwo&9^*IG16rikOr)ku5r=ET(s)nj$_~imrLcLW)G&$*U9`t+FoRh<>|>`l3sP-)!q1`>qvXg6LH{oIIv z#uY2+VT*Z8pWgmS?D4F)(%2m$avTccFyIfBfN9q?mXCKMKgdK(Fn74nz73PWM?|>X zC1wTPnLXN!2i&9JZ zY=!H5W=#(oaGte3o^<71r`5Z319pu9Fn^?_u;^>x<4SVk^_ZfEYa-Ba=c0v2cp(xx z%U?;h<88`4Q_&Rq3QAJclJclSs@B@(UgY07-~KbMKWo4a=&)P#Lkt$+#HdLhLSi&u z`-gV;*Z2eaj-)X#?2=BLCgf+q=}K?Hp%mzi8P~T#S`xn4UX$;y2=uq8P{QwbuGYi@ z-r4C?^JC*|bus$F$3>*wJf4{pS0U&9J&?Ry<&(Yb6eMr&A0TVs#YLoNo^Oh>R3&MC zM={rabjFD+`+LqU#I`>=Cs3X@q#QcpFWzdegT-W_2AW0~Hys%w2G0-ia`EF`T8k&F zp!#!S%gU;&Cu835&>jxD(=8!&tWGYQx8e!;vW>Pt~8gRd(U|K{_6~slm)j)))MnfH@&(O?Cf-UkzxyQO7vMYOX8L#H`{0WU!vuOv3vB+C%;u`_5S08t40xBS;_L>VDH`e)A)R^q zS8r=6aLqpNA8^tLM~?u^p$^Jv&=*S()7y4gu`_6n-RhhP`RBl&KK)T2lb50vGsklf z84-B?tTkj4aUy^;z{Oh;SZHqe=tV%0LBFRz6V;Mb-pC%o45eNNw!OzsqwZr#5>^Ht zxu`xtRS;R(=LSR&<@eBFdd9o!;gmF3D+la0XM`*M?!8{?PZM-S7UjS-vd09UY_wK% zw`U9*?>uRXwU*yy5qWr8*xy1F{RKPneEvN7JZgTwmXgaPV;-HGF(s-+>Eb~mFM1B< zvppeGzzY8)b9T72RD&pf?OunZJgB^Gxm7YYA|MI+A}SbvgSlchSyVP53nSsWN(taC zHFj#1bPqj1F5#I~$4<3CT*Av_56%ov{nH23_Y^E~A&+1%G!V>O5)0nEHzXLhkk|q}& za!~7jJ?Eh<#C+g4J2e_r>|RY@mv_Kf{*OK0;Ny11&rMgU=|DW;WERgv5tn(DJuxeL zoAX7=L2W5zc^o5SBiO_#fD*P@d`eY!QWx2_VgzgPtox*(flBI?h+NG6SZn{JSHKjF zI=pL+*vU<=uBw8@^e^2`Vg;jgj*A-8q7xS==K`0z7%kUklV)LY{7+Xr;Rh%sD2S2D z1wWEX5Ct%ftBUFVxJA(7+6`J@Ev?#OS9O)nRU2h4;%txCVm)j9K2m{X2zm@4SS2i) zq-hkZfppSWgGDW=caqGzsZz+3MS9Bw1;_BMk(o$|eG@UJ0k7Lg5Zf>4I4JK^nPWMh zZ9wv3^xi-%W`L1_FZCIDQ?DKZ%x+ZpK{+{D$~(n-euB`*1Q94S7c&t3T=o_@18O55 zOJt#$kGG_O6iQ}<#zSHP!hZxF9CnGVfDt29&JJ5!4=3RYcBf@;1tUlK8_*+vx?pdU zS~w+`Gt28px*)a?XP92uQWIq1q927y@GNGl9vz0xG1iwd6QOZUhj^Gr-@3w}X*2Z` zxJgmWz1uY!^Ru)0*W`ypgJx^zPrzN4LG0ZW-NY1->|}c{6XQ^uAAczjomax7Yl!1d zMvjBviuKgDrzo>lgen~?F)3TyD)_M@nyb`Ra)jueyV2^aPwtvkz~o63=L;oeXAb#1 zt2Z<}?fnCSJ>-n7$0m;BcAYXs%~HaqBdON@?L>y4<6O#zDEx{6Q{e#c-Qt_Y$9|5V zp~#va0=y-OjJ$*2hIcz)hKjuj^ZA2!qe0?OAX<}B*UsM)Ot+AwCY{$WiX&L1=acA? zG&zSzMTX0N)IW;u6)5GM;pBDhw4h-p{~wuD$sE4a3V(?49_6^b&mRsR{#zWFyAfY= zNypXSzKpkP=;vFRRh;vS_d4e1FDq8Ijslzblt9Xv-&*)bKi|D@&W6Wo5%YdFT99{_ z+!~CPt1hEPKM93O)=j_vCcEKOKSX|2LF7e~=@Zh$MEU%vE&z}wd2DU+AU+G4Rgi^x zL$Yn2{&0l+HRqN`8s)Y_&2OPw1t zrXHETHlK)j_pWpc%-X_B48ynrBp*l?3|E*tN zl}4H8!zj148+u|AUBcE!arcNNABTzB@Gjt~<(%@GgoDm%34ktWSI z!zxc$#Gx>1bV}OGPqYa^bKv@*KQ&JfG6W7WjG_QJX18f|K0qk-e>37bgUl)rabDgA zobbPi_`9WCoCAs@>r+x@v=X{TYh$ea?anT;1fHHUNXaB6WZk&H&EGrsXz+J^Q>=obOdpaMzUdfwcR6#D|#N z5WZ*&gf$gweB=2W@K)d8Y&Nk4GGpRc1bmjAoquV3ioO$I?yk|TDrZdhBYnH|4;c*- zzqm1{!;Ci&!!zsrZe!og&7+N>jRhbFQ1-7XoU_ zaNjd>E>B}fj(+RREo;x$C@sG+LS1Hy=v&-%Z8|#48f8J_u=HJKbvZxOVSnQxEqOps z8R|r{ElW3p7K|*YfR6iPA`x3k)DB2U_brlEAN?=lK3mwA;QL#XS1Z7JesS=4&iD#` z#8T@~KtJJIMOY6F(a&5A!fmU}iElJ-ML=q%A#ahMonJpal|9<#y>n;SthF3LO>XU( z#xRBX9qDd=Kp`&pIkUIjWnO$jnDl4ZQKn$wFMo6zuHkra_4jlT=li#ji5|@MJh@nH zw1GdG5}lAHjm&_pig|5sgh!xb8dL@slvTmaxv$(?2p$6QKNh zCh+zx(pt|EqSIH526aP;t`gkAVMkisR+k9Tln2# z9*-WykNn`O$i0ilPICSH^!Np|E%ku6A2WY85M#DRNGk4fHJFnJ-C*vQ1~q;D{ZDlp zB|l5|2^DLwUCLQ7)JBk&#VFVUF#{K_gso_n1JFkmEk~;2_-s2L06TmZ9bQ~dH2!7w zUeSAGZ3GDz><>fhv~nvBy52%=fyOApRoi@1#6VxzNW z(g#(}RbPYjd1JGXyNrKd7#iNnwpTWe3?g?Pi#Qr1XvJTqRF(AZuC9&s6tAj?nJ?Dv z>EF01U;D@Qu)kde6yRk9=Cb=>{qz>)jU922#&_9drF`Hfjep?r4j!HRBN$27AQZY3 zntkllGSvB_binR?lPk0!hn~7izsevj358e>?^(*tAU*#yEo*HbNTW(vj@Q%Du}k&rHgANjLX>BkPxfUr;?aa7m-5z% zB+frQ=mKPG*iYB;zAroYzdFh zuBMwnz)SKCl$P<#UhbNuT-lp#`2kbX&tW(I{?)X1$8rMjgZZ?^p1y4LMc#JQ;|LAi z50qKhv0GzyQpJpKPK&@7G!XUn`CC4%88;+KaULK2Oksp<;78O(BuCfsF_{8riI)G< zGVtUex$efZRJSTajr*Sb-`7(VPX9;l=x7$pDYs~)s?(8IFh7n)S+p)~G)AbMzhb$~ zvYxy=!{h>&`G$+#tyn%x*%Jm$w%aDM-qr3Hv|@aTd(4}#Y+Yidz&+^$8B6$9=+RnK zVDS(yyxjHjC+kDT#1QHTAK^F4m;VlZi8TdoXDCNSJ5|WrTt=bB!T#q@7LEVbtu#!w zOy-eu9``TjqU}H8b~mu8i@s}ee9M?jM!CW_!a!!3FSs(qr4D_vRPM5YR{@9b08ffRix|&KOSy<36*Nr#!ni&`Kv5yHJ^Kx{W3g+zYy)5cACY_Z7#GA9~dK}ndl zS|pqswLg_8inz+9g+Gj>ejxQBic66PHz`7lxPJaGw#ilA6EEayE8=^tFUgf91VgOe zk7ZufzvpGf1hFR*dd{;!a?G~{Xu^im>Sl!daHRmFLgD!8 z#R5CiDHuUhq9?PgF1a2R-~ZevBxkex;qu6XAYEJSs?YsZah+a`g3&J!KUYJpu=jMj zHZEU25v>#`3qbi#^K0kdu|3<)beH zh-Mi7p*vCgobxCH2aRd-fkS|De`~2sjq}w*b&l(H;0H{wk~M95e&ob#&w=~3pT5HD z+l~?Cpy%1)&d9`|v$17f59JOd!M`S2JUN7msFLQ|{qx5&{~J7!2SsnY2f~SHrz{5L zMcgFdyUbCw1c~5I$_j)F-X>$bbmZ<^O(Wd zuse1rxM$aNw)qx%1?T{Vu%HwSmNa$UjI%{{x}J$0U3pBSJeuBK zw+KHKeBbK18e@h62aVAgu6Lh16j?hyF!q2HhwX zM}l-01GaB_ouHgkLLK0hv{Uhb{@mJ1lXvZ@<_%>X-S5;bDF4}aqA*E?;(vKgeD_xd zA>JO;a}sBh6Gu}|1NJw8-;-JEMA7`bKToH=VuJUIAJmz|EI00+2E}~LWeBZx2l76! z#(qg(@7YX0^wTEQc?IR5oYdq`)CYD65ikkt&wAn9M7_uHyX9Dks*qRNq9Sw1mh~0k zc*^ZPBR(UN0dmw+umZv9Hl46{J8gz7 z?+b$?-}u=UD$nAOcE#{-F(qgAL25{|GMtc&vVwlJU)F;FcI!?MY^DhibP1vomz!%B;#{ z0((J>2vpEur5ympnWmxN|FSz}t;xb!yMDnSUJq#Fq6jA!*SWq1-TIW@!a%<^1Cm>- z)>&AgzT*LccmpbR<+X>Y>E3?g1@Pr%@MY$)lBm5mA6R@eU|sa$;RkX+GDvYd(eX|n z^Bw%W$G??fZo~+)GkC&?+@Qi_MCf@ALz#JPWUQXLnA0M6i1_i((Yx*J2~-mnxf|4P zTY^|Kp?E&}W7{9@uFJKjpYq!w*T6X zh@w1iA9Gq}p4zlik#{<2%XI9Yx+RQ9(CmNs*o_zb{_f5(DpCarW~Ermu+m*sKM!9r zVr~&h!GfjCfw7_BE{Rz0M{#thk2WZ5f%(Or=J~*4>1-T7 zY1@;2U)+C#83UPDCd*=I$y0`6J0Het0#z~&wt>oNP7=au588iHx$p+YtHSbjLC1SUU` zpC`ZESrXUiRh?i7vLaV%UY6rQy*VUvcK*c7MU{B2LhF6S%^wmO2BrP@*K!4uxg8;r z(f7juaJRcUs4|U1%|Ol-`d`WmIfx_YD)ze<4UFX@m#jdC24nDGW7TQot=yBz3UWYM zS9V%XOt+=(TES!5Hv+w1`@RPqdoV)SNYLz&k29LzrY!Sig5lF}x6)$mL;aj>YvPv5 zkkgF{y&PkJ~ zFdqjov(K9NeT`n(NKmlVFQ2pSK{a>z)>6@c9}{%547q{UF$>b!I=k zL0SpUqdHC2WqA$sR5MCjS5`{~G0>~^z@f1X%*UsA?yjo+Dh`Lk7f;h=4VoNxPHBYG zu04E-w3XxL*4YWI69HvW+#;v6b?dlHN*v@@$w*4`%66kI#BOvBS%z7KZc z?c2j~lY0_b5DRY1bf7=MT@k=!fUW5Iv5nh!5)1f)8<(v8i{BDb(8IZLY-^Q?fV?F9 z*|s^TcB9Pe1Ftk(X^VtRu3||$5vyv2*6>AH;44gpq%5#3u)51J7d|)x-`(m2#odA| z@0ly0p3!U%QXgIuD$lNmQ4PVT45rG%yWA0PW?=R4yelMV-g75Js-j<5 z7;h6ew|(0e?d5g((PtA$fP0wlUn>yx_68Y|RsTwCr)DkbtwwHaX)hmvI}doMc28D& zhiw;w%R0lHJ7 zy&^uc^^~lupR%MH7hD(*uco;1OSP}EaZt=eq@2C+tvSU(zKdb)6?>YI(UNw2&j+n( z&moHI{>`!MNp|b0a>4uHCMxR}M|O9^fZvd=!a~2|KJp!O^rBqEjxriT#i8eSpZfG@ z_RYWwoVgt(K+d7)Th)8X0svqQ{C5^$WyZeK<@)vzz!!b;nPzc4{VhiI3k7i-cm9cb zRF`?4m~%XVvSr8;Bhv8!WSo9Eb@})ha)9a^K#seY$sRpl+#A;0M>VVFYl(;DyFD)X8}nb3q};ygBuYQC!cSuq6kXBjc|e}3V_;< ze%vTY%ByFkX`FxwEIT%iAUP@fwHViLL@SA%7*>(|167JTIBaaUDKc^lcE_Cfa+NQA zd=Ydeu^xFB{hGcz>x;{rv?->D5`k5ER#{>D68oJDpO$$ZsS?pIrc}(HA|bGMZ%O1O zh1~i$!jun@jhQliQ>{E&aO+X zzHzpxyKv@?>#EnVfc43A)6Lyo=JpLwD1&4tvz7P78t*GYh>ddXMpW*JROuh zGte|1RMn3HPiveO2ksO)PMAiNkW%o?`K|?UrnK6o^WU$mvD}x6sYL%&aq#$V`AY?- ztA#uNdFX`IS-6!yKO-Mp|5w~wXicH#Q6R6cZu?mYjs2F_#GkbplhAmbSK5?g%P~6s zajV5?CSm!q?2L0%SHpp?iZs{0i$BnJ+0Gc~WwW%!czVWHbZfUL_&fz?bzW)(<_lja z{Z{Sv;TS|C1Sdf3kzh9EaOCd_V4+&3@P2h}iHl5~dCL2}^V9w_c!5ds4U6Z)~38jXAYIx%=hx&sjIA?Ak+nFeUPnTNgi0TrA^ozi2I37{#`D zb2ZFq#;ljzlE31-0j0x5xyk;;Szo!)D5t5i_2E^NS|5;k z`3G%fbX?l$fa9wkzys-XDf5ub;F5a|*iD>ODAh z0fS>UMBW$qoPz=G{!)^w*90l|sLPu%^}P9TeHaPM(>RX9kxQ?b-~98k{@&SZ%BSK% zQ8lbE4ek8-;idjst$IX+?k<#xBS<^$wjT-d0b@RY4gk%)@sE)1u+ezYP;v{sF~3@` z`d*q=H9`2!(njXGKe~nZEEz)>p0~KMIPeN;^Gnkjq3chNtno-e8?_&D1GRqSf7Xo0 zdp3c=6qt14ZnD~HE@>U^Te>RDg=+)~)%+lJy}$~^?#qepmpT!pZ%IZEDzjAK6hX}$ zl;Qz+$_@H7cU?O2c{kkjKE|I3f1CS<=(^5MlU9E@AtvrU+@0!&QFe>`{SL8AS^{;rZ|5Vtl5S*DXU>jBwWQ)_Mti`39!Ff^+_- z$?}S^-NDm-U>?33QW7vw$|Vn$t3bMQ+PI*064=@ZHkg(+S1Y?lIby zQ))@m4a0i*cjkvTv~;LWDl$~+PW06L7@wh8o?{Yuy2rmcWQzH(OVJ=lvCQR9n6F@SDyBGI^mfXPHVor!DOfoXNTQzK{1 z-G6E8lK^CsGS!FJPnLfk|F@f^j93w@!Z>a$dWl0Iu>M?X&E`4mmMB?IbngQ$i<~qk zMDWAi?6IwQUj9J`uM(2@uFleNUBPG3-}A!&6zwcO?eT zziJ||%dIlzB)a>O(vQfiZ{*i3+E`_Zt^yS-!G2^v&UbxdiA`X6tw>v|<@!wl=6IKR z6P!ZbEW=2ldd~X&gg3Lb`WoWwLkCDewhh;F_^TKf6|NAE|dCRxkS@= zim!07573yj@WKIJFe5CV7ECkTmK_j9(W*@nj>0)4N^w&NYS5fQB|0KKel@!IlaXbD zDxJ*Dtjr7%=EuQ8WI(@NvxsD1Pj$=>a(qoqOZS7Rx*$rXBt#wn#~v z8#WG!JJ$vsMdd?k?Y*~5UD;ZLvFpxEzpNYq&a29N0l&x z5YTn#T1Y|3ydR+;(qVip*!BBsW8G4y(Ko}kSC`4liZpd|KnxCA24{^ly_}{x3kvB~ zY3a%aI33N4G2vGfC3He}656t8_rCJrLv9eBW<%2oLFHJZD;Bx{x}ASh&aA(HO5Y^^ z6T+pYP_laZ5NF6kF&X-mlx;seTfp}tLNV+w!zkAHmyY7x(|e-ng!}6IjZ`G2s(brb zor{s%t_+W_j#^1%_YJkWA3FW}Z%fnO7;|OWRL$0}?*H=n0??kV$T~lteJ3&rL~PkUW`-`ymeE5%Ux1q2G6HM9GmrRthrRWo=&aFYKCU9HJ%k#hNi+|# zaZ0OZag4v{e!ReA3PPjxatv8 zV8}+$3g#T`jO((UB&ir{ig!L$+(z3CK2aNEN-EMYNi)Oq&Paz$-5yN{<=`&0*_J0}T_RW54;|jN413+GU3%|A(vr+r0;B2;Bj_}DM`)7i zGW7kEa4-m&=<)7EDW${{PK2X>hUHwmjQ@9@SrcVJbH!d5FJmzKYA5aQBc>Pg#n9+S z4W%nGf|X6WhJt*QuZtj5*aDSPAErqIMz9(>`}IiBQse^$6h6)tb}7b zWE>nE9LK?N&iUPa#{2XAKOTQ>9Gr3Aukn0d&+EFLC+eQjtz$>e9t8m4nEq`&QvhHB zZ!!Q!Sim3reS-A>APng1>6!;jtTn^mh>nL~$<*dFOUqlvq8=vy09oV;o?eLrJ=W&mN{vRYC0vm(E=p|li%ii*u? z*bX2Qf|0^UUjF|bIH5!lE+*Z79}o3a;|o79nE?OXH|zR%Tt*cdeIxE>7+~+?!|lH@ zwbJt({0)+8Td4?4wS;6w-A;xu06KS0{PUD*l5LIxmE3Qj~&h1?ya!(RHx|wp6z`ZPx$%i zCU}x<=)TiwrWYSAO25?B7N?kgw3aoK+9ONy#7wRD@*(>K!SlkC)FK?Zxe|c?a}`Hi zgMKFM}GE^2`Ry#2l?LsX1(7`7%oJFgxGX>tqJh+@0pz1e|_yM>#UgmpP-!L zI0Y!|ZYSSws3MRl8U=YH@AHQeI<@XMFMQ+?z=kXscYDXmDfn=Ug^Rf@3hs9O?0~^l zuCs0;y{64E5_V)|tCs52+Tls>_sMECp%=@$LW6!}d01<5qAPpJQ~TRm5smIkYVdWp z<^9X+hnt~mZHwlC%$Y3;Tf|s+D*`dTB1s5xoDmwe!%d@{THfFuF76vVl(EI0p8uoq znx364K;4^92wL}>OvsZE&U>kFQGzFi8F;M{&kkr5Cig&q@~d55ZXsCXKPpDS*aSdN zKhaln0M8H!=;85ruhNmraW~r|PwJck@&K;K=S7bKy8pV#jFbQ#AD&`H3Lix(o}@tn zfF}3abKvp4J4Z~0s4tR3BJ`-ss_`UgL@A6HcY$Ul6>CQn|uu-V$$N=WNj)RDZ;aF5|02AY;6Dp_oRWH@m;^0s1i z4d$d`l4&&Lp|etN77$s6wkaHbfrGOG!R6@qyxW#AN&S-zKDgs&bX9O$<2E z(aSHUf3m=UQ7&5KS^0ef$+Gft1)yRSU-ulJN-2M`ZBbv9y~6}grJut$j~2ev-u7R7 z^qAmf!R6Q*D4gJwuf;9cWk{Jtk>M`u%!? z<~cX~)sB>)iYVURZ_#umVM@{kCzJ}747l`&ebJ; z{{E!S&T!7$v30*5gOaP|q_Zb%3{EqMIUkSgc5&|O{b@;0kQxv4P>8%e|LabhnSrFU zMM*6Xl;e^lT9s|ob>HBBD2@6Utix{&shu`=x1oSriDHp1ib zyLE|;r-CVJG?UNzby;G)##f2`c}tfprS9j6nYk`Z!@nqhu=+9N(@5!_vCDETLl1en zJc3SBon+cKG{(sS)9(HsaSm6ZLvCefY+5#G7hBqvA3JVPZTpiaK_Xpy)We6+S@84JU13ahh&@cMQt76}qyeHrMN@UH+^!_=dX_FP7zwont z5%8S13uKvpgr9zH#{Rzl3+K-r;n9lwM(z;il$9r8JO;3v9${-*{;7J#$7YI&y?h2a zDn;5TxOS60u_F(azkpGe)~dLxW|v*p;!=id@?LL6C0+Oq7v9f!ZZ&gosWN!FP95K% z;6Yu%gu(G+QwPSHACJ;q1Kqxgr2kCT|e^PuQ5-c}DDQ1a3vuZqJN3rp8Rz!gy}M;%kL>TCoUC=S{w( zr^A-ln!X555gRW3DZVdTuO7>5^pfRksgc$8P@_T)Yckzp=Wmw=iz} zIkn*YoqIL5J{;%zua{`srbItgRlhS}4;Nfw@Jzj&{Zy`Ex_&IkzjcLkBv=!U}0_)Pc7md6sE0lvGz_)B{w%m&2@2gzDTG9TxLNZ~tSikn)E zp^vIZs~8_V$T;W@Jo|XEaUFL><#1uyr!n2lm^?$+@nPZEwfngf<3-&sqd3f{e0C*v zJk{*Fac1;lcBPRuRpWc$gLv*wkfD>KbOw)NJ#Nuq3# z9}3X2masbpl4)DmTFh#GDx%PQqhIXlIiHsrh36r{B1V}H8H6niZb0$Jk+Mh${lqfvt>6JQA8AiaNE?FP5HKvIg>)gXP(YECd*d(zsZaG+Ifc~Jdv zr#;=zCFqjJO|xJ3H6`*sVLiIkP+9BeRSf_&Z`p*%;KF2-sQy=?h7gk6 zuTJ>o^in-I`x+aZ)5j(*@AQK)LL@Y`%+tv zVkJc!JanO{C|@zqBek>badzLwY-l=XHI365@6Y2qY7~A6|5O%msWM-ITN{??|4#ok zoD|&|P{+S<^cQ7XowXU8@*7{S&Tgzd9zxJ|N4VnV-b{f7?!9ZI z_WNi2i$ab&_P*vDHSZ6;N~tBxJ|tglGZf}u>_5{r!wS?<4(u2JKYzjF!GtjEmO!zo z@N0Az1kk2caWVokL~_eHV6%#_uMQwNLv|c_%c3|o=$cf%w$iObMQLleq1U~BR*fZ} zl3L;j;>qXAyHMkLY%zCD``}?FFI^mHLj~{G26+^OH{U6osS|1>7LI?BBpFJi+-U|! z$R``R(MoL$n#XG&$k7ymTc1BPwo*ftQPA0_NzyA6vCRL|D%JCTXZBOnd|qst@7GCk z@ZLO@dK8$IZap{$AX{l@ECUcslSUi?B6n@oQz!w8rFH@V%_hxPyft%b-RT6{I6`r| z$w)Auz+bJ2>WL^goYjE55-c>0`lE7jfOrIHYVcO!retAv2VsEmd7b*%_c)GU4`lfq zlL?dsxFCA+nQQH&$X=zy|J^)4-Q3-G=>$rs-E0lU)GwyzhS!xcVf~XQ4&(qc*2Af1 zq$_@wcWsr}E2^{TUD`Wg0CE*=%c0LtdSpP~PSJ*VJ~8osce5BiHNEomBI;m|Ogj5` zc=dVYa<-WyU)3Qw;&m_9QfAOH;0MZoQ>^bvbg%Lk=Svr}(jH_K&h(3MuUh!{+*=r# zFF;>i@~?a#6>IlGpdZ=lBehL;!rp$-1vaMv_$M$uyEXMxSa zT$dI4fd^FR6qAD zqjAXI9i;COLwk|+ZYwJL7Zw~H^$f{7UTegTWdJGjH4*1Igsgbb?om_9X zGzJRTjT&oeI?FBYNIkjnfAhFv?zr1F$fT6v;1`d)WYT$59v7#;h7>(LY|MYuzFgqb zfnqh}&69F&k?0|qm@XF|P-9WLwLV$fanSm*w`m2p=}^N7>c~~@dK(4`L$(sL6VSsus^=jem_Ib2(LQkC%aJRhglCYA>I)zBJS2(d&E1M z8Y8Q&xi!!#pOqc!W;L=6aA{?9sGDTWg_d_hVUsJqSq#G48gid8H-SgaMnJ%D=ArX0 zgQo$L$md?SNC}6f^o+(8>=?0$2{}DJJ{LsZ*lP0LI@0qx;J;+pH{U$Ycbb;|Px>v6{zIFSSmG`r$oE3jFW8RRSQAuMn z)py%oJgkL9!za8dH6QvdS{U{C)4N}(Zbx*@;GU+jujMkQ9;DtR?~WVI&IeB4D6iF* zc`{BbJ9uBg{yXZU{U@5?mAq34Jk@Db(c-0SC(Wd3Etj7g#qaE0Oa`FccZ>LU>@{8d z#O+r#N6Ck?2nJv;+m3b`(4l%z`*u`^h^1f8iQx3@ZTx?)P)lCm*1G<aouo69z*Y zt_+;uRm?z(ZML7yx*v18FIDh)arJ_W59COD!ONPEg}1j7{Tc-rm(Mz?>G|d+A59-O z7Jr#2E&6UoM<7ZtgS`?*$i|E5z|Ddz| ztLPd0Q%8EXv$t&yFyv~4bK194`XXCIm+Y^PB7b@Fu~Nm*j<;yicsRX3W9LS>*`4y^ z-k~-86+yOhznRNxnbA12&u;{vv|Co`&$RtCEU&$CUJJw2!-zutIXJO{hAy8 zCCu6DI*tCRfsYC7%@kU^aj-HVyy`bpT{xg{YREWjI_mSNkfOL6XLx8VqMulYZ=m?8 z9{J4|nz_Y)&-DxLb*XY8JG)?NYPC?s&)}+0xVqW-iKioE%RV{ceU{B%2cL0lZP#%c zC54E!10~0O)D>PG67-pUh_)PjPJ}!ByobBHce8D6ih)=Qg5GlcClWnVi>XO5eFjhpO-s1Ds_rm70f|}< z5aljr+1uMYgMgXD8g(;YR|h-K2rTcePu?P4%6fNAN8`T}>L8+vihoOIyYMJA-h|Kd zfG6(WW82|%aXC@hnVFi&XWUG>{5MPF*#w4P73?$iwKVf+O(smXGCQ^Ic zC*pi5wU~>&{E~%g1|@!pqCt9J(nR$$GdMx=5ln4OH8p<22Xb*9KXpYou6uu@VK6*b zGw*&JaW&c$+S9EbUnnn^DL!-nPKD2vBvYnN0qY-JAQPI){foiGcq)pg_)MXyRj@>o z&4klPj`Bg741fQ2o8Nh|cBz>Cws(dvYWM!Rmj0mTzP%>)PN=$xx*2?Yky1qc`jBoN zrphVHuS#eb#|iyR)eeC0!Ups`rY_guB;S1ZnsDpY@qZs0|57)Gey;}cZZNttA61Ov zK2I_i-e#p##pw3i`agN_%1!g#mz*5~5b~nrQd5Xp71@3va;~9gYLDlZbq!_pJSdz` ziu1n}kBu>9>V3y9%vnprN{}=pq?v`jExdB*cHo!WNz~35>_x7T{S3)%xE+y34uM!jNAp*6o@V88pqfuLB!$K z0*y*}L`6A#I@12elwBKgZ?w{`7%WHbmyUceExFe?T|}jZFd)6_ds7Tv!_a3LKY@3^ zol|xnYxF1Vra)pWm~J~C{||Mhl4MA|67VcI^7B_XVK+4)i~|G0$$FdM6}eR zcm22C6z~R_fR*!aoIZ(sgoYk#p^++ifq)fNbH4CoDPNx7TQ0kRCk5U>)hu?hUPH7# z9toD&l;WOzc9~LwGG|nK-lLE5urNjz)&^(&`m88jofc#G30FPi9NfaJ=(b;+<(JA^ zhH~5&BBy!xC+$yJF2lRGQU2=v`N&(e`0PTglc;lT5HhHhT#MqK{XU|T@#y(D)r>vF zRUeN#+Lp`O_6eukSuNb9_;mz7Y)MEf5RzSQ^13-69}6or!NM0cGF*VTI!!ts^Vi z*ViC`ivCGF-1cObS6Om&vgwV#L_&+{Pe@11;i^lnO?W{ga)hsCb!wX~u{ ze?X9ouyqK?UVH#m5NP?uZ}d|a9`c2MX>Pu2^u&14wQ|}$2+$};6DTc4i3OV`MS|!|i9DiwFY$mbbp$ux?M_TE1mDbBmou z{dDoHMyDNNd0)b3`~>Q*r`)&bFSkX8@y}b}#3JtF`H!jsey#XUc=2n4OdLSqa}*57 z@wbyCwLvM!NI@VVBJ!ZJ9LMI3fv4CerMkUwah)R5Ar&n-FWW{CTX&^05;T(X0 zltCmIB?S5TnfwVeq)NNijq@aybpK*)k|@#x8^R52zNK&SART&IWAve47P0TCIX9D< zyp2vL#FHKyEj@QxAs%aLEI#03dv2j_aM_}k&-;)mR@PvgT{7K4`#a=(t$#*7I3e%eU!X=MJ;OZdEq zF3_*F7{1&hH6T4d;XO(&AUXOpY9??UJiW~(Z=fK*7nDuh%dnR3xE0uXne{@~@=Rdr z(6oNQ@eVt_hX{4!u`=;C0u?I-F;P_ik#l@>$D>!aPjr1rt0Q&O?wP~e9=5?- zH%`!sPk{o{i0jDY^t22h!K8bS3H-d$$<&$tvS%n4ZLy*h{|jp6T%(^Ts(0#~qllwn zT86qVm#;ygY4Om?hb|$6M&LSn^j^8eiSYN?#p1{{hW`qDN#%6hAyuQ}0%Re%yh~E% zhO^auF+h$jj@2d4^-%T4)&Fn)&tG`>eGUCoY=lGL1*zP{mvp&*) zdcUkz?7TLfu77UUo`bfj1i%rBE*XQ{s8++fj#R}|_~P!qMgPzbC)@)?zv{9@gzr9o zgW!VGpkF;i0;lyP??44@4ZMtnefzfh^f2JAV)?w0pB;yRChwSUpyL_NqlfMxlRa$m zjT*Cv1}!v)@t)?D(^P z!o18VSLnQ4?c{7FmD0PhQK6ss-LKJxa)1YGu5P8)=x_AW%9d5lgXR1dg^QaZt;6en z(mA;MW$4o)Qj8KOO-_K&#LVES^9JEJfJ`y{TWMW{aGfxD8_7`qT$g+g_%ONtn@S;9 zRab`s4~n|yMm&bE>mBiFKA zbC49Scpj9a!6fr>6n_BDC`bYRRRd!c(juS4MM~+JD|McNoJt?RAaYmlC$u!Hstw9s zn2c^#KBmZ#&;yZzMNe2U0o0Sw*TbqHN;H)MN^gn{1C(#5C$V1 zN?Zpsgpspj^?b7Lk0)J{El#r{;NGV2e&@EYarY~rdh&%&J-Olru6&Eq*A}HWz=1ZG z6$*6vGWqOE=G}@B*R@xnz=u)1(~k9kQ&6~Mg9l&uu$$7z!9hbPu}_&DiWfPNGOuDg z1g*4$$tn2Uki7qRNjRlS6L?&Hzt@nOot*Aa?o^n3xBaRHtQ<#aQR;j$l0T}M^!=vE zV^9QK1D~kbd-3RiqYJQQb?V>6#VhlB{$1X-VexA`@_!T^3Qt3fAfK9>pS8>TdL2^N z7vcrc&_2)^FA!vjETtlf zy|fCc`4P~n?9YR!HDdb@S#{N|60NR1;^G=A)JS}2e{^#EOY7@w4|rNmSMUBUN4igg ziBZS4N(}wG+G9a@t;QoS^-bj@MkLQjW%wnkYU;szT1Dq6roKXLnY-E=%EXTS9I}yy zPLppva<386MqA!lCAnRhQ7adL}Ng@ z!^_&sosOBfd_wiBonrN!gIm3^7q;ljXQ)v@Jt7?#sG5lI$rDxR)N*tuU(#NSP?r}! z<86@Qh3_w>t?M@fdXx+QcAHo?rBKZ+0^V(>lbe5SVy%sVIR+`Fn*xj=AAb(Ejw+JF zo4O@=5tr`%Jp-0mX5CpU7^9=1HeMT3VtwlKh%el#)j}g;;X> zxXY3b%;pOw)!I}SOAeEWJ~S;U2ot^+cXM7(fZlr=7@08pfXTUb68%O`=FJ1GFTaJF zO$1^!ii8|UiQlPK{8B+iJ~d`8pIzjA0(WkS8O%rd#1FL?=Mi~x122-4ZjJ=3l8RDY zIo)9E%XOwTXQT_Hf3We!8s4gTaaLipG5Tl7x|FP07?t2Okok;N!#;ae&U~ny>N7B? zednNFg!#s5H^JGadI{aOMo9|w_<6wh@zw(^o+cfSWJP?$9YwpWO*ro%zmGrfKxV?y z1($vgYpZ)9C=1Qs-*AWHry=_TmE!jpei`CjYH5CWuUai$i)S`naiAW^6YijEu&}qm z7k<9^aJ$DfBqaM6F-tBWhgan*DiSn=6ufL?$<4CY{&8H_QcUOFm0vDP!qfV>M{=LU zvK@W>l0N&Dae%0CzjAcCf(d8#k0K&1b=|Q1h>C^k+hTsTn{2{I;s-)Dd@2=)?N>Gq zCkypD&A>8a#Pum)n<(0XR{8~HmBrXeE}nR+CGvgf$|R$7p{F?;vYqMW>kHAyYl)(v zRS$>J(7Ry0r>5_M+S_n1dvKr*WL;FWI;eKc-`4$U_s#ivXAV$*mb9PF6VJysCW zsJt27kN!IX0aLAI#cfmEu(+x-OK`2;CL?XUpYKiTX79mh7K+>y$34#GyV8Z;A66zO zh-KLI-#+n1+2Z8WH{0_3C*`wG+S}ssPgSMi*HrioQcV2;;dni-#}9P^kGOr6fLWf-n+dq$MXVACqO{&nsnj8C{bg;#yI;5$N$Rgx#3fgBxy*v zQ*{1hlJj*4lY@vu_1l_CGHq&rn)Spn{=ID_2t>qykM|^&%>nZC+lDo6Amt)CvtIo7 zi8tYl{LMUpwvgzI`+>&QwJ-Er18PUK{0RNiVH@4ObfJLN_PsVUq0WA*yK7A&-y^gR z6oQxYg?bPHO2SIKZQH2DSPjT=cBy;^A(siBNVWZr~H zjpm0Jb7An!hdJI}J}YM-&P5Ycu5K57z~+07^4`N0W(X`jYtB z=I~a99qLnoD+g5js(K)`NGQjfu2%L&Rhv+v-PQEdVLLT650kn?Q_1q+)yQ3lL-Z)M zUMi3+rfa@U+hS@nd=I!cuVb+AI#Q$6KqHA-u-#U${pwS|H~HYC46KNVD;la?sJGpv z13a|*SDAads|w5}y0p4R16C%J9G}QbO&kr&+|J{?tDUz}4zEC0HsS1gV z{G)==D*z<0C?ePoIwYNI#iP zpZctgC$baEm1}#LQJdYEw4eO*ER{}MOuxdqvQDF~ry^XoP~+R$HIEf0{%G&*&rQM` znI8`*!<3C2DJiQ0mI*m#gr%en7Wra4N5;h=z9m`(oAeBr`A3^j{tf$&{EU$+IgX*k zIq&}baU0N>q>xdO)hUz&XR1gQZ(AU?=bjXnCL6a%w+;KJRg6v_Xo6gX|2Fc|)Ea@H zTsJyc8R4)OncV#(UUZTX;B)MT-htxZzNBbWz^}Z>HIpqEEl`Osd3fn}BbK_6WOMza z#eW8}A9_N*~J$c3i`*UDc(_}dQ-)L3=fy!d@S0-vC;J9=x! zVKPsQD%ML}SX99LUyd$AFPWA+hS)ng&g+ey1Z{TzPFq=wVt_#Aj>qw6=DBa1py=Dg zAndRdC(j|2bn=WS$8{E@MQI0kjgW_qvFAndlP}*^>{1hJ%aZd*5Y&5YII!Nv6LW(F z2_lK@vY(jO(tvf%uUbM&6!-=I%Cbq+o;}{dV6bny>8GCg+6R8=>No{eE?^0>FVA?d zp}442X}=E!vhR!XmAii~(XM<_5r}`SO_+96OFCGa$8D`USjtd`vz z;T8j*ZvLP>P#3)anG}MR_hAqQD?7*=6-ai_*8>gjTOWRO*%#mT#3=$NVb8K`hro4Y z1^BtRMAX*Sy0oPJkH}XwW#B-hEd^-J<>e;37JS1cffgR9!DG=~5Qr;9=e6imBuAH{ z6+ru)Te9hHB!CbRLz@0nn?prDDm3R1{tfL~(HwI{|0D&5EW!G0Aj0F?58MvwJrxpo z;qMjhXjU4?hQouBW3OhA;uSj5=vxIjeDHck9;?_8b{p;MTKy7*KVDV!%(q;{eAlSl zRqWqxotodOqgeS~qQd*&pEOAREk6l)K@5+Zf#dWbr4$J~ov5EbxChE`z`esZR;^7f z$+x+&GB42Y16VLgk{Jv+P;T>*ZslmPU`#5KMNh9eteQGL>H`%}py>t&6HtgsL3z(4q7&uaWxC_O7ze}n!f!~v z{puys$7l}`opx6SsivM@u-+EVV=Of90`<$6jjA7+?3docA@N6PMth^s#wLanivCf{ z$P6;X7vv-&GA=k8GPKRq`$QOD4vqS!cI=NiDIB7CnFHuzqvmmNh3`+{w8+N*0}vY+7nt8Yg=I^8|5y3I*lsD#>=98s zv*!n=0tLt8a^oUlOHlXy4Eoc~$uneiLE>4nP%Xk!1zg-0>KM⋁2wAvx>$%R;uE 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 Qi2wiq07*qoM6N<$f>ra+1ONa4 diff --git a/src/main/resources/assets/unicopia/textures/item/alfalfa_seeds.png b/src/main/resources/assets/unicopia/textures/item/alfalfa_seeds.png deleted file mode 100644 index 468216098c306845d1e5d0ca0d8adb5e2096ad71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`J3L(+Lo7}wCrGf~IJmIwKg-R4 z11-Lr-+gV4ID2((oxouMwVYY+^{g7Nx|WO2O}MbPZh~X^vd8sv);-_!%w^)0xi5dj zn?=61-()l0RJ}`Lm2bP01PB~Td-c!#TEiNi-DxWrH=T^);c1sLFnP%BA+o$EvUpJy zv#!{g$*G0xk8VqUm)s}&_uPlKFUs9^EaVP9$jiBV-?WFHdd+8SbI$$e?{UW_Qf&A2 p4VTVs31&#<71d$~HQ%E7uA&a37lwhPK{R>Jc#&qdyZ|#^a89HfevuG=1 z$r6%+z@nz$KoX3MLgODv$PfZ1249EvuCg5p{ldZbPT%+5-P1!#$@F@@vLcgxazDL< zl#*n*t_wgvj%CiWR1d(5jSW$&)h6asuIo-R{3!+gaCu4IwgITu>(gQ~1rV1?QmLD! zNk5L|<8+$02M2sC6v!IJjDW(V06Jl)54zp1%-c3u!(gXaoB&m;RSoWhA(~)&Z4H3! zyF1yBW9~;Inn6I;Fu1|4~KtE^nG8b&26itTB)4>)awCo-frs|rSAK_5RT*M-WfN6CYytExr) z?Qzs-Xx|=;a*{;V_mdMYqG$sAAb}79$8j`?X_^cM11_S7Z(%qypPF{IQmNqkJ~_)0 n{W#X(qeerhB>wXT|69KR+!_|fVSTNM00000NkvXXu0mjf(QpM{ diff --git a/src/main/resources/assets/unicopia/textures/item/apple_cider.png b/src/main/resources/assets/unicopia/textures/item/apple_cider.png deleted file mode 100644 index de93aecce6707249b12aa444de7292febba54712..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3070 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 M07*qoM6N<$f(38qG5`Po diff --git a/src/main/resources/assets/unicopia/textures/item/apple_seeds.png b/src/main/resources/assets/unicopia/textures/item/apple_seeds.png deleted file mode 100644 index 95e9db81de439da31b32d6c698b903a52af56188..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3253 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 diff --git a/src/main/resources/assets/unicopia/textures/item/apple_zap.png b/src/main/resources/assets/unicopia/textures/item/apple_zap.png deleted file mode 100644 index 62b9bef4797efbef593f9ec17928e7ca94bb4d3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3376 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 diff --git a/src/main/resources/assets/unicopia/textures/item/bag_of_holding.png b/src/main/resources/assets/unicopia/textures/item/bag_of_holding.png deleted file mode 100644 index ed885db7f8d2b09cf2b6c1f4773cec0013e5a8ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3107 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 diff --git a/src/main/resources/assets/unicopia/textures/item/bakery_door.png b/src/main/resources/assets/unicopia/textures/item/bakery_door.png deleted file mode 100644 index d3db43a8821ac290d5a6bf6620175911ab92354f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`4W2HJAr_~T6C^SYbexHNHueAi z-)F^HOjYm4a$Y~)qVrMJVRj=31jjPz_woerJh)jfHAUYbP>QYj0)t;ECtHM1!s3g} zlUVOEJjrkg>&cUd(?4LcC|gOQ_Xp3xWs>U|Uq}@$4OpWo7;9|j9AOZoG%e!5hg-2W g8yn8=zrnzuGQ-Ypp<2&8pj#L`UHx3vIVCg!05T>*4FCWD diff --git a/src/main/resources/assets/unicopia/textures/item/boop_o_roops.png b/src/main/resources/assets/unicopia/textures/item/boop_o_roops.png deleted file mode 100644 index 7aa52e2d7c744f90debb7e0acf08a7c9bfdbec26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 264 zcmV+j0r&oiP)t`95xLfbwLz7;~|l@n6m}_Ud>&;9rSybrLq)7>$Qky|uYvwawK}n~r_z*rz;) zB$ISPk{tAElyfH>1s-+mQzD=lsYQWDr$Cko%RWgbH1B-PAPPM8bsYdOU)`NuhK&jU z;FvwJyS&xc5KRdH?9aI+IAt#jcK(92*X>lT`Z|38fCW1RMUkWkmM9;vi;*2v@{(l$ O0000x$6g`RP}m^!Hn2&Vw@%H{-i_N`dZT@O1TaS?83{1OQbLQj-7x diff --git a/src/main/resources/assets/unicopia/textures/item/cereal.png b/src/main/resources/assets/unicopia/textures/item/cereal.png deleted file mode 100644 index dfe9eca639ae82ad83cc5b99936adbdc5335f9bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 304 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 KMNUMnLSTY=WH5pN diff --git a/src/main/resources/assets/unicopia/textures/item/cloud_matter.png b/src/main/resources/assets/unicopia/textures/item/cloud_matter.png deleted file mode 100644 index 5df77d6e19ea83a1ee568f4898b6a9bc4b643dc8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3188 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 diff --git a/src/main/resources/assets/unicopia/textures/item/corrupted_gem_overlay.png b/src/main/resources/assets/unicopia/textures/item/corrupted_gem_overlay.png deleted file mode 100644 index 93ba59837cb7bf4b80eaa9211c59b3a97cd12519..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 543 zcmV+)0^t3LP)u3)Qsf@w7#R^6rNDlkfsKKg z0Spq8iwk^%-9kX@y!^aW22{Yv!0_!Fh-6^6tP3)Wfi%FHTu@X3qz?eGPfBWWGSEmK zAUm_XqyQ++SOH{1A-vFQ_caOwTA$&`8!)FtoI^ zRB%kmPfAq?t}HG|%`H~&%uCKMD#$NNEJ;n#Q*g}5Q3wJlFIEUjElw>e0}3)g>;?mV z_oBo~1^2|<+(ZQ4006%RKq@9> z>GS{q0MtoDK~yNuh0!reLje#3(6{-5U?~#*1#$>GYx`g$cz}r52|^$qAqsZZ7GiH9 zSlW053mfqh(n$Q3Bx@BD%}2MI9cE_+HqzhInu9aY%U&)vh`B>A+cC}|c5TN%{&wIr zdGV~XOfKVNL+dtljq+$!P)5reHr=RVwkjCqIXF>~uh|gsjwh8X2TdJjD6x-JG?na| zV8?^cCWkU+(RVL=xK_rTUt2`9a!>71VWPe2Ft8Ovg~F{)TsCzWo2u0&Kc4j+ap;2R h=G0v*-^G9L{sMSKJbb!u+2Q~I002ovPDHLkV1i&--LC)u diff --git a/src/main/resources/assets/unicopia/textures/item/cucoon.png b/src/main/resources/assets/unicopia/textures/item/cucoon.png deleted file mode 100644 index ed5f956611479c42b500e9f5d74bcda3434d1dca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3273 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 Hu0mjfR@GA| diff --git a/src/main/resources/assets/unicopia/textures/item/daffodil_daisy_sandwich.png b/src/main/resources/assets/unicopia/textures/item/daffodil_daisy_sandwich.png deleted file mode 100644 index 5f03122f1507ac4075e069abd9601b984241ad7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3233 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 TFA>hO00000NkvXXu0mjfQ93!J diff --git a/src/main/resources/assets/unicopia/textures/item/dew_drop.png b/src/main/resources/assets/unicopia/textures/item/dew_drop.png deleted file mode 100644 index a29c66a7fbe99ce062ea3c8e310ff544415f08fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`5uPrNAr_~T6C_wG8n?{&UY}|B z{(nmLJjk5z^8?1(w&l4&IJk7FOp8&(S?`lJ#(pftguD(t%WE`x$A+BK$bnKp-V*!sKqj^^7+T zJbJJH;gs=2p@jGQ>y>Xc{P!^X-@emj!sOTXyPU+5lGx9({^ykX@bCBb|3|92TO(R4 zoxCELr)DrGaPrvN3gj{ba&lU#E?VmL=n`X)*OAqn`DsdC!ph1q@(e8b`e8aj%l80X O%i!ti=d#Wzp$Pygol{T% diff --git a/src/main/resources/assets/unicopia/textures/item/empty_gem_slot.png b/src/main/resources/assets/unicopia/textures/item/empty_gem_slot.png deleted file mode 100644 index a295aa4c7eeb1f58d85487940fa9713f6a7b1729..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 439 zcmV;o0Z9IdP)u3)Qsf@w7#R^6rNDlkfsKKg z0Spq8iwk^%-9kX@y!^aW22{Yv!0_!Fh-6^6tP3)Wfi%FHTu@X3qz?eGPfBWWGSEmK zAUm_XqyQ++SOH{1A-vFQ_caOwTA$&`8!)FtoI^ zRB%kmPfAq?t}HG|%`H~&%uCKMD#$NNEJ;n#Q*g}5Q3wJlFIEUjElw>e0}3)g>;?mV z_oBo~1^2|<+(ZQ4006%RKq@9> z>GS{q0BlJ_K~yNut&zbEfG`L}AB`LJR5oxI-9cT!ef?fqtue8h2p1s#zYs9-9HA65 z04~>fbO0zPOe6`BG*t6ID~fW-{=)c9IQ`eIN%&FFn;%DYMY{>M7GWZ0M(uyGLsyD{ hmC;-ft@c^#-8)<#JtU%VRRjP4002ovPDHLkV1i2xsdxYY diff --git a/src/main/resources/assets/unicopia/textures/item/gem.png b/src/main/resources/assets/unicopia/textures/item/gem.png deleted file mode 100644 index b1186e31f3f9a8bcc86f6cfdb36eb70aa23a4b0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 603 zcmV-h0;K(kP)KLZ*U+s!PAz6~$9cIRu+`&V51dreiQV3o|u(k*iECqkn z<24T+h}Wp!9kkA&s=bYqC>v)JdA#L_0|3aCGsDqc3Q#w-<~IRf9|(Z=>!{xy@HdCb zSP#4b4~2FL#0gM7dE-H>f%bG^JcwtYy-1TDh!^10>$L~yHD+VW+1$%ZbtP}YFqBcz zOtl9Iw5y)t{lu0?8dnXg^v|Z^UV7CpxS#0x-jPt6>WhdzH@5b3g z?$T$90K~<1-|eYKyZZULbqn9W20$v}d3Hbm001CkNK#Dz0D2_=0Dyx40Qvs_0D$QL z0Cg|`0P0`>06Lfe02gnPU&TfM007HLL_t(|+JwkS(@FPkTB%g$vq~Ho9 zqTvFD8w4b-Kt)f((!YyeQjmOljOaHC=djRE^LrZFgzUcq}002ovPDHLkV1jTD2^atX diff --git a/src/main/resources/assets/unicopia/textures/item/gem_overlay.png b/src/main/resources/assets/unicopia/textures/item/gem_overlay.png deleted file mode 100644 index b1186e31f3f9a8bcc86f6cfdb36eb70aa23a4b0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 603 zcmV-h0;K(kP)KLZ*U+s!PAz6~$9cIRu+`&V51dreiQV3o|u(k*iECqkn z<24T+h}Wp!9kkA&s=bYqC>v)JdA#L_0|3aCGsDqc3Q#w-<~IRf9|(Z=>!{xy@HdCb zSP#4b4~2FL#0gM7dE-H>f%bG^JcwtYy-1TDh!^10>$L~yHD+VW+1$%ZbtP}YFqBcz zOtl9Iw5y)t{lu0?8dnXg^v|Z^UV7CpxS#0x-jPt6>WhdzH@5b3g z?$T$90K~<1-|eYKyZZULbqn9W20$v}d3Hbm001CkNK#Dz0D2_=0Dyx40Qvs_0D$QL z0Cg|`0P0`>06Lfe02gnPU&TfM007HLL_t(|+JwkS(@FPkTB%g$vq~Ho9 zqTvFD8w4b-Kt)f((!YyeQjmOljOaHC=djRE^LrZFgzUcq}002ovPDHLkV1jTD2^atX diff --git a/src/main/resources/assets/unicopia/textures/item/hay_burger.png b/src/main/resources/assets/unicopia/textures/item/hay_burger.png deleted file mode 100644 index 98d82575c406aa488d4950ad78edb2ded2218389..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3188 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 diff --git a/src/main/resources/assets/unicopia/textures/item/juice.png b/src/main/resources/assets/unicopia/textures/item/juice.png deleted file mode 100644 index e6e4ac51b1c7d122702a4f8eacc7c8011c0eb3bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 271 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 JPDHLkV1fmG_#6NL diff --git a/src/main/resources/assets/unicopia/textures/item/tomato_seeds.png b/src/main/resources/assets/unicopia/textures/item/tomato_seeds.png deleted file mode 100644 index f37d80c19f7d95db87703de0812d40dfd5b2fedc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3239 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 Z_zk|4+Q6uo=aK*b002ovPDHLkV1n6lIK2P> diff --git a/src/main/resources/assets/unicopia/textures/item/wheat_worms.png b/src/main/resources/assets/unicopia/textures/item/wheat_worms.png deleted file mode 100644 index 263f0764ef14a5a4c8826c0e9292f483724b267f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 528 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 diff --git a/src/main/resources/assets/unicopia/textures/models/armor/alicorn_amulet.png b/src/main/resources/assets/unicopia/textures/models/armor/alicorn_amulet.png deleted file mode 100644 index d79eb54845207b84638f32747658c4ef05ca9c6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 550 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}EWU|@Xf>EaktaqI1M`|PMdiQ^yF zZ+&^qaovQL1-Sy#S(YRyPH+%YWU)F?D|~e0`-RTd+q~QS@?>lI6-8R&W*v2CTd;Fs z?=ybMO&+pup1AtlQYu;T?Dx!fqVhXFRG%w8$LKjp1qWJEpRzeduFt-If40@i$h@Yb zHF6DcGRz-TyMo-T=DPp?&EA$+@&1)u>;HeBCdDi?2wj`Df|0?mysT~V>i;JXG39^z z{xd>LFlBT7+KW8q4(eT#91a`EJmX?*%9*y;>*;ph%biM>=T2w)v0?9AmfPLQb$o0x zX0ust>Rb;GFF&+Dck3jnzc(L8{=DEP@^Mehvtoe{Yc6`UCR*6!m@!&dTPlWY6iBf+ zH@vR9pYlAF$waF6NlN|gEY1H{XBP67@Q&6yM+X;^@ZJ_4D!=A1m(_KR##veC7{j+1w4y zQN2MMITC(+wqaCLKX`iU)+gKZk01Y&v7Pt7qRD|LWd((Wi9h%s3Rvuv%{gQ+*H3yM eJO)bU$DeB3>Arn#N+>Y?89ZJ6T-G@yGywoK@BNto diff --git a/src/main/resources/assets/unicopia/textures/pages/chapter_1_gems.png b/src/main/resources/assets/unicopia/textures/pages/chapter_1_gems.png deleted file mode 100644 index c8df5c035442d94094cdf150d0f9f5b20a6df661..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59527 zcmeFZby(AHA3r)80VzRBM7kU4P>==z=|)ndK{|(lba$g7(j8J$q)X`-Y?Mfh(PM0E zXMUgO`<&l(uJhmd_goj(Hm;4E&;5G$>wbL}Z}?R6HW@P+006kHt@Y#?06>U)i4Pzp z#y#Deyx#=?JOF4vd2AB0a@ZSM#A=$4#n!JDKLsq)EH^ju#U{K_XEJ1ef68iNlIQoW zVIU`_`8sowiN-IALlVE@4R`qm*%S#eu_W?}qz9^`v9kM(qN=gP_u2vMT*a>tb#S)b zFXvtJyC(C!k=+3b$R7I!RJFC~=ch_;U&0SUr$S2zR7u(2Q2+lA|6ef>fBFTF0Ut|F z0pJ%SRU}8}!kktGN)1=+HI91O8wD~*KpinVJkvT3&yRZk2e*LOAl=PlC<=5R^czG1 z91b80y}hJT_L0C7Fmah;08l>s#0pp-2V=Dy-sT=XC>x)eY;sD)^TAgp>=7V{`FEXP z_mn_qk62|N_(mPPZ!XoyIxgmPw{L~113iw2qgX}*KCu?=vnrSp1O7F2g`9|t%k?gi z`?}>fK%+YFSqZ*<6KuRIzPt}0PnT#`J1i-ryPPIda zjusUI=nW9@OiU>moDGrvdr6MPyvDV`q(ukBmlrdKZo}vU+EtbESUiX7;58Qgt_A`H zdPV>!`MUI0&+ku2Jdr5izuRXQNK=QX2>W`cUHyr|EFB0k0su!XH!LyZF@r>*zn7`6 z+H#L*AC~_6d81_eJc(XDU+)h*6ae+BJ<6t=D4R#1hOF&;{MArYX74NA`3O}~aaTPO zk-@03Gfo&sQhd3ob< zi_QG(7WBh(y(Um61O4Q_0{tnVk)GNVS32NdX19h|e zI$gc@hT8GTA(0{pnlVIDqTGBm^t( zE%itHT`XZGy^8Vs2HM6FrhCeE8E!#GqM#Tic4EB}r+H`G<~gK?>zYp$-r@JSz9PUn z?b^dx*`|qOI9&k$!q_Bo`q22j3cXx(YcY1k$^o!+-wm4cKZp4tKTJ?bZIDs~8J$w0 z76YK^eO0FPq4-7N7DFWUWp4p3Y{KxaPdNbpx&I}*P!R?a@d087{S^iav;K_mVoF!-Cq+i zv)k$_<6ac(K1AIvrk3k3DYn0V1-W7rd4DMCg$=MP2nR;OP~KgTJ*p)Pu=5I^U+u9| z>BT9Q>sThpTNF&&IK8->tKA8-8ys=vu27>}|IZb0HZO-l3-Ot9;HX<*jZ?d$DF zLRc?HzkB~gd$qsckrlm?1o&&%zwrFXYXsBHT5Y2V6|gUXw8i`<7$KlCbTvJ~hu3oi zRxUo`5JePAwS3am6<+!W27&Q!Rf>NGyl93#vgX-@xeqSa(b%KjXS1{VZ-3Daye2m1PyvvfiX0Q`6Jh z(i_kqMyFQBL;wI`eReU#vaGxBppvX1-zo0GnalAW6yp7KLW%xA*E8#k3Ga8iA`N7i zGLIDZ&R@!_K;2*M7f8eQf%>;%Z(P7md(lLm@6HyZdn#~V>aBx?fxIa6zfFgv4VAsC zV+3HvFIzy-%R=uD3MM{RQT{Kfh`U9DtI*SWOmMt)V(^>9%6?6eo5adL_Y=uuf=Q0u z99D}Yiikj~CilO4sQ6Njyzx%LtZ)a7wr-0RBTAJAEq8#fzfI3{S{) zO>q0kD5W;|8)ObN1sw%N6$I;>{r2j0$`qXYhVRh#wdB7p|GvpJ+y?aZv;OkU9bf*& zzy~lBD6@?Nh#Q3P{jj}F0g&_?hu+XEi3VdRipD|Xp!v?d(`^cZ=%kS_+2h%ft~(QX zeyRM2XMW>ntS@#|-WHBU=Vo)ZS4=?gQ#W()(8){`q$7Db_Y&uUW_bU`*}n<$U+4N4 zi~sor?u{o|M4)2*kEJQ(_bz4_*QWd7E}Wh4kR2^(lucQ+W{g3qm@V(j7q9O6OS$=m z|E#?AUh4FgcN>l{v?&;KNj?}j;Uxj+m4kHSk4qnX=@UC1wn><1!gfGUu{9Z*R3`cB*bU&al?`Pc zLtYpXf8%h(y*wSx2_+j3U_UMaw~=hRs@DSU6H*Q!r%}jA72iXFZcG?_2_o%hFED~9 zmR$bpTiUb7+Fxr$>o*=veNKUDf-IAPuL-Qf?Vu)5k?!BoWZM_;LO?W01g-3?&b4t=0BFAQ+{TM+Wc3hy zAEX3Q2g&G(hkyPQ$<#TS^_d@p#b>b&y)Vs8?jUJn_7!Zo~&2u4!_uekO?NTNa%qHGKlV67MCwHAKyi}mXD zfaTDB`}rOZ)!CaC_`~W!;y?IyfA;s~LoW}P1vQY-JL3zQ=D$nwwS$hx`BH{nq^FM0 z3cO?yFOZt;mlsY+FS*VB!^#U_k;>kGVs;zQap(SC$)8?EhP4JN83DP(jSr6MJIF?U zQ--BL3{}wNjO#FQ%&nlKxFDEWC0{hD+n2scx`sskbZj`7@902Z{77PFLmBD>+5im~ zcKVb^$Z0qNj$H~Ugz7`44N-c|BjySU(%)9vt0E>BoC<0N^m3F@PaoT_GRhoq*xMBx zma5VH-ZRPLxNOVyx1K8@A*%*DG0TH0H8h|++@+Totg+nW`MNQi!e`2{_@NU zzx!#hp2?OL_=WpSWxL7h`-c~l1t%3Zm2-cJEDip;oY7D>`6C58T8QK7;*On;xoHn1 zvon2f*mrg}TmXD#15Lc#v`0|fLb4qx!v|%ZqTy5|@9?=?KP0yZPfuH*?&D1~^@y}e z#cfp5$pk>?JEcM!IE>zf&|0Yf?2pLpIF==o6a*@Sj^EFTlK`&o=W^ovZ;w_ zSng^lkSOj2*_-(`^!l|hH=jd}v!Y`neOvHcH#LS@AQkDY_AM7CbGg@KD<87|I)?(Y zXuN3(Y8IWD!7$#sZSx{@u_?@NJQ0oq8O;~piC{)YoYF6(E8-1_Ng z)9n{Lt{O%~85LI|E@=8Guixt6+OPFIV+)?W3`TUQkF`m4Lywr;53{Nz9^T=sVs&x9 z#575Z?3dQH2MkFiY_ZbMdrgq;vw2jaC2QfmWD%6WETkkYH`{NQD z6`rZI3HY}bHubr6A2en6NzY)GDZ8320a!rMTb5s9`O8UbXj#X{sX zTr4spzZjP+bEuAAAs=H&BO03RgL;;wJTgA`d5iK|VQ+GRj|e&~S%&j|{WgU1%Dz6< z(`}*N9ZUDaKXxk;Tw>!y^n9ydX4}OyDTwe8gC;wd?pQ-zGw&rOD&an|%riqbYOkJB zy0sbU>6!rUvSXWW(XF4>Z-IyB)pitYUMAeg+&66U;@OI5#FEIe%67#!KeUF6Qxf*Y z29SWiubjVxM_4lXw1$D_jv|#ss=!jvRgjTc`-fVrt@!tYg6zE)(0kxV!%_)uz_t%U zli>cU80N$o0skWqOQmccnMPIx#PLWM&1k zq#wajtZ`&fOf7zonHyRnA$8n|SCN7uLqwg74DtMmGRwMMK7cDO@9emWe9ypxaVi3p z7AI?>YY3tag8cxS_T<31yb}HPadhymwf$P}=vO5YH`0Da8Rqc5UXmi?lk4b?15DrB ze+<^=+0TlAx&pwdEI0L58qs%0g6kS=VK+H8glHm}uQ0*HIy-aqO4b04v0XpE=VAk< zNkLhk@=*+Jenwc&PsOYApBaejLu&_5qiGlde(QGT-!<3nrBO{3X;wA# zni$#@{3+eO#@Z(vieT@@ttQT*`0Qy#$KiShi!%AYL?oXUIf$yITHH)YJAqqi+U+I( z=DwMX%d)p_pNpqGts5W2KpaQt*+-e4-$)F`UVWmV+GilY%uQuUQ?Vn+NqS5TvQXgB zFPdfx|CXfC#0N!fxcVu&j7{lC{)|j>3@(@;y>LI6o((`ujyHW#avS$+@u{xl&+NC9 zE2x9#PJm>;VW>JJi2V3Pv|i5lEXW|uL&k!$amHAu9@oEB_(V2HJ6pnR&!gO_&TjE( zzE!Aqb=D`=Y5VjZ*q_C^%e|mB7>DF5=N*KbFF$D+wIi4j@P@j0(At+%*2mnmmi0*v zo*n^N6vjsQSml{BV5Hu@@HU_U8u1E26vaBqYyD+YuPFVBky*1^O;2WE^_gVFq^J?4 z1kshtI}#p29b=y87XQ|2As0cH^E}!c4!_`7Lpv7hu95*Fj=B};$(&q#qG);V{JAA$ zg+x6+!6OA{t4!jUX6cmC)%vKlm!;n3t0DtTXVPsLQ5+*wkycRsh|~x;@Zvo5u7`|z z-;I0bqFI+~k1;o~dP|d3Sy)e!=X|`Uz=f?o4y9~88CIOnE3fV&O9?{hKjAE-l~OG( zDRJr-T4q(0RMC?%*fknK-|=d9SwG8*>*6U?xoL^_1O0$2SCh|}bAee#u#kpfjl|BD zkZEtU5evh`bVbnAa3Yxz9lT1XbSgGFicZEDx()8C-kHuxy!krc%eK3rebaV}-5JMO zNDUZY$`whY$`T*e!alpFXF&97la`*vG&vQ2e~>IV3icR|C^_yEZHGyA?Gk{WIl66D zmh^AJcI6=L45nEpp5XIsUEkUF@E=Ij<<86n6#wTD-n|X}1=HEAQG2f8(wgL@7t$uWCJmoszn0gy_qy3XJ94RG(0^$kpwx)z$u0 zRC3MCX9HwoL~&q9^@(M<3R>_+zjO*UW!HU zF2WBEy5E#Ph{=z&bGmAd33Yn>>!cb8P!k8(9pai#mn0`Z5;rX6)30jL_P?{zf{_#f zjsbkK9IYx(M&|sLa-qS|{qNxEm^@P_K&|@zWMGuH)TUFoB$%%}U+iwAW#UjlbIxUEMKK-nwAs)SU5Q(yw&*}+b>keXKVn3CfhLT$C8Zx=!8)9C| zm_nww?IvOrwTTEGr+<6UhMFTGA>m#39~Xwh_V)P6lr3I_Fy6bTH!B6RY;qjzmAd9= z&@TC2M-oK`OZ>Ef>QcG$C0D@xpFy19(Xbz9GAC2<)5xru6e5|8ieF~j4fGM|vpfkfeOa{xMCf*?uzg>|YkTx2LyKNtHF3c-_0F;bsg*W zPV3`wxLu!IdO*8s{ijdRt443}Y|i(-fdg`Ww`)Hgz3iyDjSpl3)C4zgRhsZ}nn;nK zRn5OVM<70HXPocOaC0Nb28BoVHUD8EvU+3#$w)#Vs5ukid22x_>%|+8C=3Pn^+5K? zq zVFt9jU77g(LS9I(wzuH#rVxb98@!29SgE)&SK2k$ZOFDQ<@^fQo$?}`7$kZY7Q2Br zmeO&q3uME?Zugc|f~b017ej`F6Gr?W_=v)>h)rTN* zkY@WxsO&b;E!dO3*EJwLbO8V@BQbIU|Mfc3)cJp z;RIYm>$T0(KGF}$itVe|(fRXZE5bfvpnFh8Xe6jS$g{H8o-|@YHyYQ{LMK6N1pbG3;G{F3 z(wAg2ffV}U7&%|s#{Ax^QV+5LZ7Gd=*mtAhMWZOT$|7{I2rPLW^9v*ga;rt>S{AU> zQlJRfWQY(7L>G6fGfPAEg7Bjf5~+K8BdtDBb<#30K(*jkSfYB7&idLCNu&&MpLtWM zGdPJ{x$`amSCTCo`lkS8>l2I%%-^YOGI3wYtR(OGwqU0vy|sl(?^nk)(>(+6P*oR! z13`5cN+m(-Bvq{EuFtT6|HZMmO+=!k5X5Jz;%lk*D(l2ZGmkc3DSO(RzTF7ytdxFD z5=Q1jR;sz0T6f;q(sUYi&vhl`ofjy|y3ag21(Ni?zo?M2|B(HdXXl0Na> zaDQa8s5p@$hd0+{C|K+0TUTpTl%-sY6G11Ha#Cy_I2!Vh4eOBpniS=K6D`O?8d+S-A?$7l@&X$X~c{bWrxM{Zbej zwnP{rmkW9F&XL@CxY_Mj!=lj!E`iH0>~q@pNd?!I7+UwYV&8<5Lu99;C=u~bHcdmUDQdItr3QP;y z{o?m`<_E?mZb3S0xi>z^ufx8cYE?ycyxup#l^*q%TZX?6QzeagctUsA|C#BP&Ba@# z*34l<%HizYwNN|M>ZSVXy2q-L(jdQ+-&2v&Ma8b16@(1Q%q7uSKI^!d=Mu@%coryJ zpw-E!IHu6<_Hmk5DeH5Tko2eX$x6ds0-1+lqon&tZScsUQzy+r3D0(@uhh8lEgp5V!ADUhp*G8%R&%d13RIHJ(5bm_;F;ElcQEv*5Ho5!j zMJ{cL2}r;5w#pa7;ij7=pcS1-o$h&`p%pWb zxU)~9P64YTqrHdbJ2v4o7&`ATaZspmj^9^)HC`(@jc2@K+cl6WBV83ns8BTtHgW!} zuQR=c)z5fIl({@2AHSn|5@yr3UdV62b0G3zNwa3mc)@(^+UoQ9bkOMf=trV{_-$gK zls=0FOdn~WLw8g?>_LB8U46x?|55n*=AO1*T!jU@p^}|8X4ccQpu$4zgXK`QpSq); z5646?Wp7J4LcKFWArApKUzd0lH3j?`E_z-cvre)x_9!ZV3b>9c3zj>diW}!N#_mS^ zOn&87s#?7eU}XD9*DvVz;jP}(M{q$g_;(FUQ3z#N!`t;;o8k$S(u7=RlgO?xu#4qe zwt1&w7{m8$xvns`PWeKFz*6!x|VOCL=O81v5Y?j}{r`mgK{)_DN zK)Vvl?$ogv^oum&SM_PuMRs%F0{=}5y_|f0T5NIa<8*Jc<+!W&(b-FcP1q{edO^We zEl2sRK{DX}iB8xHCF$FA!?8@05@yMQw29#@%DXwA{?!5q+2A?@HGf*J!pDo<&yT_7 zkmhxzvQ_7>N#|-?k^rg~Ch{J41$SH$vuEzaE1dPKyuCK6FCy>}+7mTB=&BO2N@|&X zNJ5+fv}750Bx0sFeLF3Jf>^2Rt6u#|a=pkh-Al~@sGK2|f@}7{$##L0Kle1~^u3KZ zlWW*bs4IR;rKv|vb+auJPwO|RY|vSo@@;+TpKM!PI~YaqNIFA~pu;s{sJ(q{ML~Kn zd=G@Fwf~{cjG!+s^aCQKn;077beyjQrcy73z*VESI@9Mp&!hYwG3C>y9XN)|<-PQ` zr`A>wHk|rG~9GITN?O!S8NaTHr;7 zcnEy8gs>V6d+PULE;zr)K=XQ(l^Yh?)0<_y{eyW|(jgY<;I40sVlI>(8dq1ALkGEm8>0w>xTfVrLr zF{7l;S{i)OGmdtqvnbAe2oWZ?ysW_3x5XY4YfThu6Rkk9yXhzH{p2d51`^OCZsm23w9!@uO`@ZuXT--%6j(0UN zaNIhYooCY!=C2faE8;RVWO7?avFmFe>1fzbEVt|qQI-9C5yj(t-IeNU&(VDE)ks0E zV5(7nZ7N(>sR1KuzH>$Ay$uzIHsJezPH!#(vaIF35H;r&qx&If{IPymf3W{k?7e6Y zodr6?vu~Di>LOdW!cWLXFJ3|icSE5U^eeojkoe1Im+$#oTl{9}Qi-DSYdQ=zH4?}7 zw}ntb!@?WEiM?V|1If;FOw7+I`B~Vz76+0&ds$^}O9}72cDYa-AN!fiQf^26hu1RH zNung4{OU^a7*XO^ksp-OrYjlQRHev1CAQoxT$<^g^o2T8sqPB=X1h!BS!G4vX?KRi zZYjNha*GS%-XtU?x1ef39O>2eAO=OJ`1(R(P*Iy!h}0oN{$(dLW*PD3^cT8f4}*!C zVB8=f(tFv)e3y`#96wL$ITz`tL?S#2B8M9PLvG3Y1|XvF3H)aw4+l70P1XmmuS9(X z(`p4ehodfQm0S|8bR?}J)BF*w@ttMuywJ)IsL)hbrkd?DHOfnW*57BnIBQ zG4%*;nKiV`9q1TdUN`-#8={#{-p}h3Hc;my{SOO(VcJ*fEuSsDF98oVXYK^fMfwb^PNqe$tm(Rwdqi|G*x=U@wbW`V&=;uw>eK2W6 zit1vA1OaHQ4*J7wjqmtckUf&d)$3PYWwd<6CDlpKY$kjD?Y-3JgOJ}zfDfkAEIYE6TG7d3%C-Y`%a<+%5R2gQuM=zsw#1{vjW3O5H(X?8 zfUx~!_XKCswGTShrWr7LE$P_nK3{OdMUChiYS^cC${eJa6{6oKd)KcIxIDg32!4fR zm?L^itxs#U(%`utp=I>+m;j&P~t0PQM$Mj_LAw8wy-@Xc2jPy<2R63|su>x8`IxEj%PH zx8af(D0L1eajzGh@1q)}6bs>-U@o`0qgP+2*fmvbA)+?!WlEGdno&fR>rEUG1YAF% z%~bzqhI?>-*z&iEn<$Ud=#H%Yrk5TPLM#(_CKUM1$c+V#TBxRMqC{7k7jxLFTlx%= z{?sY^W=26)M@av-YByW3|Fr7KaCMr!>USysr);}(hq^T>|EF>*+8`&Y3iU=U#exI= zNatVohBXxa;*z@;mh)&)IL)dytIJL=W!ZYbk3qpaX4`NH1*Vw`nE(2MJLQ(Q2|6Ki zqb2z9b)Z&HUsj$?o7cMv?CZKW(9!vBudRiKgSkwPDU+&De=n4C7sZ#0-E}50c*;vJ zQ_J>RB}AOIsA{mXw4S9W2aY_D005?jPx);qV$6rH)`vG7DHY!&R!2OX8or9#kNuE> z#m6L7tJQK}&7P>GpB6Gd?syav&p_HZ@u0CX3BWlSoQ{a}^FD~S|HB&oy*(J3&Kb5_)|6;O9wW&KJz7ZC_VGC4ve40Wu6()Z~F87vttV~V=gv-85Ym* zH}k;$xs8A)xuApV*`Em5{fV2%b-W9M&M!M{gK0f%Gp|`bU$aFkdFOm12l;FHyv??6 z>?vi`=_t7&nNxnTwkPz5^+i)j&BEY3h+)E^5p)_#)N%biE}^i?!@PsS9>&age*G-0 zJrM}vPE#h|D^3%MZKa|$sCV}Ji`iEFyK{08{ODX>^MXu49)i!EUv7#>2ukZ0%(7j& z7go;XYHB>nu@m6#8k=j}_(~{hjLXSGw|I+R&FIo!LEQnkCgOhBZOkoXv$ukt4uP{o+6&&53@Mq z=px7YYE$hDt}k`^d2}D`S1s-|xocz!9Ze#7f|ENWTknfWzyV_U3BkN%Bca_aRF#l4>x;@FN&hfv;4_X%jJR^*M2QnTo*%(JHje>!rENSA<}>~!SEXECnvxl$ z_(B*~s?whN7a#egg6c9_;{eet1+&iIYnMjFrZo*s4k*8+#f9uXIswF--^Y=_F`v+9 zW!qH7*OPD+_h+M*w)m$IC*zw!?%&F38b`Q<_YVQ|f`w%J5@o`zKX3VY&Kx3p=y9+w z*)FoEZb~F~_exaycK-zTgB(qIb%k5#(jOY=GeN+c?a@*L9SU0h0dv*Ai@c$h+r~GX zx&+CX-maFMU(L(0j;soO4Uqfrh}LM`Ba4KxwnB@yE5Z?JT5OqSc*J9`8F1>-U%TLA?j>|s{6=`u`oOj#mOGJU2(Dpn-v0JILwY} zGsgvgSEer>@vMt4ci zVF4Dd620AymMszXt=G|j&cW`ZkW4TBV@@y~j9NYLZgoSmv`;1L*#u4oh>GOMsI0Py zTe|p%K3Or$ZSsG&FAT{|II?VOFpZ2-J@igMo`FO_KEPaGnttBar8w1{DYi2emGjf? zA%(tK`N~7L{taaM=~9)vekFOGH1)G14aQNG?nlDTmhYUSB#A+$9~3& zeNMZ-0mA?m$<`^~_bk9nUm8d%@zl3EeZ@(-oFt`~LZG!idni#Sr3_JME?9S`6|9s( z+(%JFdgw6L84aoSj~FU>PpUBY>lvUY~;M?Q5S}LK_ zhXQM@>&7kQ)Nll}t~#Q2WwBaWh25L@Xw=UTO9|GNkaK| zu>#(eFf3ja|8c;CAj43aX~Fa%{nyt8;8x1)Hw9de`Eg{=Z)IWZR|2 zxQk^85W?c^>_;!c9L6w}iz2DaqgU4|eZ#^%Y4^w&z7(@V?)~Ispp*0jM~!?}7wenM z0{wioB$W#f>onR_Hjc^(Uo=T~is$#bduX|}pb+TPV zA#`~Z8vZ0FJ}7mGJmgt<--4j~*=>P#r;?fp(o;(Cd!!l2-rt`-`+xy7MNxO}IMnz_ zFza*MyBDyC-ksI2wGFt#AJfuOYL*ad59GYTS7=I*Q`* zraKV_{|PeSO6`l0NM}9UVmtI%W$+4b@Iur+aLa)w#QZ8}lCx`p9r(_E_?G*`QLd;CnmD=MPt-<~=ew`AdkJr8CVx)+BA;(Y_49yhiwJ^D!!eX72H__}?v%{@Ngp*{kdyk?H!L^1s`+=fDnGln{oKTzo&X}H03(gE;eGD6rP=2ag=L(&xd8;6jPYJ^ItaL1XeNM ztn9dY<|jhg4MaZ?8}#(|ce)xsLtW;<;l9q#0| zy8e(jlCO~HmR6Ipf}%|g>=Aw+r6TL7Qvo7!6@0fSRicxBFwmG!dYI_$f!hm0 zWfqrWAPW%8o(5l7Z;I@J8w-s2iHkU_nv5UB#(vGW%7C;3PvM5;wV4ED{u-4pV5x;s zm`Cw5dyC6HI{O|v+J$VkO{`}&FIF3@i(!Yw;mxXD%>i-Nq2Aw!zB#=Kw4CcWi}cc| zFB!XjncZi0jz*72QfK)oiljl8b9Ply%cyq7SrvjLk0G7(_+gCxaEn|mUAimu$*r!_Bjy1C8e9Kwpb~5Z4C1X!{4f6fz!piZAEN|enWag;;rusor$m0%T$Ei zR-^fTCUo8>I^~6jab8vM)&1e+xC`+~SY|s!^H(+&#gRX{eDVO|*5lNF*{5P^l)_o7 zh#5Z$c#~UiZIS`me1t5mGF(sz-D8_rJF^1UzS;Fn-)*^Jj4FoNKC?H-Zbb(FlL~;M zdCz)4rx8TE2uwNI&e!$6{uuHf!8JR>qzBDaKD($DTesHX zB$99oY_AhxB%l4!lDMxVX<1~wipPLYNPeu%Hh!8!#9&O;Le5&^AW@b4Tb1_G>CbkL zPjZd^u`b8y49|k%@Rlpye`d01ANHZx$%!(tPfwbxjQiPqzA*)__lZbPY4aAJGl3~m z-W-oadJ5d^-*9O^i;ERsv!^vV6>64Dhk6O*_hwOxCxqNW8Q9pDM;Um?8-OiRtIBYRKf@jr)z~dpQlo z)cMVpOh21{FTPD-Gx3g1bINBc62g2n&Ny}{+jz&@Y@#)=r&!{xQUjPb{S|TL9pJ)!%fZ>dQ5a4hX_H++*@@}ws&RFWTnK4t&uH|~dN@83%q5XK^?r&O+ALV2KZ z)y(4WYz)iLYEB@K+mJ>3=feQmy=Fv$l6D4eQQT21xArspE`OKE(#Xru>31yNvcmea1;HW@ zcjQKQc6R%%o*QJmkNxm*=}sP<@t^#Q*)ej5KpW#gj1dxni&8;6=&ote{M0zLZB zO-1)>clU|&G}itTH`dAB+}ym`c{F2{LDUZY^P_eq&)w~}^XkI(t~LEfT-qhe;qYEK zrn?{2ZP?A4U@f;r4RvE(zpa9g<~?2n`S{g*JiOIY2Q5$`SPlGxQso`b5r?$Hk9_4Y z_?{1AzeW_4FF)Tp>Gkg!$Muu?>wGhdtKg~&|G(y*mHQkUN_z(O2ysK>NCkW@-GQn9W?e853 z^7&Hw2Ot3l?&QZujvw^hw-uy!`XAFgrTwfHPW)y*p(WXOH~TuQa@%#0nC=iws{BUt z;sze&8T(T!TIn+gMJD53Fav>T-R3;FJ+p^PCj|B-FE%Q!$?+}66KrbS9-Q79qqD@BDHa+nJw)<0E|?9 zF}Mn`;;i3ht$@B+*;xG&)lIods1p_K6m_m0uWF;4;T*Uf5pY|J>@-z<$$(=B5d9Wt z72ov0b#4SAsF17Cw|GkvO=X)IMw~96j7NI_RBVC2ma3PB3ZA;#+Z(FLGULwAqylv1 z-CAXaD#c&NQy);T5m1RK zZ+3G}$(iwbmH_1uqN#seQ}EzaGSG?p1!%aPnl&V=tr^Z2jakFLKx ziX^;EmClG?N?4D7)Z`Rr?s=vbgYxA(`M>4G1Nz#SzwnkciN66y+)WU@x zI)+?_YSvPXrD6_~X!Ss=C-hypfP<}^;|M$p(*H@D(^hrK#}ESk1oJM0T2eUKacSVF+(b zFs`pB1$*p-{Pg&M&Gblxlcdmv4)TqKoVfLLVI}x+;y8X>Oi%h{<#aM3R$t4 z7&YN*=<+?xT;D?PK$HWB%h7?9f0Md2FzpH5xnY54j+(HWNfps{Jpai>QIqf_6V$PV zXa-+hMrEc{Mrix2io}L?odnH{V~V{ME@{RH-m{WM5HTn?kV8{D>Fp)F0m{UOR1x=< zSg%rwQF2qM(UK^b+~O(V3Lr)zJLIfDcNJf3P3PXgihl|NJ3>SAr{Omg?D_{@hyy4;>y-8mgDX-SO9&v7kpGab6cgDtGHE%1Vvm4@Rw zg@fCGgIMeWp2wfR825>1+{94AL{AlLI!>}(A$*VGX;&Q{HD2MzM^X{(lTY4zuYW?t z#Coa|L2J0LHk=vjPuod?r>=ZgwsAtM(JCI1#6g|Po+btsE_*=?(lc=H9-h%Bz7%mk z6Se*t?#tPR*wQFCNur_xP)X96h$T)Pr5;WWC&wOnquf?5&88omNSA$nl=Bwol-jnG zo49?csnk!7ZungERD5SowDZ?^&ojF$pZ9tv*G$I^cDB9sj-i?yf<&Q@KWrdrp`qYv ziah_Nmp3^VH9xD)7=RZsq8qNVHl|I*5aN3t(+80>uNOUQIu1Oe&Ea6V&Q4~AEsgH! zj-II|w?7D;al&`8CYKhLRQN$HP9*twTPHl*)jH|urd=U%f?xWsdMCF5%X;OS)}A=| zGy*4?SYQM!1ZixxNSEBKt+02aZ=UedJd2s-v9oZ(pe@n;@&lTKH(s7$krUG@&b3uU zbZ2RzeWiCdl`+fbn8Q0`g4pJJHJbLw22DCl7$|L%#g2G%lK41Q1i$D0mDsU@ZvPKK zr+gOBdS~_no)wIYKiQBn$j;TFlNX@^W1(Q!J&jECvd{GxFm;-1NZh7WH@9b!UGP~w zNzTNO-N)?_aRHF;!JB#|(b=wB=(Pk2@F}y7rKGo;C+7RaD z$F(D=ICKyo`d2mt%R=^;p4cZM3kD;q$0E)(_SqOu=c_jv7*8#0_Rq|=;dg6FaZcun zrgUnS;Y4VmZyfsqqYAT;yAO>q6+H=Pv}0sBQ@@t@^_#4-uz3Gc8OkTGua~7Rn7!u| z*r*;zUEeP-O?yH?Aig8VfAymh%1bnSCc1G^lwp_3c<1yRs`(f8vB8vH*L1E*{I)$6 zBULlQwdn5HHFmixHRl|tmk;LlkNV2*!i)b|>Q@KPQc%akxen{>?lokI2ke3$ob@8+ zY#|ns(j3NjU>@2&a#2`)m{`cv^nw2mLz_j(q*phWo8f2{vUDXHOakn039e(aD2$rJ zX!#)%WFu<`ofe$%eiVtD^D_S+sv5lpw|ldKv#T<{;{Bo^a( zJ-eL-!$OuZl8BZt<>pa;XHE=ihk~YKXU5iXwPDLOP;sM|Dsp-s+9o|VKea3L-;r*a z@xukW^%_jhey+OG^#2N6o9?KRQ_|dST~(AujlR`|!o4qG^&jYeFpDzWE?x9QI)!E< zk%QN&3O5|;;Zd_A{KXhV7!X)CGOWaMf}n>?@KG0R+R-hEeoTvtz1oPRn$#ghUhIzR z$H%fM+?7lq%q8SHl%UqRQw9y+hqR2LobZS_k@}mp#D7EnMdCX^%Ks@;QOy8_WgAm`cCaeSPEV{-9ixzh3j_tGM z>cDold*L|s(%-DB<*I$`%OaPUtqx+5kx@&t_4JVfH=QF?Yeo-mhef~3%}bp}mE=l9 z;V+MDcSiB$o`I__ZG&L5K=~zU-j--c!-{0!UGKY~Tb;kKXrW}BRCZH=0P8r6A(8ox zk!SvlWf-OBEDRMRka4s(#Z>GHZMj1GVTg)2b{TRj&;Qf`#$4hUj?yXtjE8!kt9WU( z1Y2+V70FOUTTTvGa!4z3z4~git^2=VXZ8F9`9}A1K)%waE4OrR+qvwd?wJ1GWjG** zohQ<9eh^ZP?0sa!U1rnpl;Pxtioc6p?TOHsGL5=YmbuV-hhNR_)Ftn~=Q}dhI7-av z6eQXXCL(=vz6Ma-sxcCmkDlFHaj9xV2RaDldNA#tvs4KlcV0 zsN6`kSqV$it4JBgEJ-)w1EX!zpF6dsVsHau;$2}Y)`7CIhvjEVN=iZ&jWL>Rk*(5x zn?HIsxPA*5k!N|RW^kST6xrh3lS2tXsF%svqIL?aA5HrQ(#O_r!5(Iu=8n=HkUQ-#@K@6?UreV^Y0$0x z3~UO7J?Be^QYu3aYpi(uxH*o$H!TP$k9@CrK*fLB#6xwAG?`J2@`Ly#Zp0q}7^eT9G2yyUPy1M;>ruNq`9~-@(tsf2%-8 z@PMvIG?`I0VW0Kgu%H%)#6z^E^4WxBLaDfNCpgNwLwqNi1xyETF?r}n5dw}MTSMHDI0$%;MBr|aaU+hEPutGnn85abgbG%lrsVtzevse%8zXzsP#)s3^a%Yk24` zLApdhIz(w0kQNC+x*McLI)?6UrIAv)L1KoGPU!~ejsb?8c}IWG^M2pAJ{D`%V*X&= z_jRsw&UN0n3ZhV z+g}!oX@1s>&Ol}URPpYX_u|-jb}dh8mB6l&@B)+UjeH!l>jJVx^t^MEyF8P-v22y| z?|*F!cG5y>sA73aq)L>MryYj^$UD|_@&$^UtmiCugOx8^0}Sz z5mMOqaQT=C^be2)o)eI;zSB1c;EcNHR$7+Y4M8A*z->wH?~AW&0E$Rv5)%^>iMsri zh>P;^sY6dpzIkB=ftes5Wx9T7l}|^7{e^=5`dLJN!~_^P@m|Si=p@YhYOWTz$^|kj zC4Zf&)l6o7rt}1f5nT1!9Pvs_Wqa^020zO;=`b!eu8v5B zGUeT4hR9ZGE8pMU>DE~)eZ&lGklk=j9K^>qLb??A?H6bKMrsg6keujX1`Eyr+1FdC zKM;Y5iWsgMpMW{GEeSeda-{IZd-`QOx+<1O_pN>&)3V|-2 z41GDwN6GIb&!~JuBrkI!^;=GK#WAoNCKwfqvk6~Omd9hJxRriT&n(c@K5`q^Z z4$R7_;ejoACYY}-p>cAQNDMYXgXRLiP1C1kMjKSxh@;n)P4p?RVbg5ijZ}D6dr$7Z z3p7$x;o6EnIvPS)SZL+&Rn15H}K zc+1L(zP!`Jca!#5W#u@}`tZJ@Ae~AqY|s_$F3*t_>S*VaMZT4sjc*U$6oIK13jp-r zFM`DFQ7|N;C~1d=-U}83Ey-*nf9K(SRowboR#bpH0PllAaM(Y z5I0w;W?!U zIu67NH24G?ng7Sj?taUu&fav@9LqojcB@FkzL>e6ahyfrx(mj+0ERM0zUgJ~|JNOU z|41*~!suTP8*f&Cd&9Gq;VKYT<3+g-24CwdoQ4;LWsx0qi!G>br81`una!3raE!yA zc4z5RyookqAEMyaESXcHd{3%NNfftFj!VAcmps9%#S{0>k;!K zwHQ}P)Rh=lUb!l-79sXI4O@LWanESzt*d+epDeW97by!p{mz4IAA`)52+MdB*K!3;ehf$(y}N9#&QvGDQEvs4VdG96?QM5op4zK=?{bk z3B2>Z6C5+S`@D1lFf^N6!O#8(Tb?4D`p26#z5+J43kg_34V6#V+#2Q4Xwe+-{djfy zh`e^!uxN1~dd0w`XPWC&%X^pCPY)bPdURYBaV_abf5y6oY}X^XV}YN3rT@jb-%>z4 z&_KmZK!EEQ&%qLt0lZqG7vSwNc1$tjs7DjQW}l!-qvIXdLGq+p_2E%P5;J61#s?Fr z=)4tVR*+uXR|n!I)8#MOFL43^gS3SM!s6V zy{DgW+zuEWGHN5-q31K4U7Y0eBAfZ!tP2XzSM(=3e`ZDM)gSii zEl2~kAc6jC0HNfg(glVar1?w@4PR7&sb5OauWO0VV1Z$(d7G%Gg*DWbvno}OZd+^ z3psa#*}i8(i{GN(Pd=yd&ievczRI`v_G4IIj;b+2(njd>V+S53jgF_siReR3eoWbQ zxI0(UcW5`&dM-v1JW~f2+9zoST~XuRX$--O3C}tRtm&}VGGCERxVRFGsdQMV46uX} zj}}n_gWcldkI0&@beJM0-N^3GfDVidtBdl6@v0 zQ;voa$IocF zL00R!P1a`Qo4butU+*2-zLief+zc7-) zx>H#oIc$NwWzCJpAAf^IgFaSwFOjDSSNQgCkup4a6yvUXP zE$HTWT}b~)j*YhR#Sv3tdTOI|km^)J^ly{0Y=v}eX0eO}B2&zix|hGKv0m{Lv_ARr zq)u7s=U>pI6#XS`T|=SNQH(*kzrwlzL~ga!A=R&WpwVFKcbuTb`;2wJ9R^fYbX7ex zF!%5%aSgB2Tez*pY+ud<{d2CRP{oBiSlIMkz_CEhs@zPSe_NWbRrxkglJftQ0jh$4 z-iPy;->?1JO}z^MzRzT27DF{?G_EbeV;^8<-n$RGDXjR+JrA(aNcG`(3iMs54q@O; zDni#Ucrp^@tj2M?PlW=+d6w!aNkg~HTgtUI+b1bJ*z{!_X2iX9{?esk(3{Ss$n%6` zDK`Piu!iBaEQZK*gw-9#ueL@xa_#C)7mveSJFk!gc>MY45VIj)pW3=L_5*2L{mVD_ z^Gz=%)`k}gD&oWnB=mm`rT?!I(YV^-MLT|dd^r4(aTNAAq4qt^H~8x(0ikKIC+#(9c-IuGHJfJ>DtYWoi?C2 zQ*}n<%&Ml~rOwutDd$x>wh_clB8Z}joUh=w*IxBArx}5VmCnb(cyC*BiihQMYyh6~ zFyP|#H(~HYN{1gpSEJd=k+!fx!rYN|U893_Ym=Gj!3Z-%ZD`xb=@b2KC`7}^w`sGmWHT&dqrgy1$-UzVP4+&;X+jJ_B# z$zoPo8E<1ua3}(6o02IhpHO@`cx0D^|y;nq22;G)-DN<}Ol1U72<+Vps%o0B(Nd zguXIG;lYG(w&Uj+VF+_Ip$~ky1-Q?? zcYPqJx7^|=yffpN(Rl0{RCl#IG}~BifLr51fPd$YAXBW&#j40nXhS>5b5Ta0C6~Df zP$UW;hnuzFKhtZ2e|TRt=<$I1Sd9DZM@>@&D&LCnoA`X!) z%V+`=x)oed^5E3X(-UFB%9mil1$iZmFHYvRQ5B6rx+@*}8l_ehQ9eIiQ}b%w<9?Uj zChc+#rtVq}@Jq0(|Nb@v+$ctY%7-?*yDgok0Ox8>*Ed+z0>VA02`~tTemc_*%-A0k zpF;;qD@jcLxHK*|eq|lTc_#XG91T(Sk@(FAGx7ErKPrkXRzz|WJL4PfzK%XJtItCwVrHi8811Z2aN9fCad)$%iayNXQ1~03kSMK>G>Fcr(w1YW;ZgtE z@7F<9g(}sy&)2uD8?1TO3bJCU@cGgKp&Z<3INx(=W^kri!GP4d+Batx7Pd_KHDbH9 z)HD4f`qn+TQdF&ZBYx)v10Uvx@8#118q;&X19oXnnr1E7diDFMAkKl_KaeMjMRP!= zikJVgA5Njok;wMh=;ExPMKpU$Io9!G*~OQOLr#buafczJ7*It&e?T+;fnpT@3>rg4 z^1yP7Yr}W*)?bR>Inp4p#Ews;^PzPC&8~>v@7tT6mqE2ngL9gaRZ>~zfC}~pM*s0W zJ2LaiP1I$415T#t>v0HDE_ z`?#^-M89&%qekLvRIrFdr3R@FfLB#jiJAeSb?&=53QvNbhQBJ&c69d;3_$zkQubDNIkbLL4V`B`~kk?Lh>mudh0P@ z30}7jhx@c){YlsI;dD~^#>@W-HCNuaPT(34--Y3kWqnHD}9OU_EtupQUZpZGGJfo9fntxAD7vq>1oDfL z?XBiz>}#l>yZDPdzl&A7uTID8Ig{(xdVrsSbzhtsXS5Gb8|RD<)iU`Ca>1(%LD%EA zZ=KU&NDSkp<6^_ap6`g7BsKBGh2kgpx!gHQVJG}cg5TI$r}X3)`*}|QntdZR^7!u1 zFe$G`3~47}A{R14W^s9WOpfR3mr*#>D>jwRm!ND))xlPM=LDA=>Zg^JRjEpQ0f~U=!z*S_|D+3(kF;m$ zPr3AWcpDog*TayJ)N|=hyf{@rS{x7$aIPZ1_zRT@08+U{GJT>uOlFWU(YsvnFGB4b z1OykB`xh^*1@JDsJv=?3ms4uazKBPd^X81qh1-?yAk!Gx(}rztVY|7| zlC=Jhgf(n(I;h026uB3qRyg-(U1*9%Kt-(8TPcyIHk~u4A|3%|>(roE3q*AuIA`K# zc})oG)8!0T`_9!6H{})vp_PDA@`E4mcC-glBNMb0@8t~n`gu2kH;kStlG+OZ^Vj{B zsh8S(cM}@xmUYbABa7o^ptjRSdf*BTHSYsNLWe*?MmZZ4-aKZMTtfw6d1h&*B{j_$ z863%WfX~4pTGj&i8v0Jx((65~72_Dz7TwdNns7!@!k1E+C}iqnhV#b63Ut`Mx~Moq zxi#CYt<8sz-+ufoKb#dQRrOrs_72D!f6P7+b^np;^WBG>1@JCG$)d=gw^l@fj< zpnU~>Jxh%F3u@9o^z~%-DEA&+3kx%>+YQQ6q$$_AIjn)!7g>S%F}^`T(d$G6L^GGa zvj(-G3+*G+p-*(HO#KmNbMd%|P5+$;jkA!ONj|H+1(!zqrQJwE0Q8wRMfMwTDda)~nasdVp6Uo_9S`0dn3a z7MsxfQpVrl&3O)m>xsqy;&Yf%b7QEmT8O?^3GlZ^it4iOVfaK5Y(k(*NYN`iT$&xD z11375`H{M3q$;j=aJ&lTb?m;NK$ga5u27u4&xKH>Q6xZButZ9@?7v--OCfU?5w|m?;C5>t%ADSaNzoS0z@Uc5#bq*8y zJ4ys?9`C01_3Fs4mVKSdtRK6odsPmx>^`{sQ`GqJz1cksae39XvT$}rgjK)s1@`Bg z$MOq&tn^4i(G(MP?Itlg->LwDu|tLJVdXZPL0`qXm3T2@)=)kJsZ8=oANTZ($_wctMg36{tzB6cuw(+m~e__btK%< zXi-*8H;H|gYHEKOB*jRKCWY6sW~|nO&c1}>RhAFm&osIrK|*?SI@&;Q$t|~|y3QEu>yPb;ZVnp&Zn<)gQ9<60h+K8> zI~_zcsW-nH&zUw_pwzr1`(yrYISS2=Fj(ZPq=`k;LwWQT*sfH#?!NkMB$$Jb_QNv- z|DU|HB+xj4r2HA3h0`K8%=1w~2Xvg*1`A>P>4iI{yp~X)zP2iKfMi2Z z>iT+6mZPs6PFKv#=#-n-&tXnpgN(nKvyhcQ= zUz_W^B`XjnFpb^n9{{DzP3}Gqo&RM2bToK)?S(RF8fnZ3VN%0G z%m-b>Qi<{!nK|TkpOYlCh-!9U!!Ow&vC@ABfd% z*{6FiV2Kx)fTGp~G2?^n;4+kWXe_eO)Q>2= z7|!W4Tf7r9L_YkMnE0|}m*xw>;TDkjPSl(hTgg|mEiMH`Wea%uPMrl>C?gX*D>_ay zM#PpWhcDxeLJqYo3p|hLfecQ#bC!Xyj*Aj=P|19<;59nL*`7cxW73`u{_#J-DwhAdW3gHmA~$fxGTCc`H>$LO zg%FVXlZu2t`5^CF0H%cV%GNjkJN7&A+iocA*)449Xdgm6kxD-Se6vnNFr6LWfS zcPv%kEL*kue3L7CbA3RXvMh1H7tD1UfSN0g7k@*8FRQV5K)uJp2b0t_oATqJA%M$` z4~V-6(7IxbG_h;6b>e(Pt+=NU-q9!P61Lz8(Q(Ap>3H9zAgYi7o$IP#F!!)+4m!_8$%oZL64oQJ zINsU5|2RAS3Q}1VsxqN8>GNaJnER|Ri$W=g*2m&zd<0&r2U9aP$1CZ|p4!+0cbil< zSven_!F*m!Dd^|e&l2PUQ0g&jV;{m`6`HVdyjG?g5Dm; z;sh8^fCC4_3Qh3Fph7vNFpsN4^p!NSw+ji?T!aK%@$Ove@+m3c) ztE%~N!^Do?(khAIO38)B;#k0oig`MoObpEvTR7+h%Q1_hM6r=w&R(#1&je4Sx@w`f z#ik8xF)P@7yd}n?sFS5pT9Id|XEBfFg*MV$Yi12%us+Q;=}^o7psh9C0gETCJ=oem zss6(8e_`G4PfmQD@)ffsEwu(mlzmD%?Rwd#GI(A9Iww0cEBE>L;OR}>@SdVcvR)FM`@cYJPl0pqz7>s zDZQg`j<#vhGxUkov5spTP?7QU%-W0lD3Xgt8{)`cEb1f$ZUlH3Xj(!1QVMYAgUD4V zs=T#qFk91k^}V_JQa2*a{qhD;NytkE>U{BTuSx#;n zF=!s+qNDNykOR<_DgP1jTl^1o%pK9b-J|&yuv+y}H@H!%m+77e_nHFp&MkE9`M%0= z=qls^B+2y1D ze~Vbb&f+8Ur6iG&P+(`L9>|nwEo1+;*~t|I5%?ARvOC+igRmM?+Z=W9X#v~o^3wY5 zf3uK#Qt1n!xv27t>tiE9sxX|i#^s5_cCpl|&-X8Dg|9Vvvq)|$iVnbO(@p9U9gbWW zZj;OXmcyK!$yOf=`4y2P``_^Pyn|~F#RT7_QDF^fJU%`CsxS!J6J-#wYjQv!M&`NY|;WNaq;sLCSkLgfsIM#Iz38Z-p9PJZBf1bSrX_&f6N&i6PQB-F_(r6w0b1oV9}-o0PnSVelZ-FU@}jfP6G{%;LKn*q6|Snc zXLy<5Z`o(7jD{zMd!RqEB31QaoSS_QvqwDR<9)~_|k z0K>1UEyAD7smhD5nCg1cp0#pTw_jk~?(>touJTN{;f(m$Z|#snOl(&lpW-vfB9NP# zI?9TLqBc<%5Ag;0>K(lDpfKR`>+Xsqzb(BI;repTr0u4%=7qZQ_El5<+Ua-})?3MgLwpp!!y z@wE;Q-3bvA4F5F%Qk?*^@&@Wx&RTLsqGOM|W)!}tZqz=Utwf4x3=Cpq^ujUHEJpIR z%U>rstqBwi87km26tn?F?mX$49INTNBF(Ax=*#FZ``gJ{5k~JPBi~%|B3JjrBotGc zbu0_@(wtOZ=(ybTmBb$9PWa7bCpa&vPN zZ!$0*W0Fl2k}YI~nl`Hm4#eP9BQFs28$3*i_X$C{xkzr@(_{^hM8nI-TFQC4zyBV& ziwLQSpQCqlbjae9hP-4HejZ^mJ2e$jdf5J2eM^Fv8U@{gupUN1_jkKA_3yTYn|-3= zn|uyQ@P-LukfZXNF|~#Vt*>G&N4au$VhIn}zYx-B&}kxZ5oFarv{;2Q52!N>MSU7G zJzJQ{Br#=mA!jujk%xTAENf3dy+<=Z1!5RCy$pAPD(K!C_h$dfHD)|q;uo>iF*7IG z%dRas@B*&$l!M2;woQl*Otx3rra2Kfaj!%==>>aaWsR+_&T?_x-u|H_uLLvY^nIQm zG9;^{d-6Hk2iP>5+fyW{kGiZbor~sRQf(gJaFjVUuE2Cytmxb$_n?(E&Q61}<^UBk zZiA`7>bcy=0mZ39?f2d!h?ti+#My&ts<*piJ8ibN(jP!;c#Qf&5$*lvcrDQTM*T`{ zBK19l$ZZGkso^7#j`BHXV-obS2u%WclK+`+I0pY)R{cX5a6E7W-i@BEG7x6t(?$($ zA7Je)5VX*@OeU9ULCj;7VNFQ^tCZ~bosPcoj`!drqLvI&OSa@JSrLZk+~CXCnZhVp zXjo{aW@A00fPly-Dwp;SC;O<{o`@i55HAV?fDk>vn2(|A#GdPRjK)4Xz8S0PSJCo9 zA6z6mJ_|Y1x`o)2ZhJGFaho>zTeGv~XyMN-UinDW$V9EmKe0O5H*=BvgzYO) z2x6{7Fg|}X*3o{i@+oX9FFO^~^(7!rxP0A9iV~YIoi0D>#`o%jY@SMyB;N;HUzRs5 zSV{I^A|SC@(z6%+Z0bU~sfi%D+eyIRcp=k_AJ7n49|+bV;fFFqO% zW&Y}REGkaP?p6e)c*S(GhVPKfCW9Nj_3qd8>LG)HH*M`#>%mJCezBovB%ZAn&gf3f z)t(qWZg-1MQ&@R=j<$9l%Ty-Mg@SM(U{i7OfUOk+n>dO&J&gkzfTaClc&MM)=@sfa z)%x3exXRO=hLtOwk|}XI?VOm@M$Mwl)ca?C387g*oP7J|8e1Y%r27cMSS-j2WkM_^ zVXx(LVF)$ukBW}TNaV_%dcymJLJFe~jV=Br&xUqFWGhd12#h^>t>lst#K_!-A$=Vk zjGZi6D&i=6WqjTaik-Fz;+G~R0%T^?7F0OAGG*-(_(A#|$NATm5JMDy_EZ6XEM`tq zVZZ9wrmeBX-`v^*{Om7VK2gYwp_g23YyQ7zBxeHx*ILM%G*-Dujak!DQToMJtelz& zDZ2s1ms6u7cT%y{m*T+-VJj3jug{*EI>tbo^Ey`TtJUNV{Fag-np~5{XtdF;Bt-oy z6kjqrO-I<>7EkUtr|fbG%g5w~7TKp8H$U2-oa;mtN$9Uy zBXyl8AA^EetE+gDT#F_LFY_8nsC#UcCl{;4EBDTAGQa5^-cyqzlS3M-MiT4A;&0$~*cJ72SQ{HC6kxx7{RwQ2&($PMjv~0g^8;@c&#L~nO6|c#;N*3-5QtYc!WPw-4^v`(3 zB=esTV90HmU~M(OB#Aq^(D7-)y{%?aAUUu8?S%1M>HS+s`~AnzL077#eN%&bzRP{R zS_G+IhqKVo=buIqSCsKW+D$!daPB68Lm_kMb7YE}11POqR{A^83ZVwR$IWxA0|`y8 z*LQj8p|nJXk*<@HZkgM(AD5l0k(1v26kYs-I*4WG=zdjOD1v;Nd#YCKNsaFo)|Bw+ zRrB!`4FspxGftDA)=mHa$<~t1X_38N{myY?HFQDDReY|P1~)+$+8s)WIrS=y*6gY+ zvYfPe93B8YDh5j6nOu#43-wd)43kd^w-tgP!;qrlsYkhcw|xX^vdL+wmP{C#oG|Yv!d1CH7Tzp=N7#3)AEX40z7TS)j zR2<_mRjWS96#;UTDr|ju!k)E}*2*vZvV*tJ-B&5!>MO{+EPqytxi7hmc=JzL&VdN(hPVZnNYSn3q`62j~+OmJfAAx zIlhyYz8WGHIX&$MK%O7e=7Sn1_|`MRwt$TLau?gjXZNlIpC_Ek-3&hnwIBQl$Cb8n zuw~b`*i3uXSVxb6+(tVD0kjr4liw-lOtCyMZ00TgB)l;aqZ)`zsg3u#xHG7@o0x9LnFyfBJSecH^sfH+f^`MFw#j0CwYJ$iO1 z8nl()Fnj?6L`~Yb(!tw3rp=r2J93(V1{o#ZuA=)aGn{2j?Qm#d0;Yeib#xXi&Vz0+FIiq%n`UmtH ztL1N~JekV6C!}%u^mK_}mPHnr&})PItmYbLEMQ^|AijlZo{>a7oO)c@dCWL7Ap$%C zDQ}6|DZdWU-V%in|ITJHO|${THH6C*8Ks;?O|qk@zwe;FRX`h3Pj?dFHL`un@j?8X zwcg!$UBH{$2YC5_CW{1TLq_3iEl_3A^k`2TpR`(D4`ogp#{s|KD#!Qm@{){|ML5En znsjq#{JPDLZ8kHZS&!)vzYpysAu~T{cS5*iR+VFsqfTd1Z_==+=-??5Dk2Fwdb@>~ z5=SF#8R>_<8WX__$7<89yVL%n+2yiX_AUO7mUYw&g!(;J?i5Qsg;hl(g5IZW(V>1c z+ZQyu-ZYeCj`(WBXZmn+{-dK*)+orE!P;E&3Xa>e!DJRBFB^<3>Nup)vtk92 z-yKA~$X%xZ-^g7CbR#rCbngc0j@A)()d+n(#$ip!;qjpiU+$|H`oWiG?*dz47Qtbw zPJ`P9e8&7dXUnzMVs0Q`qu{|J6jrwpqgh*+_q&f{&R7;~2QSn*=e!@waWAr+!CAog zbIebxZ>kgX3RuW>C)4~fT9&DwA?R*M<4lXb--*$tTwk8@_Z{~0FIe#uxZ>~AkGyAn zYx(f%Ow7IoIp1F>f7ZOx6D?H!XAj%v~&*68)sA>vdV5c*-kUNCqWjaV?7(97= zT8=0j?{muJ5-44I{rPF1+r^_c;(J|lVg0;e>fryZkzv9E@EaGA{x)uuj?gZVV+@%X zP%WaJH(BIqY$D3~@hfqX?o%~{f)6=Az?L!VmEDsFIuG3@q}H>raZLQpSMOeiN_Xq( zRvyG=e?lqphwTr@7JyBFri2-o`7EF90L-0$0i*dqP6;p!6fbVnwx6xA8$wOA0AO2i zzM{hX`SWKBk}%fm^bVBPa|xxBb?zSXdlih}iTnIqWXM)}YW3kH*V4m?9!B!81! zj+Gm1m=#==&2)q!izCY;92mXoY-#BhduPo3*;$MI8YGPX{$>W(e zp|Mv|4#TzE2WsA*Z`-rH=6v-#*Mmu-d`*W-!g;b~QR#bDaNDu_QnI)4O4n)W-%QEL zgw)jYiOs`d8ZYK_BX#eV+K$}YLdWIxI2QlC1%8eq6nVh^w{wnk6-BpExTzjJ8PTgQ zmwnw6ZgqW{lIa%uvNU*7_CXVgnMmlo&M_gm)fvrhRjpAT)L7SGc;aj%J2I?sk8zF> znFuXuxyvW_GWJ)>;YCXDXEL&f%AIWJ#`Ct}qiV+qS3Q z0t$P>5E z@v%4BCpJz!aa>=J_(2wR;Pbkj8Y$t$=?Gt7SuqN$iO>Uh{fT;!I*O_; zd!}iQR%D4XKf$=Khp_<*w=8{v%$#R^wlKg%6ll)Wu!7Y|%1!5+aLu%Prj#UUM5{@c zsUPhP|Cv^7`NnbTDMxHcBeSh!DFaIkJv+hSProbgeiZY5oWd<|U~l;T4K7&cF~@&* zk>TiC2%`$G96`f3ulkiG4YP~JMy-U07@(^={>?Y@Mv&## z1hB`SPI!hlT3>1*5{C>zimy({5Z^{#)^WLoC#S=gp~0+*KH4ZAt8}a}qJM!A+eryb zOYs;l$yLeN!}U44v2zaFJ)5%gRsO1P8_A%Oj?SMbao+y?fKYVWgb|^csO%MIreSZ( zHBXRE2$eb2t(u_a4Z4JIg0qQW>$W}c#ze8!Q3*2qfQWV+je$e;HtnK);|v5)$aaX5F@H@m{TAqFJbTK^c7S zeR?3)3Z{jNo!EwPBJ%6~q%A|`zTb5^{Z$cI08cXyPiIUI{1Y%y3aQ6y)=$UMO@6F> zZ5!UE0`EeXwK8oRPtS8fVytg3INtft(TN{g06B-1d%v+oSme|h17MSMjIBJ> zCk)is;lU4w+T-8bR^Zy>Q*E&*BA6&SZ+k;30NxflsYh@kl+Rf(WL^I^@S~xvK&lz6?!U`^pfkKs3h%E?>m^b<=9N_`A0`LMX~^18dEJ3lMw99Od@=Hk3Iu zA^n#PxVo{fJ)M|tf_`qCP^C;$MS(!KcERlSYLo!;;RhSKCM34gGVa*3P6?>3MJ%u0 z7dtxRDIe@Corj*?udv^kNj|rcgfAU@Hd&v7ECt3eT~#&T>4yzw__n9n7v_YR=t%^* z()jv!GoyJ6%sy*oV*(eXhqyp<+zALk1?>X%S1+BrS zKR#t=v~>3ULUd4^#^)0awLvYuxhU2xzC*GyUVZ4eLw_Tin?8k#-Qk&L%1UgdU z_p<#1bb_St0X>0#Asr@6B&0JgXACAGjiMVNya1VcC^X{?Oxy6cjS+2Ky1!)oaZg7{ z6xhZuR!aE7EM6}=Xdy>(^x%Q{D;fn4L{_HrcPA*t(^==8C>X!Ktvb^8xgRMh<+%x8 zTN4oXq`$9|b7#32tm!LY9r5UxB-!L_CiyYFXbtP3J6&byw(G%$(=&nPi|#F}nMeMb z`S5jfUwp)qyU2ZBB016M0^5Lc$lPJV@tu2kksV|oV#42cpxe_=WMEh?=dY8t8Rxj? z#6^u_9-gfoaxZu2#SYN?J*4$)*&CKGvIrJ~t+BtX;1<#0?|H*!v!xhFZK$$OD7!U> zVU@#t@{|At&!#)frUxlO1AReC&|=2ePw%@8%qF=npi2MZ#1DuiZ(%SfKXz~Tbf)lK zVZJ%y%90S-Bzh1vsA_fPj2Rr`785g~OcdJCCm+mm*(`zA$8Mkc?Cv zgk;jq89O^jUf0k09$$T5515?y*Gs2}^>oLBo~ypoFV&k>*JwH!s|yXNs`SLRwrM5W z>?Z0Pg-7>Fn%@n}B*mMveO=>-+<#4e^T}v}J7MvEwE#7e`g+JPG;=6${-jYx77Kk0 z&##CRF!DbkskL$6PAwTJi58R4vO}_O(n@Wuj+o3Q7-Ba(&!r|?4&`wTs&kRI(bUaH zzb}2-T}?X7ah+s@MvLsE~<5=WVgQgPLVDS)&67;sqICEwGn2TLfqIA_hgkPKLUfsOp^;=rIEB$ZFm6#kvYTnJ9`C%;}K^uTdUFdUK{(0=kl}A$bcKkn1%wTwGOM@ z)$%9HV*~+b3-CfH9PSohR8F{;M|ddhnP25pzk+Q{-IdzJdz`85d@Z@7_FryO0_1@w z&2v+HyDOfB8}fv4bTiJT7sMcNQOEt!m8_}7h-0v`pk3ix%;( zX}@ZoO8c&?7(X&3Z$9ah{Ln(_X8a(c=?Cu*U4ioxJ1y+qej8s@+f!(!6XwLZHdBn)Vi@~l1?Y(y^j;2 ztn>3t2RQ*sf1K&trA_9Xs(&CW5`ohC)cOC@f5p=t$G9#TKS^vn3_^6F=N=YssODkK zt-j!I0}IUy(yDf~)aL~*u;fN8&`GB4Ux5KekX++O3Af0h%jCv&a$qOJp*!WuxS&Gx>#=|D)^Q8zVRA`3VX6En4i=HL3@; zfcduO<#gbF8h5=_hF-T@JIl|xNo?aCm#-|Dr7s5D!~Eg)+8IKqCa{yWP$lH$OlgNs z%Ib(G55k{c-tV3=!1|g6Sbz8nS!4O?Svq9sGJ%3wh8X%~i^1qE#5bB<^9-=XwulE) zkQq3yzhyTs8b^|%CrY~%kI(K8k`+DXTyoSmRodP*UJ#kRaZ~vv`Q}lCmUIBjW#*qK z40c*sJ(&SZL<~r1*O418d^29?F*eYeb#NFVY;Js}Fll4|!zgCW%Ee`<))L#Lh$o@J z1_u+BZ48xfc?-zP3Q?z`{N#xkzBDDk&{LO>m_kXnVu@Vg^^tFujG$=8o5rB**^#UH zbI1pRpdSu*qSK-tuHtrp(I15}JHXyflOzzJg}7?~9#WEJcrOC>r!N=QkjW5#mB@9r1xN@%54jE!M*!<&3j&DhMVSGaX|^IKc5_VB_V)L3tIK1>;yD+SQhZ+V(p}bb9Iho++#k*{CeBvXex8Xk55lEkfP(c44P06i4Nrj z5was+1r`_nfL3N?7Bm`AXdj+A-a({2pZfiyMmu5<>#Oe^gXsWJiu;TZ8bV&B3qai9 zx0_EbaPa0-)_s3F_kel_?;&61+A{gOHU@7fG?(SaNAOjhj!*gZ>HU3X`cB*jl$!-g zRs@{K`)C9lFP_nCA%3(4wk?%RP;7o%({UNlnIU!g5O8n{5=~Lbk2aHHSsoT6oY=TE z@D_3)w54(0Y>{;PfoE!**)&tKX;_a#d;7Mx>`XNiNXV0Er2$8oj0?ouk?{bu-#O_T z+NU!7AD*r=5U#Cj&*)tcJxW4^=)Jcjh!8b;Z$b3lyAUNrCpyu4?=6HVL5N;vLe#F>*0UNqfBLYG2Qs8y_wky7MWP)k%6sf|F4(RKsQ*c7 zUOi+45py+#u-I&~5y>DPnnpxleTY8#mJ7S*i z$b;_=v-RN3f3F4ZL@Y5V{;u*q3LW631h3*j9EfMnWZCTs`o^6}2S`;Ux=7lmQj})W zwEi$~e7JYRHmLl9=iBtrU7N~w^h3gaMUmF%UY^3n*CQ2b5lwBOXFlNyrV^6}mL51E zP`ON#Pw8HlOB#|Szru#`_{v_p3{c-u=o9VxYEWaCMJ&1hQv2`H0T^MRoCU3sbCifT zz{_&R;j(_UwNcEa8X;LxUK1QGUlcG|v<61SB*G#bXM9|_bB zZlxYNJFu^}Q`|%qas1FToBuHtx~$CSATg0g)YQAeg?QigwaDlX?4RK8Kdz7+KStz` zS=y)TpP#l}7Dt2EeZ#-sb?n_wlSdJhbB#A^y|OWg3aLA&!=A}ky7kJ&i6Br64O`>0 z7Y+eQlZFNp%^%`7>185KOqb_t;P%1ZlQx;>+3HqWE~YrJ?l+}3FQ$1h2<2q4Z>VN_ zk0N+@bC0mH6-ALBa?>cxHD%)wGf@dI<>KIrxFJR}a`KwO*kNwntR7P&CdhvUls;<4!Mjde;0N9JPq*j)?!V zVvOP6PC`jNs^dW1bNy~vfiz@>q`|z4APX$(Oc4)D%7};Y&LhJO0?n`*l+WU3wX^Z22;bVwk_M>be%f zWN_Q>zwJ@EdyNl#qZ~6%Xkous{}+ObI&kZ|rm4?dO@+T{DZd*%*=`^T!I`&kANH|4 zYzhBOW1Dm|$aE)**?Qy((ZkeMvio6!znRdh`>MiibC}=aD^@-Gk8YaJ6ZV z1lx1dr+uAW-H$iCSmaz>;LI}*=qSR=Q4#y^YG`R_>>jNJ(;xL9RE0R@(rv0uy3!%H z+oIM6rBZWyatW;Ahuxt08l#NPQk{dKkdQtS&m2oY`Lkllyf8n^k!Rv2#!t44-aCNP z)9ev??4Oa)Fv!|1=sBin*mfeGJ9UwqcaZ+*;tHSqZEYSH>G>LTSEtvy#`pbH#QasZ zLmj23e@|%v?&54fAMP||Mcd%L^PbInFh0dmO4~NHjIIMKW;zC;x`oiBg(KtoKi+FrU+e{Yuf5wHUNK?FqY3`sZ^rtLrF4JS4=_?k7 zB%v?kB9Ry=#mSW>R9c=M3HAZ=YSQTA^X)W0@t2)vB*fc!wlX zlIgpT71jm1S1ogk{NhJ%F65~166Q+6)}8IF4!8Ei;DUUquolOl*0`dUOn1nLlKZ^N zzK?Pe$=Qd1G|v#_KV~0iK)Z&p8`|4PCubiz@^R|z5cxnGOY*>7vI z?{5>ShV!2tkH=#v9F{)d)v!@aBIEn?R0EcMNC|H*TyR<#3w9x# z?wV0E^(J>@KegstrNf2QJm_pKS@_MDkyW>eY*81+V>Q(%To>h67KH>h?eFiun^B-di2*=u>n5(Jk53fn}X0?Nx|K8REOb`L!KA3$(9)IdGjgL{mlk_zs1 z84Zy7isE@5wCE7b^5ME41%T;jz=@?U>gZ);L zIIMdxM!>)Y+xcsI36qsgAE8HSAp3%8SAJNMah(FYQ5=WEg+V;{9skyFapAPpy4vx} zB=lFJkjG)yhCi?h4243=i~I|@p6B2f=q#X8?a&*Se_3_F#}I)iUHJj3L0CUGw-mad z=g7G(IPctzA@wXcK$_Si*#8N%@Zq$Qfh;G#Z6Bib%dUpek+&v-`4HLy2UrzO5{Ui`QNeBff7&I=?g{A?A!8nTUJ;NHURNC{EgG-q#PjHtn zW~C$jiAFtkPtE3@n-4+Dwp1R&8W=)C+8``lV=LEs^7$n|HOHOEsVw)t?vuL`8t_Xy z7TvnoLiv9Y2J;9}kZS8fjok~Gkz~bajsePvYa70#EpTtdQpW}6igfa9*^1k0;py zZ{Lm>(eOIl`r)^33k`j!UsnMWJR_plM~!@M>$_`HGmf)Cv=MuH;IQFsg=MmUb^26D z@H~CB@lO)>9`P!y+OeQs;Q5Hde$)wmsD488;AsF6D;7xg;g${&PK}gaQwaay*Gx&0 zNB^5TmiH9=JIU1MlNyk4`#>Ewbw z-zf$sB&zVS1wgylog#i|&5oedjk4t**miD~a8X)++EsxmH0c?!Bu~QfMLLHsk)ttu zNjUm+lR#&|bUkM$2E0OpD~w5nQ(Q4RFzwzM!NmZ5-={C6%+NpAm~nrK*70=Ks(AmHsJDiAolMV)AxI1 zxezRfE(AdF3=U#wKU-MA&-3we1A`q}KG)8@)5Me;5}QuN@9(&>H5guQap(Z@=Wo(& zYNyiC>I#jZH;*qXfrJsTXO%M(%28e^Ug8_12bnhhrSAjRNE+q8bv6a$Bp8$Tg&keL zubjAWxSDEyL6OlKTjN4XK@);%<*9N(F^t%SqM^=Vw`F-3br`wR-j&9G{~eg#VvIH5 z3C#GU;1#RMxT$+yj;?<~CK4Yu#=$8NrJg}~^2{;aH;lxOJL4ECrYH43?PBxiL>gvP zgLB(Whw%RMkvDQuAgpkq{}1C7i+}f%?I!p8z3xKP*0P`mggd5k0u=mDd`58nn5M;a z`G48oRncH*!S<>0{u0anj>Y{0Zm8U+D3k*Bvp?FO7S2l;Hv;E%Ovl)ZPd^x>;BfEBNs#n}{?*>)a0~!uT2E zCs#^-oL^q0EpLHqyr-8}#r@>`Xn<;*&TTZ@G$o_r;{!u)r)rrvEYt?6a(HzKN0w8q zfEV95^ytdy{5z9C^@4srAH|ixvAFr!g~s;tuuXn2IK#qy1g#Wpor(QGfZ%+7RQ$o~ z&B}P-k;uecyPdOq^ev1r`0Dps=<6OlgiMl}8u+S0Jt!7{cvvw*)hDgGerG!YIswn% z^aN5qck-s7Lbm~bhTVR?jgiOGWY?)KLYl7{yblclvc`S|KE*GAay1th-b9%jb_66u zc60cngU=0P*Y;f?4>VdiB2rVA)Tc93KW4SVK3J^LSx{)+Lq zg@hJV3vQ)*d~-!x?-jk=NtfAK7$WP~v6bEfNL46|;J)(7Xqm4zYD)knyV}UVkT}%b z7SiBEcZ3}C=lQjE-qZOsP~?*Wkmd7JVy|0;H`zza&g;fcC=pSO=25)j@DB*M09sVj zh&mgmwc|gX(S^75p$-q|Ay@dC1!Q}%ViQ~-23@aZW^&C#i8+bqX>h>`U9t|**6`yf-q_3=9YYEVk2kba$D2`zk zM>-U%9XUO~+@hsC*1{cr>B;roJWu|M)d0qzFCj~2 z;i<;=BBtQK<9Ax#+DdMiUKD!Wq3J1AS?`CdJSx&p`l6)KTPgNxhs?7&TJGi7HQJ!Q z+NzzrGt&{g-b;)<4j{@{%t%O0Ebp}b_Wve1wlF!4I0hQTv~0E%vXW7 zz&T2J&f|cJG-lp#J3E^8>QfIwL}fA$?EN(d5eyc?Jr0tG;I7)|_W@M(E>Q}x{{j7VFrV7nQGK`u}^3_Homt+&9=F*+FBZ_=;QZyO$mTnQ?3ao0FR?xvwR_f(-~)Kesn_DGS0sv#vyt=VD_l`hCIo;hQAFZfZigXfFoPoV%Xw! zkjY!m`k-qtCTuut=vTPkaJU-!-zffGwGYjq5-1ggG=sLKvoez2{zxwC3PXktI-$hp z#rPQBjsZfYmgg}i9IJD zyzFoBc7$WT)w7#g_&LyT-*0w+VltFwA~m)j@n(EW-K$!cIuVpL@sP3j+PJZF)&$o+SwpCM-;5LWG>?8 zmyl@}&H)SD7Y@T<>G8x7O9sPLO+>v+bjuvKS4x_S}c!%bzkuCsdyk%;huPX)t z?yET~d7IJ`@=4a}EhAh`t*;w{j%s5g zOUpw-%8+m4ZHHFKSGZ?Xh#**OAawXr4_fp6Wh-JIwMgg9(*Q3s*c>+FcJm$*RH(D@ zFk|zeZ0;P6bxoi9W{C{miM;cEnRAxfa=7{P`yolQgcwMF zdBE-CV@gEGfPer(e^?eO^3nV8aqeR0n<}u(y2WpdzU%oAja3s z*6r(@%UXF)S!UA2r{a|O7(t|#-faP#yT#=peef;H3*#>tH2P!c4SW{D%QopZw(N`@VD1ewnYn=DMiKILAt23)Rfa{3W{y_e zgr93b4UH0`m&LaMUfC~w7ZqtJ`Wc9U-c~$GqyiMv55LOZuf0?7B56jTdlmfZ27Do^ zTorl_nxYF}CAMZ+q1_*~iWPqB!kRK+w~jA%EK$)avq+tI{u^()sI8=aF98T}z7c^A zH_0ZB?mQ>NH+U_Li$e$kL06HFy%+qZ+68~O#59Y}lJ~QOS&`rP40$?f^p^CRL_)z@3zT7E`fe6?te)yM*p%G8dCt2w-gr$T@!F;S64?CumN5NNMy)=5)j~V6j9P5mJ zKG?boE%?Y1x}a}a92U~FRc5{_px%G*b!zaSH~$@c3NM)bMvsr@9o;6jYqs#a>hglP zqPwzIc{}ZkjbrI4cEL546!UJ8*yU`~qGAp*linxt|9bQXfWi((7s$y3kk$t8944iGYK#p)&2peh!!s#Hht*dz=>#} z9gAPY>3a_eUb`Shy9tsH+g#etjOJ>}pYqp7aKk3JHV?kdeu(>MT|`jv@@Gg{OTd{z&Ws2trSBrs`#5W zA4-&0l^9%$@#mW8#DI&VigL)C9x-E}+B5mw=uohVkDpk^aAw`=v4kPx&n-B`g`p6_ zMj)D|fGm>)Y3O7Ak-=*82%y7Xxf-kc+l;@uaj=;@n{Vy&Ku12lO|%ja%n2X0t|u3x zzRIled7rjvfV}ShxqoF*$1R$dxCp}+>L!#B=aG*@2Sn2I8iwS4#LWYZ6>ZOv65~b) zV2CAxASwN_)8z9OG6Y;W~vAqVP<1Mpu$F2Q8D% z)0t8dr+ao>6ySS|;c>nZMtE0Su~rhtlaQKaUZ+BB@;fc4@RVjuGc~yN6-syJkFJv_ zZ<_Ox;roHT%&ISTJSw8b>5rC1h+=2YsY)Ewls$|dU%1XqnI`4M{rRhC&|2^U+g>&k z8^d5FT-R-ae?)Z;4o5#7jwqtqmGNT)Q1cNb*&9voMGHWU{7gaivjZsQiF!iGxyK4> zl3p&rdR?8kyhkW}QeR_={oVuYM?sWrsQ)0LZSXwYOT@Kio=? zJc173GFh*-TaP4VK1! zkCKm%UdiVoGn8k!sAwF1kwJHMFMeksCi8%1#R$Wl;@D3$KHNp`u3OgkNW}Ak&ZYeD zZPw0_tdEkvKT~-Iw@EWbNxZRe5Lex$*;mD-J8P4Sf(!E2{2qrjS7=_AteM+)T{G5k znepYj;zhrsnLpk~M$Pm+`y|aWxpQ@a`5#4k32H9Cgg{ZoHw%!ny-}CqGFThCh~;6w zkhjE!%k36!oyF`&xS|Ks%9IG!S#MKYf$i#M^{n8YW}nKwBm>j12|JyE>NQAz-Ny(a(6FqVTMozc0J$|Ro-nDHUyKSF&AY50N zRJ4?I!(BbWqj1JVlk*6nOtc-pIw0p8e*ku!SD zLQ(GbOWxNQ_N57Ra2%GF&eT}8SAH();8Jjw~X}2 zG{^qE@5@y2PYJ^x{`{Rk$uTQ_p`)jlG1;hUYY^2lZ^l{Tsi#M6kUp2+fY1O^nCU;~ z=C;Pt0%}rcS`!+*QUeahPzcjLiE#nhCOMd@A!)@As0Q>;s6HyC2N6SNN(YQ_c~1w) z6)U~y_SLf1XnMt65FT8m9E9BcJW$~R2^?Z6s8gueJGdN3{B)vlGoKqXFAE3=GIk$R z*j-xv=!8YtebSlDBGI{-{jFNH{3>?4@qS0{%cO(i*}ddwSd-`j_kT_gyj9*bs5Zz4%jLSj9FA7>y|w&C0) z&{ZHU&318kDIMi%KbLdUx?Mszzfb8cernMyG9ui0g}-aGxbLvPrgI23D6jtys zh+Xy8Vnx1G&d5pL_HLIAc%HWXSMO(E_U&JIh>r*-w7z;@%?rp{n)ZAKv|2lgq7h zw-~J^uUK;JiBqH>=Zx3zkBG+Zt0z`}={;L7pY z2dC;xF?PF$Hm7JwJ*lfnFBmkeEw{4cJovzfonUxzE6JH};PlRXMGTul434FWQ^;o` znE9sFr7=GPVig{6gSb@wr8j1q7zvL=u#Ry9037#o00aaQ@L1E8+5SLN3*9Pv!tg%* ztPpkN1<+UY0_YOLNJCT5*Oz~H7rbRkNK-nC$G+-nMHtwJJ^Isl`H z%1^gT#wrW*5g133fu5PlgV_ z`#gU<9HCIbudS7%)?x$UHnqF46G}{}V45jb`&~iJ^9+_|7sTUmF|w=s5%i9}YU{OL z=!r?9U||)1Zyx?zfLnCinM8`~LmQcH3=Y9te4iwnLzomv|WwO`jV~UuO{=v`ho4ZT# zN3hebaH$^W{n)bN-(K*0mHqtUI=SWkK*I>5WJzBi+M%DGon%<=17OX|C0izGK&F%? zjQdgB&jsGTTX*T$kQk+K@2;!qKRx$K&j;&vAZK_%C|a~|0WJ^EsGzm^e+l^Shxr`-z)AG*GyB3Vs2bXXV#i;k9= zlHDPh_g1U=E)(f|hp`yw?tRAj;-#xw_PTtiu_0kIG$buCfA^m(IX$D|8CmF|#IH%u zSf3GpKHK33m;E^$ux2SqEI6X@+HuKsaADm0RFj7PfbUs;E<@Dr*<%O$T_Ws;MuAha zT@j}Cm8yPBIV9FPxwj3BL*;bvJXAkI4i!X$WM)2(`0kC-pf`U{W6?YMJNo8Bo#o_9 zGj=Akd5N;t%gw;)JxwvL5)^3><}wEv8-wxZY^!MhT$AIs!4H_n}hNbvR-0u@N;-w!c{w zeo%GYBFE5w=n#RM5bpDheZ zOL<-)9r1jdmUV0urSpQc;*W_A*FP*O06m|j;WPlPW3PUUNxdWR3szmSZh#)9q&qmw);W0T|(Q%iG zwP#Q_14V;R+7nUA3-Z~izlssfM*k>ASk4@FJK7K>YIT#QDESDpy}Fc7YRwATWMo#UYK&3%dm?7O;%asl-^Inr^%3f^bbDGRK2C^ z5cQbb!)D}#+=8Cpq3M2_3nU6Gw{zR_{LU%~Hoojtap9R|@z8VA2aak7AEn!JP51up zUwE$XtlTFl0qrJvfR9*1jaRetsL3mO5Xe9LtIYBjw5PKAhH3tk?a6*g|4F7)H4mgF zQ51vJ7w%)}TDxDEyo1{h2sj+}=<)5@wSw2lrI-j)sRAyYRaL{A4t#?!F3409R;R$E zI=hnUyho_t{iB&&*l6cb#0nu`n;g=>(Xn$XC^|KsTfJ377SM+<2oEA-)0x7kLU4wC zOaI=pG!G$eXB1nz3`nav3x@in=k%@5ui<98j0Wn6_c^V+%F32q^joF%xV(EOnXYdN zP4yx^hQv5+*UZsWPHF=Zx^~=@qwpypqEyaoewkrD^NMmS(z$GHE!388Cy=Q`oatQ3 zoEM6jxjJ1V*QUvvSPqMIT7dcgyoNdX%A=0Q_W!IClJC-kSDix^^8(ZYPB5BX@LZh& zx^5@&?kOVmbY|Ib2Ji>1Fe?6-#e@Gf+dOCdC6nmGj>XyJ0%mQ_zL=VGP$ zp7cH!C((yV_mQ!g)k1WCHZgsD;nW9edJel;Un8d`zu}>e3xFHDJkh5`9>5x9OotA} zrrx?nMN~Gv{;+HN;N#g=ZS{x@#Kp`CA3YMPoGI1K)Y6IM9u_p0dTYCww7KQJ z=jtknqhm}}N{6DAsEo~zC>xy>qJ?+WYMh(A$u0ldB*|eg?b?Ik`IF@yDlt$>%C)7D z_ZQ&@xvOK;OZ+1b1WR3OXo=FA*Gjq#N)oww#_vO3wcicrIthOjW z*^2Ep!e0Dyh664H6aw5IIGpYgdbQ;Shs-D%HQ3^YG8u&Xfn2#j<9cO zQgEDkhOtA$YzQ0v!frH#h74xFr@v)$<$X(iok{Ys?p-!Ve(vv_vchTQvgIC14tZ|BwZqJFnt>_vq`%!*L7~ zXF+LL8re*l+J#IoeH5?iY2P@@mD6P6u6y*xT23$*( z?qE}$o&lyeQZ=b`$KGdNa$j0LPMX12NH=!Ky!6bLZeDkxTA4B|r*qK@zNQ$##-ZOE zFxW{B7OZ{o_W%6Q?DBZ>&${{>zmNNPP%Lt~W7c44_k5lfGK|wHA zKcPmZ(s_0~nENg09_GKh_+QYB*?aKI`3;zj;KnLlO48j==va(R;FcrP4#FAc!5;?g zZ$Fl?#fMTq3L=_b6vpvz_BDw+HO2`f-hA3U2GEj<1`ol0TmkbIWN&d1K4eQ;d5GUI z8`8Sf+_;cNY+9e;gGXku;t^|=j{mAS1pML*STuFPkghV)L~_}Ya!~T zY{j84mer*;C4$q9`&TL~V@aK}yropP zssZTfq(S;qA8cWCcbLotsz6gyPM4&1I<>8NOYY>Ouk#-hhW>M`hVv&n{{xJ?aJ%RF zHhM*MlgHQUCX@j-;irSU2Ja6Xz$kh^8nSr2-;jb4URc%M%_1%LOg9K=)5Y{$Q6hEQ}yAk#ZtR%o}Xg( z*59ix^Sx^7PfWtVU(@mQ)nF*!20z2oO-{4xG2faC)*3ILFql8lU9C7EM1>Qm>d-@Y z!f>{DCh-;oy82ZnQ}V9m^Cjkahu}?cACU~kbSehl2|Av~Ki7t~uJ@+07ieu2=e_Fn zEX4XB#z&q1QOC{^jcoAkRZes0do*Da7Z5txysDt4<~6+)z1IIPd&b1f_}4ho@hHhP zXqIi>l9Gq(c=`z``k0j0U;gHl2qH{O z%cfv@b*6JQ0ad1RYZM8NtjcHAL*4E&e%)uB(BZ*Nq@U}Vzi6=d9JJWn~Ka(SyNm`TEwNhOrp zMP&UzZ@I+c5l4J^6QQe%qOoiM)?SPDcCYTe;h0@7qRl`pnPCz2@(&TVQ}SZ@d~&OL z3`TQ}9eC)bp91EjP}~y~6Ihn<6d?!f7}GDE>F8l#rI}mdB@MA@tG6EL^D|oE9m=dN z`-tmr;h`}?#in^8d`o7Ab{dS-=F4xw8?XmnXu4_$e=t`V?vtV)us%hC+l^lv7slzSEw(;y(1H0IJ25}vtBO=!2YUmDh;oRR01-#hfG#;4ct*eX{lK#U5TXLh3s}I{|Nb+ z-}iJjmxNiLu}5}|Nf@mz5cFxlJ_0Kp=Z=%~*~`}tM_!!DI1%${lHG{}U}j*pfuCTg zY@DX`EB7B#!kGXmcYQ)*OsTTwADE%zpTv;HLZO89-#{$gc%+8`vIDk3r{Q*7UT!X`vZLaA4?;h@TGO)$kq z-Dzyb;apjQ(CLdfbT{SqV=(E!9R$v)M}#f@k{Nqa;zBpGRHH zD@y~P8@g)5@0#@H?O@1at`k3C$jHaO#nz5!DuqL^x=DTM>#e$ZDFMa>p({%vm2X)*-$A-!!0Oxm z*ZpRgN?=LMd^MQ>vSVy>%3~?0IW*ts(uesN4CU^(3N-_lu^|%rK&`BvN&&J!SD7Ct zXAYryk5?qf+ZlbeR@KPTl`zbv#D-nI9UkI#OROXNv?z|`X90sgbs(^vYtZ55jPB#+ z#=%Dxxc$1w9G`r6-eE>4b+4`jKK$$xEG#4riF@T?Zo;+OUSuK51b1Ek_-eLAmwJ+v zY?!8nD#D01`0Xjm2K!&ODcs2C#}ab{UK z0PdH}dUuB?@}&rN?%p#YCnU_%T~@5Sziv8?@JakF%duYW4L(YM7!Vk%W|}}VXf4`> zhGE~_mZn@8o$L=DxPN~b{VnAo&xXJ+o!7`4?R(&_@=+l;4|VB*XN)#*LO%6yq|;orlX=Qd0W zao~9QvaL_=)}%XGgR_ISP_b3tR=afAA?pK#H(mPsn}Kt^Fj0)D_`WJ5aNm#iolDO7 zy^Kq}Nc*5$CTL)#gL}pk1d#IzGs*g#3pL>{zW6ia=1jW!DG+Xk*D_c4*BGdM4u0 z%?N%j3gG8HHb^Cdr)D3Pe^h4XpYPm6Q(f->?%$65`ZHh?tpodGeOmjtxpw)HbDfmN zZ)R-J>v3mn#@qwm5$O}tCJtA#Xw})?NW%$X{#kz}i-HzemS2I-?6~Xc3$M@nCv3*uDcyWR*#!sVA zx>qU|EK^wYhbdH00FmOc{;?8NAUY&o&l+_?YB?~1I?*>%v7_X-^M5t-@}mcJXeHC| z_y&w;v=Oxdb2_=0xw?tJ>g?SZ>DEst3BM}5@_%+4hAWnH$>wg8@kDgstM&$rsswkw za%R2K0DHMNM5Hhh<#jUP#o_A6b?^Jya2@{ZnOZi_l*OU(=X6F}cZjV9&=_oBq839T z1zE`h+S{?$3$r8&EkXx(^o7i}gLL2lqj%#YTIUzMOnNs4b#KJ@_=kFG*ok@_zBl`+ z+6Oe%EKbcz1eSfbJDPVhqXttCVI)|E25kh1|A;)q4CG!fgDBeNE?C=e35h**_AuVC ztNpr^PF0MDG-f=j!>4@8X^Dd(j(mGwcF$0|H-7rn=>Z9HR2)A1P)6jQA;?LsT*Du? zaBCma3h03;bO}t8=vZa^S@EXBPoKLm1K)bu^M~$>Ot-D@#EsI~3t+JfYo}S%!W8vm zi2t7pV0QFGwngip%ZzT(Wf>Ht9CBM7d{^=;v{W7=j`=)!32UYSn=Qpv{mp&HR6$fq z3Ch#y_vQJO|K%rp53j&A!QN8r`ElFd##ah~D89m#W#>q`MK&~rS>luC)_|vl+X70O z`geN$ZjrS<6_R+Ua>V0b$BgTZJudeMCP>+SoeHqI3F-ZIREg7!4AO{T^!TZ8RvbB& zGpDLk8Yu1TU^0Sg&h^RMDJsS{;hoBS@1dDYr2y_PJ@Hz&@^?Em(A?~E3FLlf z)+^c{tmqa|;s4>mC9doaa&XIyY+1LH^on8wLJLxH6x;1(4>c;-9l>OuBx~Ht) zxgs+)Vfod9S@*@xp9-A4cKbwy#kH5Y$4d~G$SkxV9X1U?U9|^BTdy%>%J4y2OZ4zi zTMvnf46TE8SrOcLEyYg1#X~h{dOW_}weq}=`6JW9RQPz6k`~doAzAkUDV@Rh!N~uC z7dF)nNcIuYQ7e9-Vsj1;atL{@gkLkepTI9&>Xa$-^_Eb@zJBeV{fuzJ7}AN*cC8^T z<8b;@u#P>y<6_s4W?HLNt%tJ|uQ&Fc3=fjFu*in+D;LNFG3&jqBMmvq>JDMM&^FsK zbrAn;{CxN3^ubqX0_w9v-T1{*<+w%=v?h}5eVis7&31hdc~$TGppddZDe^O%ba<+3 z^|o`}+@0~!O7QUtqpQ0M4PdsW5kJVE ziT25wNSR$U*R4FH7Bo6Og*>@t4u%R zERZI#nQWGKLt0(u8I1gvKF0{f9y zuMEfgYW~xU`?*J5%c|=gLm~NYcWe-`d(Yp^2FVWpMzI=zhk3I0jK<)ydB(pko)*r4 z7j&GcBG874wK@_V8syv{zV?gMIuPNs3>%8u__0;(d)C{~yxtIL@0LD7KbRD0hzNd5 zHy4zzwW#;4{*C>zVm==T+J#^8Cwe4WFBBb1x`Ff`eM!IYF#3Tzdm-<;<>o%A<&bMs zGx%Zy8iW!f1i8ueMF+b)RlLf-40vOGS0&@{{nvucX#i-HIg|p}(O)kpCsrt3q=x8> zpuY)DNu9|`TfP0JZ7Dx8`;owJU3uoV(K9ddZ0JgFhv=<{-;^JF%_-qC2--t%uocJm z$Gwqhdd&xNG&%?-oK;1#gcMF0phQxEPBQ52e0W)Ynjl(%I7EV8PBv?qm*H1khS0UT z5uOk#_<}PXK|f!CL}go7dKs=EV6A4U1g^-#e{Ql4LX-b@u(QP=vFk;0SOKL%g&U*~|zU$6f zwY}3jX`tcuO1;IPbsvPc6DJipiAYHY^~8F)ze9~%ROb{2T3QyhIj?ozt@%LK;!HsM zt=f9^nt6x)x}f5=D8AwedfMR57yphUlZ_$rNbzl-$OwJ>mj*pSZpaIcGj$GasibO% z3huE=DU^lws;>K>kjU#gNMYca4qM;Tro3!F7l+Ylk=i)L9p+-WJfCE1aKB>~3|GvB zFL^t=5_~*^exg#h6@U3$_@-nc#Bdg(zK(boT!v%_8L1*5oe7UA4Myu=W6j^GB(vIN z@)5Awn`T>Y-w*IA-pR1V&rIjw6@c!6LP>)brzW*C94?T;`Jy&Q<0FCw5^7K9^ZP%C zC?~TLf>`atD)*n5P3|IK=_RP^S!XcuKF(Fucq&5htEmpNh7O*FUgmTiyS{$BE=E3f zF#N=GeQHPG(u2%m9kC>^vXcL!-5}n=*lr>Fi^7lr@VwvFcNRBdpe^8ZY>dW1sFYsA zbY5TU(J>WN$Q3x~kLQaDpYc*#e?it6`ZQ4D<$OCI@Yv~U3ag1~7jZwA7+U$m#RUJd z^Q)U+^I6wAEBB*T(5ElgCU_cm+2%LUke->w_4962GZ8wz6rIJ5*;zjRr)}<7)aKyu zjI@iZesjtGI~*-s&moBWZI$TiJLu%{;7Zi!Z2(eSH?_9JO{#48aXjIne~L9Yl+`|7 z5T!%A|EM^Bl1Rgu5t4e%D}WRf*c~+w-5Nl;3qpG)tll~7Lmc#Z%T@-SwXSbwZL>mq zKOY9WgGW~QF7t7BeziybJX4(MwxI?oe>STGM%!|0*6}fR0)3uV%FAhc6(F32H2sF& znn1o#`7J+t0M=o-%jkL{Mg!frbcG&8O}Qk%?8emk%ZQ3uxdZyvCj7e zZb~r1g8LwFN-IpE$l_WZknsC^;!T*T5Yf3S?K8s#a`VT9-dEmGvi_a0mVV)Wk5{l> z%66)DiYt=B>ywj`<69vE^xw!!*pY>J#HruApR&J$+di1tmBW?S^>4Iwaf!o|xFSQQ zpB#8e1f@R7l+`6uH~G54q-lJg1jK`RgkdT;)Z&H+g-JcQvRp;)v##!mr_d+bWK-aL z?BW<67}OPITW(Ivt>h!h<UbISe~8ziKt%XGAP?rCKj$eHBLe2NWEJV!xtJtoC> zbRrR=s>JITB+y@(Wa7dy`e=*W1BJ-2-aNu;Or99h>n_ZIA>7kk{GhP7i9cFUO8|Mv zAYSn`oWPUe35II`gw5-f9=1IMC>R82;$a;-nb)-+p1s0mu1gqKi_6;g5zz7Q=QzHk znJfd#s%+Fa_(E{2>Ew+;QZjGvctNJP-Pl*tAM$i=xK}u2LL^-!jsv0aFs2bzPyfkt zfsKYSYD=8+68>5lvW&X8tgn_x6-CcrV)Efmd-3dz(!*}$&7;>1_cqnT>Oc$N{FsIH z-hNvCGvqIE602M$j1Vj-THj|}LhWRWB4_^Ns2cmO)~-9Mnv;r@0j5Zey(EM464LUBBk;aJ(J` z8yjX&WZh(SaWIk`+N_Epn zT#9ARdq=DCfM`yzX}*L;YZo3z>-di=COlphH$M=-a5cctmt}^Z=v}uI-I7`w{vl9* ziN(B8=# zB58T7hyTyZNFqCnyMN!m32?_iF7OPiIaXBMo+8ys!RfZK<23t81DMhDPpz_Z2U)u8 zFRh_3uGL!fEV=v5m}r;<#eSJaX*J*qcXi(T~AS5qU}g1^&Cr%o!kLY)e)Vqp$w*%XU;M8&QMV5_Sv zu04%cil1epRolq(JKjHU@xvnu51RgB`<-Lc>8olidO_dnB^oZ@yD7PYQ$BQ-F#KnW zNA#Rs_xKf}kKW+nFSXXq9AFF4lh@kx@uPq-w%8BL3*{#Ix+;iHOG1xX3bp9&gwB-c zyDt89AqYF#-c*&{pS^Jve2gQ9HHTu=gRJJBKdMkigHFqUx27AZy;8IQ~;To(T_4x(HBa5|2ELDNQf9Hj}*@ZX1R=@?rqyhe(2)(bY5 z>l!eI`yLN)BN@7e_ott#s?M0Q_xG9d%|RC#J1_2jR;>bsS{NRMM73Q6OJ^Dq4Zx4F za9q&f03aY^J+)$sZinqk;+0Y9st*@mG|~7KFb*fN6FM6r_{C%0I8`AJ%bEH_50l|mdlnUU`);sRYq$Jv)4WzVOjH;FbKw#Z9^dlg^yub`}@BSZ>gx63>AA39$Z z5~j7OjRf;Sx#Aj-?Q1I4y5rNn?iFM$WX>3ONyt6BJYMZg^#z|>bP5_LJpwftiSQ`9y?LUIKhXEziD;8x#HKauc1*~UKEGe#w5^XPWB)m-^_{l)>i z=s{C~Dra{w!*2SF9`Jgb82q%*15q#@bTQG)@#0CIDs6s{J$lGWc4tF-TLqG1L!4nI z$h@l%e0Zf$Vm2~^n&WZ=|4m!GB_3#HIrx zY`w71G0R;re}4Si`t)05ccxi3`?4DozG6tSBgyp%>rjLJyaG9;JyHd8S+3U_kvjN@e>6@&+{Oa4~f?Y)M49c}d->e9ah z>!0Q;ec3GBbZ(y=I+X?OwBh0J%ezqNHwk95VXl(x>voO`)q;BGEJlvQiu>m}mXYrx zEKg-VC}tAw9??u=;E^$>1*|ExKm~vzpglq2`vUFD1>{Fax*M0pCX~LJ+Gai0{QI}l(#-t z4ehwyF`!mwAN~h?E|i%2)M3OV0r&Qs`HeBp>!zzdn#_oEvt1`E5>(ivbFdu16+uO) zI8lYk|J0nATUZ(@tFv)2Y>&y6dz~lB^UKzouD@pdC#wZ|Uo<_Iu_-#sw0WY(8$1Or#2btt9dX8^J6n$iQ*esZj*>Mq$J&N(a>*?ar<*HKDv?uGeF8*^RA;v8H z2oevt$kv1_NW*Si-ba#+i$~M>CW-xX#ujU9@&2C&(-_6iaSBwNJ%V&$^4_-(;A%Ys zBzW<324x0umSgCz0~wo!G*V{|qDk#NwKT_ZjkP#^(LbHY){FA{aEJmlBA|^R*$$}L zR%P&K>8{mpV57{vjs?cUY7{NjE+-_Fxz*7F5Bq(9$LuFosDMxTyr{`&=O`N3qO1oo zkKgJ?v;hHu-75do>2SWH>}%3trEh`-Qz~eBX86vr%=Uq%kqteuy@&%uAYHRv)&ZoN z1OR)&@15BDagCrcTVD@1<4csB?1dKIeW@)ta^*W$4Y|d$*Mo(A)A&-*;laCw_fvM3 z;W3uwG#Bn;{jEKj>xK^ja96FGoJuDZcU>gzQ;{p{z4u`OmEmA)hBeWsg4iw(bJi}2 zAbf4vSUTS&Iqj#1W>Ert`Mt6%ld*n>S==J|C!hd~H3x`A4}XWDL$c}=z6~U)#P+j) zK`XGm?#YlX{49xdu~D-i)yCjWm->sKfWn;ACbf21B_00cANI*Pon@m@F?^4%wN8pN ztzZ8U7QL;Q2>0xZ5*MI0)^yeJZfSM~$M{PJn+VzF&5ufn!Mc7UndswqK8di`YV!!e z&bg3j1ZmV4@0k@Ml(FNs9>Jx{?2g0eWl8iUggatiV_t8+rJ0839YsP?TnyHYI7y4f z4Kew?HUI>XEscGKmXO;a&2sO1dcEbvjbjTzMHOFVFqPE>4w;mF0ZjMfk=emRFQy){(!`>wj>7xLrd=C}eKf^UYmInO2Q{ zvv-b%FJBKA7q23%kzm-eSZ7$Mb$p*tgp5f_{AXncWL$~V!$p{aUNT!s?w||}9pvT3 zZU}VCpFYG&n3gjerduB!eY%79m>?>rtqM@|N%;DNA^%q8>!=K6i|M(-MFW35^zd$D z@6GO=rl7@I#M?Yt)=RJM%$@o61)adonM{^xCrMQw)XAi(D7Y^8^~cl})SU|0Ub((u zwyuxq0lHUFy=wq;M_{035}X5j@;(?Q+`rfeMyy;`y3V)&iNA!@=-((eXgrYf_Y0D`T9gcGKFyBO27|C=&q{1&|wMp>|@(JEz$H+K|m*Eu_@Uj!fFOTsV4n6 z@{)6<8Lz4CYWl~GyzQSx>S%fk(J#3d6LKhgM1~*3cJ+_b8WNk8xMRM*irIEN&qVMj zYI6I|#i;YF;d&awE1p+-a-E7ivA43>iFyRE8X{THXcbgqbn4`pYR3xyeLMkQ+;Iu6 z_-qEzDx#y3AH)hGr=S2JX>OQ?iEif#XL=Oa*L3Cido>HpsTdKmtexkazGPo1g~^y& zZuL23-W7>*9jKffus|~SFz}>O6NnyinW!sqj|KR{FKjexwyO8P4V<4b&~GdlCuh8b>FtL zzH=}o@ivZ7V+b~LRFzA4BJ2t%**x^Zr9*W$&pWq7Ixe!Z zy%;PX|LiOKJg#($txo2CsB4SqXv+qdvM%pW3r&<)-H;18b^VUj~#CV^fO|p7(TV-$7 zg4`DlJzH1X5{5K_+Y?C~#`KoOm0jkHyTc%1I?nqn_+jwujZyPUMXI88UsAlaQURU@ z!eGK$iV4NLlHiHs9BYsEC#s2LQ8wnoveP-eSjD-z!F*HFJ}~fj^f~4*DsQvpcrb84 zUIDUA+!>ts>8@&=ydFV(`4W6LV(1!MSS8S_?@}Z4xg@BB$-b#t!i{mn-TpV~my2>t zVBhN^>-$fQXn=dmJJoMG^6Dj6eAA{CAsyF8%||n1uWZK7o_7Hk<;cQb1u2BhnJEu3~P~6tveGBkPmD0mF(h=rr^*WqZXdoJW2qEHWJx3qc&xYVscY_qU;Gu#n=%Y9L&pj%U>c%Of) zgzU5XLISI^Fu}+6ciihPTzU{U^v`wRY#^i9NycRyttE+edH|VjM)M zK?-7hLD?ZP5G8yYbH@Vmb~;)1JIhWFxe=3Y-Fb5KI9>3ZnsY&Gv+Dff-E_gafZWj= z`A+FFqY++xTXc5ly8<+hIzM=P;-BqSf}1Bl@~wlOGahMmx>$}+N>Qj$0ZxtU)5}e+x3awm#+}Y> zxj4pn?1k@pRDJw=8870T5t?~V`?3b_Kvm4D{}3?g?HL5cG$woXZJ^)Trz%6akj;Q9 z(54)hV*O(rDb{%^P1_9s-66v_Ez%^5CNmvopRa1paGGQh5AB`F?SNR&EX2J3IcFjMuny_vSS`zS%f=S81*G&KVVjllaNHohtp25sXlH{Mv?V*2 zJ$fm&bEnyNx^sAk_N%6ZEO9M62Brkf$tTH7N3lR3eQtorwQgB--}_X!>nK zofCR457g^0=3ru&>dz|9*{ao!HJBuobQn_TWoq^|v<660yIG3{&dbSpgTVk4bt?S) zBej3ySED&{(=5`pN&)C-KHx2%r(xe^X-N8ad(giQxY}vrkp&x=c_*IpGUl5Cf;h*Z z{xwSmMfRlVi|QduR*#lFrt2@P<7!#c5!I~i=DWdZ&D|kx&i)SF!Co&$FinS{&U@I! zqjTLTvj=H97R_!){eJe(W!RB?P5fsE%jnPYKEVN_hTyeV-PDf5XUII7hVwl*J~Nb z6dNAOntl@7m*HhO{+*V#L!lRhOx> zhKrz!j-a#5a*Z(Y++rMj2IgDyd)>X#I6+$STw0AR`$~`20URv)*+=#2Mp_)y>*xeX zxJZnS8;RFv)v0!2>!-%vC~r`Sw4Djfdek7chQ(2F9kJ7&sqhECyYxH{|8JM4GC`5D zympa%hq>feiqlfnM<(v$IUDPFAFv2#ObAZPFPY5i9#KH6ozB>5m7E;l1a}Vm(pbYl zAl5_3U)S#L0fGeBnR|!~PcM9n&_#c%&L8w(1LZioGk8HAi3#Az!Voh;2$JDYd_>K1 zdhw?&QjH-7WFVpwuR2QDEP1-t;t>?5;1v_00KJ#4A5T7=vs;E*T_nF6J}O07{KPo) zl?I9yCXWDNiKW5XVXa(<6T{V(g8q0ben(xPpupMKBTFf+vmZsmL!U-#_v_hcdhk%F zRCR)Q=RU~F7gC8q+2_ClS8d$NXZ;}sGh1UNA7vmpPY(rnIc^j;Z;XyAIq8}QF?TbM{?QV<` zFL=MWjFc!TkI(mbbAey3nGeFPl6&tl#9Cf# zn#p}He5*oz#$vkl(!qd_M`5Q`Pl0C%LMsEq7#D2hFOw4Tt8_nxdn=ZWx!eTWEg-fx ztFdN2nxbn0i$>drZ`l&CPQ#U6a+w&Eb7%!y7r$BW&tZA_R*O|-NV?#^jc2@BzoLew z1s~hXc+KQlg)qR?I!I@XEvPI6?@k@b`Ug$97!=R0dr-5E1Q0 zy!lj@$QW=rysRS8$~LJMksE^Ax!ng#2eVw=jA_~YxW=Vpvas`uXLa;HJ$9vh8WEh! z3j(x?(p4|vnLR^FJN?S`ONjTp9jJ?AB}TBqAEZxXbj=yAj-#Az z050zO2XF`&y*?+^mIJ%rgX;0jW{ksZt>gjmPA>+%?4flEk8$d!M5IVD?#~2`o}n)O3VOHJr&Oc}5(*td{W=761pJJ5e}M=# zx5!&AGY{n~?jBKh?0TkpSt(#ba1Ilk1!!U!#9wGwMC=B4N7f?T3P{#CXx%@tBI?1_ zMvYp%VHu?eKeyKl$YY0lfpEXc>XmT2`gQp9i>>v%8vlp+A*J5} z-`4)aYFr;TS}vGRM~=N~mwPpXf37r`75)OyC+WqhoA#YQ$YG!|bs6qB@oBkSxPWx;bYn*WX?7qSuH60chPcL32Y5}VNCK& zPM@P=(^QkMx*RSgH7d`3Lf!vO4ulg~H*hn(INn@{8GslS8bSWjJC$TUmi*a_)r76z zEr1Z*fCKzbW5-i@Avb>i^uO=_IPgCX{QtoLN5vDPcl7bd&j-Rt5b%MRSpHRQ?Ed8c E0Ql*2{{R30 diff --git a/src/main/resources/assets/unicopia/textures/pages/preface.png b/src/main/resources/assets/unicopia/textures/pages/preface.png deleted file mode 100644 index 606ad81a5356df0d399a7652d2860bf09613485c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33238 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≧7@VB8acX>spjn}d|9xQZMHmd)fI1 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 LW9^DN4`2OXn0tGT diff --git a/src/main/resources/data/minecraft/tags/blocks/anvil.json b/src/main/resources/data/minecraft/tags/blocks/anvil.json deleted file mode 100644 index 183449ca..00000000 --- a/src/main/resources/data/minecraft/tags/blocks/anvil.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "unicopia:cloud_anvil" - ] -} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/climbable.json b/src/main/resources/data/minecraft/tags/blocks/climbable.json deleted file mode 100644 index 8bd3e326..00000000 --- a/src/main/resources/data/minecraft/tags/blocks/climbable.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "unicopia:slime_drip" - ] -} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/doors.json b/src/main/resources/data/minecraft/tags/blocks/doors.json deleted file mode 100644 index b0535b1d..00000000 --- a/src/main/resources/data/minecraft/tags/blocks/doors.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "unicopia:misted_glass_door", - "unicopia:diamond_door" - ] -} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/fences.json b/src/main/resources/data/minecraft/tags/blocks/fences.json deleted file mode 100644 index f3f91b31..00000000 --- a/src/main/resources/data/minecraft/tags/blocks/fences.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "unicopia:cloud_fence" - ] -} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/leaves.json b/src/main/resources/data/minecraft/tags/blocks/leaves.json deleted file mode 100644 index a21094ff..00000000 --- a/src/main/resources/data/minecraft/tags/blocks/leaves.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "unicopia:apple_leaves" - ] -} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/slabs.json b/src/main/resources/data/minecraft/tags/blocks/slabs.json deleted file mode 100644 index 394542af..00000000 --- a/src/main/resources/data/minecraft/tags/blocks/slabs.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "unicopia:cloud_slab", - "unicopia:enchanted_cloud_slab", - "unicopia:dense_cloud_slab", - "unicopia:chitin_shell_slab", - "unicopia:smooth_marble_slab" - ] -} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/stairs.json b/src/main/resources/data/minecraft/tags/blocks/stairs.json deleted file mode 100644 index b952d114..00000000 --- a/src/main/resources/data/minecraft/tags/blocks/stairs.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "replace": false, - "values": [ - "unicopia:chitin_shell_stairs", - "unicopia:cloud_stairs", - "unicopia:enchanted_cloud_stairs", - "unicopia:dense_cloud_stairs" - ] -} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/wooden_doors.json b/src/main/resources/data/minecraft/tags/blocks/wooden_doors.json deleted file mode 100644 index 90a21f09..00000000 --- a/src/main/resources/data/minecraft/tags/blocks/wooden_doors.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "unicopia:library_door", - "unicopia:bakery_door" - ] -} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/items/anvil.json b/src/main/resources/data/minecraft/tags/items/anvil.json deleted file mode 100644 index 183449ca..00000000 --- a/src/main/resources/data/minecraft/tags/items/anvil.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "unicopia:cloud_anvil" - ] -} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/items/doors.json b/src/main/resources/data/minecraft/tags/items/doors.json deleted file mode 100644 index b0535b1d..00000000 --- a/src/main/resources/data/minecraft/tags/items/doors.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "unicopia:misted_glass_door", - "unicopia:diamond_door" - ] -} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/items/fences.json b/src/main/resources/data/minecraft/tags/items/fences.json deleted file mode 100644 index f3f91b31..00000000 --- a/src/main/resources/data/minecraft/tags/items/fences.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "unicopia:cloud_fence" - ] -} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/items/leaves.json b/src/main/resources/data/minecraft/tags/items/leaves.json deleted file mode 100644 index a21094ff..00000000 --- a/src/main/resources/data/minecraft/tags/items/leaves.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "unicopia:apple_leaves" - ] -} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/items/slabs.json b/src/main/resources/data/minecraft/tags/items/slabs.json deleted file mode 100644 index 394542af..00000000 --- a/src/main/resources/data/minecraft/tags/items/slabs.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "replace": false, - "values": [ - "unicopia:cloud_slab", - "unicopia:enchanted_cloud_slab", - "unicopia:dense_cloud_slab", - "unicopia:chitin_shell_slab", - "unicopia:smooth_marble_slab" - ] -} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/items/stairs.json b/src/main/resources/data/minecraft/tags/items/stairs.json deleted file mode 100644 index b952d114..00000000 --- a/src/main/resources/data/minecraft/tags/items/stairs.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "replace": false, - "values": [ - "unicopia:chitin_shell_stairs", - "unicopia:cloud_stairs", - "unicopia:enchanted_cloud_stairs", - "unicopia:dense_cloud_stairs" - ] -} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/items/wooden_doors.json b/src/main/resources/data/minecraft/tags/items/wooden_doors.json deleted file mode 100644 index 90a21f09..00000000 --- a/src/main/resources/data/minecraft/tags/items/wooden_doors.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "unicopia:library_door", - "unicopia:bakery_door" - ] -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/alfalfa_crops.json b/src/main/resources/data/unicopia/loot_tables/blocks/alfalfa_crops.json deleted file mode 100644 index 66ca97e0..00000000 --- a/src/main/resources/data/unicopia/loot_tables/blocks/alfalfa_crops.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", - "name": "unicopia:alfalfa_leaves", - "conditions": [ - { - "condition": "minecraft:block_state_property", - "block": "unicopia:alfalfa_crops", - "properties": { - "age": "7" - } - } - ], - "functions": [ - { - "function": "minecraft:set_count", - "count": { "min": 1, "max": 5 } - }, - { - "function": "minecraft:apply_bonus", - "enchantment": "minecraft:fortune", - "formula": "minecraft:uniform_bonus_count", - "parameters": { - "bonusMultiplier": 1 - } - }, - { - "function": "minecraft:limit_count", - "limit": { "max": 9, "min": 1 } - } - ] - }, - { - "type": "minecraft:item", - "name": "unicopia:alfalfa_seeds" - } - ] - } - ] - }, - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "function": "minecraft:apply_bonus", - "enchantment": "minecraft:fortune", - "formula": "minecraft:binomial_with_bonus_count", - "parameters": { - "extra": 3, - "probability": 0.5714286 - } - } - ], - "name": "unicopia:alfalfa_seeds" - } - ], - "conditions": [ - { - "condition": "minecraft:block_state_property", - "block": "unicopia:alfalfa_crops", - "properties": { - "age": "7" - } - } - ] - } - ], - "functions": [ - { - "function": "minecraft:explosion_decay" - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/apple_leaves.json b/src/main/resources/data/unicopia/loot_tables/blocks/apple_leaves.json deleted file mode 100644 index 2471851b..00000000 --- a/src/main/resources/data/unicopia/loot_tables/blocks/apple_leaves.json +++ /dev/null @@ -1,182 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:alternative", - "terms": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "item": "minecraft:shears" - } - }, - { - "condition": "minecraft:match_tool", - "predicate": { - "enchantments": [ - { - "enchantment": "minecraft:silk_touch", - "levels": { - "min": 1 - } - } - ] - } - } - ] - } - ], - "name": "unicopia:apple_seeds" - }, - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:survives_explosion" - }, - { - "condition": "minecraft:table_bonus", - "enchantment": "minecraft:fortune", - "chances": [ - 0.05, - 0.0625, - 0.083333336, - 0.1 - ] - } - ], - "name": "unicopia:apple_seeds" - } - ] - } - ] - }, - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:table_bonus", - "enchantment": "minecraft:fortune", - "chances": [ - 0.02, - 0.022222223, - 0.025, - 0.033333335, - 0.1 - ] - } - ], - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "min": 1.0, - "max": 2.0, - "type": "minecraft:uniform" - } - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "minecraft:stick" - } - ], - "conditions": [ - { - "condition": "minecraft:inverted", - "term": { - "condition": "minecraft:alternative", - "terms": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "item": "minecraft:shears" - } - }, - { - "condition": "minecraft:match_tool", - "predicate": { - "enchantments": [ - { - "enchantment": "minecraft:silk_touch", - "levels": { - "min": 1 - } - } - ] - } - } - ] - } - } - ] - }, - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:survives_explosion" - }, - { - "condition": "minecraft:table_bonus", - "enchantment": "minecraft:fortune", - "chances": [ - 0.005, - 0.0055555557, - 0.00625, - 0.008333334, - 0.025 - ] - } - ], - "name": "minecraft:apple" - } - ], - "conditions": [ - { - "condition": "minecraft:inverted", - "term": { - "condition": "minecraft:alternative", - "terms": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "item": "minecraft:shears" - } - }, - { - "condition": "minecraft:match_tool", - "predicate": { - "enchantments": [ - { - "enchantment": "minecraft:silk_touch", - "levels": { - "min": 1 - } - } - ] - } - } - ] - } - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/apple_sapling.json b/src/main/resources/data/unicopia/loot_tables/blocks/apple_sapling.json deleted file mode 100644 index 9cf00faf..00000000 --- a/src/main/resources/data/unicopia/loot_tables/blocks/apple_sapling.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "unicopia:apple_seeds" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/bakery_door.json b/src/main/resources/data/unicopia/loot_tables/blocks/bakery_door.json deleted file mode 100644 index fd1daddc..00000000 --- a/src/main/resources/data/unicopia/loot_tables/blocks/bakery_door.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:block_state_property", - "block": "unicopia:bakery_door", - "properties": { - "half": "lower" - } - } - ], - "name": "unicopia:bakery_door" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/chiseled_chitin_shell_block.json b/src/main/resources/data/unicopia/loot_tables/blocks/chiseled_chitin_shell_block.json deleted file mode 100644 index 290d721b..00000000 --- a/src/main/resources/data/unicopia/loot_tables/blocks/chiseled_chitin_shell_block.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "unicopia:chiseled_chitin_shell_block" - } - ] - } - ] -} diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/chiseled_marble_block.json b/src/main/resources/data/unicopia/loot_tables/blocks/chiseled_marble_block.json deleted file mode 100644 index 19a2a319..00000000 --- a/src/main/resources/data/unicopia/loot_tables/blocks/chiseled_marble_block.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "unicopia:smooth_marble_block", - "functions": [ - { - "function": "minecraft:set_count", - "count": 6 - }, - { - "function": "minecraft:explosion_decay" - } - ] - } - ] - } - ] -} diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/chitin_block.json b/src/main/resources/data/unicopia/loot_tables/blocks/chitin_block.json deleted file mode 100644 index c564b4df..00000000 --- a/src/main/resources/data/unicopia/loot_tables/blocks/chitin_block.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "unicopia:chitin_shell", - "functions": [ - { - "function": "minecraft:set_count", - "count": 3 - }, - { - "function": "minecraft:apply_bonus", - "enchantment": "minecraft:fortune", - "formula": "minecraft:uniform_bonus_count", - "parameters": { - "bonusMultiplier": 1 - } - }, - { - "function": "minecraft:limit_count", - "limit": { - "max": 3, - "min": 1 - } - }, - { - "function": "minecraft:explosion_decay" - } - ] - } - ] - } - ] -} diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/chitin_shell_block.json b/src/main/resources/data/unicopia/loot_tables/blocks/chitin_shell_block.json deleted file mode 100644 index 536544b6..00000000 --- a/src/main/resources/data/unicopia/loot_tables/blocks/chitin_shell_block.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "enchantments": [ - { - "enchantment": "minecraft:silk_touch", - "levels": { - "min": 1 - } - } - ] - } - } - ], - "name": "unicopia:chitin_shell_block" - }, - { - "type": "minecraft:item", - "name": "unicopia:chitin_shell", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "min": 2, - "max": 5 - } - } - ] - } - ] - } - ] - } - ] -} diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/chitin_shell_slab.json b/src/main/resources/data/unicopia/loot_tables/blocks/chitin_shell_slab.json deleted file mode 100644 index 8ee909db..00000000 --- a/src/main/resources/data/unicopia/loot_tables/blocks/chitin_shell_slab.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { "type": "minecraft:item", "name": "unicopia:chitin_shell_slab" } - ] - } - ] -} diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/chitin_shell_stairs.json b/src/main/resources/data/unicopia/loot_tables/blocks/chitin_shell_stairs.json deleted file mode 100644 index 8c7dd85a..00000000 --- a/src/main/resources/data/unicopia/loot_tables/blocks/chitin_shell_stairs.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { "type": "minecraft:item", "name": "unicopia:chitin_shell_stairs" } - ] - } - ] -} diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/cloud_anvil.json b/src/main/resources/data/unicopia/loot_tables/blocks/cloud_anvil.json deleted file mode 100644 index 2fcea06b..00000000 --- a/src/main/resources/data/unicopia/loot_tables/blocks/cloud_anvil.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { "type": "minecraft:item", "name": "unicopia:cloud_anvil" } - ] - } - ] -} diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/cloud_block.json b/src/main/resources/data/unicopia/loot_tables/blocks/cloud_block.json deleted file mode 100644 index d24306cf..00000000 --- a/src/main/resources/data/unicopia/loot_tables/blocks/cloud_block.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { "type": "minecraft:item", "name": "unicopia:cloud_block" } - ] - } - ] -} diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/cloud_farmland.json b/src/main/resources/data/unicopia/loot_tables/blocks/cloud_farmland.json deleted file mode 100644 index d24306cf..00000000 --- a/src/main/resources/data/unicopia/loot_tables/blocks/cloud_farmland.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { "type": "minecraft:item", "name": "unicopia:cloud_block" } - ] - } - ] -} diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/cloud_fence.json b/src/main/resources/data/unicopia/loot_tables/blocks/cloud_fence.json deleted file mode 100644 index d027f6a6..00000000 --- a/src/main/resources/data/unicopia/loot_tables/blocks/cloud_fence.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { "type": "minecraft:item", "name": "unicopia:cloud_fence" } - ] - } - ] -} diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/cloud_slab.json b/src/main/resources/data/unicopia/loot_tables/blocks/cloud_slab.json deleted file mode 100644 index 8ecbaad3..00000000 --- a/src/main/resources/data/unicopia/loot_tables/blocks/cloud_slab.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { "type": "minecraft:item", "name": "unicopia:cloud_slab" } - ] - } - ] -} diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/cloud_stairs.json b/src/main/resources/data/unicopia/loot_tables/blocks/cloud_stairs.json deleted file mode 100644 index 83ce5c08..00000000 --- a/src/main/resources/data/unicopia/loot_tables/blocks/cloud_stairs.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { "type": "minecraft:item", "name": "unicopia:cloud_stairs" } - ] - } - ] -} diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/cloudsdale_tomato_plant.json b/src/main/resources/data/unicopia/loot_tables/blocks/cloudsdale_tomato_plant.json deleted file mode 100644 index 6943f4fc..00000000 --- a/src/main/resources/data/unicopia/loot_tables/blocks/cloudsdale_tomato_plant.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { "type": "minecraft:item", "name": "minecraft:stick" } - ] - }, - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", "name": "unicopia:cloudsdale_tomato", - "conditions": [ - { - "condition": "minecraft:block_state_property", - "block": "unicopia:cloudsdale_tomato_plant", - "properties": { "age": "7" } - } - ], - "functions": [ - { - "function": "minecraft:set_count", - "count": { "min": 1, "max": 5 } - }, - { - "function": "minecraft:apply_bonus", - "enchantment": "minecraft:fortune", - "formula": "minecraft:uniform_bonus_count", - "parameters": { "bonusMultiplier": 1 } - }, - { - "function": "minecraft:limit_count", - "limit": { "max": 9, "min": 1 } - } - ] - }, - { - "type": "minecraft:item", "name": "unicopia:rotten_cloudsdale_tomato", - "conditions": [ - { - "condition": "minecraft:block_state_property", - "block": "unicopia:cloudsdale_tomato_plant", - "properties": { "age": "7" } - } - ], - "functions": [ - { "function": "minecraft:set_count", "count": 2 }, - { - "function": "minecraft:apply_bonus", - "enchantment": "minecraft:fortune", - "formula": "minecraft:uniform_bonus_count", - "parameters": { "bonusMultiplier": 1 } - } - ] - }, - { "type": "minecraft:item", "name": "unicopia:tomato_seeds" } - ] - } - ] - }, - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", "name": "unicopia:tomato_seeds", - "functions": [ - { - "function": "minecraft:apply_bonus", - "enchantment": "minecraft:fortune", - "formula": "minecraft:binomial_with_bonus_count", - "parameters": { "extra": 3, "probability": 0.5714286 } - } - ] - } - ], - "conditions": [ - { - "condition": "minecraft:block_state_property", - "block": "unicopia:cloudsdale_tomato_plant", - "properties": { "age": "7" } - } - ] - } - ], - "functions": [ - { "function": "minecraft:explosion_decay" } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/dense_cloud_block.json b/src/main/resources/data/unicopia/loot_tables/blocks/dense_cloud_block.json deleted file mode 100644 index fd643eda..00000000 --- a/src/main/resources/data/unicopia/loot_tables/blocks/dense_cloud_block.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { "type": "minecraft:item", "name": "unicopia:dense_cloud_block" } - ] - } - ] -} diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/dense_cloud_pillar.json b/src/main/resources/data/unicopia/loot_tables/blocks/dense_cloud_pillar.json deleted file mode 100644 index 4c3bb1a4..00000000 --- a/src/main/resources/data/unicopia/loot_tables/blocks/dense_cloud_pillar.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { "type": "minecraft:item", "name": "unicopia:dense_cloud_pillar" } - ] - } - ] -} diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/dense_cloud_slab.json b/src/main/resources/data/unicopia/loot_tables/blocks/dense_cloud_slab.json deleted file mode 100644 index b0797547..00000000 --- a/src/main/resources/data/unicopia/loot_tables/blocks/dense_cloud_slab.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { "type": "minecraft:item", "name": "unicopia:dense_cloud_slab" } - ] - } - ] -} diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/dense_cloud_stairs.json b/src/main/resources/data/unicopia/loot_tables/blocks/dense_cloud_stairs.json deleted file mode 100644 index fc87629a..00000000 --- a/src/main/resources/data/unicopia/loot_tables/blocks/dense_cloud_stairs.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { "type": "minecraft:item", "name": "unicopia:dense_cloud_stairs" } - ] - } - ] -} diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/diamond_door.json b/src/main/resources/data/unicopia/loot_tables/blocks/diamond_door.json deleted file mode 100644 index 14984e97..00000000 --- a/src/main/resources/data/unicopia/loot_tables/blocks/diamond_door.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:block_state_property", - "block": "unicopia:diamond_door", - "properties": { - "half": "lower" - } - } - ], - "name": "unicopia:diamond_door" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/enchanted_cloud_block.json b/src/main/resources/data/unicopia/loot_tables/blocks/enchanted_cloud_block.json deleted file mode 100644 index f2b6e778..00000000 --- a/src/main/resources/data/unicopia/loot_tables/blocks/enchanted_cloud_block.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { "type": "minecraft:item", "name": "unicopia:enchanted_cloud_block" } - ] - } - ] -} diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/enchanted_cloud_slab.json b/src/main/resources/data/unicopia/loot_tables/blocks/enchanted_cloud_slab.json deleted file mode 100644 index a6e8844e..00000000 --- a/src/main/resources/data/unicopia/loot_tables/blocks/enchanted_cloud_slab.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { "type": "minecraft:item", "name": "unicopia:enchanted_cloud_slab" } - ] - } - ] -} diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/enchanted_cloud_stairs.json b/src/main/resources/data/unicopia/loot_tables/blocks/enchanted_cloud_stairs.json deleted file mode 100644 index bef3bc7d..00000000 --- a/src/main/resources/data/unicopia/loot_tables/blocks/enchanted_cloud_stairs.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { "type": "minecraft:item", "name": "unicopia:enchanted_cloud_stairs" } - ] - } - ] -} diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/enchanted_torch.json b/src/main/resources/data/unicopia/loot_tables/blocks/enchanted_torch.json deleted file mode 100644 index de81c36c..00000000 --- a/src/main/resources/data/unicopia/loot_tables/blocks/enchanted_torch.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "unicopia:gem" - }, - { - "type": "minecraft:item", - "name": "unicopia:corrupted_gem" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/enchanted_wall_torch.json b/src/main/resources/data/unicopia/loot_tables/blocks/enchanted_wall_torch.json deleted file mode 100644 index de81c36c..00000000 --- a/src/main/resources/data/unicopia/loot_tables/blocks/enchanted_wall_torch.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "unicopia:gem" - }, - { - "type": "minecraft:item", - "name": "unicopia:corrupted_gem" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/hive_wall_block.json b/src/main/resources/data/unicopia/loot_tables/blocks/hive_wall_block.json deleted file mode 100644 index 58f52c09..00000000 --- a/src/main/resources/data/unicopia/loot_tables/blocks/hive_wall_block.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { "type": "minecraft:item", "name": "unicopia:hive_wall_block" } - ] - }, - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:table_bonus", - "enchantment": "minecraft:fortune", - "chances": [ - 0.06, 0.072222223, 0.075, 0.096666665, 1 - ] - } - ], - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "min": 1.0, - "max": 2.0, - "type": "minecraft:uniform" - } - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "unicopia:wheat_worms" - } - ] - } - ] -} diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/library_door.json b/src/main/resources/data/unicopia/loot_tables/blocks/library_door.json deleted file mode 100644 index 2f06cd53..00000000 --- a/src/main/resources/data/unicopia/loot_tables/blocks/library_door.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:block_state_property", - "block": "unicopia:library_door", - "properties": { - "half": "lower" - } - } - ], - "name": "unicopia:library_door" - } - ], - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ] - } - ] -} diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/misted_glass_door.json b/src/main/resources/data/unicopia/loot_tables/blocks/misted_glass_door.json deleted file mode 100644 index 00ee0bcd..00000000 --- a/src/main/resources/data/unicopia/loot_tables/blocks/misted_glass_door.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { "type": "minecraft:item", "name": "unicopia:misted_glass_door" } - ] - } - ] -} diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/slime_drip.json b/src/main/resources/data/unicopia/loot_tables/blocks/slime_drip.json deleted file mode 100644 index 7aaa0376..00000000 --- a/src/main/resources/data/unicopia/loot_tables/blocks/slime_drip.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", - "name": "unicopia:cucoon", - "conditions": [ - { - "condition": "minecraft:random_chance", - "chance": 0.125 - } - ], - "functions": [ - { - "function": "minecraft:set_count", - "count": { "min": 1, "max": 7 } - }, - { - "function": "minecraft:apply_bonus", - "enchantment": "minecraft:fortune", - "formula": "minecraft:uniform_bonus_count", - "parameters": { - "bonusMultiplier": 2 - } - } - ] - }, - { - "type": "minecraft:item", - "name": "minecraft:slime_ball", - "functions": [ - { - "function": "minecraft:set_count", - "count": { "min": 3, "max": 5 } - }, - { - "function": "minecraft:apply_bonus", - "enchantment": "minecraft:fortune", - "formula": "minecraft:uniform_bonus_count", - "parameters": { - "bonusMultiplier": 2 - } - }, - { - "function": "minecraft:explosion_decay" - } - ] - } - ] - } - ] - } - ] -} diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/slime_layer.json b/src/main/resources/data/unicopia/loot_tables/blocks/slime_layer.json deleted file mode 100644 index ca8f93c1..00000000 --- a/src/main/resources/data/unicopia/loot_tables/blocks/slime_layer.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:slime_ball", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "min": 2, - "max": 3 - } - } - ] - } - ] - } - ] -} diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/smooth_marble_block.json b/src/main/resources/data/unicopia/loot_tables/blocks/smooth_marble_block.json deleted file mode 100644 index b2fcc859..00000000 --- a/src/main/resources/data/unicopia/loot_tables/blocks/smooth_marble_block.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "unicopia:gem", - "functions": [ - { - "function": "minecraft:set_count", - "count": 9 - }, - { - "function": "minecraft:explosion_decay" - } - ] - } - ] - } - ] -} diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/smooth_marble_slab.json b/src/main/resources/data/unicopia/loot_tables/blocks/smooth_marble_slab.json deleted file mode 100644 index 5aab06f0..00000000 --- a/src/main/resources/data/unicopia/loot_tables/blocks/smooth_marble_slab.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "unicopia:gem", - "functions": [ - { - "function": "minecraft:set_count", - "count": 3 - }, - { - "function": "minecraft:explosion_decay" - } - ] - } - ] - } - ] -} diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/stick.json b/src/main/resources/data/unicopia/loot_tables/blocks/stick.json deleted file mode 100644 index 79c5974f..00000000 --- a/src/main/resources/data/unicopia/loot_tables/blocks/stick.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { "type": "minecraft:item", "name": "minecraft:stick" } - ] - } - ] -} diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/sugar_block.json b/src/main/resources/data/unicopia/loot_tables/blocks/sugar_block.json deleted file mode 100644 index bd44a051..00000000 --- a/src/main/resources/data/unicopia/loot_tables/blocks/sugar_block.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:sugar", - "functions": [ - { - "function": "minecraft:set_count", - "count": 4 - }, - { - "function": "minecraft:apply_bonus", - "enchantment": "minecraft:fortune", - "formula": "minecraft:uniform_bonus_count", - "parameters": { - "bonusMultiplier": 1 - } - }, - { - "function": "minecraft:limit_count", - "limit": { - "max": 6, - "min": 1 - } - }, - { - "function": "minecraft:explosion_decay" - } - ] - } - ] - } - ] -} diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/tomato_plant.json b/src/main/resources/data/unicopia/loot_tables/blocks/tomato_plant.json deleted file mode 100644 index 25bd9e71..00000000 --- a/src/main/resources/data/unicopia/loot_tables/blocks/tomato_plant.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "rolls": 1, - "entries": [ - { "type": "minecraft:item", "name": "minecraft:stick" } - ] - }, - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", "name": "unicopia:tomato", - "conditions": [ - { - "condition": "minecraft:block_state_property", - "block": "unicopia:tomato_plant", - "properties": { "age": "7" } - } - ], - "functions": [ - { - "function": "minecraft:set_count", - "count": { "min": 1, "max": 5 } - }, - { - "function": "minecraft:apply_bonus", - "enchantment": "minecraft:fortune", - "formula": "minecraft:uniform_bonus_count", - "parameters": { "bonusMultiplier": 1 } - }, - { - "function": "minecraft:limit_count", - "limit": { "max": 9, "min": 1 } - } - ] - }, - { - "type": "minecraft:item", "name": "unicopia:rotten_tomato", - "conditions": [ - { - "condition": "minecraft:block_state_property", - "block": "unicopia:tomato_plant", - "properties": { "age": "7" } - } - ], - "functions": [ - { "function": "minecraft:set_count", "count": 2 }, - { - "function": "minecraft:apply_bonus", - "enchantment": "minecraft:fortune", - "formula": "minecraft:uniform_bonus_count", - "parameters": { "bonusMultiplier": 1 } - } - ] - }, - { "type": "minecraft:item", "name": "unicopia:tomato_seeds" } - ] - } - ] - }, - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", "name": "unicopia:tomato_seeds", - "functions": [ - { - "function": "minecraft:apply_bonus", - "enchantment": "minecraft:fortune", - "formula": "minecraft:binomial_with_bonus_count", - "parameters": { "extra": 3, "probability": 0.5714286 } - } - ] - } - ], - "conditions": [ - { - "condition": "minecraft:block_state_property", - "block": "unicopia:tomato_plant", - "properties": { "age": "7" } - } - ] - } - ], - "functions": [ - { "function": "minecraft:explosion_decay" } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/loot_tables/entities/cloud.json b/src/main/resources/data/unicopia/loot_tables/entities/cloud.json deleted file mode 100644 index 69112ed8..00000000 --- a/src/main/resources/data/unicopia/loot_tables/entities/cloud.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "unicopia:dew_drop", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "min": 0, - "max": 4, - "type": "minecraft:uniform" - } - }, - { - "function": "minecraft:looting_enchant", - "count": { - "min": 0, - "max": 9 - } - } - ] - }, - { - "type": "minecraft:item", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "min": 2, - "max": 5, - "type": "minecraft:uniform" - } - }, - { - "function": "minecraft:looting_enchant", - "count": { - "min": 0, - "max": 6 - } - } - ], - "name": "unicopia:cloud_matter" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/loot_tables/entities/racing_cloud.json b/src/main/resources/data/unicopia/loot_tables/entities/racing_cloud.json deleted file mode 100644 index 8db9b3da..00000000 --- a/src/main/resources/data/unicopia/loot_tables/entities/racing_cloud.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "unicopia:dew_drop", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "min": 0, - "max": 4, - "type": "minecraft:uniform" - } - }, - { - "function": "minecraft:looting_enchant", - "count": { - "min": 0, - "max": 9 - } - } - ] - }, - { - "type": "minecraft:item", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "min": 0, - "max": 2, - "type": "minecraft:uniform" - } - }, - { - "function": "minecraft:looting_enchant", - "count": { - "min": 0, - "max": 1 - } - } - ], - "name": "unicopia:cloud_matter" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/loot_tables/entities/wild_cloud.json b/src/main/resources/data/unicopia/loot_tables/entities/wild_cloud.json deleted file mode 100644 index 8db9b3da..00000000 --- a/src/main/resources/data/unicopia/loot_tables/entities/wild_cloud.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "type": "minecraft:entity", - "pools": [ - { - "rolls": 1, - "entries": [ - { - "type": "minecraft:item", - "name": "unicopia:dew_drop", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "min": 0, - "max": 4, - "type": "minecraft:uniform" - } - }, - { - "function": "minecraft:looting_enchant", - "count": { - "min": 0, - "max": 9 - } - } - ] - }, - { - "type": "minecraft:item", - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "min": 0, - "max": 2, - "type": "minecraft:uniform" - } - }, - { - "function": "minecraft:looting_enchant", - "count": { - "min": 0, - "max": 1 - } - } - ], - "name": "unicopia:cloud_matter" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/pages/chapter_1_gems.json b/src/main/resources/data/unicopia/pages/chapter_1_gems.json deleted file mode 100644 index 67a81c45..00000000 --- a/src/main/resources/data/unicopia/pages/chapter_1_gems.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "parent": "unicopia:preface", - "texture": "unicopia:chapter_1_gems", - "state": "unread", - "conditions": { - "type": "unicopia:compound_condition", - "conditions": [] - } -} diff --git a/src/main/resources/data/unicopia/pages/preface.json b/src/main/resources/data/unicopia/pages/preface.json deleted file mode 100644 index 8d8509ea..00000000 --- a/src/main/resources/data/unicopia/pages/preface.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "texture": "unicopia:preface", - "state": "unread", - "conditions": { - "type": "unicopia:compound_condition", - "conditions": [] - } -} diff --git a/src/main/resources/data/unicopia/recipes/apple_cider.json b/src/main/resources/data/unicopia/recipes/apple_cider.json deleted file mode 100644 index 5360fdc7..00000000 --- a/src/main/resources/data/unicopia/recipes/apple_cider.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "SBS", - "NAN", - " S " - ], - "key": { - "S": [ - { "item": "minecraft:stick" } - ], - "B": [ - { "item": "unicopia:burned_juice" } - ], - "N": [ - { "item": "minecraft:iron_nugget" } - ], - "A": [ - { "item": "minecraft:apple" } - ] - }, - "result": { "item": "unicopia:apple_cider" } -} diff --git a/src/main/resources/data/unicopia/recipes/apple_seeds.json b/src/main/resources/data/unicopia/recipes/apple_seeds.json deleted file mode 100644 index cc19c806..00000000 --- a/src/main/resources/data/unicopia/recipes/apple_seeds.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { "item": "unicopia:rotten_apple" } - ], - "result": { "item": "unicopia:apple_seeds", "count": 3 } -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/bag_of_holding.json b/src/main/resources/data/unicopia/recipes/bag_of_holding.json deleted file mode 100644 index 3edc1214..00000000 --- a/src/main/resources/data/unicopia/recipes/bag_of_holding.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "#*#", - "#o#", - "*#*" - ], - "key": { - "o": [ - { "item": "minecraft:ender_chest" } - ], - "*": [ - { "item": "unicopia:gem" } - ], - "#": [ - { "item": "minecraft:leather" } - ] - }, - "result": { "item": "unicopia:bag_of_holding" } -} diff --git a/src/main/resources/data/unicopia/recipes/bakery_door.json b/src/main/resources/data/unicopia/recipes/bakery_door.json deleted file mode 100644 index ce2257c8..00000000 --- a/src/main/resources/data/unicopia/recipes/bakery_door.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "**", - "##", - "**" - ], - "key": { - "#": [ - { "item": "unicopia:sugar_block" } - ], - "*": [ - { "item": "minecraft:pink_dye" } - ] - }, - "result": { "item": "unicopia:bakery_door", "count": 3 } -} diff --git a/src/main/resources/data/unicopia/recipes/boop_o_roops.json b/src/main/resources/data/unicopia/recipes/boop_o_roops.json deleted file mode 100644 index dc1916b5..00000000 --- a/src/main/resources/data/unicopia/recipes/boop_o_roops.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "###", - "#*#", - "###" - ], - "key": { - "#": [ - { "item": "unicopia:sugar_block" } - ], - "*": [ - { "item": "unicopia:cereal" } - ] - }, - "result": { "item": "unicopia:boop_o_roops" } -} diff --git a/src/main/resources/data/unicopia/recipes/burned_juice.json b/src/main/resources/data/unicopia/recipes/burned_juice.json deleted file mode 100644 index 22ddf879..00000000 --- a/src/main/resources/data/unicopia/recipes/burned_juice.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "smelting", - "ingredient": { - "item": "unicopia:juice" - }, - "result": "unicopia:burned_juice", - "experience": 0, - "cookingtime": 100 -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/cereal.json b/src/main/resources/data/unicopia/recipes/cereal.json deleted file mode 100644 index 160aa5cc..00000000 --- a/src/main/resources/data/unicopia/recipes/cereal.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { "item": "minecraft:bowl" }, - { "item": "unicopia:alfalfa_seeds" }, - { "item": "unicopia:alfalfa_leaves" }, - { "item": "minecraft:milk_bucket" } - ], - "result": { "item": "unicopia:cereal" } -} diff --git a/src/main/resources/data/unicopia/recipes/chiseled_chitin_shell_block.json b/src/main/resources/data/unicopia/recipes/chiseled_chitin_shell_block.json deleted file mode 100644 index 543c436e..00000000 --- a/src/main/resources/data/unicopia/recipes/chiseled_chitin_shell_block.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - - "pattern": [ - "##", - "##" - ], - "key": { - "#": [ - { "item": "unicopia:chitin_shell_block" } - ] - }, - "result": { "item": "unicopia:chiseled_chitin_shell_block", "count": 4 } -} diff --git a/src/main/resources/data/unicopia/recipes/chiseled_marble_block.json b/src/main/resources/data/unicopia/recipes/chiseled_marble_block.json deleted file mode 100644 index 241824a0..00000000 --- a/src/main/resources/data/unicopia/recipes/chiseled_marble_block.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "SSS", - "SSS" - ], - "key": { - "S": [ - { "item": "unicopia:smooth_marble_block" } - ] - }, - "result": { "item": "unicopia:chiseled_marble_block" } -} diff --git a/src/main/resources/data/unicopia/recipes/chitin_shell.json b/src/main/resources/data/unicopia/recipes/chitin_shell.json deleted file mode 100644 index 6953f28a..00000000 --- a/src/main/resources/data/unicopia/recipes/chitin_shell.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "smelting", - "ingredient": { - "item": "unicopia:cucoon" - }, - "result": "unicopia:chitin_shell", - "experience": 0.3, - "cookingtime": 130 -} diff --git a/src/main/resources/data/unicopia/recipes/chitin_shell_block.json b/src/main/resources/data/unicopia/recipes/chitin_shell_block.json deleted file mode 100644 index e908e8f5..00000000 --- a/src/main/resources/data/unicopia/recipes/chitin_shell_block.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - - "pattern": [ - "###", - "###", - "###" - ], - "key": { - "#": [ - { "item": "unicopia:chitin_shell" } - ] - }, - "result": { "item": "unicopia:chitin_shell_block" } -} diff --git a/src/main/resources/data/unicopia/recipes/chitin_shell_block_to_chitin_shell.json b/src/main/resources/data/unicopia/recipes/chitin_shell_block_to_chitin_shell.json deleted file mode 100644 index 700d8b4d..00000000 --- a/src/main/resources/data/unicopia/recipes/chitin_shell_block_to_chitin_shell.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { "item": "unicopia:chitin_shell_block" } - ], - "result": { "item": "unicopia:chitin_shell", "count": 9 } -} diff --git a/src/main/resources/data/unicopia/recipes/chitin_shell_slab.json b/src/main/resources/data/unicopia/recipes/chitin_shell_slab.json deleted file mode 100644 index 83f0c4ca..00000000 --- a/src/main/resources/data/unicopia/recipes/chitin_shell_slab.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "###" - ], - "key": { - "#": [ - { "item": "unicopia:chitin_shell_block" } - ] - }, - "result": { "item": "unicopia:chitin_shell_slab", "count": 6 } -} diff --git a/src/main/resources/data/unicopia/recipes/chitin_shell_stairs.json b/src/main/resources/data/unicopia/recipes/chitin_shell_stairs.json deleted file mode 100644 index a7812a83..00000000 --- a/src/main/resources/data/unicopia/recipes/chitin_shell_stairs.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "# ", - "## ", - "###" - ], - "key": { - "#": [ - { "item": "unicopia:chitin_shell_block" } - ] - }, - "result": { "item": "unicopia:chitin_shell_stairs", "count": 4 } -} diff --git a/src/main/resources/data/unicopia/recipes/cloud_anvil.json b/src/main/resources/data/unicopia/recipes/cloud_anvil.json deleted file mode 100644 index a4bb8865..00000000 --- a/src/main/resources/data/unicopia/recipes/cloud_anvil.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "###", - " # ", - "###" - ], - "key": { - "#": [ - { "item": "unicopia:cloud_block" } - ] - }, - "result": { "item": "unicopia:cloud_anvil" } -} diff --git a/src/main/resources/data/unicopia/recipes/cloud_block.json b/src/main/resources/data/unicopia/recipes/cloud_block.json deleted file mode 100644 index e2dafa8b..00000000 --- a/src/main/resources/data/unicopia/recipes/cloud_block.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "##", - "##" - ], - "key": { - "#": [ - { "item": "unicopia:cloud_matter" } - ] - }, - "result": { "item": "unicopia:cloud_block" } -} diff --git a/src/main/resources/data/unicopia/recipes/cloud_block_to_cloud_matter.json b/src/main/resources/data/unicopia/recipes/cloud_block_to_cloud_matter.json deleted file mode 100644 index 17fb9a5d..00000000 --- a/src/main/resources/data/unicopia/recipes/cloud_block_to_cloud_matter.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { "item": "unicopia:cloud_block" } - ], - "result": { "item": "unicopia:cloud_matter", "count": 4 } -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/cloud_fence.json b/src/main/resources/data/unicopia/recipes/cloud_fence.json deleted file mode 100644 index 86eb04ea..00000000 --- a/src/main/resources/data/unicopia/recipes/cloud_fence.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - " ", - "BBB", - "B B" - ], - "key": { - "B": [ - { "item": "unicopia:cloud_block" } - ] - }, - "result": { "item": "unicopia:cloud_fence", "count": 3 } -} diff --git a/src/main/resources/data/unicopia/recipes/cloud_slab.json b/src/main/resources/data/unicopia/recipes/cloud_slab.json deleted file mode 100644 index 323759cf..00000000 --- a/src/main/resources/data/unicopia/recipes/cloud_slab.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "###" - ], - "key": { - "#": [ - { "item": "unicopia:cloud_block" } - ] - }, - "result": { "item": "unicopia:cloud_slab", "count": 6 } -} diff --git a/src/main/resources/data/unicopia/recipes/cloud_stairs.json b/src/main/resources/data/unicopia/recipes/cloud_stairs.json deleted file mode 100644 index cf57cd45..00000000 --- a/src/main/resources/data/unicopia/recipes/cloud_stairs.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "# ", - "## ", - "###" - ], - "key": { - "#": [ - { "item": "unicopia:cloud_block" } - ] - }, - "result": { "item": "unicopia:cloud_stairs", "count": 4 } -} diff --git a/src/main/resources/data/unicopia/recipes/construction_cloud_spawner.json b/src/main/resources/data/unicopia/recipes/construction_cloud_spawner.json deleted file mode 100644 index dfd918da..00000000 --- a/src/main/resources/data/unicopia/recipes/construction_cloud_spawner.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "***", - "*#*", - "***" - ], - "key": { - "#": [ - { "item": "unicopia:cloud_block" } - ], - "*": [ - { "item": "unicopia:cloud_matter" } - ] - }, - "result": { "item": "unicopia:construction_cloud_spawner" } -} diff --git a/src/main/resources/data/unicopia/recipes/cooked_zap_apple.json b/src/main/resources/data/unicopia/recipes/cooked_zap_apple.json deleted file mode 100644 index 4a37347e..00000000 --- a/src/main/resources/data/unicopia/recipes/cooked_zap_apple.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "smelting", - "ingredient": { - "item": "unicopia:zap_apple" - }, - "result": "unicopia:cooked_zap_apple", - "experience": 0.2, - "cookingtime": 430 -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/cucoon.json b/src/main/resources/data/unicopia/recipes/cucoon.json deleted file mode 100644 index d46f604d..00000000 --- a/src/main/resources/data/unicopia/recipes/cucoon.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "###", - "#*#", - "###" - ], - "key": { - "#": [ - { "item": "minecraft:slime_ball" } - ], - "*": [ - { "item": "unicopia:gem" } - ] - }, - "result": { "item": "unicopia:cucoon", "count": 1 } -} diff --git a/src/main/resources/data/unicopia/recipes/daffodil_daisy_sandwich_safe.json b/src/main/resources/data/unicopia/recipes/daffodil_daisy_sandwich_safe.json deleted file mode 100644 index 0bf2d48f..00000000 --- a/src/main/resources/data/unicopia/recipes/daffodil_daisy_sandwich_safe.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "unicopia:crafting_shaped", - "pattern": [ - " B ", - "FFF", - " B " - ], - "key": { - "B": [ - { "item": "minecraft:bread" } - ], - "F": [ - { "tag": "unicopia:non_toxic" } - ] - }, - "result": { "item": "unicopia:daffodil_daisy_sandwich", "tocicity": "safe", "count": 2 } -} diff --git a/src/main/resources/data/unicopia/recipes/daffodil_daisy_sandwich_toxic.json b/src/main/resources/data/unicopia/recipes/daffodil_daisy_sandwich_toxic.json deleted file mode 100644 index 3df71b66..00000000 --- a/src/main/resources/data/unicopia/recipes/daffodil_daisy_sandwich_toxic.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "unicopia:crafting_shaped", - "pattern": [ - " B ", - "FFF", - " B " - ], - "key": { - "B": [ - { "item": "minecraft:bread" } - ], - "F": [ - { "tag": "unicopia:non_toxic" }, - { "tag": "unicopia:fairly_toxic" } - ] - }, - "result": { "item": "unicopia:daffodil_daisy_sandwich", "toxicity": "fair", "count": 2 } -} diff --git a/src/main/resources/data/unicopia/recipes/dense_cloud_block.json b/src/main/resources/data/unicopia/recipes/dense_cloud_block.json deleted file mode 100644 index 090b9875..00000000 --- a/src/main/resources/data/unicopia/recipes/dense_cloud_block.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "##", - "##" - ], - "key": { - "#": [ - { "item": "unicopia:cloud_block" } - ] - }, - "result": { "item": "unicopia:dense_cloud_block" } -} diff --git a/src/main/resources/data/unicopia/recipes/dense_cloud_pillar.json b/src/main/resources/data/unicopia/recipes/dense_cloud_pillar.json deleted file mode 100644 index 66300403..00000000 --- a/src/main/resources/data/unicopia/recipes/dense_cloud_pillar.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "##", - "##", - "##" - ], - "key": { - "#": [ - { "item": "unicopia:dense_cloud_block" } - ] - }, - "result": { "item": "unicopia:dense_cloud_pillar" } -} diff --git a/src/main/resources/data/unicopia/recipes/dense_cloud_slab.json b/src/main/resources/data/unicopia/recipes/dense_cloud_slab.json deleted file mode 100644 index 92b21509..00000000 --- a/src/main/resources/data/unicopia/recipes/dense_cloud_slab.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "###" - ], - "key": { - "#": [ - { "item": "unicopia:dense_cloud_block" } - ] - }, - "result": { "item": "unicopia:dense_cloud_slab", "count": 6 } -} diff --git a/src/main/resources/data/unicopia/recipes/dense_cloud_stairs.json b/src/main/resources/data/unicopia/recipes/dense_cloud_stairs.json deleted file mode 100644 index bbd10b4e..00000000 --- a/src/main/resources/data/unicopia/recipes/dense_cloud_stairs.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "# ", - "## ", - "###" - ], - "key": { - "#": [ - { "item": "unicopia:dense_cloud_block" } - ] - }, - "result": { "item": "unicopia:dense_cloud_stairs", "count": 4 } -} diff --git a/src/main/resources/data/unicopia/recipes/diamond_door.json b/src/main/resources/data/unicopia/recipes/diamond_door.json deleted file mode 100644 index 4499cb13..00000000 --- a/src/main/resources/data/unicopia/recipes/diamond_door.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "##", - "##", - "##" - ], - "key": { - "#": [ - { "item": "minecraft:diamond" } - ] - }, - "result": { "item": "unicopia:diamond_door", "count": 3 } -} diff --git a/src/main/resources/data/unicopia/recipes/enchanted_cloud_block.json b/src/main/resources/data/unicopia/recipes/enchanted_cloud_block.json deleted file mode 100644 index 2c65761f..00000000 --- a/src/main/resources/data/unicopia/recipes/enchanted_cloud_block.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "unicopia:crafting_shaped", - "pattern": [ - "$$$", - "#*#", - "###" - ], - "key": { - "#": [ - { "item": "unicopia:cloud_block" } - ], - "$": [ - { "item": "unicopia:dew_drop" } - ], - "*": [ - { - "item": "minecraft:enchanted_book", - "enchantment": "minecraft:feather_falling" - } - ] - }, - "result": { "item": "unicopia:enchanted_cloud_block", "count": 5 } -} diff --git a/src/main/resources/data/unicopia/recipes/enchanted_cloud_slab.json b/src/main/resources/data/unicopia/recipes/enchanted_cloud_slab.json deleted file mode 100644 index e4bfa6d6..00000000 --- a/src/main/resources/data/unicopia/recipes/enchanted_cloud_slab.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "###" - ], - "key": { - "#": [ - { "item": "unicopia:enchanted_cloud_block" } - ] - }, - "result": { "item": "unicopia:enchanted_cloud_slab", "count": 6 } -} diff --git a/src/main/resources/data/unicopia/recipes/enchanted_cloud_stairs.json b/src/main/resources/data/unicopia/recipes/enchanted_cloud_stairs.json deleted file mode 100644 index 8346f7f3..00000000 --- a/src/main/resources/data/unicopia/recipes/enchanted_cloud_stairs.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "# ", - "## ", - "###" - ], - "key": { - "#": [ - { "item": "unicopia:enchanted_cloud_block" } - ] - }, - "result": { "item": "unicopia:enchanted_cloud_stairs", "count": 4 } -} diff --git a/src/main/resources/data/unicopia/recipes/enchanted_torch.json b/src/main/resources/data/unicopia/recipes/enchanted_torch.json deleted file mode 100644 index 112b076a..00000000 --- a/src/main/resources/data/unicopia/recipes/enchanted_torch.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - " #", - "/ " - ], - "key": { - "/": [ - { "item": "minecraft:stick" } - ], - "#": [ - { "item": "unicopia:gem", "nbt": { "spell": "light" } } - ] - }, - "result": { "item": "unicopia:enchanted_torch" } -} diff --git a/src/main/resources/data/unicopia/recipes/enchantments/alicorn_amulet.json b/src/main/resources/data/unicopia/recipes/enchantments/alicorn_amulet.json deleted file mode 100644 index 08528b6e..00000000 --- a/src/main/resources/data/unicopia/recipes/enchantments/alicorn_amulet.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "unicopia:enchanting_spell", - "input": { "item": "unicopia:corrupted_gem" }, - "ingredients": [ - { "spell": "inferno" }, - { "spell": "darkness" }, - { "spell": "necromancy" } - ], - "result": { "item": "unicopia:alicorn_amulet" } -} diff --git a/src/main/resources/data/unicopia/recipes/enchantments/awkward.json b/src/main/resources/data/unicopia/recipes/enchantments/awkward.json deleted file mode 100644 index 4e2b236c..00000000 --- a/src/main/resources/data/unicopia/recipes/enchantments/awkward.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "unicopia:enchanting_spell", - "input": { "item": "unicopia:gem" }, - "ingredients": [ - { "tag": "unicopia:harmonic_elementals" }, - { "tag": "unicopia:harmonic_elementals" }, - { "tag": "unicopia:harmonic_elementals" } - ], - "result": { - "item": [ - { "item": "unicopia:gem" }, - { "item": "unicopia:corrupted_gem" } - ], - "spell": "awkward" - } -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/enchantments/charge.json b/src/main/resources/data/unicopia/recipes/enchantments/charge.json deleted file mode 100644 index 0609da1b..00000000 --- a/src/main/resources/data/unicopia/recipes/enchantments/charge.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "unicopia:enchanting_spell", - "input": { "item": "unicopia:gem" }, - "ingredients": [ - { "tag": "unicopia:knowledge_elementals" }, - { "item": "unicopia:gem", "spell": "fire" }, - { "tag": "unicopia:fire_elementals" } - ], - "result": { "item": "unicopia:gem", "spell": "charge" } -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/enchantments/fire.json b/src/main/resources/data/unicopia/recipes/enchantments/fire.json deleted file mode 100644 index ebf91b2d..00000000 --- a/src/main/resources/data/unicopia/recipes/enchantments/fire.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "unicopia:enchanting_spell", - "input": { "item": "unicopia:gem" }, - "ingredients": [ - { "item": "unicopia:gem", "spell": "flame" }, - { "tag": "unicopia:fire_elementals" }, - { "tag": "unicopia:fire_elementals" } - ], - "result": { "item": "unicopia:gem", "spell": "fire" } -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/enchantments/flame.json b/src/main/resources/data/unicopia/recipes/enchantments/flame.json deleted file mode 100644 index fc54723a..00000000 --- a/src/main/resources/data/unicopia/recipes/enchantments/flame.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "unicopia:enchanting_spell", - "input": { "item": "unicopia:gem" }, - "ingredients": [ - { "tag": "unicopia:fire_elementals" }, - { "tag": "unicopia:fire_elementals" }, - { "tag": "unicopia:fire_elementals" } - ], - "result": { "item": "unicopia:gem", "spell": "fire" } -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/enchantments/ice.json b/src/main/resources/data/unicopia/recipes/enchantments/ice.json deleted file mode 100644 index 6be2f252..00000000 --- a/src/main/resources/data/unicopia/recipes/enchantments/ice.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "unicopia:enchanting_spell", - "input": { "item": "unicopia:gem" }, - "ingredients": [ - { "tag": "unicopia:ice_elementals" }, - { "tag": "unicopia:ice_elementals" }, - { "tag": "unicopia:ice_elementals" } - ], - "result": { "item": "unicopia:gem", "spell": "ice" } -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/enchantments/inferno.json b/src/main/resources/data/unicopia/recipes/enchantments/inferno.json deleted file mode 100644 index 89cde60e..00000000 --- a/src/main/resources/data/unicopia/recipes/enchantments/inferno.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "unicopia:enchanting_spell", - "input": { "item": "unicopia:gem" }, - "ingredients": [ - { "item": "unicopia:gem", "spell": "fire" }, - { "tag": "unicopia:fire_elementals" }, - { "tag": "unicopia:fire_elementals" } - ], - "result": { "item": "unicopia:corrupted_gem", "spell": "inferno" } -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/enchantments/light.json b/src/main/resources/data/unicopia/recipes/enchantments/light.json deleted file mode 100644 index 37228d1c..00000000 --- a/src/main/resources/data/unicopia/recipes/enchantments/light.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "unicopia:enchanting_spell", - "input": { "item": "unicopia:gem" }, - "ingredients": [ - { "tag": "unicopia:light_elementals" }, - { "item": "unicopia:gem", "spell": "fire" }, - { "tag": "unicopia:fresh_apples" } - ], - "result": { "item": "unicopia:gem", "spell": "light" } -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/enchantments/music_disc_crusade.json b/src/main/resources/data/unicopia/recipes/enchantments/music_disc_crusade.json deleted file mode 100644 index 61d0f2ab..00000000 --- a/src/main/resources/data/unicopia/recipes/enchantments/music_disc_crusade.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "unicopia:enchanting_spell", - "input": { "tag": "unicopia:sound_elementals"}, - "ingredients": [ - { "tag": "unicopia:apple_bloom_spirit" }, - { "tag": "unicopia:scootaloo_spirit" }, - { "tag": "unicopia:sweetie_belle_spirit" } - ], - "result": { - "item": "unicopia:music_disc_crusade" - } -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/enchantments/music_disc_funk.json b/src/main/resources/data/unicopia/recipes/enchantments/music_disc_funk.json deleted file mode 100644 index 9bc45a12..00000000 --- a/src/main/resources/data/unicopia/recipes/enchantments/music_disc_funk.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "unicopia:enchanting_spell", - "input": { "tag": "unicopia:sound_elementals"}, - "ingredients": [ - { "item": "minecraft:diamond" }, - { "item": "minecraft:diamond" }, - { "item": "unicopia:boop_o_roops" } - ], - "result": { - "item": "unicopia:music_disc_funk" - } -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/enchantments/music_disc_pet.json b/src/main/resources/data/unicopia/recipes/enchantments/music_disc_pet.json deleted file mode 100644 index 96d321dd..00000000 --- a/src/main/resources/data/unicopia/recipes/enchantments/music_disc_pet.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "unicopia:enchanting_spell", - "input": { "tag": "unicopia:sound_elementals"}, - "ingredients": [ - { "item": "unicopia:gem", "spell": "awkward" }, - { "item": "minecraft:feather" }, - { "item": "minecraft:carrot" } - ], - "result": { - "item": "unicopia:music_disc_pet" - } -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/enchantments/music_disc_popular.json b/src/main/resources/data/unicopia/recipes/enchantments/music_disc_popular.json deleted file mode 100644 index dc672725..00000000 --- a/src/main/resources/data/unicopia/recipes/enchantments/music_disc_popular.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "unicopia:enchanting_spell", - "input": { "tag": "unicopia:sound_elementals"}, - "ingredients": [ - { "item": "minecraft:diamond" }, - { "item": "minecraft:diamond" }, - { "item": "minecraft:diamond" } - ], - "result": { - "item": "unicopia:music_disc_popular" - } -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/enchantments/music_disc_shuffle.json b/src/main/resources/data/unicopia/recipes/enchantments/music_disc_shuffle.json deleted file mode 100644 index 96e935d7..00000000 --- a/src/main/resources/data/unicopia/recipes/enchantments/music_disc_shuffle.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "unicopia:enchanting_spell", - "input": { "tag": "unicopia:sound_elementals"}, - "ingredients": [ - { "item": "unicopia:gem", "spell": "awkward" }, - { "item": "unicopia:gem", "spell": "awkward" }, - { "item": "unicopia:gem", "spell": "awkward" } - ], - "result": { - "tag": "unicopia:sound_elementals" - } -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/enchantments/necromancy.json b/src/main/resources/data/unicopia/recipes/enchantments/necromancy.json deleted file mode 100644 index 09d2a439..00000000 --- a/src/main/resources/data/unicopia/recipes/enchantments/necromancy.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "unicopia:enchanting_spell", - "input": { "item": "unicopia:gem" }, - "ingredients": [ - { "tag": "unicopia:death_elementals" }, - { "tag": "unicopia:knowledge_elementals" }, - { "tag": "unicopia:rotting_elementals" } - ], - "result": { "item": "unicopia:corrupted_gem", "spell": "necromancy" } -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/enchantments/pilon.json b/src/main/resources/data/unicopia/recipes/enchantments/pilon.json deleted file mode 100644 index 51e1a1bb..00000000 --- a/src/main/resources/data/unicopia/recipes/enchantments/pilon.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "unicopia:enchanting_spell", - "input": { "item": "unicopia:gem" }, - "ingredients": [ - { "tag": "unicopia:knowledge_elementals" }, - { "tag": "unicopia:life_elementals" }, - { "item": "unicopia:gem", "spell": "charge" } - ], - "result": { "item": "unicopia:gem", "spell": "siphon" } -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/enchantments/portal.json b/src/main/resources/data/unicopia/recipes/enchantments/portal.json deleted file mode 100644 index 660e22fb..00000000 --- a/src/main/resources/data/unicopia/recipes/enchantments/portal.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "unicopia:enchanting_spell", - "input": { "item": "unicopia:gem" }, - "ingredients": [ - { "tag": "unicopia:sight_elementals" }, - { "item": "minecraft:ghast_tear" }, - { "tag": "unicopia:knowledge_elementals" }, - { "item": "unicopia:gem", "spell": "fire" } - ], - "result": { "item": "unicopia:gem", "spell": "portal" } -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/enchantments/repulsion.json b/src/main/resources/data/unicopia/recipes/enchantments/repulsion.json deleted file mode 100644 index 001bda55..00000000 --- a/src/main/resources/data/unicopia/recipes/enchantments/repulsion.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "unicopia:enchanting_spell", - "input": { "item": "unicopia:gem" }, - "ingredients": [ - { "tag": "unicopia:fire_elementals" }, - { "tag": "unicopia:shells" }, - { "item": "unicopia:gem", "spell": "shield" }, - { "tag": "unicopia:shells" } - ], - "result": { - "item": "unicopia:corrupted_gem", - "spell": "shield" - } -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/enchantments/reveal.json b/src/main/resources/data/unicopia/recipes/enchantments/reveal.json deleted file mode 100644 index 4adb9176..00000000 --- a/src/main/resources/data/unicopia/recipes/enchantments/reveal.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "unicopia:enchanting_spell", - "input": { "item": "unicopia:gem" }, - "ingredients": [ - { "item": "unicopia:gem", "spell": "light" }, - { "item": "unicopia:gem", "spell": "charge" }, - { "item": "unicopia:gem", "spell": "light" } - ], - "result": { "item": "unicopia:gem", "spell": "reveal" } -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/enchantments/shield.json b/src/main/resources/data/unicopia/recipes/enchantments/shield.json deleted file mode 100644 index 6d1e5a98..00000000 --- a/src/main/resources/data/unicopia/recipes/enchantments/shield.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "unicopia:enchanting_spell", - "input": { "item": "unicopia:gem" }, - "ingredients": [ - { "tag": "unicopia:shells" }, - { "tag": "unicopia:shells" }, - { "tag": "unicopia:shards" } - ], - "result": { "item": "unicopia:gem", "spell": "shield" } -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/enchantments/siphon.json b/src/main/resources/data/unicopia/recipes/enchantments/siphon.json deleted file mode 100644 index bfecd165..00000000 --- a/src/main/resources/data/unicopia/recipes/enchantments/siphon.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "unicopia:enchanting_spell", - "input": { "item": "unicopia:gem" }, - "ingredients": [ - { "tag": "unicopia:knowledge_elementals" }, - { "tag": "unicopia:life_elementals" }, - { "tag": "unicopia:dark_elementals" }, - { "item": "unicopia:gem", "spell": "siphon" } - ], - "result": { "item": "unicopia:corrupted_gem", "spell": "siphon" } -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/enchantments/suffering.json b/src/main/resources/data/unicopia/recipes/enchantments/suffering.json deleted file mode 100644 index 2af53b36..00000000 --- a/src/main/resources/data/unicopia/recipes/enchantments/suffering.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "unicopia:enchanting_spell", - "input": { "item": "unicopia:gem" }, - "ingredients": [ - { "item": "minecraft:fire_charge" }, - { "tag": "unicopia:death_elementals" }, - { "item": "unicopia:gem", "spell": "fire" } - ], - "result": { "item": "unicopia:corrupted_gem", "spell": "vortex" } -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/enchantments/vortex.json b/src/main/resources/data/unicopia/recipes/enchantments/vortex.json deleted file mode 100644 index 84657b5c..00000000 --- a/src/main/resources/data/unicopia/recipes/enchantments/vortex.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "unicopia:enchanting_spell", - "input": { "item": "unicopia:gem" }, - "ingredients": [ - { "tag": "unicopia:shells" }, - { "item": "unicopia:gem", "spell": "shield" }, - { "item": "unicopia:gem", "spell": "portal" } - ], - "result": { "item": "unicopia:gem", "spell": "vortex" } -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/flim_flam_cider.json b/src/main/resources/data/unicopia/recipes/flim_flam_cider.json deleted file mode 100644 index c5e2fa12..00000000 --- a/src/main/resources/data/unicopia/recipes/flim_flam_cider.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "unicopia:crafting_shaped", - "pattern": [ - "A B", - " J ", - " M " - ], - "key": { - "M": [ - { "item": "unicopia:mug" } - ], - "J": [ - { "item": "unicopia:juice" } - ], - "B": [ - { "item": "unicopia:burned_juice" } - ], - "A": [ - { "item": "minecraft:apple" } - ] - }, - "result": { "item": "unicopia:apple_cider", "toxicity": "fair" } -} diff --git a/src/main/resources/data/unicopia/recipes/gem.json b/src/main/resources/data/unicopia/recipes/gem.json deleted file mode 100644 index 548d6e3b..00000000 --- a/src/main/resources/data/unicopia/recipes/gem.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "SCB", - "CSC", - "BCS" - ], - "key": { - "S": [ - { "item": "minecraft:andesite" } - ], - "C": [ - { "item": "minecraft:white_concrete" }, - { "item": "minecraft:orange_concrete" }, - { "item": "minecraft:magenta_concrete" }, - { "item": "minecraft:light_blue_concrete" }, - { "item": "minecraft:yellow_concrete" }, - { "item": "minecraft:lime_concrete" }, - { "item": "minecraft:pink_concrete" }, - { "item": "minecraft:gray_concrete" }, - { "item": "minecraft:light_gray_concrete" }, - { "item": "minecraft:cyan_concrete" }, - { "item": "minecraft:purple_concrete" }, - { "item": "minecraft:blue_concrete" }, - { "item": "minecraft:brown_concrete" }, - { "item": "minecraft:green_concrete" }, - { "item": "minecraft:red_concrete" }, - { "item": "minecraft:black_concrete" } - ], - "B": [ - { "item": "minecraft:black_dye" } - ] - }, - "result": { "item": "unicopia:gem", "count": 4 } -} diff --git a/src/main/resources/data/unicopia/recipes/gem_repair.json b/src/main/resources/data/unicopia/recipes/gem_repair.json deleted file mode 100644 index d7e11ed6..00000000 --- a/src/main/resources/data/unicopia/recipes/gem_repair.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - " # ", - "###", - " # " - ], - "key": { - "#": [ - { "item": "unicopia:corrupted_gem" } - ] - }, - "result": { "item": "unicopia:gem", "count": 1 } -} diff --git a/src/main/resources/data/unicopia/recipes/hay_burger_safe.json b/src/main/resources/data/unicopia/recipes/hay_burger_safe.json deleted file mode 100644 index d14d322a..00000000 --- a/src/main/resources/data/unicopia/recipes/hay_burger_safe.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "unicopia:crafting_shaped", - "pattern": [ - "AAA", - "FTF", - "AAA" - ], - "key": { - "A": [ - { "item": "unicopia:alfalfa_leaves" } - ], - "T": [ - { "item": "unicopia:tomato" }, - { "item": "unicopia:cloudsdale_tomato" } - ], - "F": [ - { "tag": "unicopia:non_toxic" } - ] - }, - "result": { "item": "unicopia:hay_burger", "toxicity": "safe" } -} diff --git a/src/main/resources/data/unicopia/recipes/hay_burger_toxic.json b/src/main/resources/data/unicopia/recipes/hay_burger_toxic.json deleted file mode 100644 index 3a58d96b..00000000 --- a/src/main/resources/data/unicopia/recipes/hay_burger_toxic.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "unicopia:crafting_shaped", - "pattern": [ - "AAA", - "FTF", - "AAA" - ], - "key": { - "A": [ - { "item": "unicopia:alfalfa_leaves" } - ], - "T": [ - { "item": "unicopia:tomato" }, - { "item": "unicopia:rotten_tomato" }, - { "item": "unicopia:cloudsdale_tomato" }, - { "item": "unicopia:rotten_cloudsdale_tomato" } - ], - "F": [ - { "tag": "unicopia:non_toxic" }, - { "tag": "unicopia:fairly_toxic" } - ] - }, - "result": { "item": "unicopia:hay_burger", "toxicity": "fair", "count": 1 } -} diff --git a/src/main/resources/data/unicopia/recipes/hay_fries.json b/src/main/resources/data/unicopia/recipes/hay_fries.json deleted file mode 100644 index 0e5195c3..00000000 --- a/src/main/resources/data/unicopia/recipes/hay_fries.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - " AA", - "AAA", - "AA " - ], - "key": { - "A": [ - { "item": "unicopia:alfalfa_leaves" } - ] - }, - "result": { "item": "unicopia:hay_fries", "count": 7 } -} diff --git a/src/main/resources/data/unicopia/recipes/juice.json b/src/main/resources/data/unicopia/recipes/juice.json deleted file mode 100644 index f9dd495e..00000000 --- a/src/main/resources/data/unicopia/recipes/juice.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - - "pattern": [ - "AAA", - "AAA", - " B " - ], - "key": { - "B": [ - { "item": "minecraft:glass_bottle" } - ], - "A": [ - { "item": "minecraft:apple" } - ] - }, - "result": { "item": "unicopia:juice" } -} diff --git a/src/main/resources/data/unicopia/recipes/library_door.json b/src/main/resources/data/unicopia/recipes/library_door.json deleted file mode 100644 index 24799891..00000000 --- a/src/main/resources/data/unicopia/recipes/library_door.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "##", - "**", - "**" - ], - "key": { - "#": [ - { "item": "minecraft:dark_oak_planks" } - ], - "*": [ - { "item": "minecraft:oak_planks" } - ] - }, - "result": { "item": "unicopia:library_door", "count": 3 } -} diff --git a/src/main/resources/data/unicopia/recipes/meadow_brook_staff.json b/src/main/resources/data/unicopia/recipes/meadow_brook_staff.json deleted file mode 100644 index 75157f17..00000000 --- a/src/main/resources/data/unicopia/recipes/meadow_brook_staff.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - " /*", - " / ", - "/ " - ], - "key": { - "/": [ - { "item": "minecraft:stick" } - ], - "*": [ - { "item": "unicopia:gem" } - ] - }, - "result": { "item": "unicopia:meadow_brook_staff" } -} diff --git a/src/main/resources/data/unicopia/recipes/misted_glass_door.json b/src/main/resources/data/unicopia/recipes/misted_glass_door.json deleted file mode 100644 index 312c36d9..00000000 --- a/src/main/resources/data/unicopia/recipes/misted_glass_door.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "##", - "##", - "##" - ], - "key": { - "#": [ - { "item": "minecraft:white_stained_glass" } - ] - }, - "result": { "item": "unicopia:misted_glass_door", "count": 1 } -} diff --git a/src/main/resources/data/unicopia/recipes/moss_to_green_dye.json b/src/main/resources/data/unicopia/recipes/moss_to_green_dye.json deleted file mode 100644 index ecb8891c..00000000 --- a/src/main/resources/data/unicopia/recipes/moss_to_green_dye.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "#" - ], - "key": { - "#": [ - { "item": "unicopia:moss" } - ] - }, - "result": { "item": "minecraft:green_dye" } -} diff --git a/src/main/resources/data/unicopia/recipes/mug.json b/src/main/resources/data/unicopia/recipes/mug.json deleted file mode 100644 index 55404f71..00000000 --- a/src/main/resources/data/unicopia/recipes/mug.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "# #", - "* *", - " # " - ], - "key": { - "#": [ - { "item": "minecraft:stick" } - ], - "*": [ - { "item": "minecraft:iron_nugget" } - ] - }, - "result": { "item": "unicopia:mug" } -} diff --git a/src/main/resources/data/unicopia/recipes/racing_cloud_spawner.json b/src/main/resources/data/unicopia/recipes/racing_cloud_spawner.json deleted file mode 100644 index 41798db5..00000000 --- a/src/main/resources/data/unicopia/recipes/racing_cloud_spawner.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "***", - "###" - ], - "key": { - "#": [ - { "item": "unicopia:cloud_block" } - ], - "*": [ - { "item": "unicopia:cloud_matter" } - ] - }, - "result": { "item": "unicopia:racing_cloud_spawner" } -} diff --git a/src/main/resources/data/unicopia/recipes/remembrance_staff.json b/src/main/resources/data/unicopia/recipes/remembrance_staff.json deleted file mode 100644 index 1bd9db1e..00000000 --- a/src/main/resources/data/unicopia/recipes/remembrance_staff.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - " /*", - " / ", - "/ " - ], - "key": { - "/": [ - { "item": "minecraft:stick" } - ], - "*": [ - { - "item": "unicopia:gem", - "nbt": { - "spell": "fire" - } - } - ] - }, - "result": { "item": "unicopia:remembrance_staff" } -} diff --git a/src/main/resources/data/unicopia/recipes/salad_fair.json b/src/main/resources/data/unicopia/recipes/salad_fair.json deleted file mode 100644 index d65091fc..00000000 --- a/src/main/resources/data/unicopia/recipes/salad_fair.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "unicopia:crafting_shaped", - "pattern": [ - "FFF", - "FFF", - " B " - ], - "key": { - "B": [ - { "item": "minecraft:bowl" } - ], - "F": [ - { "tag": "unicopia:non_toxic" }, - { "tag": "unicopia:fairly_toxic" }, - { "item": "unicopia:alfalfa_leaves" } - ] - }, - "result": { "item": "unicopia:salad", "toxicity": "fair" } -} diff --git a/src/main/resources/data/unicopia/recipes/salad_lethal.json b/src/main/resources/data/unicopia/recipes/salad_lethal.json deleted file mode 100644 index e58858d2..00000000 --- a/src/main/resources/data/unicopia/recipes/salad_lethal.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "unicopia:crafting_shaped", - "pattern": [ - "FFF", - "FFF", - " B " - ], - "key": { - "B": [ - { "item": "minecraft:bowl" } - ], - "F": [ - { "item": "minecraft:golden_apple", "data": 0 }, - { "item": "unicopia:zap_apple", "data": 0 }, - { "item": "unicopia:corrupted_gem" }, - { "tag": "unicopia:non_toxic" }, - { "tag": "unicopia:fairly_toxic" }, - { "tag": "unicopia:severely_toxic" }, - { "item": "unicopia:alfalfa_leaves" }, - { "item": "unicopia:wheat_worms" } - ] - }, - "result": { "item": "unicopia:salad", "toxicity": "lethal" } -} diff --git a/src/main/resources/data/unicopia/recipes/salad_safe.json b/src/main/resources/data/unicopia/recipes/salad_safe.json deleted file mode 100644 index a2d61fe1..00000000 --- a/src/main/resources/data/unicopia/recipes/salad_safe.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "unicopia:crafting_shaped", - "pattern": [ - "FFF", - "FFF", - " B " - ], - "key": { - "B": [ - { "item": "minecraft:bowl" } - ], - "F": [ - { "tag": "unicopia:non_toxic" }, - { "item": "unicopia:alfalfa_leaves" } - ] - }, - "result": { "item": "unicopia:salad", "toxicity": "safe" } -} diff --git a/src/main/resources/data/unicopia/recipes/salad_severe.json b/src/main/resources/data/unicopia/recipes/salad_severe.json deleted file mode 100644 index e3f9c828..00000000 --- a/src/main/resources/data/unicopia/recipes/salad_severe.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "unicopia:crafting_shaped", - "pattern": [ - "FFF", - "FFF", - " B " - ], - "key": { - "B": [ - { "item": "minecraft:bowl" } - ], - "F": [ - { "tag": "unicopia:non_toxic" }, - { "tag": "unicopia:fairly_toxic" }, - { "tag": "unicopia:severely_toxic" }, - { "item": "unicopia:alfalfa_leaves" }, - { "item": "unicopia:wheat_worms" } - ] - }, - "result": { "item": "unicopia:salad", "toxicity": "severe" } -} diff --git a/src/main/resources/data/unicopia/recipes/slime_ball.json b/src/main/resources/data/unicopia/recipes/slime_ball.json deleted file mode 100644 index ce035db5..00000000 --- a/src/main/resources/data/unicopia/recipes/slime_ball.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - " # ", - "###", - " # " - ], - "key": { - "#": [ - { "item": "unicopia:moss" } - ] - }, - "result": { "item": "minecraft:slime_ball", "count": 5 } -} diff --git a/src/main/resources/data/unicopia/recipes/slime_layer.json b/src/main/resources/data/unicopia/recipes/slime_layer.json deleted file mode 100644 index 9f667707..00000000 --- a/src/main/resources/data/unicopia/recipes/slime_layer.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "###" - ], - "key": { - "#": [ - { "item": "minecraft:slime_ball" } - ] - }, - "result": { "item": "unicopia:slime_layer", "count": 6 } -} diff --git a/src/main/resources/data/unicopia/recipes/smooth_marble_block.json b/src/main/resources/data/unicopia/recipes/smooth_marble_block.json deleted file mode 100644 index 1ce9de81..00000000 --- a/src/main/resources/data/unicopia/recipes/smooth_marble_block.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "SSS", - "SSS", - "SSS" - ], - "key": { - "S": [ - { "item": "unicopia:gem" } - ] - }, - "result": { "item": "unicopia:smooth_marble_block" } -} diff --git a/src/main/resources/data/unicopia/recipes/smooth_marble_slab.json b/src/main/resources/data/unicopia/recipes/smooth_marble_slab.json deleted file mode 100644 index 0a31a65d..00000000 --- a/src/main/resources/data/unicopia/recipes/smooth_marble_slab.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "SSS", - "SSS" - ], - "key": { - "S": [ - { "item": "unicopia:gem" } - ] - }, - "result": { "item": "unicopia:smooth_marble_slab", "count": 2 } -} diff --git a/src/main/resources/data/unicopia/recipes/spellbook.json b/src/main/resources/data/unicopia/recipes/spellbook.json deleted file mode 100644 index c5e4f92f..00000000 --- a/src/main/resources/data/unicopia/recipes/spellbook.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { "item": "minecraft:book" }, - { "item": "unicopia:gem" } - ], - "result": { "item": "unicopia:spellbook" } -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/sugar_block.json b/src/main/resources/data/unicopia/recipes/sugar_block.json deleted file mode 100644 index 80a55cba..00000000 --- a/src/main/resources/data/unicopia/recipes/sugar_block.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "###", - "###", - "###" - ], - "key": { - "#": [ - { "item": "minecraft:sugar" } - ] - }, - "result": { "item": "unicopia:sugar_block" } -} diff --git a/src/main/resources/data/unicopia/recipes/sugar_block_to_sugar.json b/src/main/resources/data/unicopia/recipes/sugar_block_to_sugar.json deleted file mode 100644 index dd4653d9..00000000 --- a/src/main/resources/data/unicopia/recipes/sugar_block_to_sugar.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { "item": "unicopia:sugar_block" } - ], - "result": { "item": "minecraft:sugar", "count": 9 } -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/tomato_seeds.json b/src/main/resources/data/unicopia/recipes/tomato_seeds.json deleted file mode 100644 index 5af88b4f..00000000 --- a/src/main/resources/data/unicopia/recipes/tomato_seeds.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "ingredients": [ - { "tag": "unicopia:fresh_tomatoes" } - ], - "result": { "item": "unicopia:tomato_seeds", "count": 3 } -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/trick_green_apple.json b/src/main/resources/data/unicopia/recipes/trick_green_apple.json deleted file mode 100644 index 4679a912..00000000 --- a/src/main/resources/data/unicopia/recipes/trick_green_apple.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "unicopia:crafting_shapeless", - "ingredients": [ - { "item": "unicopia:zap_apple" }, - { "item": "minecraft:green_dye" } - ], - "result": { - "item": "unicopia:zap_apple", - "appearance": "unicopia:green_apple" - } -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/trick_red_apple.json b/src/main/resources/data/unicopia/recipes/trick_red_apple.json deleted file mode 100644 index 18af8f04..00000000 --- a/src/main/resources/data/unicopia/recipes/trick_red_apple.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "unicopia:crafting_shapeless", - "ingredients": [ - { "item": "unicopia:zap_apple" }, - { "item": "minecraft:red_dye" } - ], - "result": { - "item": "unicopia:zap_apple", - "appearance": "minecraft:apple" - } -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/trick_sour_apple.json b/src/main/resources/data/unicopia/recipes/trick_sour_apple.json deleted file mode 100644 index 9113eee9..00000000 --- a/src/main/resources/data/unicopia/recipes/trick_sour_apple.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "unicopia:crafting_shapeless", - "ingredients": [ - { "item": "unicopia:zap_apple" }, - { "item": "minecraft:yellow_dye" } - ], - "result": { - "item": "unicopia:zap_apple", - "appearance": "unicopia:sour_apple" - } -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/trick_sweet_apple.json b/src/main/resources/data/unicopia/recipes/trick_sweet_apple.json deleted file mode 100644 index 316ce262..00000000 --- a/src/main/resources/data/unicopia/recipes/trick_sweet_apple.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "unicopia:crafting_shapeless", - "ingredients": [ - { "item": "unicopia:zap_apple" }, - { "item": "minecraft:orange_dye" } - ], - "result": { - "item": "unicopia:zap_apple", - "appearance": "unicopia:sweet_apple" - } -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/trick_zap_apple.json b/src/main/resources/data/unicopia/recipes/trick_zap_apple.json deleted file mode 100644 index 005a5962..00000000 --- a/src/main/resources/data/unicopia/recipes/trick_zap_apple.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "unicopia:crafting_shapeless", - "ingredients": [ - { "item": "unicopia:zap_apple" }, - { "item": "minecraft:rotten_flesh" } - ], - "result": { - "item": "unicopia:zap_apple", - "appearance": "unicopia:cooked_zap_apple" - } -} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/water_bottle.json b/src/main/resources/data/unicopia/recipes/water_bottle.json deleted file mode 100644 index 3efabbec..00000000 --- a/src/main/resources/data/unicopia/recipes/water_bottle.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "unicopia:crafting_shaped", - "pattern": [ - "***", - " * ", - " # " - ], - "key": { - "#": [ - { "item": "minecraft:glass_bottle" } - ], - "*": [ - { "item": "unicopia:dew_drop" } - ] - }, - "result": { - "item": "minecraft:potion", - "potion": "minecraft:water" - } -} diff --git a/src/main/resources/data/unicopia/recipes/water_bucket.json b/src/main/resources/data/unicopia/recipes/water_bucket.json deleted file mode 100644 index 7b46dd29..00000000 --- a/src/main/resources/data/unicopia/recipes/water_bucket.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "***", - "***", - " # " - ], - "key": { - "#": [ - { "item": "minecraft:bucket" } - ], - "*": [ - { "item": "unicopia:dew_drop" } - ] - }, - "result": { "item": "minecraft:water_bucket" } -} diff --git a/src/main/resources/data/unicopia/recipes/wild_cloud_spawner.json b/src/main/resources/data/unicopia/recipes/wild_cloud_spawner.json deleted file mode 100644 index fb0de6f0..00000000 --- a/src/main/resources/data/unicopia/recipes/wild_cloud_spawner.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "pattern": [ - "###", - "###", - "###" - ], - "key": { - "#": [ - { "item": "unicopia:cloud_block" } - ] - }, - "result": { "item": "unicopia:wild_cloud_spawner" } -} diff --git a/src/main/resources/data/unicopia/structures/cloud/center.nbt b/src/main/resources/data/unicopia/structures/cloud/center.nbt deleted file mode 100644 index be563cdd1db0dfdd72204e934fa50d887b4e68c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21761 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 diff --git a/src/main/resources/data/unicopia/structures/cloud/huge_ruin/four.nbt b/src/main/resources/data/unicopia/structures/cloud/huge_ruin/four.nbt deleted file mode 100644 index edbaa224f0ada4a196f3501317ed172c302cc3f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11002 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 GkN*NHqc}$Z diff --git a/src/main/resources/data/unicopia/structures/cloud/huge_ruin/one.nbt b/src/main/resources/data/unicopia/structures/cloud/huge_ruin/one.nbt deleted file mode 100644 index 09821f59c731eb19ab14ff7eb8779315af3f7d77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17990 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 diff --git a/src/main/resources/data/unicopia/structures/cloud/huge_ruin/three.nbt b/src/main/resources/data/unicopia/structures/cloud/huge_ruin/three.nbt deleted file mode 100644 index 4ab48d7cbb73d2dd2595b9575a32f845070f86a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14771 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 diff --git a/src/main/resources/data/unicopia/structures/cloud/island.nbt b/src/main/resources/data/unicopia/structures/cloud/island.nbt deleted file mode 100644 index 0cdb68f8acb616ff70b0f3edbae8e71b7377c6d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 688 zcmb2|=3sz;-kWFhgdKSf6sG?%^b|Co*JhmF7jscaEYo#%$k}g)nm^juaB&`4vFPoO z{7ezopGPD6ZMD}HDQ^3T){8MFSFsMB*NRcw&>S26*fW^SFJv4S|U;>W>yIRA`16yizftr94TlObw zaGg7P0&Ldg=Sc_+m3pgoX+bTy+<3A$@M@?evs(JS184d{8lTwo`!ItX1GZ@As?|nN zi*D+(|CN$tJ=Rc|z%=7ccxZU4$c*}rM{?qJ%sXY0AR@thtdTRp%3#u0@!!ES*)u`<|sK6KuxCwAd(j#Pd}YWTbAQ;1r1)LZ{lc+knt;9>u4Y{V-8^%P%E%! S9Xa)<@(quypCX{ZzyJUy`8hBE diff --git a/src/main/resources/data/unicopia/structures/cloud/large_ruin.nbt b/src/main/resources/data/unicopia/structures/cloud/large_ruin.nbt deleted file mode 100644 index dff80e754c2a5dadbb9d36b9eda2525cc4f42bf4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10383 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 diff --git a/src/main/resources/data/unicopia/structures/cloud/ruin_segment.nbt b/src/main/resources/data/unicopia/structures/cloud/ruin_segment.nbt deleted file mode 100644 index e51c01e84d20b63c26c43311b8b6021ab460f776..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2272 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 diff --git a/src/main/resources/data/unicopia/structures/ground/tower.nbt b/src/main/resources/data/unicopia/structures/ground/tower.nbt deleted file mode 100644 index 402941fa353a026fd23aaf170446a54d5409706e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2362 zcma)5c{~&T8=tkGqa;~oq)Bq*__d)Nk@CYRUrTZnx#lQxrHE~!X=0;8FXk*qvYcP! zwh=~-mRup0`-sbKM=xWZXV+CcJ~Fa}Ycn~nRF+dD)H`%(0G{Y_3NW)PtE zHRR4QNx%%MfPHHoy)Rka@@b6QNZ+)NvzaZT@{V^hWxf>CWjA$!q}crS9TH! zP*Cg>dcej;hABY|__;Ri%L{t5cvtL?5N^(+@suUi3k2glKbh<#v87neSnlk+P)E(^ zvac4ZG&<&!TX3oc*m^s}idp3;uK?EX#d%f^N!u zGQYT=_I*XgZw3WGNw=C;yiqMY($=42slYuCewTZ|Hpi^zqTbj8as z#olLg#8LGM=JwpuAd9xrrZJ@#PNyE?I2t!0 z=rVBr{c}nJN&z~7Y9kt~7cAwn#hI4C&qV~&| zWL#NM*sxjc>1A$W*0e+xmW!%;JhwOP#+{hMRWJbSVpqSu_9)5RWWw0Q?;N>kQF$6_UDckZzKgPG!!)wKmBe-D+oW)3OgQhqQS51(pFfmZ zTc*RX0L#Veg(;%b;C8}XFlT$B)S+G@Qoog_7jDUn0LEE z^ZWB2!ZYxraiK0@K&1+#O;U1}D#-<8GQ^*m1cv&gK&*n<4N&xXW14^nz4t7%QJOR? z@ui`16$BZViaL!>Y?d}}991kM=ipsH1Ta}Df&wPgfmdv!vx59%)XQW zUJZyKHv!65?LZah8rURsR<^y{oGI~&EV)IuhD;$7trefUYZR8i4FK+E9oz>+^iPks z=aFF@2NY-clvb4c2)uZd>_Hj@=?`9mpo{E*0^|1mF3AW2com=ui#@oE6-Sd~b-F#U zA=DTb5qjdZtt3-r)&HLX(6XJhi?@&^)bPQvQBYWw9=OAq zsk^ru&lv?73=V<}plH`9Idq4|x229pVL)JaF_gLP5J!5E(9B*QRUYT2+fTM&8Q0yh z%)mUTiF29H(PW*7uJW4*Dyz!6gHixLoSs_Mb}O`xZf$ARL zkT6*;Qxa_m;LU z4JnS{vtz#g(TTSf-dRidiFkO6ODLQGhQb$2$uzh=v{8suE_MC@eTOoSfYY!R%lT)5 z&l-&CXVI|g%%eZ}4Hw3A2)|jr-f^8Hz-!i3e*PmKAsew{Bxtxg1D%XeI1c|w)`$4= z_t=1W?j}{wsX4sMqLo3G!Q3B7v_%-4;<>8JgO$f!wi8E>)x`)2@yHFH77T^|!q{_( zE|K#aWUyTDH~OApDssWz(+0sq{!G2=A-=oa&4YbOWEjsk{K7~(PuE@kryjs|9LhV5 zwLk%;F1QGvOS-AzLzCtZ;}CX5#O5UF{~U|1Jtlw#^t~{vnv46X z&>mt?)2g$%>8=ZeFOpRdojbNugcpB>|Bu#k|7cyVdtQUSb9GP)=duCDOI)B3{R6BMp*&He?vYFexLU%D5-QtQT$Xrl)CEwpf&8Dw&N>}0ea zu3)CEQhVOr^<{dn1MYUn-P9>ge)q+iVY?}1wWCf~S7gFwvd1dFAA=d`fD~VgR3wUw z-(lzXBjx^GS*u}BReM{z^p?`vW9GSS80}=_cW6>QVJi@0XR57JfnUI;=6LnYB5y({ z?pco4HclK~UR5ide7N#<t^g$mmlN(k&#jv-;!y6uNte-Nw|$tS}F;{sQm#gv*>c=r_x{E bbaYg)pxHIe(f1Yzv1N$=@^Py&1pxjAE9Z-l diff --git a/src/main/resources/data/unicopia/structures/ground/wizard_tower_blue.nbt b/src/main/resources/data/unicopia/structures/ground/wizard_tower_blue.nbt deleted file mode 100644 index f45ff2bd9b7dcc3a2d01e023014f4798ac0209f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7188 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 diff --git a/src/main/resources/data/unicopia/structures/ground/wizard_tower_red.nbt b/src/main/resources/data/unicopia/structures/ground/wizard_tower_red.nbt deleted file mode 100644 index 1e07bf36c7a6c0008e1d515e250a1d0fb7597871..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6463 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 WAcjT`kE=70uk_ayw|{e9U+

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 diff --git a/src/main/resources/assets/unicopia/sounds/slime/advance.ogg b/src/main/resources/assets/unicopia/sounds/slime/advance.ogg deleted file mode 100644 index 4670f57203f9ca9d6f40f8d68abed74de7980d85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9669 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 diff --git a/src/main/resources/assets/unicopia/textures/blocks/alfalfa/shaft.png b/src/main/resources/assets/unicopia/textures/blocks/alfalfa/shaft.png deleted file mode 100644 index cf9c0633db353bdf8693c3676a86f73b25d0a0f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 638 zcmV-^0)hRBP)kn=iYlhvA*%Ze%x(QH>=|MgOyK9cEcR-1`_Fj*0vB>YinlaK&Dm`15sb_%l>7!GRD+ZpZCkAcwDQc0CYQ|xbq{!{4_|_ zS4fpIRIw~hUgUpe&UDaq1gqab&RrVk=2RVkM5%M1MoVX0{nPX9`SENAIR`+&!C|Wh zP;ijfazq?@%G#REcZ5i%3VW6U`K zaB~iVwkSB*`5hImTY;t;WD0qV-EMN8gT_Q!aNuSLV3RD$=oo^-(-;%oXRV!$Q*iL7 zDG{!q*-Z-fBsC~)Q76uMj1mVw%EaBAgKIYoN+}wyECj4c*;gs zp@G7}fH5|7Y`neO-I<*kin-mpW3jOFU%i?4f4_NeW&n73Jrgz##q~#MYKZ2 z&B`qRDnUS;C518R_|&TP62MqE3q#&)d`AQUwBlc`9jm$FkN1qmkg8S*&}evEXzOZ} z@~Bp8E~7ODSs2?%N~mlJkSM|2sJl0jrV6W5H(Of($$J3x{&Y_)j8(;%Ud7`_l=X~8Bd-}j;4|I*3qr;cAx*af$yi17I?#sm zZmwUQwjB6O|Ea!yduBg=dTRf<{9 diff --git a/src/main/resources/assets/unicopia/textures/blocks/alfalfa/stage_1.png b/src/main/resources/assets/unicopia/textures/blocks/alfalfa/stage_1.png deleted file mode 100644 index 332d94095b71d2e4bc54911de23901bee4c4fbdd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ii4<#Ar_~T6C_v{Cj>NK+Pdq1 zXW(%cUgv_Q&Cd`06Mo86!*wyXaox1e#>U2jH!?((4Y$p;75{c0#N4#-gTah~r(Di2 zqwfAc!REW8s1>NHQL${|wR$!-wl>l4>x~V7poBd>tz{)6!v}rM?|zLZ+JW{mc)I$z JtaD0e0swpMK79ZH diff --git a/src/main/resources/assets/unicopia/textures/blocks/alfalfa/stage_2.png b/src/main/resources/assets/unicopia/textures/blocks/alfalfa/stage_2.png deleted file mode 100644 index a74bec8c7a698ad556a98452fe97aaf16f536d50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 495 zcmVCKtTEwD4 z)kUJX2}N^|yX5Y@d-ohJy(GO@^4%W4?|t6)_wLL7*9MQat^lz2ag|Yh`n<~8<^o6c z?(J=w+gAaQT~AXk%mPp-mBx%=&%rI8%mES$KRho5luFR;|4I+m@Z`;np)pB_bT4bPwdB%FB?Uy0#+nEKKafB;W^Q+M4&eJS!UQS6 zSlIVs0F;X9gAi|tRQhH2Ps^tzCx;GkU(*& zAcqM|!tcRsRJ}mqJAz}i)VyGsLh^rub0-|`JiRy-guM^-iN>w%n|7)M&Gr|nk7shj z+0!m-n+x_hs0652=Qy~ga;BqIe)ythSC%(KV}0I^0a^!b7GJu&dVR|_*5~cY@`l*m zxofj357HgB@7eutBKL@;Gf7sQd##$iy!c!kR(YvxajuiKZ)}AJt(vV@=Q#h@WW|vq l|GwSPoc#&7WbGSW;U6VE(ktafV!8kT002ovPDHLkV1k$0=g@P)4e-7>1vjz1!2|jw6YMC?1$bLJ-7=jfG8`#KJTZu8lv!pJ8bsu~X10g{C>uDn?K+ zf<;Im*rbsx-tO)0%+8L*oV!^!(fhic@7-s<_nQ~asSoe_mI+G!t2qgzab9EaZHpb# zW1<@DJhYQe@a6L(`(F!NFYXqi`_FDvey~!ozPVs402QkmA#k-P|P`b7%Ja7R1jc7J>*CHkMW*iXVsw7GkA{DFh4u0xyMFsgN|CWk0JJ+xGk0|-x*vE0<4DS&ntX-S>@8jI|5*KW{A&m z#%Se^=-riP%RrNj8+QxgTW;OhZV#N9KsMuROm7HC=LGFcFte$T_O=`Vxo*q)UXOe( zBTY=@cnBqelEv+nh-Zr0FpV6d{-aSl>$B89xTklSeR}! z93Yp2=KKd5H4kYsdb|?hx^5RVhPG~E4NSdBD25t8&cyff31?fpdn{B~Povo`fe(26CHpyOdbt5HQX;3OKAAX_kycmxZUzM5A^Wmr}Or4*qr33{Lo*vv4a4E`5`Q4j>qU@lg)Ja_&L X@`Y5FjB!G&00000NkvXXu0mjfuB11% diff --git a/src/main/resources/assets/unicopia/textures/blocks/bakery_door_lower.png b/src/main/resources/assets/unicopia/textures/blocks/bakery_door_lower.png deleted file mode 100644 index cf8b541b86bc0cfa02899babbfadfeb0b5950aac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 590 zcmV-U0x0nJL&rEl%w|_$&m>$EWkvl z5e!8r?g$m>n@kjd5F^($Iyw8o|3acr+)*lyVWK$pPhE0?9GSbarjSTl0Vr;O_hsGr zBBf1Zu4}45%2F91SU{1kF==Je3?6okN;*D(%O9IuV*{eB(IyO$Zt_@-gJzrJ#%*0Z zeDnB#W;XA3k4^(ca00auA_`UD&MP@GJF1Lz$ZcIvUp=Q>ToF-Nxbw5Nl;Z=OKt#}| zqTH0axsP>-&3*xJUAh4i+XA3QL3uJ@tj55Eh5IH~qceXm8GENkj~!4&msTh!xRa%8 z+&ev@5yeDEy#tLjl#46s$)x9@(@j6UPUL7oyTtJ1kaBU=vrxGyD^|YVyy}!69$lG&06>l9(P z8KJW|DGDNqM6is)SQ5)LAcxZiByUN>^EtmuA*IARFOl8}^&VkuXuV}%iMB2=QEqCc cO~w|%UwO+5AP1*qkN^Mx07*qoM6N<$f}kA?#sB~S diff --git a/src/main/resources/assets/unicopia/textures/blocks/bakery_door_upper.png b/src/main/resources/assets/unicopia/textures/blocks/bakery_door_upper.png deleted file mode 100644 index 69ef5b6a468014c0cc5a1ec130cfb96b68c547e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 502 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 diff --git a/src/main/resources/assets/unicopia/textures/blocks/chiseled_marble_block_side.png b/src/main/resources/assets/unicopia/textures/blocks/chiseled_marble_block_side.png deleted file mode 100644 index 81a10ff48b59b339b5b01ce392c9317764a73e14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3142 zcmV-M47u}(P)uJ@VVD_UC<6{NG_fI~0ue<-1QkJoA_k0xBC#Thg@9ne9*`iQ#9$Or zQF$}6R&?d%y_c8YA7_1QpS|}zXYYO1x&V;8{kgn!SPFnNo`4_X6{c}T{8k*B#$jdxfFg<9uYy1K45IaYvHg`_dOZM)Sy63ve6hvv z1)yUy0P^?0*fb9UASvow`@mQCp^4`uNg&9uGcn1|&Nk+9SjOUl{-OWr@Hh0;_l(8q z{wNRKos+;6rV8ldy0Owz(}jF`W(JeRp&R{qi2rfmU!TJ;gp(Kmm5I1s5m_f-n#TRsj}B0%?E`vOzxB2#P=n*a3EfYETOrKoe*ICqM@{4K9Go;5xVgZi5G4 z1dM~{UdP6d+Yd3o?MrAqM0Kc|iV92owdyL5UC#5<>aVCa44|hpM4E zs0sQWIt5*Tu0n&*J!lk~f_{hI!w5`*sjxDv4V%CW*ah~3!{C*0BD@;TgA3v9a1~q+ zAA{TB3-ERLHar49hi4Ih5D^-ph8Q6X#0?2VqLBoIkE}zAkxHZUgRb+f=nat zP#6>iMMoK->`~sRLq)(kHo*Vn{;LcG6+edD1=7D>9j^O?D{Qg|tCDK{ym)H7&wDr6*;uGTJg8GHjVbnL{!cWyUB7MT6o-VNo_w8Yq`2<5Ub)hw4L3rj}5@qxMs0 zWMyP6Wy582WNT#4$d1qunl{acmP#w5ouJ*Jy_Zv#bCKi7ZIf$}8d zZdVy&)LYdbX%I9R8VMQ|8r>Q*nyQ)sn)#Z|n)kKvS`4iu ztvy=3T65Yu+7a4Yv^%sXb>ww?bn(=Yu(!=O6^iuTp>)p_Y^{w=i z^lS773}6Fm1Fpe-gF!>Ip{*g$u-szvGhed;vo5pW&GpS$<~8QGEXWp~7V9lKEnZq0SaK{6Sl+dwSOr*Z zvFf(^Xl-N7w{EeXveC4Ov)N}e%%C!Y7^RFWwrE>d+x51mZQt2h+X?JW*!^a2WS?Sx z)P8cQ&Qi|OhNWW;>JChYI)@QQx?`Nj^#uJBl~d&PK+RZLOLos~K(b5>qmrMN0})tOkySZ3_W zICNY@+|jrX%s^&6b2i>5eqa0y%Z;^%^_=a@u3%4b9605ii3Ep)@`TAmhs0fpQ%O!q zl}XcFH*PieWwLj2ZSq`7V9Mc?h17`D)-+sNT-qs~3@?S(ldh7UlRlVXkWrK|vf6I- z?$tAVKYn8-l({mqQ$Q8{O!WzMg`0(=S&msXS#Pt$vrpzo=kRj+a`kh!z=6$;c zwT88(J6|n-WB%w`m$h~4pmp)YIh_ z3ETV2tjiAU!0h1dxU-n=E9e!)6|Z;4?!H=SSy{V>ut&IOq{_dl zbFb#!9eY1iCsp6Bajj|Hr?hX|zPbJE{X++w546-O*Ot`2Kgd0Jx6Z4syT zu9enWavU5N9)I?I-1m1*_?_rJ$vD~agVqoG+9++s?NEDe`%Fht$4F;X=in*dQ{7$m zU2Q)a|9JSc+Uc4zvS-T963!N$T{xF_ZuWe}`RNOZ7sk3{yB}PPym+f8xTpV;-=!;; zJuhGEb?H5K#o@~7t9DmUU1MD9xNd#Dz0azz?I)|B+WM{g+Xrk0I&awC=o(x)cy`EX z=)z6+o0o6-+`4{y+3mqQ%kSJBju{@g%f35#FZJHb`&swrA8dGtepviS>QUumrN{L@ z>;2q1Vm)$Z)P1z?N$8UYW2~{~zhwUMVZ87u`Dx{Z>O|9|`Q+&->FRy-Sjp7DHs zy69KwU-!MxeeuI@&cF4|M9z%AfP?@5 z`Tzg`fam}Kbua(`>RI+y?e7jT@qQ9J+u0gFjQK~y-)ozKlr6Hyd~@n2 z0f})VVkAa1BAS?x_y@aj3Ak)+Vswmv1|ckrf)3aYwXM_nICpwo4e3nT)YZu^&$~I+ zo3|~qv~ZI_&}ZJc#%ZU+G{*1tjA(8AZqJB_xym|Cb9cO3dxytn5cIk3)cJYtaeL_& zMfduDxKW>@bJ1pDelgeW2P=0l#_-#}K(uCBtETG`#R*C&0Gh4~kaMw*TZxRQR?2)n zI_A;+6+}j)X_|A^AKqK0xK{w({s4e5iUBzHyE$iFrz0lzC*GOaZnR7yV&Wt*(^_S} z#EH=O;4-znwoefL<>=dYHlMEJwSB^Zv;Ok=Gm3j_yU{Y68|$<_eqtC6sa0#dc=DKc zyZe{UdO8wjREhCDiHLcYlu!L+2vffhfzo(f^FL`1eivR!s diff --git a/src/main/resources/assets/unicopia/textures/blocks/chitin_block_bottom.png b/src/main/resources/assets/unicopia/textures/blocks/chitin_block_bottom.png deleted file mode 100644 index 6f1e1a72e213ad6a2a432aa45560ddc911ddb521..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3488 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 diff --git a/src/main/resources/assets/unicopia/textures/blocks/chitin_block_chissled_half.png b/src/main/resources/assets/unicopia/textures/blocks/chitin_block_chissled_half.png deleted file mode 100644 index d76f25f8334709656e74e1b8ebc3f2ec9c5d8ad0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3368 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 diff --git a/src/main/resources/assets/unicopia/textures/blocks/chitin_block_spike.png b/src/main/resources/assets/unicopia/textures/blocks/chitin_block_spike.png deleted file mode 100644 index 4ce1b60a15d93395f110cfbef53a1b1bdd3ce09e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3391 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 VaFB`P(WU?Z002ovPDHLkV1kPIf1v;X diff --git a/src/main/resources/assets/unicopia/textures/blocks/chitin_block_top.png b/src/main/resources/assets/unicopia/textures/blocks/chitin_block_top.png deleted file mode 100644 index ef56786b9bbe999759f05b2a17e5c309655a7f44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3383 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 N002ovPDHLkV1n1cf&u^l diff --git a/src/main/resources/assets/unicopia/textures/blocks/chitin_block_uncovered.png b/src/main/resources/assets/unicopia/textures/blocks/chitin_block_uncovered.png deleted file mode 100644 index 48cffc057e1914eb1f05a39709007b555b829aab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3378 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 Y0>eR@P6FP53jhEB07*qoM6N<$f_0hcz5oCK diff --git a/src/main/resources/assets/unicopia/textures/blocks/cloud_farmland_wet.png b/src/main/resources/assets/unicopia/textures/blocks/cloud_farmland_wet.png deleted file mode 100644 index 1bbad68065744056920c4a66ad0d3f9de13938f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3076 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 SbA)UF0000wddsk diff --git a/src/main/resources/assets/unicopia/textures/blocks/dense_cloud_block.png b/src/main/resources/assets/unicopia/textures/blocks/dense_cloud_block.png deleted file mode 100644 index 1393e598d55df79d4059ef55c74b45b211e93d20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2971 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 RRsH|~002ovPDHLkV1ncEwiN&X diff --git a/src/main/resources/assets/unicopia/textures/blocks/dense_cloud_pillar.png b/src/main/resources/assets/unicopia/textures/blocks/dense_cloud_pillar.png deleted file mode 100644 index 07937b38d0db8fc738def9715ed5d9687fafc0a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3052 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 a{lF)bs?a4|kMC*#0000b6r^?)=! z(DaLJ;;`GlV6U75;OO$2reCDdA1rVi_Kf=aJpf)pa=<1I`=g%wQ4wPYWbHskH9nyQu`0??kVv0N`4 z8-T;@3eTTBQuUKIlX#5fxrz@v&y2fUs$lSjJ-fqgsRCgnJbhffRq(GWPASsT2t zH~uIg4izbAVMDNRHnNSB5aT$Ea5ai*-7ZG=W@hy1MM4(3t9y<#=YE{?KAbC-PAU@L zaH^gei;6a%8tS)yUY8gJ$R*-j$KuY1x7@ut2Eg)ZgYCi|hH3He<~8k`G|$Oix(vXt z;03sj#k1Nw0m$XkM%#+{noGqU!Kq4C6F>0i>`2@m|4yO;06cl$lmNxU1L|%q5MZTn zq<#03O~#Fwd?n8S7 z0bqhX07A9^$ZqaRfJiJVcy8YSkaIIrdfN*Jm5%f0_6_Q8P5$!p^yeL9Hu4yz1%P2% zOl5EkWUXk=^FNb{Pge>PE`sZP-QxRN>wXJAga%n)5#{eM4UX_C;E)fUNzF1UHaYy*CaW2Nkq5ufHRF<)*2&gbTpH4Ql7N(O;#>b+}jx@+_ z?jn*e{+57Fjhg#!-0ut9;@jbY5JD`SR0iUK5JJ3`{|0$rm&($q%7J*0ZG8L!JaBIP zCIDjVTRnMjyfE+aV0|mdgILQE)_*5Ew!YPy2Rr*kt^W)0KuH@QznH;Jr`mYnFS?#Q z$ZX{GYJMK9_2R*rKlh87fSlF;fbKk4I;qHek)#N-KuLP-@}#g!<=#B7OXaRSuuJ9c zJP<+*%!3(mX~=^i5Bl?<9~1iWAlx5(znyQZjlMjv(<$t9N_8X`=fQ)QZ>YO9GNJxp zU>>M`A(x1wQg$I8gnNV`4~9JWqCANBd7!kunz#};hPQRE(2f`8#qq+t$Zqa>rQD4N zFMgWrIRCml==5F~muJ@VVD_UC<6{NG_fI~0ue<-1QkJoA_k0xBC#Thg@9ne9*`iQ#9$Or zQF$}6R&?d%y_c8YA7_1QpS|}zXYYO1x&V;8{kgn!SPFnNo`4_X6{c}T{8k*B#$jdxfFg<9uYy1K45IaYvHg`_dOZM)Sy63ve6hvv z1)yUy0P^?0*fb9UASvow`@mQCp^4`uNg&9uGcn1|&Nk+9SjOUl{-OWr@Hh0;_l(8q z{wNRKos+;6rV8ldy0Owz(}jF`W(JeRp&R{qi2rfmU!TJ;gp(Kmm5I1s5m_f-n#TRsj}B0%?E`vOzxB2#P=n*a3EfYETOrKoe*ICqM@{4K9Go;5xVgZi5G4 z1dM~{UdP6d+Yd3o?MrAqM0Kc|iV92owdyL5UC#5<>aVCa44|hpM4E zs0sQWIt5*Tu0n&*J!lk~f_{hI!w5`*sjxDv4V%CW*ah~3!{C*0BD@;TgA3v9a1~q+ zAA{TB3-ERLHar49hi4Ih5D^-ph8Q6X#0?2VqLBoIkE}zAkxHZUgRb+f=nat zP#6>iMMoK->`~sRLq)(kHo*Vn{;LcG6+edD1=7D>9j^O?D{Qg|tCDK{ym)H7&wDr6*;uGTJg8GHjVbnL{!cWyUB7MT6o-VNo_w8Yq`2<5Ub)hw4L3rj}5@qxMs0 zWMyP6Wy582WNT#4$d1qunl{acmP#w5ouJ*Jy_Zv#bCKi7ZIf$}8d zZdVy&)LYdbX%I9R8VMQ|8r>Q*nyQ)sn)#Z|n)kKvS`4iu ztvy=3T65Yu+7a4Yv^%sXb>ww?bn(=Yu(!=O6^iuTp>)p_Y^{w=i z^lS773}6Fm1Fpe-gF!>Ip{*g$u-szvGhed;vo5pW&GpS$<~8QGEXWp~7V9lKEnZq0SaK{6Sl+dwSOr*Z zvFf(^Xl-N7w{EeXveC4Ov)N}e%%C!Y7^RFWwrE>d+x51mZQt2h+X?JW*!^a2WS?Sx z)P8cQ&Qi|OhNWW;>JChYI)@QQx?`Nj^#uJBl~d&PK+RZLOLos~K(b5>qmrMN0})tOkySZ3_W zICNY@+|jrX%s^&6b2i>5eqa0y%Z;^%^_=a@u3%4b9605ii3Ep)@`TAmhs0fpQ%O!q zl}XcFH*PieWwLj2ZSq`7V9Mc?h17`D)-+sNT-qs~3@?S(ldh7UlRlVXkWrK|vf6I- z?$tAVKYn8-l({mqQ$Q8{O!WzMg`0(=S&msXS#Pt$vrpzo=kRj+a`kh!z=6$;c zwT88(J6|n-WB%w`m$h~4pmp)YIh_ z3ETV2tjiAU!0h1dxU-n=E9e!)6|Z;4?!H=SSy{V>ut&IOq{_dl zbFb#!9eY1iCsp6Bajj|Hr?hX|zPbJE{X++w546-O*Ot`2Kgd0Jx6Z4syT zu9enWavU5N9)I?I-1m1*_?_rJ$vD~agVqoG+9++s?NEDe`%Fht$4F;X=in*dQ{7$m zU2Q)a|9JSc+Uc4zvS-T963!N$T{xF_ZuWe}`RNOZ7sk3{yB}PPym+f8xTpV;-=!;; zJuhGEb?H5K#o@~7t9DmUU1MD9xNd#Dz0azz?I)|B+WM{g+Xrk0I&awC=o(x)cy`EX z=)z6+o0o6-+`4{y+3mqQ%kSJBju{@g%f35#FZJHb`&swrA8dGtepviS>QUumrN{L@ z>;2q1Vm)$Z)P1z?N$8UYW2~{~zhwUMVZ87u`Dx{Z>O|9|`Q+&->FRy-Sjp7DHs zy69KwU-!MxeeuI@&cF4|M9z%AfP?@5 z`Tzg`fam}Kbua(`>RI+y?e7jT@qQ9J+u0-8xgK~y-)O_Ez{8&?#CzjK+HV`14= zbcrorA{94@A4;ImhZg$JOCgX#AyA4_R5!MRlthy4C{k?2(#)B2>BF>X_shPnwHKQ$ zW_NMI|I7u@^1pmpfYFgei7&OngDpX6kgrB?Z=qSQn*V|Wux+58@dX^I<}w9!Qw@pP zU7T1C&U!rP)ij6oh=YDvcKb~CDrD` zW)6VSpj9QY-GJ#_BAaz6LnV9k5vI2gBMfI6fQu`5_fHJ4kyL*13BEf9Ia$E@ICA+R z(rtkApcQOn)gAVCEK+F-Ujfgrt6PNVdHzR4{PH?ZdX1djZOv~ZN&jIb(fY{Vj^O1R zSmq9+HN7@;8}RZHyesH56jBLr!Z4ag`VS?aEezh56i#sU$rC;F+JYD?sfOtyQU>U@ z6jEu#&25~#9(!ae+1nNv9f(5m=QtvR3k6Hm~YKGNn&70|p)w<-XHq^2N z>tH;02yJ-O5=84Mo#6ToiXzbKNN!gkGXZB~$^3K5#)hW7ZOO~X=-M;9k(f+y@BmVy zxw=yfCXl6);S3&kH9Gf!lOs*dD4Lt_Vvy47Sd>ah6tuTseh+yL$GeswQVt)$PrpZ= zzjBC=%QzW~;iMZlyOJDt;Qbty_l{?M&BfHQw1Uk{P*}l}eYm(5{O~o5Kdh1WHX?z+ zSmJ&4B!vZ)XwIf!o#3Ra$n!|11*dNvzAU($IE2oS=TlF&5&7{cBmzPNsiEKYe18n3 rP$&sX3%>2aH-`x#N;0Dv-bnri;}$RXj<2mr00000NkvXXu0mjfIQfjo diff --git a/src/main/resources/assets/unicopia/textures/blocks/enchanted_cloud_block_bottom.png b/src/main/resources/assets/unicopia/textures/blocks/enchanted_cloud_block_bottom.png deleted file mode 100644 index ba7abd967070781144b692692efece497373f17c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3444 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 O0000=`ru zq$`L!m_9ab;GDmtT~54Nhnt)ECfl1GUwR#{2K3c13(2-}R0*$VjERZing5S_V*Y`C zd3yIOI2^LFDNJ?6yBUbnKmusX> sz!TP0M-J_;|F6;AYG42FfhhySUPsL-QFVdQ&MBb@0KXeZA^-pY diff --git a/src/main/resources/assets/unicopia/textures/blocks/enchanted_torch_lit.png b/src/main/resources/assets/unicopia/textures/blocks/enchanted_torch_lit.png deleted file mode 100644 index 984bd8fc4e610a139f2530750633de1168b9f962..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`6FglULo7}wCmdjwi2nCK-RARu zd*+=9zvlf1g5&uN!geQ@pME1*^Y)752{VV73B3;wFVBA>ec;HEBL|KhbKA!l6BEPp z|KDHb`wjB;bq0Taer~T}wy>~}kdTx-Y5w5(`T0C&&YXE7UGVQ3cT*dv_5{nMmKBM9*3zB3p5nx?*H19;Kal*&DiL4@%4lrpxYQcUHx3vIVCg!0Mlev A0RR91 diff --git a/src/main/resources/assets/unicopia/textures/blocks/hive_dying.png b/src/main/resources/assets/unicopia/textures/blocks/hive_dying.png deleted file mode 100644 index df1590d3e56b83edc6e2fce9c8f10c4e8a9424b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3586 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 IM6N<$g2NEljQ{`u diff --git a/src/main/resources/assets/unicopia/textures/blocks/hive_end.png b/src/main/resources/assets/unicopia/textures/blocks/hive_end.png deleted file mode 100644 index 7e592826d1f6b4c28bd92c90f8a87701943cbb0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3543 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 R=L-M;002ovPDHLkV1j3z)i?kE diff --git a/src/main/resources/assets/unicopia/textures/blocks/hive_growing.png b/src/main/resources/assets/unicopia/textures/blocks/hive_growing.png deleted file mode 100644 index e09ace94867e4b0969f86c5fcaa078ebdb6ac6b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4095 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 diff --git a/src/main/resources/assets/unicopia/textures/blocks/hive_growing.png.mcmeta b/src/main/resources/assets/unicopia/textures/blocks/hive_growing.png.mcmeta deleted file mode 100644 index d6b93f4f..00000000 --- a/src/main/resources/assets/unicopia/textures/blocks/hive_growing.png.mcmeta +++ /dev/null @@ -1,11 +0,0 @@ -{ - "animation": { - "frametime": 10, - "frames": [ - 0, 1, 2, 3, - 1, 2, 3, 0, - 2, 3, 0, 1, - 3, 0, 1, 2 - ] - } -} diff --git a/src/main/resources/assets/unicopia/textures/blocks/hive_stable.png b/src/main/resources/assets/unicopia/textures/blocks/hive_stable.png deleted file mode 100644 index 790ed8b029242de2508505d80df357d7360c0b56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3538 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 diff --git a/src/main/resources/assets/unicopia/textures/blocks/library_door_lower.png b/src/main/resources/assets/unicopia/textures/blocks/library_door_lower.png deleted file mode 100644 index e044dc31109bba93a7cc3f4aa7942d66e0de6171..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 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 N002ovPDHLkV1fulL16#@ diff --git a/src/main/resources/assets/unicopia/textures/blocks/smooth_marble_block.png b/src/main/resources/assets/unicopia/textures/blocks/smooth_marble_block.png deleted file mode 100644 index fd1035caa67a54f4c231d493f898c9f43e853544..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2912 zcmV-m3!n6fP)uJ@VVD_UC<6{NG_fI~0ue<-1QkJoA_k0xBC#Thg@9ne9*`iQ#9$Or zQF$}6R&?d%y_c8YA7_1QpS|}zXYYO1x&V;8{kgn!SPFnNo`4_X6{c}T{8k*B#$jdxfFg<9uYy1K45IaYvHg`_dOZM)Sy63ve6hvv z1)yUy0P^?0*fb9UASvow`@mQCp^4`uNg&9uGcn1|&Nk+9SjOUl{-OWr@Hh0;_l(8q z{wNRKos+;6rV8ldy0Owz(}jF`W(JeRp&R{qi2rfmU!TJ;gp(Kmm5I1s5m_f-n#TRsj}B0%?E`vOzxB2#P=n*a3EfYETOrKoe*ICqM@{4K9Go;5xVgZi5G4 z1dM~{UdP6d+Yd3o?MrAqM0Kc|iV92owdyL5UC#5<>aVCa44|hpM4E zs0sQWIt5*Tu0n&*J!lk~f_{hI!w5`*sjxDv4V%CW*ah~3!{C*0BD@;TgA3v9a1~q+ zAA{TB3-ERLHar49hi4Ih5D^-ph8Q6X#0?2VqLBoIkE}zAkxHZUgRb+f=nat zP#6>iMMoK->`~sRLq)(kHo*Vn{;LcG6+edD1=7D>9j^O?D{Qg|tCDK{ym)H7&wDr6*;uGTJg8GHjVbnL{!cWyUB7MT6o-VNo_w8Yq`2<5Ub)hw4L3rj}5@qxMs0 zWMyP6Wy582WNT#4$d1qunl{acmP#w5ouJ*Jy_Zv#bCKi7ZIf$}8d zZdVy&)LYdbX%I9R8VMQ|8r>Q*nyQ)sn)#Z|n)kKvS`4iu ztvy=3T65Yu+7a4Yv^%sXb>ww?bn(=Yu(!=O6^iuTp>)p_Y^{w=i z^lS773}6Fm1Fpe-gF!>Ip{*g$u-szvGhed;vo5pW&GpS$<~8QGEXWp~7V9lKEnZq0SaK{6Sl+dwSOr*Z zvFf(^Xl-N7w{EeXveC4Ov)N}e%%C!Y7^RFWwrE>d+x51mZQt2h+X?JW*!^a2WS?Sx z)P8cQ&Qi|OhNWW;>JChYI)@QQx?`Nj^#uJBl~d&PK+RZLOLos~K(b5>qmrMN0})tOkySZ3_W zICNY@+|jrX%s^&6b2i>5eqa0y%Z;^%^_=a@u3%4b9605ii3Ep)@`TAmhs0fpQ%O!q zl}XcFH*PieWwLj2ZSq`7V9Mc?h17`D)-+sNT-qs~3@?S(ldh7UlRlVXkWrK|vf6I- z?$tAVKYn8-l({mqQ$Q8{O!WzMg`0(=S&msXS#Pt$vrpzo=kRj+a`kh!z=6$;c zwT88(J6|n-WB%w`m$h~4pmp)YIh_ z3ETV2tjiAU!0h1dxU-n=E9e!)6|Z;4?!H=SSy{V>ut&IOq{_dl zbFb#!9eY1iCsp6Bajj|Hr?hX|zPbJE{X++w546-O*Ot`2Kgd0Jx6Z4syT zu9enWavU5N9)I?I-1m1*_?_rJ$vD~agVqoG+9++s?NEDe`%Fht$4F;X=in*dQ{7$m zU2Q)a|9JSc+Uc4zvS-T963!N$T{xF_ZuWe}`RNOZ7sk3{yB}PPym+f8xTpV;-=!;; zJuhGEb?H5K#o@~7t9DmUU1MD9xNd#Dz0azz?I)|B+WM{g+Xrk0I&awC=o(x)cy`EX z=)z6+o0o6-+`4{y+3mqQ%kSJBju{@g%f35#FZJHb`&swrA8dGtepviS>QUumrN{L@ z>;2q1Vm)$Z)P1z?N$8UYW2~{~zhwUMVZ87u`Dx{Z>O|9|`Q+&->FRy-Sjp7DHs zy69KwU-!MxeeuI@&cF4|M9z%AfP?@5 z`Tzg`fam}Kbua(`>RI+y?e7jT@qQ9J+u0HsMpK~y-)#gjV{!Y~X4*N&X;{g25o z6efu!+Z511(l9QfZfC3aB)QxDQMY|%943 diff --git a/src/main/resources/assets/unicopia/textures/blocks/stick.png b/src/main/resources/assets/unicopia/textures/blocks/stick.png deleted file mode 100644 index 07d42453a60e1d473f8b121a002df223b1f0e262..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2948 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 P00000NkvXXu0mjflDE)m diff --git a/src/main/resources/assets/unicopia/textures/blocks/tomato_plant/stage_2.png b/src/main/resources/assets/unicopia/textures/blocks/tomato_plant/stage_2.png deleted file mode 100644 index c79380f6473274b10478ef7a222a29a1e963ef75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3215 zcmV;A3~=*_P)uJ@VVD_UC<6{NG_fI~0ue<-1QkJoA_k0xBC#Thg@9ne9*`iQ#9$Or zQF$}6R&?d%y_c8YA7_1QpS|}zXYYO1x&V;8{kgn!SPFnNo`4_X6{c}T{8k*B#$jdxfFg<9uYy1K45IaYvHg`_dOZM)Sy63ve6hvv z1)yUy0P^?0*fb9UASvow`@mQCp^4`uNg&9uGcn1|&Nk+9SjOUl{-OWr@Hh0;_l(8q z{wNRKos+;6rV8ldy0Owz(}jF`W(JeRp&R{qi2rfmU!TJ;gp(Kmm5I1s5m_f-n#TRsj}B0%?E`vOzxB2#P=n*a3EfYETOrKoe*ICqM@{4K9Go;5xVgZi5G4 z1dM~{UdP6d+Yd3o?MrAqM0Kc|iV92owdyL5UC#5<>aVCa44|hpM4E zs0sQWIt5*Tu0n&*J!lk~f_{hI!w5`*sjxDv4V%CW*ah~3!{C*0BD@;TgA3v9a1~q+ zAA{TB3-ERLHar49hi4Ih5D^-ph8Q6X#0?2VqLBoIkE}zAkxHZUgRb+f=nat zP#6>iMMoK->`~sRLq)(kHo*Vn{;LcG6+edD1=7D>9j^O?D{Qg|tCDK{ym)H7&wDr6*;uGTJg8GHjVbnL{!cWyUB7MT6o-VNo_w8Yq`2<5Ub)hw4L3rj}5@qxMs0 zWMyP6Wy582WNT#4$d1qunl{acmP#w5ouJ*Jy_Zv#bCKi7ZIf$}8d zZdVy&)LYdbX%I9R8VMQ|8r>Q*nyQ)sn)#Z|n)kKvS`4iu ztvy=3T65Yu+7a4Yv^%sXb>ww?bn(=Yu(!=O6^iuTp>)p_Y^{w=i z^lS773}6Fm1Fpe-gF!>Ip{*g$u-szvGhed;vo5pW&GpS$<~8QGEXWp~7V9lKEnZq0SaK{6Sl+dwSOr*Z zvFf(^Xl-N7w{EeXveC4Ov)N}e%%C!Y7^RFWwrE>d+x51mZQt2h+X?JW*!^a2WS?Sx z)P8cQ&Qi|OhNWW;>JChYI)@QQx?`Nj^#uJBl~d&PK+RZLOLos~K(b5>qmrMN0})tOkySZ3_W zICNY@+|jrX%s^&6b2i>5eqa0y%Z;^%^_=a@u3%4b9605ii3Ep)@`TAmhs0fpQ%O!q zl}XcFH*PieWwLj2ZSq`7V9Mc?h17`D)-+sNT-qs~3@?S(ldh7UlRlVXkWrK|vf6I- z?$tAVKYn8-l({mqQ$Q8{O!WzMg`0(=S&msXS#Pt$vrpzo=kRj+a`kh!z=6$;c zwT88(J6|n-WB%w`m$h~4pmp)YIh_ z3ETV2tjiAU!0h1dxU-n=E9e!)6|Z;4?!H=SSy{V>ut&IOq{_dl zbFb#!9eY1iCsp6Bajj|Hr?hX|zPbJE{X++w546-O*Ot`2Kgd0Jx6Z4syT zu9enWavU5N9)I?I-1m1*_?_rJ$vD~agVqoG+9++s?NEDe`%Fht$4F;X=in*dQ{7$m zU2Q)a|9JSc+Uc4zvS-T963!N$T{xF_ZuWe}`RNOZ7sk3{yB}PPym+f8xTpV;-=!;; zJuhGEb?H5K#o@~7t9DmUU1MD9xNd#Dz0azz?I)|B+WM{g+Xrk0I&awC=o(x)cy`EX z=)z6+o0o6-+`4{y+3mqQ%kSJBju{@g%f35#FZJHb`&swrA8dGtepviS>QUumrN{L@ z>;2q1Vm)$Z)P1z?N$8UYW2~{~zhwUMVZ87u`Dx{Z>O|9|`Q+&->FRy-Sjp7DHs zy69KwU-!MxeeuI@&cF4|M9z%AfP?@5 z`Tzg`fam}Kbua(`>RI+y?e7jT@qQ9J+u0n|xEK~y-)g_5yu8bJ_-zd`g+Se8Ig zxN$=)?Y5>eX(CEDegl{G6VSv@0PfO6O6MY!M`u^Ky_3L&-K0ThDMG?L!JlIH)<>0* zMx&d(e`fxFhH@t)v3w0)?t)97`EnOxJy*pBH9I*Dv3qXZ4SbUZ4?)tg%3In*OnMG z0W=YIXV{Cu6nF`b#f3+??EM3ZTb~Lqzlcs7-anw(X~*Q17(Q46(*r<&b$`Xe8&Eq; zyF{EEgGoxGjV}ur#0gpmKsRB6KY!u;6l`W>KOJnrt#TTRzK1Qe9`eL1n>*NJ^uXq( zYK=CF+@nsNc044v${DUr3=kl;ko|B1j7`8S`X1ecqjakr_Y@j7-72U1XevjtP8;mb z6veWnN7N!xV$qL+KIJruGmkE15W!&MNfAI{BF5K+jjs!A9w{7s9-@`I&y{rVO;JQk zom;i7RQW-8D@U^WAq9e)v;i@IuJ@VVD_UC<6{NG_fI~0ue<-1QkJoA_k0xBC#Thg@9ne9*`iQ#9$Or zQF$}6R&?d%y_c8YA7_1QpS|}zXYYO1x&V;8{kgn!SPFnNo`4_X6{c}T{8k*B#$jdxfFg<9uYy1K45IaYvHg`_dOZM)Sy63ve6hvv z1)yUy0P^?0*fb9UASvow`@mQCp^4`uNg&9uGcn1|&Nk+9SjOUl{-OWr@Hh0;_l(8q z{wNRKos+;6rV8ldy0Owz(}jF`W(JeRp&R{qi2rfmU!TJ;gp(Kmm5I1s5m_f-n#TRsj}B0%?E`vOzxB2#P=n*a3EfYETOrKoe*ICqM@{4K9Go;5xVgZi5G4 z1dM~{UdP6d+Yd3o?MrAqM0Kc|iV92owdyL5UC#5<>aVCa44|hpM4E zs0sQWIt5*Tu0n&*J!lk~f_{hI!w5`*sjxDv4V%CW*ah~3!{C*0BD@;TgA3v9a1~q+ zAA{TB3-ERLHar49hi4Ih5D^-ph8Q6X#0?2VqLBoIkE}zAkxHZUgRb+f=nat zP#6>iMMoK->`~sRLq)(kHo*Vn{;LcG6+edD1=7D>9j^O?D{Qg|tCDK{ym)H7&wDr6*;uGTJg8GHjVbnL{!cWyUB7MT6o-VNo_w8Yq`2<5Ub)hw4L3rj}5@qxMs0 zWMyP6Wy582WNT#4$d1qunl{acmP#w5ouJ*Jy_Zv#bCKi7ZIf$}8d zZdVy&)LYdbX%I9R8VMQ|8r>Q*nyQ)sn)#Z|n)kKvS`4iu ztvy=3T65Yu+7a4Yv^%sXb>ww?bn(=Yu(!=O6^iuTp>)p_Y^{w=i z^lS773}6Fm1Fpe-gF!>Ip{*g$u-szvGhed;vo5pW&GpS$<~8QGEXWp~7V9lKEnZq0SaK{6Sl+dwSOr*Z zvFf(^Xl-N7w{EeXveC4Ov)N}e%%C!Y7^RFWwrE>d+x51mZQt2h+X?JW*!^a2WS?Sx z)P8cQ&Qi|OhNWW;>JChYI)@QQx?`Nj^#uJBl~d&PK+RZLOLos~K(b5>qmrMN0})tOkySZ3_W zICNY@+|jrX%s^&6b2i>5eqa0y%Z;^%^_=a@u3%4b9605ii3Ep)@`TAmhs0fpQ%O!q zl}XcFH*PieWwLj2ZSq`7V9Mc?h17`D)-+sNT-qs~3@?S(ldh7UlRlVXkWrK|vf6I- z?$tAVKYn8-l({mqQ$Q8{O!WzMg`0(=S&msXS#Pt$vrpzo=kRj+a`kh!z=6$;c zwT88(J6|n-WB%w`m$h~4pmp)YIh_ z3ETV2tjiAU!0h1dxU-n=E9e!)6|Z;4?!H=SSy{V>ut&IOq{_dl zbFb#!9eY1iCsp6Bajj|Hr?hX|zPbJE{X++w546-O*Ot`2Kgd0Jx6Z4syT zu9enWavU5N9)I?I-1m1*_?_rJ$vD~agVqoG+9++s?NEDe`%Fht$4F;X=in*dQ{7$m zU2Q)a|9JSc+Uc4zvS-T963!N$T{xF_ZuWe}`RNOZ7sk3{yB}PPym+f8xTpV;-=!;; zJuhGEb?H5K#o@~7t9DmUU1MD9xNd#Dz0azz?I)|B+WM{g+Xrk0I&awC=o(x)cy`EX z=)z6+o0o6-+`4{y+3mqQ%kSJBju{@g%f35#FZJHb`&swrA8dGtepviS>QUumrN{L@ z>;2q1Vm)$Z)P1z?N$8UYW2~{~zhwUMVZ87u`Dx{Z>O|9|`Q+&->FRy-Sjp7DHs zy69KwU-!MxeeuI@&cF4|M9z%AfP?@5 z`Tzg`fam}Kbua(`>RI+y?e7jT@qQ9J+u0oO@HK~y-)g_E&v8bJ_-zd`PyK$bvI zxN(D!_F7YgGzp~}zky5g1T^FcAYGbB>0E^J=%B*wodgtilg2uv2P_GMdPqUx72kUmO5wKhoXp@nn zS*gIXT(lZsUp;wx7<-5pP5_^i#11D&`w=w3trLF#fxBBcoZza}2rM3CgC`Sv1Xz_* z`=`MScmp+{y)rh4n`_*bqV{+RBxAp_C+%}=T zGG#+q2{X9B{{73-SS-69DC>k;+K;4r8I(@gXp&lRL;$15)JBh~*&;}2^4`Y7Df~nQ z#4wP0*mWxPAT=AxE*=titAYcf2b)ha&OuIarf3HE3*x#ZV~DNnPXGV_07*qoM6N<$ Ef;u`a%K!iX diff --git a/src/main/resources/assets/unicopia/textures/blocks/tomato_plant/stage_4.png b/src/main/resources/assets/unicopia/textures/blocks/tomato_plant/stage_4.png deleted file mode 100644 index ffb9c2bb7a7b13f3a129235ff0724b6d72fbbcf1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3218 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̉@KpxxQ&)0ng(-ds){Ad%)eFji$!9))6M)JK$s>Ir4pX+v$NO0 z&<%tz@%(@=3{eMb2}xpP_BgMQzVY&Wy0M|_wD#M~4yM1p=Tj;cXm`3JRuBXMpKoq4 zJy|^vEF-$Moy{gdcKrL*t@AAaz`|VdOfR}}%%)g7t z!p$2?tlYcL{9G;Td+W{$!?OCVJ1bw5v*(J>jR;3dVv1(4@X{p~Ub>VCar4GfR{uXp z^te5R=ZX9g0aota&nh!R!Vfl%`tU&!hQAl)iq9Q+IOYY3gZp{Immd!A{v00p=aKjk z3mA@mquI)~!y3(2W(C8xgXAAvdK(I@Ig+j7+^=XMV26Uv|@!c7Cpwk({5aofr_$JLw~Nz)2%_ zR_*6rfQOCXS+$QX;Jga(WiLoPDW0czFvb{Tj4{R-V~jDz7-Nhv#u#IaF~&av{vY+b VkhU-S!0iA4002ovPDHLkV1k9+ucQC~ diff --git a/src/main/resources/assets/unicopia/textures/entity/butterfly/brimstone.png b/src/main/resources/assets/unicopia/textures/entity/butterfly/brimstone.png deleted file mode 100644 index b19268ad85a2d5140924866ecdf8c50eaee911ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3362 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 diff --git a/src/main/resources/assets/unicopia/textures/entity/butterfly/butterfly.png b/src/main/resources/assets/unicopia/textures/entity/butterfly/butterfly.png deleted file mode 100644 index 7dcebd916c70edd093c7ea2f91195f51207defdd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2855 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 FV1k2xs_p;) diff --git a/src/main/resources/assets/unicopia/textures/entity/butterfly/hedylidae.png b/src/main/resources/assets/unicopia/textures/entity/butterfly/hedylidae.png deleted file mode 100644 index c53c52c87a76dbbc714e7a3566044f48f940a68a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3419 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 P00000NkvXXu0mjf-txUX diff --git a/src/main/resources/assets/unicopia/textures/entity/butterfly/pink.png b/src/main/resources/assets/unicopia/textures/entity/butterfly/pink.png deleted file mode 100644 index d5f080ad068f8fb38ec7beab5c6662816cb8f6cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2911 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 JPDHLkV1fZQsY3t& diff --git a/src/main/resources/assets/unicopia/textures/entity/butterfly/purple.png b/src/main/resources/assets/unicopia/textures/entity/butterfly/purple.png deleted file mode 100644 index ac8c7e1bb7cfd7d8e1357c31bc54351b8d0b16fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2898 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 diff --git a/src/main/resources/assets/unicopia/textures/entity/butterfly/red.png b/src/main/resources/assets/unicopia/textures/entity/butterfly/red.png deleted file mode 100644 index 380ad7fcfaf9500d1cbadf7e5d58e2bc124784a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2912 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 Z@CPGqhU4KZ41E9q002ovPDHLkV1nvGo(up0 diff --git a/src/main/resources/assets/unicopia/textures/entity/cloud_spawner.png b/src/main/resources/assets/unicopia/textures/entity/cloud_spawner.png deleted file mode 100644 index 1758f53ae214daebd6a710e7befdeb93bc684926..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2965 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 LNkvXXu0mjf3O|JA diff --git a/src/main/resources/assets/unicopia/textures/entity/clouds.png b/src/main/resources/assets/unicopia/textures/entity/clouds.png deleted file mode 100644 index 8c1a2a531ff93d871eee734454a6798d4037ea0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6216 zcmV-O7`Nw%P)2?00004XF*Lt006O% z3;baP000U)X+uL$P-t&-Z*ypGa3D!TLm+T+Z)Rz1WdHz3iJg{rR8-d%htIutdZEoQ z6e&aRy$v9}H>uJ@VVD_UC<6{NG_fI~0ue<-1QkJoA_k0xBC#Thg@9ne9*`iQ#9$Or zQF$}6R&?d%y_c8YA7_1QpS|}zXYYO1x&V;8{kgn!SPFnNo`4_X6{c}T{8k*B#$jdxfFg<9uYy1K45IaYvHg`_dOZM)Sy63ve6hvv z1)yUy0P^?0*fb9UASvow`@mQCp^4`uNg&9uGcn1|&Nk+9SjOUl{-OWr@Hh0;_l(8q z{wNRKos+;6rV8ldy0Owz(}jF`W(JeRp&R{qi2rfmU!TJ;gp(Kmm5I1s5m_f-n#TRsj}B0%?E`vOzxB2#P=n*a3EfYETOrKoe*ICqM@{4K9Go;5xVgZi5G4 z1dM~{UdP6d+Yd3o?MrAqM0Kc|iV92owdyL5UC#5<>aVCa44|hpM4E zs0sQWIt5*Tu0n&*J!lk~f_{hI!w5`*sjxDv4V%CW*ah~3!{C*0BD@;TgA3v9a1~q+ zAA{TB3-ERLHar49hi4Ih5D^-ph8Q6X#0?2VqLBoIkE}zAkxHZUgRb+f=nat zP#6>iMMoK->`~sRLq)(kHo*Vn{;LcG6+edD1=7D>9j^O?D{Qg|tCDK{ym)H7&wDr6*;uGTJg8GHjVbnL{!cWyUB7MT6o-VNo_w8Yq`2<5Ub)hw4L3rj}5@qxMs0 zWMyP6Wy582WNT#4$d1qunl{acmP#w5ouJ*Jy_Zv#bCKi7ZIf$}8d zZdVy&)LYdbX%I9R8VMQ|8r>Q*nyQ)sn)#Z|n)kKvS`4iu ztvy=3T65Yu+7a4Yv^%sXb>ww?bn(=Yu(!=O6^iuTp>)p_Y^{w=i z^lS773}6Fm1Fpe-gF!>Ip{*g$u-szvGhed;vo5pW&GpS$<~8QGEXWp~7V9lKEnZq0SaK{6Sl+dwSOr*Z zvFf(^Xl-N7w{EeXveC4Ov)N}e%%C!Y7^RFWwrE>d+x51mZQt2h+X?JW*!^a2WS?Sx z)P8cQ&Qi|OhNWW;>JChYI)@QQx?`Nj^#uJBl~d&PK+RZLOLos~K(b5>qmrMN0})tOkySZ3_W zICNY@+|jrX%s^&6b2i>5eqa0y%Z;^%^_=a@u3%4b9605ii3Ep)@`TAmhs0fpQ%O!q zl}XcFH*PieWwLj2ZSq`7V9Mc?h17`D)-+sNT-qs~3@?S(ldh7UlRlVXkWrK|vf6I- z?$tAVKYn8-l({mqQ$Q8{O!WzMg`0(=S&msXS#Pt$vrpzo=kRj+a`kh!z=6$;c zwT88(J6|n-WB%w`m$h~4pmp)YIh_ z3ETV2tjiAU!0h1dxU-n=E9e!)6|Z;4?!H=SSy{V>ut&IOq{_dl zbFb#!9eY1iCsp6Bajj|Hr?hX|zPbJE{X++w546-O*Ot`2Kgd0Jx6Z4syT zu9enWavU5N9)I?I-1m1*_?_rJ$vD~agVqoG+9++s?NEDe`%Fht$4F;X=in*dQ{7$m zU2Q)a|9JSc+Uc4zvS-T963!N$T{xF_ZuWe}`RNOZ7sk3{yB}PPym+f8xTpV;-=!;; zJuhGEb?H5K#o@~7t9DmUU1MD9xNd#Dz0azz?I)|B+WM{g+Xrk0I&awC=o(x)cy`EX z=)z6+o0o6-+`4{y+3mqQ%kSJBju{@g%f35#FZJHb`&swrA8dGtepviS>QUumrN{L@ z>;2q1Vm)$Z)P1z?N$8UYW2~{~zhwUMVZ87u`Dx{Z>O|9|`Q+&->FRy-Sjp7DHs zy69KwU-!MxeeuI@&cF4|M9z%AfP?@5 z`Tzg`fam}Kbua(`>RI+y?e7jT@qQ9J+u4UI`eK~#9!?Oi>O+sY2L3?T?|i;dEF zlOnbD|Noe%e#Omovr38=EYkQD7tEt+a)z84Niz};U}Uo^%a$~U-$Qnw*0%>QfUvRtHV^fY{Ur#tS~Z`bIhaJ$`tmM>?`#yIlw@}kq| zsZus(UP$Mf=Q%12;M`Q=(cfE490yP0(95x&hUeCJ4*woBx<<<6nqetEJGK}kDYvwb z{_~%y$a$WgNA+iEjxD9pV`SDGlcLeD*XwB<$J6&8^^k50jh@3ftB>9W0JL8?bJHLlzEL6lNbIX-tCP51Z#XIhra3;HWmJMf+KO;a0SI3C&&OGpkXP zbN6Yf`_@Zeg68`!my1e*V8M~XXN~m2J9nsV~VCxA^5D(>*2lR-@k+O1~Y&?5EEJ zo+*A_++r>fNZsT819y2G$E>tlP@{(=2{t>Vz=Cw1SipfU1gag}1gsmOb>qIdJ>~&q zFRIaF4+?8$s>wO>;&XASI&OoCrZ}c%VC`M1$fiXzRMJ>jSYvDM>Dkk3R2YJrOfBVH z?S7Wbarl?}fKomLM`Y}uyC$y(+SHq-gwvmETxen?NiF7-``A;dp(&Vw<0La)+Oamz zGrR2+FAVCx*WjB=!KgL;aE+yq@_n=x$cL|^+H6nRu^2+vZC9RJ5^G$CNOVe8DUlyD z>$!(YNso``&i~d8r>E!P^maPknRPU1^Zqt_QAR<0{yLt1{pPjyuiwXXNA`wZV^UK> zhcq_l2E-(K3SrkEd5sI4)7quJr|($XFV4CCM2O@V(=-LsZC3Nnqw&iMIBl_vqhXCM z1qi72raw#DQNcII0R(#dR+}6+Emm_5e68)Q-~ThYwm%xtCDL;~yL1efHUqL-&2ZP` z>$?YzgAkq5*r3TZQC2D1j*quCA}Cp1r7=;r)M{%sq_AAOrm#awmuj!+@A)wzp3^Ae z+qZ8I-^toW4ZlCM9|Qv$v1%K&!~)L4FsLK>eG19(7ocW)EIk(t^eIjETB7aRAXx1h z5}WBi3ttCqIDv~pwkm;@cGqe8CQ#*+6I>9rCYQ^LI7|3rrlweP;N;+x+IafoH-T@ z)XW3vm9uxO|UlKp4Se?99A`Zh) zRkOexLZxU)cu#A^DWSOlv9*y?DV9^oR`PSP;^T_Nu-3+kjw(y66ls>L1lfD7L zjJ2bpW(;h@qxk&sr1C#<`hlks$wJ6er=v$S^|7sSx+8r=I@Hsec?!plzEux2F17z_AWT$k9$vm~NRn^Lq* zB)Ruu$(3T}ZAr+z5-t>c1g#I6o$Hia!VKopW^0(=0L$FLQtOj*f2}cqB18|F)|!jp zZV2s`5o&D<0lHQi7L-o0xtUxiG@Q^(Aj0W2OXE|lC{u(^&q*z=%$3^&57GroCaHh| z=iNgW0#W!Ds^9iXN-uYn$sTfDV_KXlF09?P+B(&(?dbwFaBMC^Pa;%nAB z&DC3{BK0Z0uvf9A36G`CXiKq<&zC!8H(!*}Wg&Avw=+_xL90rm$AS*plj5TM7R}w- zee_l>m0E#|UO25OY1LTJS#k>`Zdf;inN4?XJ}+b@gnav){&OXKo+Akp%ja5hU>I!K0+hWOx zKcD*OOAuji<}O^1=i_ZktdupX@#!t`1S{ct3z1_;*$5N!gRH|KS~REW`+Xnyeg#UY z*i-g?^fkzoVjI{d|BwZEb0pG0s7rg7=J)N)zUGw$Ye+YX;Up1M|vo&t&Jv0m-D zraRY8%F>Ay%9ZKc5Jx`uy631%EHQA_`1)I|EP1^ZpwF=Hh zCx)Z$d%W~_n5OBDG$D;n1p)kw-BoJ7b0f^Qs0BGYd0gNubzfSzH$YNL#aT=m#ebR5yR@yJ@>MypVahKtfDfkWF}OAezv`(kk%-E!iHt?6zoksO=w!!SGyB%xY* zjp?#ICFO^APEJQXLLS!Sl0G_+R6FC$I%GjBFt}QIP6(u!^Sx_eokrpAOUZjx>Rh#* zr$rw<*Dr=(ou%?qb6n2%S|z=<#G+YiA-dq(f2<%S-4%OJ34x)BC#W?#R0h$gBW?On z;wIs9y>-LwNDJ-D&~-39^vm#XF;>nr(Ha2P!J(Ck%eQX0-8C{%wkiAmRCLk$0v&RV~by9C5ALAd{+G zQ_+_`p=R3SFbvT_iB|K=r-M2)fOYY6BXgb#0y;=kB0V>2y$I1`esyS6tQ3^EJ6AU} zw@5Tn9yEmyVJII5SwfgEHU3K5U?LWT3r!|AMcuhK(g`Uk=Kb2HyK8R8(pG?FjisiP zL*&gd>-*G`rRLf94mwuJ;lkVktaQ14akyW+iRhuxuQ4)9T3gcOZ{5(O$?n)Mwsf&V z?lGQ1j4@49QXBO%H5p3e?3R2e_~mfy3A7g-M`&=Xt!DfmADzq9QK>>TxYw;ameR1) z6)Fv!;#w=X?xv=0#)%z8;8!39wb zzxQbS&wr-7f{WBjFULN$I^~8%NGye3GPk8KNhOY@sov2+CxC`Jw6u6V7)P^KawfE< zA~wPq;~d*Rt|je}a^_FZqgT8+nnE875?Dg%3D@+0}|c+Ol6=KJk-bCy@C z(c!g;j}FLfHX#WIC2?00004XF*Lt006O% z3;baP000U)X+uL$P-t&-Z*ypGa3D!TLm+T+Z)Rz1WdHz3iJg{rR8-d%htIutdZEoQ z6e&aRy$v9}H>uJ@VVD_UC<6{NG_fI~0ue<-1QkJoA_k0xBC#Thg@9ne9*`iQ#9$Or zQF$}6R&?d%y_c8YA7_1QpS|}zXYYO1x&V;8{kgn!SPFnNo`4_X6{c}T{8k*B#$jdxfFg<9uYy1K45IaYvHg`_dOZM)Sy63ve6hvv z1)yUy0P^?0*fb9UASvow`@mQCp^4`uNg&9uGcn1|&Nk+9SjOUl{-OWr@Hh0;_l(8q z{wNRKos+;6rV8ldy0Owz(}jF`W(JeRp&R{qi2rfmU!TJ;gp(Kmm5I1s5m_f-n#TRsj}B0%?E`vOzxB2#P=n*a3EfYETOrKoe*ICqM@{4K9Go;5xVgZi5G4 z1dM~{UdP6d+Yd3o?MrAqM0Kc|iV92owdyL5UC#5<>aVCa44|hpM4E zs0sQWIt5*Tu0n&*J!lk~f_{hI!w5`*sjxDv4V%CW*ah~3!{C*0BD@;TgA3v9a1~q+ zAA{TB3-ERLHar49hi4Ih5D^-ph8Q6X#0?2VqLBoIkE}zAkxHZUgRb+f=nat zP#6>iMMoK->`~sRLq)(kHo*Vn{;LcG6+edD1=7D>9j^O?D{Qg|tCDK{ym)H7&wDr6*;uGTJg8GHjVbnL{!cWyUB7MT6o-VNo_w8Yq`2<5Ub)hw4L3rj}5@qxMs0 zWMyP6Wy582WNT#4$d1qunl{acmP#w5ouJ*Jy_Zv#bCKi7ZIf$}8d zZdVy&)LYdbX%I9R8VMQ|8r>Q*nyQ)sn)#Z|n)kKvS`4iu ztvy=3T65Yu+7a4Yv^%sXb>ww?bn(=Yu(!=O6^iuTp>)p_Y^{w=i z^lS773}6Fm1Fpe-gF!>Ip{*g$u-szvGhed;vo5pW&GpS$<~8QGEXWp~7V9lKEnZq0SaK{6Sl+dwSOr*Z zvFf(^Xl-N7w{EeXveC4Ov)N}e%%C!Y7^RFWwrE>d+x51mZQt2h+X?JW*!^a2WS?Sx z)P8cQ&Qi|OhNWW;>JChYI)@QQx?`Nj^#uJBl~d&PK+RZLOLos~K(b5>qmrMN0})tOkySZ3_W zICNY@+|jrX%s^&6b2i>5eqa0y%Z;^%^_=a@u3%4b9605ii3Ep)@`TAmhs0fpQ%O!q zl}XcFH*PieWwLj2ZSq`7V9Mc?h17`D)-+sNT-qs~3@?S(ldh7UlRlVXkWrK|vf6I- z?$tAVKYn8-l({mqQ$Q8{O!WzMg`0(=S&msXS#Pt$vrpzo=kRj+a`kh!z=6$;c zwT88(J6|n-WB%w`m$h~4pmp)YIh_ z3ETV2tjiAU!0h1dxU-n=E9e!)6|Z;4?!H=SSy{V>ut&IOq{_dl zbFb#!9eY1iCsp6Bajj|Hr?hX|zPbJE{X++w546-O*Ot`2Kgd0Jx6Z4syT zu9enWavU5N9)I?I-1m1*_?_rJ$vD~agVqoG+9++s?NEDe`%Fht$4F;X=in*dQ{7$m zU2Q)a|9JSc+Uc4zvS-T963!N$T{xF_ZuWe}`RNOZ7sk3{yB}PPym+f8xTpV;-=!;; zJuhGEb?H5K#o@~7t9DmUU1MD9xNd#Dz0azz?I)|B+WM{g+Xrk0I&awC=o(x)cy`EX z=)z6+o0o6-+`4{y+3mqQ%kSJBju{@g%f35#FZJHb`&swrA8dGtepviS>QUumrN{L@ z>;2q1Vm)$Z)P1z?N$8UYW2~{~zhwUMVZ87u`Dx{Z>O|9|`Q+&->FRy-Sjp7DHs zy69KwU-!MxeeuI@&cF4|M9z%AfP?@5 z`Tzg`fam}Kbua(`>RI+y?e7jT@qQ9J+u4X{Z>K~#9!?On@?9Lo`{Zq4-DpV_r_rSWqx41H^#<)VB;T9tpwWm(wiw^5Hm1{@!}FgbaZ57L_X>n z2O5oLs_T_`;+2sRhx_~cCKp}TUHpF>$E&~7-$^*1&o4ipPN$3i!|&j@kN^J9bK{r| z-+uqyA@#eDhi);?@lAKAevSM4`xmYZ!w@_U=C=lScXz7ej$PMX5!Fg;%dwj8_I=;< zeSbxIP7pYjgY)_P@+moowgUXjr_<@>6MBy&(T?NT0NJ%#cO1u;8=*H!&%vEDb}dQT zIoZqL)y<9SxUWx7>T_B&(KwDxbLe*a{xJved(+Nq>-;~aO4-<;hR!vPV^pBPxv9jX zzqd>*2Tx+@&{{?qc|S@N=rqemiOU0*$FGbGti=X~X zeJ#zgTQKqazHff`>}2P-pe3<|>}?IH6eFx9Fqa~|9BHO}EiF#R-^cUXwZ%Nr^24H} z+t8Oa7o*39E*u+JmMVL`}}Ur&{l=4c!D??>n7NDhYxGht)*qNRQXd zr=C1}(&VYa2#<>tNU~aMTPAqdb(7EMt95irPFT+lX?Xm7Oi&BSH4i-J1bKCHbD`~G z(dxBCui?2gpHyqiajgW$alGKw6z}P%vH3Z&OG^W}1MW*_(`fLL!U~VEMtkpF2vDCq z#;t7Aom=_}nc^0|Tr%BLf^SRo`=sT!y_o%UOkhm$cyW{YbUHPUE^pa6Jq$zB_kFVK z8`bENB*A7!D6kMZPb}a-Cj!+DZUQbF(!6os+#d4)vKQ6pv4O&xnQC&5ys?BCZi5P* z3|t^?>A>2%RFcga&Crm>!onI`b8p`I@){L};3iW`Iaj+ML*_XA8_HF$Wwv1d+%@@f zpj~>?q;UGU#)T$UlGI{Od5^^x0#k)9N9yHgC5VF|MAc@Z{Bvz zW7Axibu?)6ljqTsG793|>)Yn*(-W(;zdk+f(jD0vT8&9f2`y=C&JBo3^c2EQLGmR| za87HNx=-J+wp|=^{RxTW7{f4#%WYQk&ZF^l1)Mfn#<60J9tsdp?M;6UZAS&)90w5S z@pEl*;I!D1*TARR&ie6xpIzJUjp!lLhk`KNG2F5lklkvAyC$FBJ#g%V=$yvJWvDp9 zQ=d9SP&nRNh@iwaRe;7sol~n#MZVB`2tB(du_Lrx`sQt~x~Kn+*AelYVvZj^e7L$N zYw=S2eQ7@k1{7kAxv4lkR#Jjp*Qq1oQljnJAlTA19Kn%mc<|1$zhNk`K)|bTXc8gt*+wfqKgmd}o zB}iXGsJP4dAw}i|%i_(bASGq-85(0SJH?0m^L%AjS=pl*3t(jxNK+Qam zUO9W$9c8T#s}PV9ph8+wa^sc)Yo!;e;X{c;mi&*Byf8)G;U@7w#q#8}60z&LO%x0K z^zbD~OTu^7mYgE>1&Ga!oJ_HtOtzBO#fpzh7Q|wyLuJ=Xk-gPQ6lvRGtQ-|J zV_+K|#m{dWmH&~`;Ukqu7V<8ctnXgms(to7Ri;e=wOFOiTXb~^lqI*vL=v1*`nied zTm+roWJoiI_O9cE7+PI}``(((_)?_sw9|E1Ga2rZB$&mcE0f<|pU=T4Ml3h%TAdnup+C2(6YO zm9~Wd-C7D3lwM+UGkKZNa6;382rsW$3ZG&{nId#rPHJ&!uG}VgkSFKUvvP-UOOp8;+g|)j@Tc^6UExmw6o5OeT@tEi_e?*dEQ)%+01)O3T zdO*UhB=qMNlg>ybie~4T?;D@TqVRy8jpQLyJ5)7C z(ypnlXKWW}Dq875V}Ua+f{xb(Q!z!v(^;CcF4zXt_)>_j4;FNd;O}8a)m^l9?d+_Br+EO87i`5+;`GTGq<<287SiCHKcXdj=-f0AlDcnwP4K0yX~|8Ai|45(Q&XDTT)%?Q@iB`z zbz5xEbf?Q}+K4(Od*AmLomj0t{}!sqSeNdsKE5xp)$`e77N*7$#ukEU_Ycq&7n$z_Az7Kr60;N>!DSJQq z6lBUVleqftP6$0bs$Wl&YqWLF5?l^%j?h5`K2qnESYQqQo{}@~xD;GV5MFQ}U!R^f zEg-nYBNk;x+d|{t(V{E4Bu_=F@h7CJ86mQ3UJf?*o%rj-QfjxQTsP(Vv0@c4pK(D{ z?J~0@h;oI+QIZ;=gnsT~T!mNo-8haH|EC0ZlCML((eg(sIe?Us ziNn>ff(`U|BmI)3Pq|#pb_wV1^HM(Oylv>~Rb#l8Y%>66*$r>{~W_G8LoNLjPWV-K>7>;GXT<(P(6D7ibZp zmmcJ`47QWJ{IjiX-CbHy0{!k9!rOLxKei_L>Qyt;)JZ>>-PeBO2Ep zSqoff6_U|#QW_<&wB5C2Gs>e+7RTN#Cyv;f>c%0GV-vpXx~qmHR7+3MUACp9e06i< z7xTlwLQ+PO%}8QgUglYgg}Zp-?|3YX%z0glzdmE&b74jtkFl$^@|}` zXDO7bIWFhECRtvqF=?inh%WfHA1g>%?uvbUY0AK=;sZx*wCVa=M8w0q`6g_Lgy}&9Dn`NK*ls)9iP5cQ(^Kv{A*<08Zn_ z?4_KPW52M@Z%r50TtrQGkS5lf4`mWL$sG=!XEh`5ZHR>0rVASBwB+(n6gd%I_vanb zT-R)hspYe`spf{(^q_?xLt4F5fk(P;n-bT_xF1Yidk@cTYkqsIl@mTLMKH8enA5q< z?B;+AgnGo=qA-`NTdPG2oa7ofrfUCIGAB|xti)bGOt3&tFe{)j0hQugNW*ok%XG)- zu9_HCtna$ErL)R(&p8SApj!&OrD!5A{nRX4nAdD^t=S-xs$5gimOi1T+oQ&mv6^4r z9n_)0i!gYY$DF5vfHo2hk)G?dUWDi|zglV)8wyIS$wyC>@}Mca2}AifNDX0LtNoR> zz(gzvCv_$^McuhC(heyp=Ka*ByK8PoZ7aYs$5NM+CGzH&^=<0OQrFqH4%$}9;lkVk ztaQ10akyT*iRe=6*BF^YT05l49}ivCmd6f<6?3{+l6#E15MvC(kW@zfNKJ+kYj!mU z1%DilErHge;|L9IwbhJ2N