From 0280783cd67cc1ff5a85d6d972af65dc7cd97746 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 17 Oct 2020 21:13:45 +0200 Subject: [PATCH] added the everlasting spring --- .../naturesaura/blockstates/spring.json | 7 + .../naturesaura/models/item/spring.json | 3 + .../loot_tables/blocks/spring.json | 19 ++ .../blocks/BlockAncientLeaves.java | 6 +- .../naturesaura/blocks/BlockAncientLog.java | 2 +- .../blocks/BlockAncientSapling.java | 2 +- .../blocks/BlockAnimalContainer.java | 2 +- .../blocks/BlockAnimalGenerator.java | 2 +- .../blocks/BlockAnimalSpawner.java | 2 +- .../naturesaura/blocks/BlockAuraBloom.java | 2 +- .../naturesaura/blocks/BlockAuraDetector.java | 2 +- .../naturesaura/blocks/BlockAutoCrafter.java | 2 +- .../naturesaura/blocks/BlockChunkLoader.java | 2 +- .../blocks/BlockDecayedLeaves.java | 6 +- .../blocks/BlockDimensionRail.java | 7 +- .../naturesaura/blocks/BlockEndFlower.java | 2 +- .../naturesaura/blocks/BlockEnderCrate.java | 6 +- .../naturesaura/blocks/BlockFieldCreator.java | 3 +- .../blocks/BlockFireworkGenerator.java | 2 +- .../blocks/BlockFlowerGenerator.java | 2 +- .../blocks/BlockFurnaceHeater.java | 2 +- .../blocks/BlockGeneratorLimitRemover.java | 2 +- .../naturesaura/blocks/BlockGoldPowder.java | 7 +- .../naturesaura/blocks/BlockGoldenLeaves.java | 7 +- .../naturesaura/blocks/BlockGratedChute.java | 2 +- .../blocks/BlockHopperUpgrade.java | 2 +- .../blocks/BlockItemDistributor.java | 2 +- .../blocks/BlockMossGenerator.java | 2 +- .../naturesaura/blocks/BlockNatureAltar.java | 2 +- .../naturesaura/blocks/BlockNetherGrass.java | 6 +- .../naturesaura/blocks/BlockOakGenerator.java | 2 +- .../blocks/BlockOfferingTable.java | 2 +- .../blocks/BlockPickupStopper.java | 2 +- .../naturesaura/blocks/BlockPlacer.java | 2 +- .../blocks/BlockPotionGenerator.java | 2 +- .../naturesaura/blocks/BlockPowderPlacer.java | 2 +- .../blocks/BlockProjectileGenerator.java | 2 +- .../naturesaura/blocks/BlockSnowCreator.java | 2 +- .../naturesaura/blocks/BlockSpawnLamp.java | 2 +- .../naturesaura/blocks/BlockSpring.java | 70 +++++++ .../naturesaura/blocks/BlockTimeChanger.java | 2 +- .../naturesaura/blocks/BlockWoodStand.java | 4 +- .../ellpeck/naturesaura/blocks/ModBlocks.java | 14 +- .../blocks/tiles/ModTileEntities.java | 1 + .../blocks/tiles/TileEntitySpring.java | 183 ++++++++++++++++++ .../ellpeck/naturesaura/reg/ModRegistry.java | 42 ++-- .../assets/naturesaura/lang/en_us.json | 1 + .../naturesaura/models/block/spring.json | 33 ++++ .../naturesaura/textures/block/spring.png | Bin 0 -> 360 bytes .../textures/block/spring_water.png | Bin 0 -> 192 bytes .../book/en_us/entries/using/spring.json | 21 ++ .../data/naturesaura/recipes/spring.json | 22 +++ 52 files changed, 424 insertions(+), 102 deletions(-) create mode 100644 src/generated/resources/assets/naturesaura/blockstates/spring.json create mode 100644 src/generated/resources/assets/naturesaura/models/item/spring.json create mode 100644 src/generated/resources/data/naturesaura/loot_tables/blocks/spring.json create mode 100644 src/main/java/de/ellpeck/naturesaura/blocks/BlockSpring.java create mode 100644 src/main/java/de/ellpeck/naturesaura/blocks/tiles/TileEntitySpring.java create mode 100644 src/main/resources/assets/naturesaura/models/block/spring.json create mode 100644 src/main/resources/assets/naturesaura/textures/block/spring.png create mode 100644 src/main/resources/assets/naturesaura/textures/block/spring_water.png create mode 100644 src/main/resources/data/naturesaura/patchouli_books/book/en_us/entries/using/spring.json create mode 100644 src/main/resources/data/naturesaura/recipes/spring.json diff --git a/src/generated/resources/assets/naturesaura/blockstates/spring.json b/src/generated/resources/assets/naturesaura/blockstates/spring.json new file mode 100644 index 00000000..4cbad986 --- /dev/null +++ b/src/generated/resources/assets/naturesaura/blockstates/spring.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "naturesaura:block/spring" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/naturesaura/models/item/spring.json b/src/generated/resources/assets/naturesaura/models/item/spring.json new file mode 100644 index 00000000..62fa95a3 --- /dev/null +++ b/src/generated/resources/assets/naturesaura/models/item/spring.json @@ -0,0 +1,3 @@ +{ + "parent": "naturesaura:block/spring" +} \ No newline at end of file diff --git a/src/generated/resources/data/naturesaura/loot_tables/blocks/spring.json b/src/generated/resources/data/naturesaura/loot_tables/blocks/spring.json new file mode 100644 index 00000000..5647f605 --- /dev/null +++ b/src/generated/resources/data/naturesaura/loot_tables/blocks/spring.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "naturesaura:spring" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockAncientLeaves.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockAncientLeaves.java index a3d85fe6..50698de4 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockAncientLeaves.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockAncientLeaves.java @@ -4,9 +4,7 @@ import de.ellpeck.naturesaura.api.NaturesAuraAPI; import de.ellpeck.naturesaura.blocks.tiles.TileEntityAncientLeaves; import de.ellpeck.naturesaura.data.BlockStateGenerator; import de.ellpeck.naturesaura.reg.*; -import net.minecraft.block.BlockState; -import net.minecraft.block.LeavesBlock; -import net.minecraft.block.SoundType; +import net.minecraft.block.*; import net.minecraft.block.material.Material; import net.minecraft.block.material.MaterialColor; import net.minecraft.client.renderer.color.IBlockColor; @@ -25,7 +23,7 @@ import java.util.Random; public class BlockAncientLeaves extends LeavesBlock implements IModItem, IColorProvidingBlock, IColorProvidingItem, ICustomBlockState { public BlockAncientLeaves() { - super(ModBlocks.prop(Material.LEAVES, MaterialColor.PINK).hardnessAndResistance(0.2F).tickRandomly().notSolid().sound(SoundType.PLANT)); + super(Properties.create(Material.LEAVES, MaterialColor.PINK).hardnessAndResistance(0.2F).tickRandomly().notSolid().sound(SoundType.PLANT)); ModRegistry.add(this); ModRegistry.add(new ModTileType<>(TileEntityAncientLeaves::new, this)); } diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockAncientLog.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockAncientLog.java index 07982f43..068eba55 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockAncientLog.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockAncientLog.java @@ -14,7 +14,7 @@ public class BlockAncientLog extends RotatedPillarBlock implements IModItem, ICu private final String baseName; public BlockAncientLog(String baseName) { - super(ModBlocks.prop(Material.WOOD,MaterialColor.PURPLE).hardnessAndResistance(2.0F).sound(SoundType.WOOD)); + super(Properties.create(Material.WOOD, MaterialColor.PURPLE).hardnessAndResistance(2.0F).sound(SoundType.WOOD)); this.baseName = baseName; ModRegistry.add(this); } diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockAncientSapling.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockAncientSapling.java index eec4b93b..5902ee26 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockAncientSapling.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockAncientSapling.java @@ -24,7 +24,7 @@ public class BlockAncientSapling extends BushBlock implements IGrowable, IModIte protected static final VoxelShape SHAPE = Block.makeCuboidShape(2.0D, 0.0D, 2.0D, 14.0D, 12.0D, 14.0D); public BlockAncientSapling() { - super(ModBlocks.prop(Material.PLANTS).hardnessAndResistance(0.0F).sound(SoundType.PLANT)); + super(Properties.create(Material.PLANTS).hardnessAndResistance(0.0F).sound(SoundType.PLANT)); ModRegistry.add(this); } diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockAnimalContainer.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockAnimalContainer.java index 6682e784..a28ec844 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockAnimalContainer.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockAnimalContainer.java @@ -21,7 +21,7 @@ public class BlockAnimalContainer extends BlockContainerImpl implements IVisuali private static final VoxelShape SHAPE = makeCuboidShape(5, 0, 5, 11, 13, 11); public BlockAnimalContainer() { - super("animal_container", TileEntityAnimalContainer::new, ModBlocks.prop(Blocks.STONE)); + super("animal_container", TileEntityAnimalContainer::new, Properties.from(Blocks.STONE)); } @Override diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockAnimalGenerator.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockAnimalGenerator.java index dc2db99f..1ea09176 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockAnimalGenerator.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockAnimalGenerator.java @@ -30,7 +30,7 @@ import net.minecraftforge.eventbus.api.SubscribeEvent; public class BlockAnimalGenerator extends BlockContainerImpl implements IVisualizable, ICustomBlockState { public BlockAnimalGenerator() { - super("animal_generator", TileEntityAnimalGenerator::new, ModBlocks.prop(Material.ROCK).hardnessAndResistance(3F).sound(SoundType.STONE)); + super("animal_generator", TileEntityAnimalGenerator::new, Properties.create(Material.ROCK).hardnessAndResistance(3F).sound(SoundType.STONE)); MinecraftForge.EVENT_BUS.register(this); } diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockAnimalSpawner.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockAnimalSpawner.java index baa83ab9..d7d9bd4e 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockAnimalSpawner.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockAnimalSpawner.java @@ -6,6 +6,6 @@ import net.minecraft.block.material.Material; public class BlockAnimalSpawner extends BlockContainerImpl { public BlockAnimalSpawner() { - super("animal_spawner", TileEntityAnimalSpawner::new, ModBlocks.prop(Material.ROCK).hardnessAndResistance(2F).sound(SoundType.STONE)); + super("animal_spawner", TileEntityAnimalSpawner::new, Properties.create(Material.ROCK).hardnessAndResistance(2F).sound(SoundType.STONE)); } } diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockAuraBloom.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockAuraBloom.java index 10608eec..e085e37b 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockAuraBloom.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockAuraBloom.java @@ -27,7 +27,7 @@ public class BlockAuraBloom extends BushBlock implements IModItem, ICustomBlockS private final Supplier tileEntitySupplier; public BlockAuraBloom(String baseName, Supplier tileEntitySupplier) { - super(ModBlocks.prop(Material.PLANTS).doesNotBlockMovement().hardnessAndResistance(0).sound(SoundType.PLANT)); + super(Properties.create(Material.PLANTS).doesNotBlockMovement().hardnessAndResistance(0).sound(SoundType.PLANT)); this.baseName = baseName; this.tileEntitySupplier = tileEntitySupplier; ModRegistry.add(this); diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockAuraDetector.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockAuraDetector.java index 04bd1900..be955cf5 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockAuraDetector.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockAuraDetector.java @@ -11,7 +11,7 @@ import net.minecraft.world.World; public class BlockAuraDetector extends BlockContainerImpl { public BlockAuraDetector() { - super("aura_detector", TileEntityAuraDetector::new, ModBlocks.prop(Material.ROCK).hardnessAndResistance(2F).sound(SoundType.STONE)); + super("aura_detector", TileEntityAuraDetector::new, Properties.create(Material.ROCK).hardnessAndResistance(2F).sound(SoundType.STONE)); } @Override diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockAutoCrafter.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockAutoCrafter.java index f9fcf4b7..f9dcd4d4 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockAutoCrafter.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockAutoCrafter.java @@ -16,7 +16,7 @@ public class BlockAutoCrafter extends BlockContainerImpl implements ICustomBlock public static final DirectionProperty FACING = BlockStateProperties.HORIZONTAL_FACING; public BlockAutoCrafter() { - super("auto_crafter", TileEntityAutoCrafter::new, ModBlocks.prop(Material.WOOD).hardnessAndResistance(1.5F).sound(SoundType.WOOD)); + super("auto_crafter", TileEntityAutoCrafter::new, Properties.create(Material.WOOD).hardnessAndResistance(1.5F).sound(SoundType.WOOD)); } @Override diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockChunkLoader.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockChunkLoader.java index d97280c6..977e4952 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockChunkLoader.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockChunkLoader.java @@ -26,7 +26,7 @@ public class BlockChunkLoader extends BlockContainerImpl implements IVisualizabl private static final VoxelShape SHAPE = makeCuboidShape(4, 4, 4, 12, 12, 12); public BlockChunkLoader() { - super("chunk_loader", TileEntityChunkLoader::new, ModBlocks.prop(Material.ROCK).hardnessAndResistance(3F).sound(SoundType.STONE)); + super("chunk_loader", TileEntityChunkLoader::new, Properties.create(Material.ROCK).hardnessAndResistance(3F).sound(SoundType.STONE)); } @Override diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockDecayedLeaves.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockDecayedLeaves.java index e73b2b97..55bc80fa 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockDecayedLeaves.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockDecayedLeaves.java @@ -3,9 +3,7 @@ package de.ellpeck.naturesaura.blocks; import de.ellpeck.naturesaura.data.BlockStateGenerator; import de.ellpeck.naturesaura.reg.ICustomBlockState; import de.ellpeck.naturesaura.reg.ICustomRenderType; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.block.SoundType; +import net.minecraft.block.*; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.RenderType; import net.minecraft.util.math.BlockPos; @@ -18,7 +16,7 @@ import java.util.function.Supplier; public class BlockDecayedLeaves extends BlockImpl implements ICustomBlockState, ICustomRenderType { public BlockDecayedLeaves() { - super("decayed_leaves", ModBlocks.prop(Material.LEAVES).hardnessAndResistance(0.2F).sound(SoundType.PLANT).notSolid().tickRandomly()); + super("decayed_leaves", Properties.create(Material.LEAVES).hardnessAndResistance(0.2F).sound(SoundType.PLANT).notSolid().tickRandomly()); } @Override diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockDimensionRail.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockDimensionRail.java index 306c9544..879bc165 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockDimensionRail.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockDimensionRail.java @@ -8,10 +8,7 @@ import de.ellpeck.naturesaura.packet.PacketClient; import de.ellpeck.naturesaura.packet.PacketHandler; import de.ellpeck.naturesaura.packet.PacketParticles; import de.ellpeck.naturesaura.reg.*; -import net.minecraft.block.AbstractRailBlock; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; +import net.minecraft.block.*; import net.minecraft.client.renderer.RenderType; import net.minecraft.entity.Entity; import net.minecraft.entity.item.minecart.AbstractMinecartEntity; @@ -46,7 +43,7 @@ public class BlockDimensionRail extends AbstractRailBlock implements IModItem, I private final RegistryKey[] canUseDims; public BlockDimensionRail(String name, RegistryKey goalDim, RegistryKey... canUseDims) { - super(false, ModBlocks.prop(Blocks.RAIL)); + super(false, Properties.from(Blocks.RAIL)); this.name = name; this.goalDim = goalDim; this.canUseDims = canUseDims; diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockEndFlower.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockEndFlower.java index 792605e2..6f95259b 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockEndFlower.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockEndFlower.java @@ -37,7 +37,7 @@ public class BlockEndFlower extends BushBlock implements IModItem, ICustomBlockS protected static final VoxelShape SHAPE = Block.makeCuboidShape(5.0D, 0.0D, 5.0D, 11.0D, 10.0D, 11.0D); public BlockEndFlower() { - super(ModBlocks.prop(Material.PLANTS).doesNotBlockMovement().hardnessAndResistance(0.5F).sound(SoundType.PLANT)); + super(Properties.create(Material.PLANTS).doesNotBlockMovement().hardnessAndResistance(0.5F).sound(SoundType.PLANT)); MinecraftForge.EVENT_BUS.register(this); ModRegistry.add(this); ModRegistry.add(new ModTileType<>(TileEntityEndFlower::new, this)); diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockEnderCrate.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockEnderCrate.java index f5e8ebbf..cfad30a3 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockEnderCrate.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockEnderCrate.java @@ -9,9 +9,7 @@ import de.ellpeck.naturesaura.data.BlockStateGenerator; import de.ellpeck.naturesaura.items.ModItems; import de.ellpeck.naturesaura.reg.ICustomBlockState; import de.ellpeck.naturesaura.reg.ITESRProvider; -import net.minecraft.block.AnvilBlock; -import net.minecraft.block.BlockState; -import net.minecraft.block.SoundType; +import net.minecraft.block.*; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.tileentity.TileEntityRenderer; import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; @@ -56,7 +54,7 @@ public class BlockEnderCrate extends BlockContainerImpl implements ITESRProvider private static final ThreadLocal> CACHED_WORLD = new ThreadLocal<>(); public BlockEnderCrate() { - super("ender_crate", TileEntityEnderCrate::new, ModBlocks.prop(Material.ROCK).hardnessAndResistance(5F).setLightLevel(s -> 7).sound(SoundType.STONE)); + super("ender_crate", TileEntityEnderCrate::new, Properties.create(Material.ROCK).hardnessAndResistance(5F).setLightLevel(s -> 7).sound(SoundType.STONE)); MinecraftForge.EVENT_BUS.register(this); } diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockFieldCreator.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockFieldCreator.java index cea49b21..cc8c4113 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockFieldCreator.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockFieldCreator.java @@ -18,7 +18,6 @@ import net.minecraft.util.Hand; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.text.TranslationTextComponent; -import net.minecraft.world.IBlockReader; import net.minecraft.world.World; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @@ -28,7 +27,7 @@ import java.util.function.Supplier; public class BlockFieldCreator extends BlockContainerImpl implements ICustomBlockState, ICustomRenderType { public BlockFieldCreator() { - super("field_creator", TileEntityFieldCreator::new, ModBlocks.prop(Material.ROCK).hardnessAndResistance(2F).notSolid().sound(SoundType.STONE)); + super("field_creator", TileEntityFieldCreator::new, Properties.create(Material.ROCK).hardnessAndResistance(2F).notSolid().sound(SoundType.STONE)); } @Override diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockFireworkGenerator.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockFireworkGenerator.java index 16803093..1b28bcb3 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockFireworkGenerator.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockFireworkGenerator.java @@ -14,7 +14,7 @@ import net.minecraftforge.api.distmarker.OnlyIn; public class BlockFireworkGenerator extends BlockContainerImpl implements IVisualizable, ICustomBlockState { public BlockFireworkGenerator() { - super("firework_generator", TileEntityFireworkGenerator::new, ModBlocks.prop(Material.ROCK).hardnessAndResistance(3F).sound(SoundType.STONE)); + super("firework_generator", TileEntityFireworkGenerator::new, Properties.create(Material.ROCK).hardnessAndResistance(3F).sound(SoundType.STONE)); } @Override diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockFlowerGenerator.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockFlowerGenerator.java index a95fcf04..b06d2e4b 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockFlowerGenerator.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockFlowerGenerator.java @@ -15,7 +15,7 @@ import net.minecraftforge.api.distmarker.OnlyIn; public class BlockFlowerGenerator extends BlockContainerImpl implements IVisualizable, ICustomBlockState { public BlockFlowerGenerator() { - super("flower_generator", TileEntityFlowerGenerator::new, ModBlocks.prop(Material.WOOD).sound(SoundType.WOOD).hardnessAndResistance(2F)); + super("flower_generator", TileEntityFlowerGenerator::new, Properties.create(Material.WOOD).sound(SoundType.WOOD).hardnessAndResistance(2F)); } @Override diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockFurnaceHeater.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockFurnaceHeater.java index 55714b10..13985f11 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockFurnaceHeater.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockFurnaceHeater.java @@ -38,7 +38,7 @@ public class BlockFurnaceHeater extends BlockContainerImpl implements ICustomBlo }; public BlockFurnaceHeater() { - super("furnace_heater", TileEntityFurnaceHeater::new, ModBlocks.prop(Material.ROCK).hardnessAndResistance(3F).harvestLevel(1).harvestTool(ToolType.PICKAXE)); + super("furnace_heater", TileEntityFurnaceHeater::new, Properties.create(Material.ROCK).hardnessAndResistance(3F).harvestLevel(1).harvestTool(ToolType.PICKAXE)); } @Override diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockGeneratorLimitRemover.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockGeneratorLimitRemover.java index 17d9d22e..a2f06d69 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockGeneratorLimitRemover.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockGeneratorLimitRemover.java @@ -19,7 +19,7 @@ import java.util.function.Supplier; public class BlockGeneratorLimitRemover extends BlockContainerImpl implements ITESRProvider, ICustomBlockState { public BlockGeneratorLimitRemover() { - super("generator_limit_remover", TileEntityGeneratorLimitRemover::new, ModBlocks.prop(Material.ROCK).hardnessAndResistance(2F).sound(SoundType.STONE)); + super("generator_limit_remover", TileEntityGeneratorLimitRemover::new, Properties.create(Material.ROCK).hardnessAndResistance(2F).sound(SoundType.STONE)); } @Override diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockGoldPowder.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockGoldPowder.java index 5fa06600..2af16946 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockGoldPowder.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockGoldPowder.java @@ -6,10 +6,7 @@ import de.ellpeck.naturesaura.reg.IColorProvidingBlock; import de.ellpeck.naturesaura.reg.ICustomBlockState; import de.ellpeck.naturesaura.reg.ICustomItemModel; import de.ellpeck.naturesaura.reg.ICustomRenderType; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.block.RedstoneWireBlock; +import net.minecraft.block.*; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.color.IBlockColor; import net.minecraft.item.BlockItemUseContext; @@ -38,7 +35,7 @@ public class BlockGoldPowder extends BlockImpl implements IColorProvidingBlock, protected static final VoxelShape[] SHAPES = new VoxelShape[]{Block.makeCuboidShape(3.0D, 0.0D, 3.0D, 13.0D, 1.0D, 13.0D), Block.makeCuboidShape(3.0D, 0.0D, 3.0D, 13.0D, 1.0D, 16.0D), Block.makeCuboidShape(0.0D, 0.0D, 3.0D, 13.0D, 1.0D, 13.0D), Block.makeCuboidShape(0.0D, 0.0D, 3.0D, 13.0D, 1.0D, 16.0D), Block.makeCuboidShape(3.0D, 0.0D, 0.0D, 13.0D, 1.0D, 13.0D), Block.makeCuboidShape(3.0D, 0.0D, 0.0D, 13.0D, 1.0D, 16.0D), Block.makeCuboidShape(0.0D, 0.0D, 0.0D, 13.0D, 1.0D, 13.0D), Block.makeCuboidShape(0.0D, 0.0D, 0.0D, 13.0D, 1.0D, 16.0D), Block.makeCuboidShape(3.0D, 0.0D, 3.0D, 16.0D, 1.0D, 13.0D), Block.makeCuboidShape(3.0D, 0.0D, 3.0D, 16.0D, 1.0D, 16.0D), Block.makeCuboidShape(0.0D, 0.0D, 3.0D, 16.0D, 1.0D, 13.0D), Block.makeCuboidShape(0.0D, 0.0D, 3.0D, 16.0D, 1.0D, 16.0D), Block.makeCuboidShape(3.0D, 0.0D, 0.0D, 16.0D, 1.0D, 13.0D), Block.makeCuboidShape(3.0D, 0.0D, 0.0D, 16.0D, 1.0D, 16.0D), Block.makeCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 1.0D, 13.0D), Block.makeCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 1.0D, 16.0D)}; public BlockGoldPowder() { - super("gold_powder", ModBlocks.prop(Blocks.REDSTONE_WIRE)); + super("gold_powder", Properties.from(Blocks.REDSTONE_WIRE)); this.setDefaultState(this.stateContainer.getBaseState().with(NORTH, RedstoneSide.NONE).with(EAST, RedstoneSide.NONE).with(SOUTH, RedstoneSide.NONE).with(WEST, RedstoneSide.NONE)); } diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockGoldenLeaves.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockGoldenLeaves.java index 905399e6..cb1bed73 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockGoldenLeaves.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockGoldenLeaves.java @@ -4,10 +4,7 @@ import de.ellpeck.naturesaura.Helper; import de.ellpeck.naturesaura.api.NaturesAuraAPI; import de.ellpeck.naturesaura.data.BlockStateGenerator; import de.ellpeck.naturesaura.reg.*; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.LeavesBlock; -import net.minecraft.block.SoundType; +import net.minecraft.block.*; import net.minecraft.block.material.Material; import net.minecraft.block.material.MaterialColor; import net.minecraft.client.renderer.color.IBlockColor; @@ -30,7 +27,7 @@ public class BlockGoldenLeaves extends LeavesBlock implements IModItem, IColorPr public static final IntegerProperty STAGE = IntegerProperty.create("stage", 0, HIGHEST_STAGE); public BlockGoldenLeaves() { - super(ModBlocks.prop(Material.LEAVES, MaterialColor.GOLD).hardnessAndResistance(0.2F).tickRandomly().notSolid().sound(SoundType.PLANT)); + super(Properties.create(Material.LEAVES, MaterialColor.GOLD).hardnessAndResistance(0.2F).tickRandomly().notSolid().sound(SoundType.PLANT)); ModRegistry.add(this); } diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockGratedChute.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockGratedChute.java index 566dd886..e8b8af38 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockGratedChute.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockGratedChute.java @@ -49,7 +49,7 @@ public class BlockGratedChute extends BlockContainerImpl implements ICustomBlock private static final VoxelShape WEST_RAYTRACE_SHAPE = VoxelShapes.or(IHopper.INSIDE_BOWL_SHAPE, Block.makeCuboidShape(0.0D, 8.0D, 6.0D, 4.0D, 10.0D, 10.0D)); public BlockGratedChute() { - super("grated_chute", TileEntityGratedChute::new, ModBlocks.prop(Material.IRON).hardnessAndResistance(3.0F, 8.0F).sound(SoundType.METAL)); + super("grated_chute", TileEntityGratedChute::new, Properties.create(Material.IRON).hardnessAndResistance(3.0F, 8.0F).sound(SoundType.METAL)); } @Override diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockHopperUpgrade.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockHopperUpgrade.java index c6ee185e..3a572f53 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockHopperUpgrade.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockHopperUpgrade.java @@ -12,7 +12,7 @@ import net.minecraftforge.api.distmarker.OnlyIn; public class BlockHopperUpgrade extends BlockContainerImpl implements IVisualizable { public BlockHopperUpgrade() { - super("hopper_upgrade", TileEntityHopperUpgrade::new, ModBlocks.prop(Material.IRON).hardnessAndResistance(2.5F).sound(SoundType.METAL)); + super("hopper_upgrade", TileEntityHopperUpgrade::new, Properties.create(Material.IRON).hardnessAndResistance(2.5F).sound(SoundType.METAL)); } @Override diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockItemDistributor.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockItemDistributor.java index 8ac100d7..d7acb0f7 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockItemDistributor.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockItemDistributor.java @@ -16,7 +16,7 @@ import net.minecraft.world.World; public class BlockItemDistributor extends BlockContainerImpl implements ICustomBlockState { public BlockItemDistributor() { - super("item_distributor", TileEntityItemDistributor::new, ModBlocks.prop(Blocks.STONE_BRICKS)); + super("item_distributor", TileEntityItemDistributor::new, Properties.from(Blocks.STONE_BRICKS)); } @Override diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockMossGenerator.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockMossGenerator.java index bf4382fe..16f2bfc3 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockMossGenerator.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockMossGenerator.java @@ -12,7 +12,7 @@ import net.minecraftforge.api.distmarker.OnlyIn; public class BlockMossGenerator extends BlockContainerImpl implements IVisualizable { public BlockMossGenerator() { - super("moss_generator", TileEntityMossGenerator::new, ModBlocks.prop(Material.ROCK).hardnessAndResistance(2.5F).sound(SoundType.STONE)); + super("moss_generator", TileEntityMossGenerator::new, Properties.create(Material.ROCK).hardnessAndResistance(2.5F).sound(SoundType.STONE)); } @Override diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockNatureAltar.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockNatureAltar.java index fe1c2ef4..a13c466c 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockNatureAltar.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockNatureAltar.java @@ -41,7 +41,7 @@ public class BlockNatureAltar extends BlockContainerImpl implements ITESRProvide public static final BooleanProperty NETHER = BooleanProperty.create("nether"); public BlockNatureAltar() { - super("nature_altar", TileEntityNatureAltar::new, ModBlocks.prop(Material.ROCK).hardnessAndResistance(4F).harvestLevel(1).harvestTool(ToolType.PICKAXE)); + super("nature_altar", TileEntityNatureAltar::new, Properties.create(Material.ROCK).hardnessAndResistance(4F).harvestLevel(1).harvestTool(ToolType.PICKAXE)); this.setDefaultState(this.getDefaultState().with(NETHER, false)); } diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockNetherGrass.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockNetherGrass.java index 69fc8f86..18e0bebc 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockNetherGrass.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockNetherGrass.java @@ -2,9 +2,7 @@ package de.ellpeck.naturesaura.blocks; import de.ellpeck.naturesaura.data.BlockStateGenerator; import de.ellpeck.naturesaura.reg.ICustomBlockState; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.block.IGrowable; +import net.minecraft.block.*; import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockReader; @@ -16,7 +14,7 @@ import java.util.Random; public class BlockNetherGrass extends BlockImpl implements ICustomBlockState, IGrowable { public BlockNetherGrass() { - super("nether_grass", ModBlocks.prop(Blocks.NETHERRACK).tickRandomly()); + super("nether_grass", Properties.from(Blocks.NETHERRACK).tickRandomly()); } @Override diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockOakGenerator.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockOakGenerator.java index 6357aa7c..2e55bc2a 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockOakGenerator.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockOakGenerator.java @@ -25,7 +25,7 @@ import java.util.Random; public class BlockOakGenerator extends BlockContainerImpl implements IVisualizable, ICustomBlockState { public BlockOakGenerator() { - super("oak_generator", TileEntityOakGenerator::new, ModBlocks.prop(Material.WOOD).hardnessAndResistance(2F).sound(SoundType.WOOD)); + super("oak_generator", TileEntityOakGenerator::new, Properties.create(Material.WOOD).hardnessAndResistance(2F).sound(SoundType.WOOD)); MinecraftForge.EVENT_BUS.register(this); } diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockOfferingTable.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockOfferingTable.java index 8a79b020..2aca69aa 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockOfferingTable.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockOfferingTable.java @@ -33,7 +33,7 @@ public class BlockOfferingTable extends BlockContainerImpl implements ITESRProvi private static final VoxelShape SHAPE = VoxelShapes.create(2 / 16F, 0F, 2 / 16F, 14 / 16F, 1F, 14 / 16F); public BlockOfferingTable() { - super("offering_table", TileEntityOfferingTable::new, ModBlocks.prop(Material.WOOD).hardnessAndResistance(2F).sound(SoundType.WOOD)); + super("offering_table", TileEntityOfferingTable::new, Properties.create(Material.WOOD).hardnessAndResistance(2F).sound(SoundType.WOOD)); } @Override diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockPickupStopper.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockPickupStopper.java index 78c92a9a..c07c86aa 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockPickupStopper.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockPickupStopper.java @@ -23,7 +23,7 @@ import net.minecraftforge.eventbus.api.SubscribeEvent; public class BlockPickupStopper extends BlockContainerImpl implements IVisualizable, ICustomBlockState { public BlockPickupStopper() { - super("pickup_stopper", TileEntityPickupStopper::new, ModBlocks.prop(Material.ROCK).hardnessAndResistance(2F).sound(SoundType.STONE)); + super("pickup_stopper", TileEntityPickupStopper::new, Properties.create(Material.ROCK).hardnessAndResistance(2F).sound(SoundType.STONE)); MinecraftForge.EVENT_BUS.register(this); } diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockPlacer.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockPlacer.java index 98692943..62417f03 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockPlacer.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockPlacer.java @@ -15,7 +15,7 @@ import net.minecraftforge.api.distmarker.OnlyIn; public class BlockPlacer extends BlockContainerImpl implements IVisualizable, ICustomBlockState { public BlockPlacer() { - super("placer", TileEntityPlacer::new, ModBlocks.prop(Material.ROCK).hardnessAndResistance(2.5F).sound(SoundType.STONE)); + super("placer", TileEntityPlacer::new, Properties.create(Material.ROCK).hardnessAndResistance(2.5F).sound(SoundType.STONE)); } @Override diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockPotionGenerator.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockPotionGenerator.java index 3a4801e0..9ad653a5 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockPotionGenerator.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockPotionGenerator.java @@ -8,7 +8,7 @@ import net.minecraftforge.common.ToolType; public class BlockPotionGenerator extends BlockContainerImpl implements ICustomBlockState { public BlockPotionGenerator() { - super("potion_generator", TileEntityPotionGenerator::new, ModBlocks.prop(Material.ROCK).hardnessAndResistance(5F).harvestTool(ToolType.PICKAXE).harvestLevel(1)); + super("potion_generator", TileEntityPotionGenerator::new, Properties.create(Material.ROCK).hardnessAndResistance(5F).harvestTool(ToolType.PICKAXE).harvestLevel(1)); } @Override diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockPowderPlacer.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockPowderPlacer.java index 7dd5d067..08a12f1f 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockPowderPlacer.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockPowderPlacer.java @@ -17,7 +17,7 @@ public class BlockPowderPlacer extends BlockContainerImpl implements ICustomBloc private static final VoxelShape SHAPE = VoxelShapes.create(0F, 0F, 0F, 1F, 4 / 16F, 1F); public BlockPowderPlacer() { - super("powder_placer", TileEntityPowderPlacer::new, ModBlocks.prop(Material.ROCK).hardnessAndResistance(2, 5F).sound(SoundType.STONE)); + super("powder_placer", TileEntityPowderPlacer::new, Properties.create(Material.ROCK).hardnessAndResistance(2, 5F).sound(SoundType.STONE)); } @Override diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockProjectileGenerator.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockProjectileGenerator.java index b8c2f273..d2465217 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockProjectileGenerator.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockProjectileGenerator.java @@ -32,7 +32,7 @@ import java.util.function.Supplier; public class BlockProjectileGenerator extends BlockContainerImpl implements ITESRProvider, ICustomBlockState { public BlockProjectileGenerator() { - super("projectile_generator", TileEntityProjectileGenerator::new, ModBlocks.prop(Material.ROCK).hardnessAndResistance(2.5F).sound(SoundType.STONE)); + super("projectile_generator", TileEntityProjectileGenerator::new, Properties.create(Material.ROCK).hardnessAndResistance(2.5F).sound(SoundType.STONE)); MinecraftForge.EVENT_BUS.register(this); } diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockSnowCreator.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockSnowCreator.java index 4aaed438..c8bfa45b 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockSnowCreator.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockSnowCreator.java @@ -14,7 +14,7 @@ import net.minecraftforge.api.distmarker.OnlyIn; public class BlockSnowCreator extends BlockContainerImpl implements IVisualizable, ICustomBlockState { public BlockSnowCreator() { - super("snow_creator", TileEntitySnowCreator::new, ModBlocks.prop(Blocks.STONE_BRICKS)); + super("snow_creator", TileEntitySnowCreator::new, Properties.from(Blocks.STONE_BRICKS)); } @Override diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockSpawnLamp.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockSpawnLamp.java index 0bb7e975..189575e4 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockSpawnLamp.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockSpawnLamp.java @@ -40,7 +40,7 @@ public class BlockSpawnLamp extends BlockContainerImpl implements IVisualizable, private static final VoxelShape SHAPE = VoxelShapes.create(4 / 16F, 0F, 4 / 16F, 12 / 16F, 13 / 16F, 12 / 16F); public BlockSpawnLamp() { - super("spawn_lamp", TileEntitySpawnLamp::new, ModBlocks.prop(Material.IRON).hardnessAndResistance(3F).setLightLevel(s -> 15).sound(SoundType.METAL)); + super("spawn_lamp", TileEntitySpawnLamp::new, Properties.create(Material.IRON).hardnessAndResistance(3F).setLightLevel(s -> 15).sound(SoundType.METAL)); MinecraftForge.EVENT_BUS.register(this); } diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockSpring.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockSpring.java new file mode 100644 index 00000000..654470df --- /dev/null +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockSpring.java @@ -0,0 +1,70 @@ +package de.ellpeck.naturesaura.blocks; + +import de.ellpeck.naturesaura.blocks.tiles.TileEntitySpring; +import de.ellpeck.naturesaura.data.BlockStateGenerator; +import de.ellpeck.naturesaura.reg.IColorProvidingBlock; +import de.ellpeck.naturesaura.reg.IColorProvidingItem; +import de.ellpeck.naturesaura.reg.ICustomBlockState; +import de.ellpeck.naturesaura.reg.ICustomRenderType; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.IBucketPickupHandler; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.color.IBlockColor; +import net.minecraft.client.renderer.color.IItemColor; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.fluid.Fluid; +import net.minecraft.fluid.Fluids; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IWorld; +import net.minecraft.world.biome.BiomeColors; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +import java.util.function.Supplier; + +public class BlockSpring extends BlockContainerImpl implements ICustomBlockState, IColorProvidingBlock, IColorProvidingItem, IBucketPickupHandler, ICustomRenderType { + public BlockSpring() { + super("spring", TileEntitySpring::new, Properties.from(Blocks.STONE_BRICKS)); + } + + @Override + @OnlyIn(Dist.CLIENT) + public IBlockColor getBlockColor() { + return (state, world, pos, i) -> BiomeColors.getWaterColor(world, pos); + } + + @Override + @OnlyIn(Dist.CLIENT) + @SuppressWarnings("Convert2Lambda") + public IItemColor getItemColor() { + return new IItemColor() { + @Override + public int getColor(ItemStack stack, int i) { + PlayerEntity player = Minecraft.getInstance().player; + return BiomeColors.getWaterColor(player.world, player.getPosition()); + } + }; + } + + @Override + public void generateCustomBlockState(BlockStateGenerator generator) { + generator.simpleBlock(this, generator.models().getExistingFile(generator.modLoc(this.getBaseName()))); + } + + @Override + public Fluid pickupFluid(IWorld worldIn, BlockPos pos, BlockState state) { + TileEntity tile = worldIn.getTileEntity(pos); + if (tile instanceof TileEntitySpring) + ((TileEntitySpring) tile).consumeAura(2500); + return Fluids.WATER; + } + + @Override + public Supplier getRenderType() { + return RenderType::getTranslucent; + } +} diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockTimeChanger.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockTimeChanger.java index b91446cb..27deb0ab 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockTimeChanger.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockTimeChanger.java @@ -8,7 +8,7 @@ import net.minecraft.block.material.Material; public class BlockTimeChanger extends BlockContainerImpl implements ICustomBlockState { public BlockTimeChanger() { - super("time_changer", TileEntityTimeChanger::new, ModBlocks.prop(Material.ROCK).hardnessAndResistance(2.5F).sound(SoundType.STONE)); + super("time_changer", TileEntityTimeChanger::new, Properties.create(Material.ROCK).hardnessAndResistance(2.5F).sound(SoundType.STONE)); } @Override diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/BlockWoodStand.java b/src/main/java/de/ellpeck/naturesaura/blocks/BlockWoodStand.java index 0de07e64..6e2d48c8 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/BlockWoodStand.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/BlockWoodStand.java @@ -1,8 +1,6 @@ package de.ellpeck.naturesaura.blocks; import de.ellpeck.naturesaura.Helper; -import de.ellpeck.naturesaura.api.NaturesAuraAPI; -import de.ellpeck.naturesaura.recipes.ModRecipe; import de.ellpeck.naturesaura.recipes.ModRecipes; import de.ellpeck.naturesaura.recipes.TreeRitualRecipe; import de.ellpeck.naturesaura.blocks.multi.Multiblocks; @@ -50,7 +48,7 @@ public class BlockWoodStand extends BlockContainerImpl implements ITESRProvider< private static final VoxelShape SHAPE = VoxelShapes.create(3 / 16F, 0F, 3 / 16F, 13 / 16F, 13 / 16F, 13 / 16F); public BlockWoodStand() { - super("wood_stand", TileEntityWoodStand::new, ModBlocks.prop(Material.WOOD).hardnessAndResistance(1.5F).sound(SoundType.WOOD).harvestLevel(0).harvestTool(ToolType.AXE)); + super("wood_stand", TileEntityWoodStand::new, Properties.create(Material.WOOD).hardnessAndResistance(1.5F).sound(SoundType.WOOD).harvestLevel(0).harvestTool(ToolType.AXE)); MinecraftForge.EVENT_BUS.register(this); } diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/ModBlocks.java b/src/main/java/de/ellpeck/naturesaura/blocks/ModBlocks.java index e746189b..9b55f4fc 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/ModBlocks.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/ModBlocks.java @@ -71,17 +71,5 @@ public final class ModBlocks { public static Block CHORUS_GENERATOR; public static Block AURA_TIMER; public static Block SLIME_SPLIT_GENERATOR; - - public static Block.Properties prop(Material material, MaterialColor color) { - return Block.Properties.create(material, color); - } - - public static Block.Properties prop(Material material) { - return Block.Properties.create(material); - } - - public static Block.Properties prop(Block block) { - return Block.Properties.from(block); - } - + public static Block SPRING; } diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/tiles/ModTileEntities.java b/src/main/java/de/ellpeck/naturesaura/blocks/tiles/ModTileEntities.java index fe1928b6..6593792a 100644 --- a/src/main/java/de/ellpeck/naturesaura/blocks/tiles/ModTileEntities.java +++ b/src/main/java/de/ellpeck/naturesaura/blocks/tiles/ModTileEntities.java @@ -41,4 +41,5 @@ public final class ModTileEntities { public static TileEntityType CHORUS_GENERATOR; public static TileEntityType AURA_TIMER; public static TileEntityType SLIME_SPLIT_GENERATOR; + public static TileEntityType SPRING; } diff --git a/src/main/java/de/ellpeck/naturesaura/blocks/tiles/TileEntitySpring.java b/src/main/java/de/ellpeck/naturesaura/blocks/tiles/TileEntitySpring.java new file mode 100644 index 00000000..40fd9e21 --- /dev/null +++ b/src/main/java/de/ellpeck/naturesaura/blocks/tiles/TileEntitySpring.java @@ -0,0 +1,183 @@ +package de.ellpeck.naturesaura.blocks.tiles; + +import de.ellpeck.naturesaura.api.aura.chunk.IAuraChunk; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.CauldronBlock; +import net.minecraft.fluid.FluidState; +import net.minecraft.fluid.Fluids; +import net.minecraft.tags.FluidTags; +import net.minecraft.tileentity.ITickableTileEntity; +import net.minecraft.util.Direction; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvents; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.common.FarmlandWaterManager; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.ticket.AABBTicket; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.event.ForgeEventFactory; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidTank; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.templates.FluidTank; + +public class TileEntitySpring extends TileEntityImpl implements ITickableTileEntity { + + private final IFluidTank tank = new InfiniteTank(); + private AABBTicket waterTicket; + + public TileEntitySpring() { + super(ModTileEntities.SPRING); + } + + @Override + public void validate() { + super.validate(); + if (!this.world.isRemote) { + // add a ticket to water crops + AxisAlignedBB area = new AxisAlignedBB(this.pos).grow(5); + FarmlandWaterManager.addAABBTicket(this.world, area); + } + } + + @Override + public void remove() { + super.remove(); + if (!this.world.isRemote && this.waterTicket != null && this.waterTicket.isValid()) { + this.waterTicket.invalidate(); + this.waterTicket = null; + } + } + + @Override + public void tick() { + if (this.world.isRemote || this.world.getGameTime() % 35 != 0) + return; + + // fill cauldrons + BlockPos up = this.pos.up(); + BlockState upState = this.world.getBlockState(up); + if (upState.hasProperty(CauldronBlock.LEVEL)) { + int level = upState.get(CauldronBlock.LEVEL); + if (level < 3) { + this.world.setBlockState(up, upState.with(CauldronBlock.LEVEL, level + 1)); + this.world.playSound(null, up, SoundEvents.ITEM_BUCKET_FILL, SoundCategory.BLOCKS, 1, 1); + this.consumeAura(2500); + return; + } + } + + // wet sponges + int spongeRadius = 2; + for (int x = -spongeRadius; x <= spongeRadius; x++) { + for (int y = -spongeRadius; y <= spongeRadius; y++) { + for (int z = -spongeRadius; z <= spongeRadius; z++) { + BlockPos pos = this.pos.add(x, y, z); + BlockState state = this.world.getBlockState(pos); + if (state.getBlock() == Blocks.SPONGE) { + this.world.setBlockState(pos, Blocks.WET_SPONGE.getDefaultState(), 2); + this.world.playEvent(2001, pos, Block.getStateId(Blocks.WATER.getDefaultState())); + this.consumeAura(2500); + return; + } + } + } + } + + // generate obsidian + for (Direction dir : Direction.Plane.HORIZONTAL) { + BlockPos side = this.pos.offset(dir); + if (this.isLava(side, true)) { + this.world.setBlockState(side, ForgeEventFactory.fireFluidPlaceBlockEvent(this.world, side, side, Blocks.OBSIDIAN.getDefaultState())); + this.world.playEvent(1501, side, 0); + this.consumeAura(1500); + return; + } + } + + // generate stone + BlockPos twoUp = this.pos.up(2); + if (this.isLava(twoUp, false) && (this.world.getBlockState(up).isAir(this.world, up) || this.isLava(up, false))) { + this.world.setBlockState(up, ForgeEventFactory.fireFluidPlaceBlockEvent(this.world, up, twoUp, Blocks.STONE.getDefaultState())); + this.world.playEvent(1501, up, 0); + this.consumeAura(150); + return; + } + + // generate cobblestone + for (Direction dir : Direction.Plane.HORIZONTAL) { + BlockPos twoSide = this.pos.offset(dir, 2); + BlockPos side = this.pos.offset(dir); + if (this.isLava(twoSide, false) && (this.world.getBlockState(side).isAir(this.world, side) || this.isLava(side, false))) { + this.world.setBlockState(side, ForgeEventFactory.fireFluidPlaceBlockEvent(this.world, side, twoSide, Blocks.COBBLESTONE.getDefaultState())); + this.world.playEvent(1501, side, 0); + this.consumeAura(100); + return; + } + } + } + + @Override + public LazyOptional getCapability(Capability capability, Direction facing) { + if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) + return LazyOptional.of(() -> (T) this.tank); + return LazyOptional.empty(); + } + + public void consumeAura(int amount) { + while (amount > 0) { + BlockPos pos = IAuraChunk.getHighestSpot(this.world, this.pos, 35, this.pos); + amount -= IAuraChunk.getAuraChunk(this.world, pos).drainAura(pos, amount); + } + } + + private boolean isLava(BlockPos offset, boolean source) { + FluidState state = this.world.getFluidState(offset); + return (!source || state.isSource()) && state.getFluid().isIn(FluidTags.LAVA); + } + + private class InfiniteTank implements IFluidTank { + @Override + public FluidStack getFluid() { + return new FluidStack(Fluids.WATER, Integer.MAX_VALUE); + } + + @Override + public int getFluidAmount() { + return Integer.MAX_VALUE; + } + + @Override + public int getCapacity() { + return Integer.MAX_VALUE; + } + + @Override + public boolean isFluidValid(FluidStack stack) { + return stack.getFluid().isIn(FluidTags.WATER); + } + + @Override + public int fill(FluidStack resource, IFluidHandler.FluidAction action) { + return 0; + } + + @Override + public FluidStack drain(int maxDrain, IFluidHandler.FluidAction action) { + if (action.execute()) + TileEntitySpring.this.consumeAura(2 * maxDrain); + return new FluidStack(Fluids.WATER, maxDrain); + } + + @Override + public FluidStack drain(FluidStack resource, IFluidHandler.FluidAction action) { + if (this.isFluidValid(resource)) + return this.drain(resource.getAmount(), action); + return FluidStack.EMPTY; + } + } +} diff --git a/src/main/java/de/ellpeck/naturesaura/reg/ModRegistry.java b/src/main/java/de/ellpeck/naturesaura/reg/ModRegistry.java index 59e91c9b..9dacf4f6 100644 --- a/src/main/java/de/ellpeck/naturesaura/reg/ModRegistry.java +++ b/src/main/java/de/ellpeck/naturesaura/reg/ModRegistry.java @@ -47,21 +47,14 @@ import net.minecraft.potion.Effect; import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityType; import net.minecraft.world.World; -import net.minecraft.world.biome.Biome; -import net.minecraft.world.gen.GenerationStage; import net.minecraft.world.gen.feature.Feature; -import net.minecraft.world.gen.feature.IFeatureConfig; import net.minecraft.world.gen.feature.structure.Structure; -import net.minecraft.world.gen.placement.IPlacementConfig; -import net.minecraft.world.gen.placement.Placement; import net.minecraftforge.common.extensions.IForgeContainerType; import net.minecraftforge.event.RegistryEvent; -import net.minecraftforge.event.world.BiomeLoadingEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.client.registry.IRenderFactory; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.items.IItemHandler; -import net.minecraftforge.registries.ForgeRegistries; import java.util.HashSet; import java.util.Set; @@ -82,9 +75,9 @@ public final class ModRegistry { event.getRegistry().registerAll( new BlockAncientLog("ancient_log"), new BlockAncientLog("ancient_bark"), - temp = new BlockImpl("ancient_planks", ModBlocks.prop(Material.WOOD).sound(SoundType.WOOD).hardnessAndResistance(2F)), - new BlockStairsNA("ancient_stairs", "ancient_planks", temp::getDefaultState, ModBlocks.prop(temp)), - new Slab("ancient_slab", "ancient_planks", ModBlocks.prop(temp)), + temp = new BlockImpl("ancient_planks", Block.Properties.create(Material.WOOD).sound(SoundType.WOOD).hardnessAndResistance(2F)), + new BlockStairsNA("ancient_stairs", "ancient_planks", temp::getDefaultState, Block.Properties.from(temp)), + new Slab("ancient_slab", "ancient_planks", Block.Properties.from(temp)), new BlockAncientLeaves(), new BlockAncientSapling(), new BlockNatureAltar(), @@ -92,23 +85,23 @@ public final class ModRegistry { new BlockGoldenLeaves(), new BlockGoldPowder(), new BlockWoodStand(), - temp = new BlockImpl("infused_stone", ModBlocks.prop(Material.ROCK).sound(SoundType.STONE).hardnessAndResistance(1.75F)), - new BlockStairsNA("infused_stairs", "infused_stone", temp::getDefaultState, ModBlocks.prop(temp)), - new Slab("infused_slab", "infused_stone", ModBlocks.prop(temp)), - temp = new BlockImpl("infused_brick", ModBlocks.prop(Material.ROCK).sound(SoundType.STONE).hardnessAndResistance(1.5F)), - new BlockStairsNA("infused_brick_stairs", "infused_brick", temp::getDefaultState, ModBlocks.prop(temp)), - new Slab("infused_brick_slab", "infused_brick", ModBlocks.prop(temp)), + temp = new BlockImpl("infused_stone", Block.Properties.create(Material.ROCK).sound(SoundType.STONE).hardnessAndResistance(1.75F)), + new BlockStairsNA("infused_stairs", "infused_stone", temp::getDefaultState, Block.Properties.from(temp)), + new Slab("infused_slab", "infused_stone", Block.Properties.from(temp)), + temp = new BlockImpl("infused_brick", Block.Properties.create(Material.ROCK).sound(SoundType.STONE).hardnessAndResistance(1.5F)), + new BlockStairsNA("infused_brick_stairs", "infused_brick", temp::getDefaultState, Block.Properties.from(temp)), + new Slab("infused_brick_slab", "infused_brick", Block.Properties.from(temp)), new BlockFurnaceHeater(), new BlockPotionGenerator(), new BlockAuraDetector(), - new BlockCatalyst("conversion_catalyst", ModBlocks.prop(Material.ROCK).sound(SoundType.STONE).hardnessAndResistance(2.5F)), - new BlockCatalyst("crushing_catalyst", ModBlocks.prop(Material.ROCK).sound(SoundType.STONE).hardnessAndResistance(2.5F)), + new BlockCatalyst("conversion_catalyst", Block.Properties.create(Material.ROCK).sound(SoundType.STONE).hardnessAndResistance(2.5F)), + new BlockCatalyst("crushing_catalyst", Block.Properties.create(Material.ROCK).sound(SoundType.STONE).hardnessAndResistance(2.5F)), new BlockFlowerGenerator(), new BlockPlacer(), new BlockHopperUpgrade(), new BlockFieldCreator(), new BlockOakGenerator(), - new BlockImpl("infused_iron_block", ModBlocks.prop(Material.IRON).sound(SoundType.METAL).hardnessAndResistance(3F)), + new BlockImpl("infused_iron_block", Block.Properties.create(Material.IRON).sound(SoundType.METAL).hardnessAndResistance(3F)), new BlockOfferingTable(), new BlockPickupStopper(), new BlockSpawnLamp(), @@ -117,8 +110,8 @@ public final class ModRegistry { new BlockGratedChute(), new BlockAnimalSpawner(), new BlockAutoCrafter(), - new BlockImpl("gold_brick", ModBlocks.prop(Blocks.STONE_BRICKS)), - new BlockImpl("gold_nether_brick", ModBlocks.prop(Blocks.NETHER_BRICKS)), + new BlockImpl("gold_brick", Block.Properties.from(Blocks.STONE_BRICKS)), + new BlockImpl("gold_nether_brick", Block.Properties.from(Blocks.NETHER_BRICKS)), new BlockMossGenerator(), new BlockTimeChanger(), new BlockGeneratorLimitRemover(), @@ -130,7 +123,7 @@ public final class ModRegistry { new BlockDimensionRail("nether", World.field_234919_h_, World.field_234918_g_), new BlockDimensionRail("end", World.field_234920_i_, World.field_234918_g_), new BlockBlastFurnaceBooster(), - new BlockImpl("nether_wart_mushroom", ModBlocks.prop(Blocks.RED_MUSHROOM_BLOCK)), + new BlockImpl("nether_wart_mushroom", Block.Properties.from(Blocks.RED_MUSHROOM_BLOCK)), new BlockAnimalContainer(), new BlockSnowCreator(), new BlockItemDistributor(), @@ -138,12 +131,13 @@ public final class ModRegistry { createFlowerPot(temp), temp = new BlockAuraBloom("aura_cactus", TileEntityAuraCactus::new), createFlowerPot(temp), - new BlockImpl("tainted_gold_block", ModBlocks.prop(Material.IRON).sound(SoundType.METAL).hardnessAndResistance(3F)), + new BlockImpl("tainted_gold_block", Block.Properties.create(Material.IRON).sound(SoundType.METAL).hardnessAndResistance(3F)), new BlockNetherGrass(), new BlockLight(), new BlockChorusGenerator(), new BlockAuraTimer(), - new BlockSlimeSplitGenerator() + new BlockSlimeSplitGenerator(), + new BlockSpring() ); if (ModConfig.instance.rfConverter.get()) diff --git a/src/main/resources/assets/naturesaura/lang/en_us.json b/src/main/resources/assets/naturesaura/lang/en_us.json index 5516fab3..c705eccb 100644 --- a/src/main/resources/assets/naturesaura/lang/en_us.json +++ b/src/main/resources/assets/naturesaura/lang/en_us.json @@ -66,6 +66,7 @@ "block.naturesaura.chorus_generator": "Reaper of Ender Heights", "block.naturesaura.aura_timer": "Redstone Aura Vaporizer", "block.naturesaura.slime_split_generator": "Offshoot Observer", + "block.naturesaura.spring": "Everlasting Spring", "item.naturesaura.eye": "Environmental Eye", "item.naturesaura.eye_improved": "Environmental Ocular", "item.naturesaura.gold_fiber": "Brilliant Fiber", diff --git a/src/main/resources/assets/naturesaura/models/block/spring.json b/src/main/resources/assets/naturesaura/models/block/spring.json new file mode 100644 index 00000000..414caac5 --- /dev/null +++ b/src/main/resources/assets/naturesaura/models/block/spring.json @@ -0,0 +1,33 @@ +{ + "parent": "minecraft:block/block", + "ambientocclusion": false, + "textures": { + "particle": "naturesaura:block/spring", + "frame": "naturesaura:block/spring", + "water": "naturesaura:block/spring_water" + }, + "elements": [ + { "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#frame", "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#frame", "cullface": "up" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#frame", "cullface": "north" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#frame", "cullface": "south" }, + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#frame", "cullface": "west" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#frame", "cullface": "east" } + } + }, + { "from": [ 0, 0, 0 ], + "to": [ 16, 16, 16 ], + "faces": { + "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#water", "tintindex": 0, "cullface": "down" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#water", "tintindex": 0, "cullface": "up" }, + "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#water", "tintindex": 0, "cullface": "north" }, + "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#water", "tintindex": 0, "cullface": "south" }, + "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#water", "tintindex": 0, "cullface": "west" }, + "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#water", "tintindex": 0, "cullface": "east" } + } + } + ] +} diff --git a/src/main/resources/assets/naturesaura/textures/block/spring.png b/src/main/resources/assets/naturesaura/textures/block/spring.png new file mode 100644 index 0000000000000000000000000000000000000000..98c6dbe675d652bd61080d4265a418c417b29d36 GIT binary patch literal 360 zcmV-u0hj)XP)F>ZrE5JjII6toDra70IZhR|4|v$#dva)cbl6|Hj|yR_oM zl9SFMMhLOm$|QkDeM z>yhywolU_sKuOgo(CqD6zAlYB!V?{3r=L^z3B`9|Ws2S&0NAa%b5$$Tj{%ZJLb6Ei zenLEtiRW>n;9Q)oz}@Q6I&b5Rjel$XzV3CSlLK4&?pd}fX#ag%$yx$*ZPY=UJG6^u*hiI-W&{l1Na4*`iEyLx)C1$0000m literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/naturesaura/textures/block/spring_water.png b/src/main/resources/assets/naturesaura/textures/block/spring_water.png new file mode 100644 index 0000000000000000000000000000000000000000..d21b58505dd191f8c21fd9b7c24cdd6223167105 GIT binary patch literal 192 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`)Ym%P6qPJJzX3_ zEPCJeZ{$6oz{6r6I7_~1QlDf*%g+qkp6P`%LtG9uh%9|(wg1g``wf