mirror of
https://github.com/Sollace/Unicopia.git
synced 2025-02-20 03:44:23 +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 -> {
|
public static final Predicate<EntityPlayer> INTERACT_WITH_CLOUDS = player -> {
|
||||||
return player != null && PlayerSpeciesList.instance().getPlayer(player).getPlayerSpecies().canInteractWithClouds();
|
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 -> {
|
public static final Predicate<EntityItem> ITEM_INTERACT_WITH_CLOUDS = item -> {
|
||||||
return item != null && PlayerSpeciesList.instance().getEntity(item).getPlayerSpecies().canInteractWithClouds();
|
return item != null && PlayerSpeciesList.instance().getEntity(item).getPlayerSpecies().canInteractWithClouds();
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
package com.minelittlepony.unicopia;
|
package com.minelittlepony.unicopia;
|
||||||
|
|
||||||
import com.minelittlepony.unicopia.block.BlockCloud;
|
import com.minelittlepony.unicopia.block.BlockCloud;
|
||||||
|
import com.minelittlepony.unicopia.block.BlockCloudAnvil;
|
||||||
import com.minelittlepony.unicopia.block.BlockCloudSlab;
|
import com.minelittlepony.unicopia.block.BlockCloudSlab;
|
||||||
import com.minelittlepony.unicopia.block.BlockCloudStairs;
|
import com.minelittlepony.unicopia.block.BlockCloudStairs;
|
||||||
|
import com.minelittlepony.unicopia.block.BlockCloudDoor;
|
||||||
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraftforge.registries.IForgeRegistry;
|
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_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 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) {
|
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.ItemApple;
|
||||||
import com.minelittlepony.unicopia.item.ItemCloud;
|
import com.minelittlepony.unicopia.item.ItemCloud;
|
||||||
|
import com.minelittlepony.unicopia.item.ItemOfHolding;
|
||||||
import com.minelittlepony.unicopia.item.UItemBlock;
|
import com.minelittlepony.unicopia.item.UItemBlock;
|
||||||
import com.minelittlepony.unicopia.item.UItemMultiTexture;
|
import com.minelittlepony.unicopia.item.UItemMultiTexture;
|
||||||
import com.minelittlepony.unicopia.item.UItemSlab;
|
import com.minelittlepony.unicopia.item.UItemSlab;
|
||||||
|
@ -9,10 +10,16 @@ import com.minelittlepony.unicopia.item.UItemSlab;
|
||||||
import come.minelittlepony.unicopia.forgebullshit.RegistryLockSpinner;
|
import come.minelittlepony.unicopia.forgebullshit.RegistryLockSpinner;
|
||||||
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
|
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
|
||||||
import net.minecraft.creativetab.CreativeTabs;
|
import net.minecraft.creativetab.CreativeTabs;
|
||||||
|
import net.minecraft.init.Enchantments;
|
||||||
import net.minecraft.init.Items;
|
import net.minecraft.init.Items;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
|
import net.minecraft.item.ItemDoor;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.item.crafting.FurnaceRecipes;
|
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.minecraft.util.ResourceLocation;
|
||||||
import net.minecraftforge.client.model.ModelLoader;
|
import net.minecraftforge.client.model.ModelLoader;
|
||||||
import net.minecraftforge.registries.IForgeRegistry;
|
import net.minecraftforge.registries.IForgeRegistry;
|
||||||
|
@ -38,16 +45,29 @@ public class UItems {
|
||||||
|
|
||||||
public static final Item cloud_block = new UItemMultiTexture(UBlocks.cloud, stack -> {
|
public static final Item cloud_block = new UItemMultiTexture(UBlocks.cloud, stack -> {
|
||||||
return CloudType.byMetadata(stack.getMetadata()).getTranslationKey();
|
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)
|
public static final Item cloud_stairs = new UItemBlock(UBlocks.stairsCloud, INTERACT_WITH_CLOUDS)
|
||||||
.setTranslationKey("cloud_stairs")
|
.setTranslationKey("cloud_stairs")
|
||||||
.setRegistryName(Unicopia.MODID, "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)
|
public static final Item cloud_slab = new UItemSlab(UBlocks.cloud_slab, UBlocks.cloud_slab, UBlocks.cloud_double_slab, INTERACT_WITH_CLOUDS)
|
||||||
.setTranslationKey("cloud_slab")
|
.setTranslationKey("cloud_slab")
|
||||||
.setRegistryName(Unicopia.MODID, "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) {
|
static void registerItems(IForgeRegistry<Item> registry) {
|
||||||
RegistryLockSpinner.unlock(Item.REGISTRY);
|
RegistryLockSpinner.unlock(Item.REGISTRY);
|
||||||
|
|
||||||
|
@ -55,7 +75,9 @@ public class UItems {
|
||||||
|
|
||||||
RegistryLockSpinner.lock(Item.REGISTRY);
|
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()) {
|
if (UClient.isClientSide()) {
|
||||||
registerAllVariants(apple, apple.getVariants());
|
registerAllVariants(apple, apple.getVariants());
|
||||||
|
@ -65,7 +87,12 @@ public class UItems {
|
||||||
registerAllVariants(cloud_stairs, "cloud_stairs");
|
registerAllVariants(cloud_stairs, "cloud_stairs");
|
||||||
registerAllVariants(cloud_slab, CloudType.getVariants("_cloud_slab"));
|
registerAllVariants(cloud_slab, CloudType.getVariants("_cloud_slab"));
|
||||||
registerAllVariants(cloud_block, CloudType.getVariants("_cloud_block"));
|
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) {
|
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),
|
||||||
new ItemStack(UItems.apple, 1, zap + 1), 0.1F);
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isAir(IBlockState state, IBlockAccess world, BlockPos pos) {
|
||||||
|
return allowsFallingBlockToPass(state, world, pos);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isNormalCube(IBlockState state) {
|
public boolean isNormalCube(IBlockState state) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -67,12 +72,6 @@ public class BlockCloud extends Block implements ICloudBlock {
|
||||||
return BlockRenderLayer.TRANSLUCENT;
|
return BlockRenderLayer.TRANSLUCENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
@Override
|
|
||||||
public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) {
|
|
||||||
return super.shouldSideBeRendered(blockState, blockAccess, pos, side);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean doesSideBlockRendering(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing face) {
|
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);
|
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
|
@Override
|
||||||
public void onFallenUpon(World world, BlockPos pos, Entity entityIn, float fallDistance) {
|
public void onFallenUpon(World world, BlockPos pos, Entity entityIn, float fallDistance) {
|
||||||
if (entityIn.isSneaking()) {
|
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) {
|
public BlockCloudSlab(boolean isDouble, Material material, String domain, String name) {
|
||||||
super(material);
|
super(material);
|
||||||
|
|
||||||
setCreativeTab(CreativeTabs.BUILDING_BLOCKS);
|
setCreativeTab(CreativeTabs.BUILDING_BLOCKS);
|
||||||
setHardness(0.5F);
|
setHardness(0.5F);
|
||||||
setResistance(1.0F);
|
setResistance(1.0F);
|
||||||
|
@ -54,6 +55,11 @@ public class BlockCloudSlab extends BlockSlab implements ICloudBlock {
|
||||||
return UBlocks.cloud.isTranslucent(state);
|
return UBlocks.cloud.isTranslucent(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isAir(IBlockState state, IBlockAccess world, BlockPos pos) {
|
||||||
|
return allowsFallingBlockToPass(state, world, pos);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isOpaqueCube(IBlockState state) {
|
public boolean isOpaqueCube(IBlockState state) {
|
||||||
return isDouble() ? UBlocks.cloud.isOpaqueCube(state) : false;
|
return isDouble() ? UBlocks.cloud.isOpaqueCube(state) : false;
|
||||||
|
|
|
@ -62,6 +62,11 @@ public class BlockCloudStairs extends BlockStairs implements ICloudBlock {
|
||||||
theBlock.onFallenUpon(w, pos, entity, fallDistance);
|
theBlock.onFallenUpon(w, pos, entity, fallDistance);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isAir(IBlockState state, IBlockAccess world, BlockPos pos) {
|
||||||
|
return allowsFallingBlockToPass(state, world, pos);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLanded(World w, Entity entity) {
|
public void onLanded(World w, Entity entity) {
|
||||||
theBlock.onLanded(w, entity);
|
theBlock.onLanded(w, entity);
|
||||||
|
|
|
@ -2,8 +2,12 @@ package com.minelittlepony.unicopia.block;
|
||||||
|
|
||||||
import com.minelittlepony.unicopia.CloudType;
|
import com.minelittlepony.unicopia.CloudType;
|
||||||
|
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.block.BlockFalling;
|
||||||
import net.minecraft.block.state.IBlockState;
|
import net.minecraft.block.state.IBlockState;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.world.IBlockAccess;
|
||||||
|
|
||||||
public interface ICloudBlock {
|
public interface ICloudBlock {
|
||||||
|
|
||||||
|
@ -13,4 +17,16 @@ public interface ICloudBlock {
|
||||||
return getCloudMaterialType(state).canInteract(e);
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
setStationary(true);
|
|
||||||
|
|
||||||
EnumFacing direction = trace.sideHit;
|
EnumFacing direction = trace.sideHit;
|
||||||
|
|
||||||
BlockPos blockPos = new BlockPos(trace.hitVec);
|
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) {
|
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();
|
boolean stat = getStationary();
|
||||||
|
|
||||||
if (stat || canFly) {
|
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) {
|
if (stack != null && stack.getItem() instanceof ItemSword) {
|
||||||
return super.attackEntityFrom(source, amount);
|
return super.attackEntityFrom(source, amount);
|
||||||
} else if (stack != null && stack.getItem() instanceof ItemSpade) {
|
} else if (stack != null && stack.getItem() instanceof ItemSpade) {
|
||||||
|
@ -483,15 +485,39 @@ public class EntityCloud extends EntityFlying implements IAnimals {
|
||||||
setDead();
|
setDead();
|
||||||
}
|
}
|
||||||
super.onDeath(s);
|
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
|
@Override
|
||||||
protected void dropFewItems(boolean hitByPlayer, int looting) {
|
protected void dropFewItems(boolean hitByPlayer, int looting) {
|
||||||
if (hitByPlayer) {
|
if (hitByPlayer) {
|
||||||
Item item = getDropItem();
|
Item item = getDropItem();
|
||||||
int amount = 2 + world.rand.nextInt(3 + looting);
|
int amount = 2 + world.rand.nextInt(3);
|
||||||
for (int i = 0; i < amount; i++) {
|
|
||||||
dropItem(item, 1);
|
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());
|
spawnThunderbolt(getPosition());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entity instanceof EntityItem) {
|
if (getStationary() && entity instanceof EntityItem) {
|
||||||
entity.motionX /= 8;
|
entity.motionX /= 8;
|
||||||
entity.motionZ /= 8;
|
entity.motionZ /= 8;
|
||||||
entity.motionY /= 16;
|
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