From bcb0ee9f75f50f8f249bc2e80349a61230976d1c Mon Sep 17 00:00:00 2001 From: Sollace Date: Wed, 19 Sep 2018 09:07:39 +0200 Subject: [PATCH] Add crafting recipes, add cloud anvil, add cloud door --- .../minelittlepony/unicopia/Predicates.java | 5 + .../com/minelittlepony/unicopia/UBlocks.java | 8 +- .../com/minelittlepony/unicopia/UItems.java | 47 ++++- .../unicopia/block/BlockCloud.java | 17 +- .../unicopia/block/BlockCloudAnvil.java | 163 ++++++++++++++++++ .../unicopia/block/BlockCloudDoor.java | 117 +++++++++++++ .../unicopia/block/BlockCloudSlab.java | 6 + .../unicopia/block/BlockCloudStairs.java | 5 + .../unicopia/block/ICloudBlock.java | 16 ++ .../unicopia/entity/EntityCloud.java | 42 ++++- .../assets/unicopia/blockstates/anvil.json | 16 ++ .../unicopia/blockstates/mist_door.json | 68 ++++++++ .../models/block/anvil_undamaged.json | 8 + .../models/block/mist_door_bottom.json | 7 + .../models/block/mist_door_bottom_rh.json | 7 + .../unicopia/models/block/mist_door_top.json | 7 + .../models/block/mist_door_top_rh.json | 7 + .../assets/unicopia/models/item/anvil.json | 3 + .../unicopia/models/item/mist_door.json | 6 + .../assets/unicopia/recipes/cloud_stairs.json | 20 +++ .../unicopia/recipes/construction_cloud.json | 27 +++ .../recipes/enchanted_cloud_block.json | 64 +++++++ .../recipes/enchanted_cloud_slab.json | 19 ++ .../assets/unicopia/recipes/mist_door.json | 21 +++ .../unicopia/recipes/normal_cloud_block.json | 20 +++ .../unicopia/recipes/normal_cloud_slab.json | 19 ++ .../unicopia/recipes/packed_cloud_block.json | 20 +++ .../unicopia/recipes/packed_cloud_slab.json | 20 +++ .../assets/unicopia/recipes/racing_cloud.json | 26 +++ .../assets/unicopia/recipes/wild_cloud.json | 21 +++ .../textures/blocks/door_mist_lower.png | Bin 0 -> 2948 bytes .../textures/blocks/door_mist_upper.png | Bin 0 -> 3009 bytes .../unicopia/textures/items/door_cloud.png | Bin 0 -> 245 bytes 33 files changed, 809 insertions(+), 23 deletions(-) create mode 100644 src/main/java/com/minelittlepony/unicopia/block/BlockCloudAnvil.java create mode 100644 src/main/java/com/minelittlepony/unicopia/block/BlockCloudDoor.java create mode 100644 src/main/resources/assets/unicopia/blockstates/anvil.json create mode 100644 src/main/resources/assets/unicopia/blockstates/mist_door.json create mode 100644 src/main/resources/assets/unicopia/models/block/anvil_undamaged.json create mode 100644 src/main/resources/assets/unicopia/models/block/mist_door_bottom.json create mode 100644 src/main/resources/assets/unicopia/models/block/mist_door_bottom_rh.json create mode 100644 src/main/resources/assets/unicopia/models/block/mist_door_top.json create mode 100644 src/main/resources/assets/unicopia/models/block/mist_door_top_rh.json create mode 100644 src/main/resources/assets/unicopia/models/item/anvil.json create mode 100644 src/main/resources/assets/unicopia/models/item/mist_door.json create mode 100644 src/main/resources/assets/unicopia/recipes/cloud_stairs.json create mode 100644 src/main/resources/assets/unicopia/recipes/construction_cloud.json create mode 100644 src/main/resources/assets/unicopia/recipes/enchanted_cloud_block.json create mode 100644 src/main/resources/assets/unicopia/recipes/enchanted_cloud_slab.json create mode 100644 src/main/resources/assets/unicopia/recipes/mist_door.json create mode 100644 src/main/resources/assets/unicopia/recipes/normal_cloud_block.json create mode 100644 src/main/resources/assets/unicopia/recipes/normal_cloud_slab.json create mode 100644 src/main/resources/assets/unicopia/recipes/packed_cloud_block.json create mode 100644 src/main/resources/assets/unicopia/recipes/packed_cloud_slab.json create mode 100644 src/main/resources/assets/unicopia/recipes/racing_cloud.json create mode 100644 src/main/resources/assets/unicopia/recipes/wild_cloud.json create mode 100644 src/main/resources/assets/unicopia/textures/blocks/door_mist_lower.png create mode 100644 src/main/resources/assets/unicopia/textures/blocks/door_mist_upper.png create mode 100644 src/main/resources/assets/unicopia/textures/items/door_cloud.png diff --git a/src/main/java/com/minelittlepony/unicopia/Predicates.java b/src/main/java/com/minelittlepony/unicopia/Predicates.java index f36e4481..46c463d7 100644 --- a/src/main/java/com/minelittlepony/unicopia/Predicates.java +++ b/src/main/java/com/minelittlepony/unicopia/Predicates.java @@ -11,6 +11,11 @@ public final class Predicates { public static final Predicate INTERACT_WITH_CLOUDS = player -> { return player != null && PlayerSpeciesList.instance().getPlayer(player).getPlayerSpecies().canInteractWithClouds(); }; + + public static final Predicate MAGI = player -> { + return player != null && PlayerSpeciesList.instance().getPlayer(player).getPlayerSpecies().canCast(); + }; + public static final Predicate ITEM_INTERACT_WITH_CLOUDS = item -> { return item != null && PlayerSpeciesList.instance().getEntity(item).getPlayerSpecies().canInteractWithClouds(); }; diff --git a/src/main/java/com/minelittlepony/unicopia/UBlocks.java b/src/main/java/com/minelittlepony/unicopia/UBlocks.java index 5ff0ae82..e150d89a 100644 --- a/src/main/java/com/minelittlepony/unicopia/UBlocks.java +++ b/src/main/java/com/minelittlepony/unicopia/UBlocks.java @@ -1,8 +1,10 @@ package com.minelittlepony.unicopia; import com.minelittlepony.unicopia.block.BlockCloud; +import com.minelittlepony.unicopia.block.BlockCloudAnvil; import com.minelittlepony.unicopia.block.BlockCloudSlab; import com.minelittlepony.unicopia.block.BlockCloudStairs; +import com.minelittlepony.unicopia.block.BlockCloudDoor; import net.minecraft.block.Block; import net.minecraftforge.registries.IForgeRegistry; @@ -15,7 +17,11 @@ public class UBlocks { public static final BlockCloudSlab cloud_double_slab = new BlockCloudSlab(true, UMaterials.cloud, Unicopia.MODID, "cloud_double_slab"); public static final BlockCloudSlab cloud_slab = new BlockCloudSlab(false, UMaterials.cloud, Unicopia.MODID, "cloud_slab"); + public static final BlockCloudDoor mist_door = new BlockCloudDoor(UMaterials.cloud, Unicopia.MODID, "mist_door"); + + public static final BlockCloudAnvil anvil = new BlockCloudAnvil(Unicopia.MODID, "anvil"); + static void registerBlocks(IForgeRegistry registry) { - registry.registerAll(cloud, stairsCloud, cloud_double_slab, cloud_slab); + registry.registerAll(cloud, stairsCloud, cloud_double_slab, cloud_slab, mist_door, anvil); } } diff --git a/src/main/java/com/minelittlepony/unicopia/UItems.java b/src/main/java/com/minelittlepony/unicopia/UItems.java index 80fb93d4..188cfd9b 100644 --- a/src/main/java/com/minelittlepony/unicopia/UItems.java +++ b/src/main/java/com/minelittlepony/unicopia/UItems.java @@ -2,6 +2,7 @@ package com.minelittlepony.unicopia; import com.minelittlepony.unicopia.item.ItemApple; import com.minelittlepony.unicopia.item.ItemCloud; +import com.minelittlepony.unicopia.item.ItemOfHolding; import com.minelittlepony.unicopia.item.UItemBlock; import com.minelittlepony.unicopia.item.UItemMultiTexture; import com.minelittlepony.unicopia.item.UItemSlab; @@ -9,10 +10,16 @@ import com.minelittlepony.unicopia.item.UItemSlab; import come.minelittlepony.unicopia.forgebullshit.RegistryLockSpinner; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Enchantments; import net.minecraft.init.Items; import net.minecraft.item.Item; +import net.minecraft.item.ItemDoor; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.FurnaceRecipes; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.item.crafting.ShapedRecipes; +import net.minecraft.util.NonNullList; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.registries.IForgeRegistry; @@ -38,16 +45,29 @@ public class UItems { public static final Item cloud_block = new UItemMultiTexture(UBlocks.cloud, stack -> { return CloudType.byMetadata(stack.getMetadata()).getTranslationKey(); - }, INTERACT_WITH_CLOUDS).setRegistryName(Unicopia.MODID, "cloud_block"); + }, INTERACT_WITH_CLOUDS) + .setRegistryName(Unicopia.MODID, "cloud_block"); public static final Item cloud_stairs = new UItemBlock(UBlocks.stairsCloud, INTERACT_WITH_CLOUDS) .setTranslationKey("cloud_stairs") .setRegistryName(Unicopia.MODID, "cloud_stairs"); + + public static final Item anvil = new UItemBlock(UBlocks.anvil, INTERACT_WITH_CLOUDS) + .setTranslationKey("cloud_anvil") + .setRegistryName(Unicopia.MODID, "anvil"); + + public static final Item mist_door = new ItemDoor(UBlocks.mist_door) + .setTranslationKey("mist_door") + .setRegistryName(Unicopia.MODID, "mist_door"); + public static final Item cloud_slab = new UItemSlab(UBlocks.cloud_slab, UBlocks.cloud_slab, UBlocks.cloud_double_slab, INTERACT_WITH_CLOUDS) .setTranslationKey("cloud_slab") .setRegistryName(Unicopia.MODID, "cloud_slab"); + + public static final ItemOfHolding bag_of_holding = new ItemOfHolding(Unicopia.MODID, "bag_of_holding"); + static void registerItems(IForgeRegistry registry) { RegistryLockSpinner.unlock(Item.REGISTRY); @@ -55,7 +75,9 @@ public class UItems { RegistryLockSpinner.lock(Item.REGISTRY); - registry.registerAll(cloud_spawner, dew_drop, cloud_matter, cloud_block, cloud_stairs, cloud_slab); + registry.registerAll(cloud_spawner, dew_drop, cloud_matter, cloud_block, + cloud_stairs, cloud_slab, mist_door, anvil, + bag_of_holding); if (UClient.isClientSide()) { registerAllVariants(apple, apple.getVariants()); @@ -65,7 +87,12 @@ public class UItems { registerAllVariants(cloud_stairs, "cloud_stairs"); registerAllVariants(cloud_slab, CloudType.getVariants("_cloud_slab")); registerAllVariants(cloud_block, CloudType.getVariants("_cloud_block")); + registerAllVariants(mist_door, "mist_door"); + registerAllVariants(anvil, "anvil"); + registerAllVariants(bag_of_holding, "bag_of_holding"); } + + registerFuels(); } private static void registerAllVariants(Item item, String... variants) { @@ -80,4 +107,20 @@ public class UItems { new ItemStack(UItems.apple, 1, zap), new ItemStack(UItems.apple, 1, zap + 1), 0.1F); } + + static void registerRecipes(IForgeRegistry registry) { + Ingredient dewdrop = Ingredient.fromItem(dew_drop); + Ingredient cloud = Ingredient.fromStacks(new ItemStack(cloud_block, 1, 0)); + + ItemStack bookStack = new ItemStack(Items.ENCHANTED_BOOK, 1); + bookStack.addEnchantment(Enchantments.FEATHER_FALLING, 1); + + Ingredient book = Ingredient.fromStacks(bookStack); + + registry.register(new ShapedRecipes("", 3, 3, NonNullList.from(Ingredient.EMPTY, + dewdrop, dewdrop, dewdrop, + cloud, book, cloud, + cloud, cloud, cloud + ), new ItemStack(cloud_block, 1, 2)).setRegistryName(Unicopia.MODID, "id_dont_care_just_use_it")); + } } diff --git a/src/main/java/com/minelittlepony/unicopia/block/BlockCloud.java b/src/main/java/com/minelittlepony/unicopia/block/BlockCloud.java index 7f2c9b8b..68a5d0ba 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/BlockCloud.java +++ b/src/main/java/com/minelittlepony/unicopia/block/BlockCloud.java @@ -57,6 +57,11 @@ public class BlockCloud extends Block implements ICloudBlock { return false; } + @Override + public boolean isAir(IBlockState state, IBlockAccess world, BlockPos pos) { + return allowsFallingBlockToPass(state, world, pos); + } + @Override public boolean isNormalCube(IBlockState state) { return false; @@ -67,12 +72,6 @@ public class BlockCloud extends Block implements ICloudBlock { return BlockRenderLayer.TRANSLUCENT; } - @Deprecated - @Override - public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) { - return super.shouldSideBeRendered(blockState, blockAccess, pos, side); - } - @Override public boolean doesSideBlockRendering(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing face) { @@ -89,12 +88,6 @@ public class BlockCloud extends Block implements ICloudBlock { return super.doesSideBlockRendering(state, world, pos, face); } - //Can entities walk through? - @Override - public boolean isPassable(IBlockAccess w, BlockPos pos) { - return super.isPassable(w, pos); - } - @Override public void onFallenUpon(World world, BlockPos pos, Entity entityIn, float fallDistance) { if (entityIn.isSneaking()) { diff --git a/src/main/java/com/minelittlepony/unicopia/block/BlockCloudAnvil.java b/src/main/java/com/minelittlepony/unicopia/block/BlockCloudAnvil.java new file mode 100644 index 00000000..b0a9a320 --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/block/BlockCloudAnvil.java @@ -0,0 +1,163 @@ +package com.minelittlepony.unicopia.block; + +import java.util.List; +import java.util.Random; + +import javax.annotation.Nullable; + +import com.minelittlepony.unicopia.CloudType; +import com.minelittlepony.util.WorldEvent; + +import net.minecraft.block.BlockAnvil; +import net.minecraft.block.SoundType; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityFallingBlock; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockCloudAnvil extends BlockAnvil implements ICloudBlock { + public BlockCloudAnvil(String domain, String name) { + super(); + + setSoundType(SoundType.CLOTH); + setHardness(0.025F); + setResistance(2000); + setRegistryName(domain, name); + setTranslationKey(name); + } + + @Override + public BlockRenderLayer getRenderLayer() { + return BlockRenderLayer.TRANSLUCENT; + } + + @Override + public String getHarvestTool(IBlockState state) { + return "shovel"; + } + + @Override + public int getHarvestLevel(IBlockState state) { + return 0; + } + + @Override + public void onFallenUpon(World world, BlockPos pos, Entity entityIn, float fallDistance) { + if (entityIn.isSneaking()) { + super.onFallenUpon(world, pos, entityIn, fallDistance); + } else { + entityIn.fall(fallDistance, 0); + } + } + + @Override + public void onEndFalling(World world, BlockPos pos, IBlockState fallingState, IBlockState hitState) { + WorldEvent.ENTITY_TAKEOFF.play(world, pos, 0); + } + + @Override + public void onBroken(World world, BlockPos pos) { + WorldEvent.ENTITY_TAKEOFF.play(world, pos, 0); + } + + @Override + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) { + return false; + } + + @Override + protected void onStartFalling(EntityFallingBlock fallingEntity) { + fallingEntity.setHurtEntities(true); + } + + @Override + public void onLanded(World worldIn, Entity entity) { + if (entity.isSneaking()) { + super.onLanded(worldIn, entity); + } else if (entity.motionY < 0) { + if (Math.abs(entity.motionY) >= 0.25) { + entity.motionY = -entity.motionY * 2; + } else { + entity.motionY = 0; + } + } + } + + @Override + public boolean isAir(IBlockState state, IBlockAccess world, BlockPos pos) { + return allowsFallingBlockToPass(state, world, pos); + } + + @Override + public void updateTick(World world, BlockPos pos, IBlockState state, Random rand) { + IBlockState below = world.getBlockState(pos.down()); + + if (below.getBlock() instanceof ICloudBlock) { + if (((ICloudBlock)below.getBlock()).isDense(below)) { + return; + } + } + + super.updateTick(world, pos, state, rand); + } + + @Override + public void onEntityCollision(World w, BlockPos pos, IBlockState state, Entity entity) { + if (getCanInteract(state, entity)) { + if (!entity.isSneaking() && Math.abs(entity.motionY) >= 0.25) { + entity.motionY += 0.0155 * (entity.fallDistance < 1 ? 1 : entity.fallDistance); + } else { + entity.motionY = 0; + } + + super.onEntityCollision(w, pos, state, entity); + } + } + + @Override + public boolean canHarvestBlock(IBlockAccess world, BlockPos pos, EntityPlayer player) { + return getCanInteract(world.getBlockState(pos), player); + } + + @Override + public void getSubBlocks(CreativeTabs itemIn, NonNullList items) { + items.add(new ItemStack(this)); + } + + @Override + public boolean canEntityDestroy(IBlockState state, IBlockAccess world, BlockPos pos, Entity entity) { + return getCanInteract(state, entity) && super.canEntityDestroy(state, world, pos, entity); + } + + @Deprecated + public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List collidingBoxes, @Nullable Entity entity, boolean p_185477_7_) { + if (getCanInteract(state, entity)) { + super.addCollisionBoxToList(state, worldIn, pos, entityBox, collidingBoxes, entity, p_185477_7_); + } + } + + @Deprecated + @Override + public float getPlayerRelativeBlockHardness(IBlockState state, EntityPlayer player, World worldIn, BlockPos pos) { + if (!CloudType.NORMAL.canInteract(player)) { + return -1; + } + return super.getPlayerRelativeBlockHardness(state, player, worldIn, pos); + } + + + @Override + public CloudType getCloudMaterialType(IBlockState blockState) { + return CloudType.NORMAL; + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/block/BlockCloudDoor.java b/src/main/java/com/minelittlepony/unicopia/block/BlockCloudDoor.java new file mode 100644 index 00000000..675c5e6c --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/block/BlockCloudDoor.java @@ -0,0 +1,117 @@ +package com.minelittlepony.unicopia.block; + +import java.util.Random; + +import com.minelittlepony.unicopia.CloudType; +import com.minelittlepony.unicopia.UItems; + +import net.minecraft.block.BlockDoor; +import net.minecraft.block.SoundType; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockCloudDoor extends BlockDoor implements ICloudBlock { + + public BlockCloudDoor(Material material, String domain, String name) { + super(material); + + setTranslationKey(name); + setRegistryName(domain, name); + setSoundType(SoundType.CLOTH); + setHardness(1); + setResistance(200); + } + + @Override + public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) { + return blockMapColor; + } + + @Override + public boolean isAir(IBlockState state, IBlockAccess world, BlockPos pos) { + return super.isAir(state, world, pos); + } + + @Override + public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) { + if (!getCanInteract(state, player)) { + return false; + } + + setHardness(3); + setResistance(200); + + return super.onBlockActivated(worldIn, pos, state, player, hand, facing, hitX, hitY, hitZ); + } + + @Override + public String getHarvestTool(IBlockState state) { + return "shovel"; + } + + @Override + public int getHarvestLevel(IBlockState state) { + return 0; + } + + @Deprecated + @Override + public float getBlockHardness(IBlockState blockState, World world, BlockPos pos) { + float hardness = super.getBlockHardness(blockState, world, pos); + + return Math.max(hardness, Math.min(60, hardness + (pos.getY() - 100))); + } + + @Override + public BlockRenderLayer getRenderLayer() { + return BlockRenderLayer.TRANSLUCENT; + } + + @Override + public void onEntityCollision(World w, BlockPos pos, IBlockState state, Entity entity) { + if (getCanInteract(state, entity)) { + if (!entity.isSneaking() && Math.abs(entity.motionY) >= 0.25) { + entity.motionY += 0.0155 * (entity.fallDistance < 1 ? 1 : entity.fallDistance); + } else { + entity.motionY = 0; + } + + super.onEntityCollision(w, pos, state, entity); + } + } + + @Override + public boolean canEntityDestroy(IBlockState state, IBlockAccess world, BlockPos pos, Entity entity) { + return getCanInteract(state, entity) && super.canEntityDestroy(state, world, pos, entity); + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) { + return state.getValue(HALF) == BlockDoor.EnumDoorHalf.UPPER ? Items.AIR : UItems.mist_door; + } + + @Deprecated + @Override + public float getPlayerRelativeBlockHardness(IBlockState state, EntityPlayer player, World worldIn, BlockPos pos) { + if (!CloudType.NORMAL.canInteract(player)) { + return -1; + } + return super.getPlayerRelativeBlockHardness(state, player, worldIn, pos); + } + + @Override + public CloudType getCloudMaterialType(IBlockState blockState) { + return CloudType.NORMAL; + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/block/BlockCloudSlab.java b/src/main/java/com/minelittlepony/unicopia/block/BlockCloudSlab.java index aec408f6..f9e8d935 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/BlockCloudSlab.java +++ b/src/main/java/com/minelittlepony/unicopia/block/BlockCloudSlab.java @@ -38,6 +38,7 @@ public class BlockCloudSlab extends BlockSlab implements ICloudBlock { public BlockCloudSlab(boolean isDouble, Material material, String domain, String name) { super(material); + setCreativeTab(CreativeTabs.BUILDING_BLOCKS); setHardness(0.5F); setResistance(1.0F); @@ -54,6 +55,11 @@ public class BlockCloudSlab extends BlockSlab implements ICloudBlock { return UBlocks.cloud.isTranslucent(state); } + @Override + public boolean isAir(IBlockState state, IBlockAccess world, BlockPos pos) { + return allowsFallingBlockToPass(state, world, pos); + } + @Override public boolean isOpaqueCube(IBlockState state) { return isDouble() ? UBlocks.cloud.isOpaqueCube(state) : false; diff --git a/src/main/java/com/minelittlepony/unicopia/block/BlockCloudStairs.java b/src/main/java/com/minelittlepony/unicopia/block/BlockCloudStairs.java index 8039ac9c..6d122668 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/BlockCloudStairs.java +++ b/src/main/java/com/minelittlepony/unicopia/block/BlockCloudStairs.java @@ -62,6 +62,11 @@ public class BlockCloudStairs extends BlockStairs implements ICloudBlock { theBlock.onFallenUpon(w, pos, entity, fallDistance); } + @Override + public boolean isAir(IBlockState state, IBlockAccess world, BlockPos pos) { + return allowsFallingBlockToPass(state, world, pos); + } + @Override public void onLanded(World w, Entity entity) { theBlock.onLanded(w, entity); diff --git a/src/main/java/com/minelittlepony/unicopia/block/ICloudBlock.java b/src/main/java/com/minelittlepony/unicopia/block/ICloudBlock.java index f5a1b25e..bc5ced64 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/ICloudBlock.java +++ b/src/main/java/com/minelittlepony/unicopia/block/ICloudBlock.java @@ -2,8 +2,12 @@ package com.minelittlepony.unicopia.block; import com.minelittlepony.unicopia.CloudType; +import net.minecraft.block.Block; +import net.minecraft.block.BlockFalling; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.Entity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; public interface ICloudBlock { @@ -13,4 +17,16 @@ public interface ICloudBlock { return getCloudMaterialType(state).canInteract(e); } + default boolean isDense(IBlockState blockState) { + return getCloudMaterialType(blockState) != CloudType.NORMAL; + } + + default boolean allowsFallingBlockToPass(IBlockState state, IBlockAccess world, BlockPos pos) { + if (isDense(state)) { + return false; + } + + Block above = world.getBlockState(pos.up()).getBlock(); + return !(above instanceof ICloudBlock) && above instanceof BlockFalling; + } } diff --git a/src/main/java/com/minelittlepony/unicopia/entity/EntityCloud.java b/src/main/java/com/minelittlepony/unicopia/entity/EntityCloud.java index eebfa5ae..908d24d1 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/EntityCloud.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/EntityCloud.java @@ -426,8 +426,6 @@ public class EntityCloud extends EntityFlying implements IAnimals { return; } - setStationary(true); - EnumFacing direction = trace.sideHit; BlockPos blockPos = new BlockPos(trace.hitVec); @@ -447,7 +445,11 @@ public class EntityCloud extends EntityFlying implements IAnimals { } private boolean onAttackByPlayer(DamageSource source, float amount, EntityPlayer player) { - boolean canFly = PlayerSpeciesList.instance().getPlayer(player).getPlayerSpecies().canInteractWithClouds(); + + ItemStack stack = player.getHeldItemMainhand(); + + boolean canFly = EnchantmentHelper.getEnchantments(stack).containsKey(Enchantments.FEATHER_FALLING) + || Predicates.INTERACT_WITH_CLOUDS.test(player); boolean stat = getStationary(); if (stat || canFly) { @@ -457,7 +459,7 @@ public class EntityCloud extends EntityFlying implements IAnimals { } } - ItemStack stack = player.getHeldItemMainhand(); + if (stack != null && stack.getItem() instanceof ItemSword) { return super.attackEntityFrom(source, amount); } else if (stack != null && stack.getItem() instanceof ItemSpade) { @@ -483,15 +485,39 @@ public class EntityCloud extends EntityFlying implements IAnimals { setDead(); } super.onDeath(s); + clearItemFloatingState(); } + @Override + public void setDead() { + super.setDead(); + clearItemFloatingState(); + } + + protected void clearItemFloatingState() { + AxisAlignedBB bounds = getEntityBoundingBox().grow(1 / (1 + getCloudSize())).grow(5); + + for (Entity i : world.getEntitiesInAABBexcluding(this, bounds, this::entityIsFloatingItem)) { + i.setNoGravity(false); + } + } + + private boolean entityIsFloatingItem(Entity e) { + return e instanceof EntityItem + && Predicates.ITEM_INTERACT_WITH_CLOUDS.test((EntityItem)e); + } + + @Override protected void dropFewItems(boolean hitByPlayer, int looting) { if (hitByPlayer) { Item item = getDropItem(); - int amount = 2 + world.rand.nextInt(3 + looting); - for (int i = 0; i < amount; i++) { - dropItem(item, 1); + int amount = 2 + world.rand.nextInt(3); + + dropItem(item, amount * (1 + looting)); + + if (world.rand.nextBoolean()) { + dropItem(UItems.dew_drop, 2 + looting); } } } @@ -530,7 +556,7 @@ public class EntityCloud extends EntityFlying implements IAnimals { spawnThunderbolt(getPosition()); } - if (entity instanceof EntityItem) { + if (getStationary() && entity instanceof EntityItem) { entity.motionX /= 8; entity.motionZ /= 8; entity.motionY /= 16; diff --git a/src/main/resources/assets/unicopia/blockstates/anvil.json b/src/main/resources/assets/unicopia/blockstates/anvil.json new file mode 100644 index 00000000..2a089abf --- /dev/null +++ b/src/main/resources/assets/unicopia/blockstates/anvil.json @@ -0,0 +1,16 @@ +{ + "variants": { + "damage=0,facing=south": { "model": "unicopia:anvil_undamaged" }, + "damage=0,facing=west": { "model": "unicopia:anvil_undamaged", "y": 90 }, + "damage=0,facing=north": { "model": "unicopia:anvil_undamaged", "y": 180 }, + "damage=0,facing=east": { "model": "unicopia:anvil_undamaged", "y": 270 }, + "damage=1,facing=south": { "model": "unicopia:anvil_undamaged" }, + "damage=1,facing=west": { "model": "unicopia:anvil_undamaged", "y": 90 }, + "damage=1,facing=north": { "model": "unicopia:anvil_undamaged", "y": 180 }, + "damage=1,facing=east": { "model": "unicopia:anvil_undamaged", "y": 270 }, + "damage=2,facing=south": { "model": "unicopia:anvil_undamaged" }, + "damage=2,facing=west": { "model": "unicopia:anvil_undamaged", "y": 90 }, + "damage=2,facing=north": { "model": "unicopia:anvil_undamaged", "y": 180 }, + "damage=2,facing=east": { "model": "unicopia:anvil_undamaged", "y": 270 } + } +} diff --git a/src/main/resources/assets/unicopia/blockstates/mist_door.json b/src/main/resources/assets/unicopia/blockstates/mist_door.json new file mode 100644 index 00000000..5635fe43 --- /dev/null +++ b/src/main/resources/assets/unicopia/blockstates/mist_door.json @@ -0,0 +1,68 @@ +{ + "variants": { + "facing=east,half=lower,hinge=left,open=false,powered=false": { "model": "unicopia:mist_door_bottom" }, + "facing=south,half=lower,hinge=left,open=false,powered=false": { "model": "unicopia:mist_door_bottom", "y": 90 }, + "facing=west,half=lower,hinge=left,open=false,powered=false": { "model": "unicopia:mist_door_bottom", "y": 180 }, + "facing=north,half=lower,hinge=left,open=false,powered=false": { "model": "unicopia:mist_door_bottom", "y": 270 }, + "facing=east,half=lower,hinge=right,open=false,powered=false": { "model": "unicopia:mist_door_bottom_rh" }, + "facing=south,half=lower,hinge=right,open=false,powered=false": { "model": "unicopia:mist_door_bottom_rh", "y": 90 }, + "facing=west,half=lower,hinge=right,open=false,powered=false": { "model": "unicopia:mist_door_bottom_rh", "y": 180 }, + "facing=north,half=lower,hinge=right,open=false,powered=false": { "model": "unicopia:mist_door_bottom_rh", "y": 270 }, + "facing=east,half=lower,hinge=left,open=true,powered=false": { "model": "unicopia:mist_door_bottom_rh", "y": 90 }, + "facing=south,half=lower,hinge=left,open=true,powered=false": { "model": "unicopia:mist_door_bottom_rh", "y": 180 }, + "facing=west,half=lower,hinge=left,open=true,powered=false": { "model": "unicopia:mist_door_bottom_rh", "y": 270 }, + "facing=north,half=lower,hinge=left,open=true,powered=false": { "model": "unicopia:mist_door_bottom_rh" }, + "facing=east,half=lower,hinge=right,open=true,powered=false": { "model": "unicopia:mist_door_bottom", "y": 270 }, + "facing=south,half=lower,hinge=right,open=true,powered=false": { "model": "unicopia:mist_door_bottom" }, + "facing=west,half=lower,hinge=right,open=true,powered=false": { "model": "unicopia:mist_door_bottom", "y": 90 }, + "facing=north,half=lower,hinge=right,open=true,powered=false": { "model": "unicopia:mist_door_bottom", "y": 180 }, + "facing=east,half=upper,hinge=left,open=false,powered=false": { "model": "unicopia:mist_door_top" }, + "facing=south,half=upper,hinge=left,open=false,powered=false": { "model": "unicopia:mist_door_top", "y": 90 }, + "facing=west,half=upper,hinge=left,open=false,powered=false": { "model": "unicopia:mist_door_top", "y": 180 }, + "facing=north,half=upper,hinge=left,open=false,powered=false": { "model": "unicopia:mist_door_top", "y": 270 }, + "facing=east,half=upper,hinge=right,open=false,powered=false": { "model": "unicopia:mist_door_top_rh" }, + "facing=south,half=upper,hinge=right,open=false,powered=false": { "model": "unicopia:mist_door_top_rh", "y": 90 }, + "facing=west,half=upper,hinge=right,open=false,powered=false": { "model": "unicopia:mist_door_top_rh", "y": 180 }, + "facing=north,half=upper,hinge=right,open=false,powered=false": { "model": "unicopia:mist_door_top_rh", "y": 270 }, + "facing=east,half=upper,hinge=left,open=true,powered=false": { "model": "unicopia:mist_door_top_rh", "y": 90 }, + "facing=south,half=upper,hinge=left,open=true,powered=false": { "model": "unicopia:mist_door_top_rh", "y": 180 }, + "facing=west,half=upper,hinge=left,open=true,powered=false": { "model": "unicopia:mist_door_top_rh", "y": 270 }, + "facing=north,half=upper,hinge=left,open=true,powered=false": { "model": "unicopia:mist_door_top_rh" }, + "facing=east,half=upper,hinge=right,open=true,powered=false": { "model": "unicopia:mist_door_top", "y": 270 }, + "facing=south,half=upper,hinge=right,open=true,powered=false": { "model": "unicopia:mist_door_top" }, + "facing=west,half=upper,hinge=right,open=true,powered=false": { "model": "unicopia:mist_door_top", "y": 90 }, + "facing=north,half=upper,hinge=right,open=true,powered=false": { "model": "unicopia:mist_door_top", "y": 180 }, + "facing=east,half=lower,hinge=left,open=false,powered=true": { "model": "unicopia:mist_door_bottom" }, + "facing=south,half=lower,hinge=left,open=false,powered=true": { "model": "unicopia:mist_door_bottom", "y": 90 }, + "facing=west,half=lower,hinge=left,open=false,powered=true": { "model": "unicopia:mist_door_bottom", "y": 180 }, + "facing=north,half=lower,hinge=left,open=false,powered=true": { "model": "unicopia:mist_door_bottom", "y": 270 }, + "facing=east,half=lower,hinge=right,open=false,powered=true": { "model": "unicopia:mist_door_bottom_rh" }, + "facing=south,half=lower,hinge=right,open=false,powered=true": { "model": "unicopia:mist_door_bottom_rh", "y": 90 }, + "facing=west,half=lower,hinge=right,open=false,powered=true": { "model": "unicopia:mist_door_bottom_rh", "y": 180 }, + "facing=north,half=lower,hinge=right,open=false,powered=true": { "model": "unicopia:mist_door_bottom_rh", "y": 270 }, + "facing=east,half=lower,hinge=left,open=true,powered=true": { "model": "unicopia:mist_door_bottom_rh", "y": 90 }, + "facing=south,half=lower,hinge=left,open=true,powered=true": { "model": "unicopia:mist_door_bottom_rh", "y": 180 }, + "facing=west,half=lower,hinge=left,open=true,powered=true": { "model": "unicopia:mist_door_bottom_rh", "y": 270 }, + "facing=north,half=lower,hinge=left,open=true,powered=true": { "model": "unicopia:mist_door_bottom_rh" }, + "facing=east,half=lower,hinge=right,open=true,powered=true": { "model": "unicopia:mist_door_bottom", "y": 270 }, + "facing=south,half=lower,hinge=right,open=true,powered=true": { "model": "unicopia:mist_door_bottom" }, + "facing=west,half=lower,hinge=right,open=true,powered=true": { "model": "unicopia:mist_door_bottom", "y": 90 }, + "facing=north,half=lower,hinge=right,open=true,powered=true": { "model": "unicopia:mist_door_bottom", "y": 180 }, + "facing=east,half=upper,hinge=left,open=false,powered=true": { "model": "unicopia:mist_door_top" }, + "facing=south,half=upper,hinge=left,open=false,powered=true": { "model": "unicopia:mist_door_top", "y": 90 }, + "facing=west,half=upper,hinge=left,open=false,powered=true": { "model": "unicopia:mist_door_top", "y": 180 }, + "facing=north,half=upper,hinge=left,open=false,powered=true": { "model": "unicopia:mist_door_top", "y": 270 }, + "facing=east,half=upper,hinge=right,open=false,powered=true": { "model": "unicopia:mist_door_top_rh" }, + "facing=south,half=upper,hinge=right,open=false,powered=true": { "model": "unicopia:mist_door_top_rh", "y": 90 }, + "facing=west,half=upper,hinge=right,open=false,powered=true": { "model": "unicopia:mist_door_top_rh", "y": 180 }, + "facing=north,half=upper,hinge=right,open=false,powered=true": { "model": "unicopia:mist_door_top_rh", "y": 270 }, + "facing=east,half=upper,hinge=left,open=true,powered=true": { "model": "unicopia:mist_door_top_rh", "y": 90 }, + "facing=south,half=upper,hinge=left,open=true,powered=true": { "model": "unicopia:mist_door_top_rh", "y": 180 }, + "facing=west,half=upper,hinge=left,open=true,powered=true": { "model": "unicopia:mist_door_top_rh", "y": 270 }, + "facing=north,half=upper,hinge=left,open=true,powered=true": { "model": "unicopia:mist_door_top_rh" }, + "facing=east,half=upper,hinge=right,open=true,powered=true": { "model": "unicopia:mist_door_top", "y": 270 }, + "facing=south,half=upper,hinge=right,open=true,powered=true": { "model": "unicopia:mist_door_top" }, + "facing=west,half=upper,hinge=right,open=true,powered=true": { "model": "unicopia:mist_door_top", "y": 90 }, + "facing=north,half=upper,hinge=right,open=true,powered=true": { "model": "unicopia:mist_door_top", "y": 180 } + } +} diff --git a/src/main/resources/assets/unicopia/models/block/anvil_undamaged.json b/src/main/resources/assets/unicopia/models/block/anvil_undamaged.json new file mode 100644 index 00000000..7d4fa1b7 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/anvil_undamaged.json @@ -0,0 +1,8 @@ +{ + "parent": "block/anvil", + "textures": { + "particle": "unicopia:blocks/cloud_normal", + "body": "unicopia:blocks/cloud_normal", + "top": "unicopia:blocks/cloud_normal" + } +} diff --git a/src/main/resources/assets/unicopia/models/block/mist_door_bottom.json b/src/main/resources/assets/unicopia/models/block/mist_door_bottom.json new file mode 100644 index 00000000..9d342f67 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/mist_door_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_bottom", + "textures": { + "bottom": "unicopia:blocks/door_mist_lower", + "top": "unicopia:blocks/door_mist_upper" + } +} diff --git a/src/main/resources/assets/unicopia/models/block/mist_door_bottom_rh.json b/src/main/resources/assets/unicopia/models/block/mist_door_bottom_rh.json new file mode 100644 index 00000000..babde1e1 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/mist_door_bottom_rh.json @@ -0,0 +1,7 @@ +{ + "parent": "block/door_bottom_rh", + "textures": { + "bottom": "unicopia:blocks/door_mist_lower", + "top": "unicopia:blocks/door_mist_upper" + } +} diff --git a/src/main/resources/assets/unicopia/models/block/mist_door_top.json b/src/main/resources/assets/unicopia/models/block/mist_door_top.json new file mode 100644 index 00000000..cc1bbbb4 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/mist_door_top.json @@ -0,0 +1,7 @@ +{ + "parent": "block/door_top", + "textures": { + "bottom": "unicopia:blocks/door_mist_lower", + "top": "unicopia:blocks/door_mist_upper" + } +} diff --git a/src/main/resources/assets/unicopia/models/block/mist_door_top_rh.json b/src/main/resources/assets/unicopia/models/block/mist_door_top_rh.json new file mode 100644 index 00000000..f75c8761 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/mist_door_top_rh.json @@ -0,0 +1,7 @@ +{ + "parent": "block/door_top_rh", + "textures": { + "bottom": "unicopia:blocks/door_mist_lower", + "top": "unicopia:blocks/door_mist_upper" + } +} diff --git a/src/main/resources/assets/unicopia/models/item/anvil.json b/src/main/resources/assets/unicopia/models/item/anvil.json new file mode 100644 index 00000000..dba9b872 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/item/anvil.json @@ -0,0 +1,3 @@ +{ + "parent": "unicopia:block/anvil_undamaged" +} diff --git a/src/main/resources/assets/unicopia/models/item/mist_door.json b/src/main/resources/assets/unicopia/models/item/mist_door.json new file mode 100644 index 00000000..e70f2461 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/item/mist_door.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "unicopia:items/door_cloud" + } +} diff --git a/src/main/resources/assets/unicopia/recipes/cloud_stairs.json b/src/main/resources/assets/unicopia/recipes/cloud_stairs.json new file mode 100644 index 00000000..14423013 --- /dev/null +++ b/src/main/resources/assets/unicopia/recipes/cloud_stairs.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": [ + { + "item": "unicopia:cloud_block", + "data": 0 + } + ] + }, + "result": { + "item": "unicopia:cloud_stairs", + "count": 4 + } +} diff --git a/src/main/resources/assets/unicopia/recipes/construction_cloud.json b/src/main/resources/assets/unicopia/recipes/construction_cloud.json new file mode 100644 index 00000000..9f2b200e --- /dev/null +++ b/src/main/resources/assets/unicopia/recipes/construction_cloud.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "***", + "*#*", + "***" + ], + "key": { + "#": [ + { + "item": "unicopia:cloud_block", + "data": 0 + } + ], + "*": [ + { + "item": "unicopia:cloud_matter", + "data": 0 + } + ] + }, + "result": { + "item": "unicopia:cloud", + "data": 1, + "count": 1 + } +} diff --git a/src/main/resources/assets/unicopia/recipes/enchanted_cloud_block.json b/src/main/resources/assets/unicopia/recipes/enchanted_cloud_block.json new file mode 100644 index 00000000..9e76e6d6 --- /dev/null +++ b/src/main/resources/assets/unicopia/recipes/enchanted_cloud_block.json @@ -0,0 +1,64 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "$$$", + "#*#", + "###" + ], + "key": { + "#": [ + { + "item": "unicopia:cloud_block", + "data": 0 + } + ], + "$": [ + { + "item": "unicopia:dew_drop" + } + ], + "*": [ + { + "item": "minecraft:enchanted_book", + "data": 2, + "nbt": { + "StoredEnchantments": [ + { "id": 2, "level": 1 } + ] + } + }, + { + "item": "minecraft:enchanted_book", + "data": 2, + "nbt": { + "StoredEnchantments": [ + { "id": 2, "level": 2 } + ] + } + }, + { + "item": "minecraft:enchanted_book", + "data": 2, + "nbt": { + "StoredEnchantments": [ + { "id": 2, "level": 3 } + ] + } + }, + { + "item": "minecraft:enchanted_book", + "data": 2, + "nbt": { + "StoredEnchantments": [ + { "id": 2, "level": 4 } + ] + } + } + ] + }, + "result": { + "item": "unicopia:cloud_block", + "data": 2, + "count": 4 + } +} diff --git a/src/main/resources/assets/unicopia/recipes/enchanted_cloud_slab.json b/src/main/resources/assets/unicopia/recipes/enchanted_cloud_slab.json new file mode 100644 index 00000000..81a84965 --- /dev/null +++ b/src/main/resources/assets/unicopia/recipes/enchanted_cloud_slab.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": [ + { + "item": "unicopia:cloud_block", + "data": 2 + } + ] + }, + "result": { + "item": "unicopia:cloud_slab", + "data": 2, + "count": 6 + } +} diff --git a/src/main/resources/assets/unicopia/recipes/mist_door.json b/src/main/resources/assets/unicopia/recipes/mist_door.json new file mode 100644 index 00000000..70e9a8c5 --- /dev/null +++ b/src/main/resources/assets/unicopia/recipes/mist_door.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " ##", + " ##", + " ##" + ], + "key": { + "#": [ + { + "item": "unicopia:cloud_block", + "data": 0 + } + ] + }, + "result": { + "item": "unicopia:mist_door", + "data": 0, + "count": 1 + } +} diff --git a/src/main/resources/assets/unicopia/recipes/normal_cloud_block.json b/src/main/resources/assets/unicopia/recipes/normal_cloud_block.json new file mode 100644 index 00000000..f70b2fe7 --- /dev/null +++ b/src/main/resources/assets/unicopia/recipes/normal_cloud_block.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": [ + { + "item": "unicopia:cloud_matter" + } + ] + }, + "result": { + "item": "unicopia:cloud_block", + "data": 0, + "count": 1 + } +} diff --git a/src/main/resources/assets/unicopia/recipes/normal_cloud_slab.json b/src/main/resources/assets/unicopia/recipes/normal_cloud_slab.json new file mode 100644 index 00000000..0bb2d32f --- /dev/null +++ b/src/main/resources/assets/unicopia/recipes/normal_cloud_slab.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": [ + { + "item": "unicopia:cloud_block", + "data": 0 + } + ] + }, + "result": { + "item": "unicopia:cloud_slab", + "data": 0, + "count": 6 + } +} diff --git a/src/main/resources/assets/unicopia/recipes/packed_cloud_block.json b/src/main/resources/assets/unicopia/recipes/packed_cloud_block.json new file mode 100644 index 00000000..a1ffc198 --- /dev/null +++ b/src/main/resources/assets/unicopia/recipes/packed_cloud_block.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " ##", + " ##" + ], + "key": { + "#": [ + { + "item": "unicopia:cloud_block", + "data": 0 + } + ] + }, + "result": { + "item": "unicopia:cloud_block", + "data": 1, + "count": 1 + } +} diff --git a/src/main/resources/assets/unicopia/recipes/packed_cloud_slab.json b/src/main/resources/assets/unicopia/recipes/packed_cloud_slab.json new file mode 100644 index 00000000..5cf4913e --- /dev/null +++ b/src/main/resources/assets/unicopia/recipes/packed_cloud_slab.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": [ + { + "item": "unicopia:cloud_block", + "data": 0, + "data": 1 + } + ] + }, + "result": { + "item": "unicopia:cloud_slab", + "data": 1, + "count": 6 + } +} diff --git a/src/main/resources/assets/unicopia/recipes/racing_cloud.json b/src/main/resources/assets/unicopia/recipes/racing_cloud.json new file mode 100644 index 00000000..65348fab --- /dev/null +++ b/src/main/resources/assets/unicopia/recipes/racing_cloud.json @@ -0,0 +1,26 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "***", + "###" + ], + "key": { + "#": [ + { + "item": "unicopia:cloud_block", + "data": 0 + } + ], + "*": [ + { + "item": "unicopia:cloud_matter", + "data": 0 + } + ] + }, + "result": { + "item": "unicopia:cloud", + "data": 0, + "count": 1 + } +} diff --git a/src/main/resources/assets/unicopia/recipes/wild_cloud.json b/src/main/resources/assets/unicopia/recipes/wild_cloud.json new file mode 100644 index 00000000..b25c4177 --- /dev/null +++ b/src/main/resources/assets/unicopia/recipes/wild_cloud.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###", + "###", + "###" + ], + "key": { + "#": [ + { + "item": "unicopia:cloud_block", + "data": 0 + } + ] + }, + "result": { + "item": "unicopia:cloud", + "data": 2, + "count": 1 + } +} diff --git a/src/main/resources/assets/unicopia/textures/blocks/door_mist_lower.png b/src/main/resources/assets/unicopia/textures/blocks/door_mist_lower.png new file mode 100644 index 0000000000000000000000000000000000000000..07d42453a60e1d473f8b121a002df223b1f0e262 GIT binary patch literal 2948 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