mirror of
https://github.com/Sollace/Unicopia.git
synced 2024-11-27 15:17:59 +01:00
Add crafting recipes, add cloud anvil, add cloud door
This commit is contained in:
parent
2465806794
commit
bcb0ee9f75
33 changed files with 809 additions and 23 deletions
|
@ -11,6 +11,11 @@ public final class Predicates {
|
|||
public static final Predicate<EntityPlayer> INTERACT_WITH_CLOUDS = player -> {
|
||||
return player != null && PlayerSpeciesList.instance().getPlayer(player).getPlayerSpecies().canInteractWithClouds();
|
||||
};
|
||||
|
||||
public static final Predicate<EntityPlayer> MAGI = player -> {
|
||||
return player != null && PlayerSpeciesList.instance().getPlayer(player).getPlayerSpecies().canCast();
|
||||
};
|
||||
|
||||
public static final Predicate<EntityItem> ITEM_INTERACT_WITH_CLOUDS = item -> {
|
||||
return item != null && PlayerSpeciesList.instance().getEntity(item).getPlayerSpecies().canInteractWithClouds();
|
||||
};
|
||||
|
|
|
@ -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<Block> registry) {
|
||||
registry.registerAll(cloud, stairsCloud, cloud_double_slab, cloud_slab);
|
||||
registry.registerAll(cloud, stairsCloud, cloud_double_slab, cloud_slab, mist_door, anvil);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<Item> 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<IRecipe> 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"));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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()) {
|
||||
|
|
|
@ -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<ItemStack> 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<AxisAlignedBB> 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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
16
src/main/resources/assets/unicopia/blockstates/anvil.json
Normal file
16
src/main/resources/assets/unicopia/blockstates/anvil.json
Normal file
|
@ -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 }
|
||||
}
|
||||
}
|
|
@ -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 }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"parent": "block/anvil",
|
||||
"textures": {
|
||||
"particle": "unicopia:blocks/cloud_normal",
|
||||
"body": "unicopia:blocks/cloud_normal",
|
||||
"top": "unicopia:blocks/cloud_normal"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"parent": "minecraft:block/door_bottom",
|
||||
"textures": {
|
||||
"bottom": "unicopia:blocks/door_mist_lower",
|
||||
"top": "unicopia:blocks/door_mist_upper"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"parent": "block/door_bottom_rh",
|
||||
"textures": {
|
||||
"bottom": "unicopia:blocks/door_mist_lower",
|
||||
"top": "unicopia:blocks/door_mist_upper"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"parent": "block/door_top",
|
||||
"textures": {
|
||||
"bottom": "unicopia:blocks/door_mist_lower",
|
||||
"top": "unicopia:blocks/door_mist_upper"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"parent": "block/door_top_rh",
|
||||
"textures": {
|
||||
"bottom": "unicopia:blocks/door_mist_lower",
|
||||
"top": "unicopia:blocks/door_mist_upper"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"parent": "unicopia:block/anvil_undamaged"
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "item/generated",
|
||||
"textures": {
|
||||
"layer0": "unicopia:items/door_cloud"
|
||||
}
|
||||
}
|
20
src/main/resources/assets/unicopia/recipes/cloud_stairs.json
Normal file
20
src/main/resources/assets/unicopia/recipes/cloud_stairs.json
Normal file
|
@ -0,0 +1,20 @@
|
|||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"pattern": [
|
||||
"# ",
|
||||
"## ",
|
||||
"###"
|
||||
],
|
||||
"key": {
|
||||
"#": [
|
||||
{
|
||||
"item": "unicopia:cloud_block",
|
||||
"data": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
"result": {
|
||||
"item": "unicopia:cloud_stairs",
|
||||
"count": 4
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
21
src/main/resources/assets/unicopia/recipes/mist_door.json
Normal file
21
src/main/resources/assets/unicopia/recipes/mist_door.json
Normal file
|
@ -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
|
||||
}
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"pattern": [
|
||||
"###",
|
||||
"###",
|
||||
"###"
|
||||
],
|
||||
"key": {
|
||||
"#": [
|
||||
{
|
||||
"item": "unicopia:cloud_matter"
|
||||
}
|
||||
]
|
||||
},
|
||||
"result": {
|
||||
"item": "unicopia:cloud_block",
|
||||
"data": 0,
|
||||
"count": 1
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
26
src/main/resources/assets/unicopia/recipes/racing_cloud.json
Normal file
26
src/main/resources/assets/unicopia/recipes/racing_cloud.json
Normal file
|
@ -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
|
||||
}
|
||||
}
|
21
src/main/resources/assets/unicopia/recipes/wild_cloud.json
Normal file
21
src/main/resources/assets/unicopia/recipes/wild_cloud.json
Normal file
|
@ -0,0 +1,21 @@
|
|||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"pattern": [
|
||||
"###",
|
||||
"###",
|
||||
"###"
|
||||
],
|
||||
"key": {
|
||||
"#": [
|
||||
{
|
||||
"item": "unicopia:cloud_block",
|
||||
"data": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
"result": {
|
||||
"item": "unicopia:cloud",
|
||||
"data": 2,
|
||||
"count": 1
|
||||
}
|
||||
}
|
Binary file not shown.
After Width: | Height: | Size: 2.9 KiB |
Binary file not shown.
After Width: | Height: | Size: 2.9 KiB |
BIN
src/main/resources/assets/unicopia/textures/items/door_cloud.png
Normal file
BIN
src/main/resources/assets/unicopia/textures/items/door_cloud.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 245 B |
Loading…
Reference in a new issue