diff --git a/src/main/java/com/minelittlepony/unicopia/Fixes.java b/src/main/java/com/minelittlepony/unicopia/Fixes.java new file mode 100644 index 00000000..e6f77ccb --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/Fixes.java @@ -0,0 +1,106 @@ +package com.minelittlepony.unicopia; + +import com.minelittlepony.unicopia.init.UBlocks; +import com.minelittlepony.util.fixers.BlockFixer; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.datafix.DataFixer; +import net.minecraft.util.datafix.FixTypes; +import net.minecraft.util.datafix.IFixableData; +import net.minecraftforge.common.util.CompoundDataFixer; +import net.minecraftforge.common.util.ModFixs; + +public class Fixes { + + static void init(DataFixer fixer) { + + CompoundDataFixer forgeDataFixer = (CompoundDataFixer)fixer; + + try { + ModFixs modfix = forgeDataFixer.init(Unicopia.MODID, 1342); + + modfix.registerFix(FixTypes.CHUNK, new FixCloudBlocks()); + modfix.registerFix(FixTypes.ITEM_INSTANCE, new FixCloudItems()); + } catch (Throwable ignored) { + // no way to check if our fixer is already registered. + // so just do it anyway and ignore the error. + // @FUF(reason = "FUF") + } + } + + static class FixCloudItems implements IFixableData { + @Override + public int getFixVersion() { + return 1342; + } + + @Override + public NBTTagCompound fixTagCompound(NBTTagCompound compound) { + + if (compound.hasKey("id", 8) && compound.hasKey("Damage", 3)) { + String id = compound.getString("id"); + int damage = compound.getInteger("Damage"); + + if (id == "unicopia:cloud_block") { + if (damage == 1) { + damage = 0; + id = "unicopia:packed_cloud_block"; + } else if (damage == 2) { + damage = 0; + id = "unicopia:enchanted_cloud_block"; + } + } + + if (id == "unicopia:cloud_slab") { + if (damage == 1) { + damage = 0; + id = "unicopia:packed_cloud_slab"; + } else if (damage == 2) { + damage = 0; + id = "unicopia:enchanted_cloud_slab"; + } + } + + compound.setString("id", id); + compound.setInteger("Damage", 0); + } + + return compound; + } + } + + static class FixCloudBlocks extends BlockFixer { + + @Override + public int getFixVersion() { + return 1342; + } + + @Override + protected IBlockState fixBlockState(int id, int metadata) { + if (id == Block.getIdFromBlock(UBlocks.normal_cloud) && metadata != 0) { + if (metadata == 1) { + return UBlocks.packed_cloud.getDefaultState(); + } + if (metadata == 2) { + return UBlocks.enchanted_cloud.getDefaultState(); + } + } + + int shifted = metadata % 8; + + if (id == Block.getIdFromBlock(UBlocks.cloud_slab) && shifted != 0) { + if (shifted == 1) { + return UBlocks.packed_cloud_slab.getStateFromMeta(metadata - shifted); + } + if (shifted == 2) { + return UBlocks.enchanted_cloud_slab.getStateFromMeta(metadata - shifted); + } + } + + return null; + } + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/Unicopia.java b/src/main/java/com/minelittlepony/unicopia/Unicopia.java index 338da1ec..c29122d2 100644 --- a/src/main/java/com/minelittlepony/unicopia/Unicopia.java +++ b/src/main/java/com/minelittlepony/unicopia/Unicopia.java @@ -11,6 +11,7 @@ import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import net.minecraftforge.fml.common.event.FMLServerAboutToStartEvent; import net.minecraftforge.fml.common.event.FMLServerStartingEvent; import net.minecraftforge.fml.common.network.IGuiHandler; import net.minecraftforge.fml.common.network.NetworkRegistry; @@ -75,6 +76,11 @@ public class Unicopia implements IGuiHandler { MinecraftForge.TERRAIN_GEN_BUS.register(Hooks.class); } + @EventHandler + public void onServerCreated(FMLServerAboutToStartEvent event) { + Fixes.init(event.getServer().getDataFixer()); + } + @EventHandler public void onServerStart(FMLServerStartingEvent event) { Commands.init(event); diff --git a/src/main/java/com/minelittlepony/unicopia/block/BlockCloud.java b/src/main/java/com/minelittlepony/unicopia/block/BlockCloud.java index ca2f6694..f246cfcd 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/BlockCloud.java +++ b/src/main/java/com/minelittlepony/unicopia/block/BlockCloud.java @@ -11,48 +11,47 @@ import com.minelittlepony.unicopia.player.PlayerSpeciesList; import net.minecraft.block.Block; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; -import net.minecraft.block.properties.PropertyEnum; -import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; 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.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.Vec3d; -import net.minecraft.util.BlockRenderLayer; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.NonNullList; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; public class BlockCloud extends Block implements ICloudBlock, ITillable { - public static final PropertyEnum VARIANT = PropertyEnum.create("variant", CloudType.class); + private final CloudType variant; - public BlockCloud(Material material, String domain, String name) { + public BlockCloud(Material material, CloudType variant, String domain, String name) { super(material); setRegistryName(domain, name); setTranslationKey(name); - setCreativeTab(CreativeTabs.MISC); + setCreativeTab(CreativeTabs.MATERIALS); setHardness(0.5f); setResistance(1.0F); setSoundType(SoundType.CLOTH); setLightOpacity(20); useNeighborBrightness = true; + + this.variant = variant; } @Override public boolean isTranslucent(IBlockState state) { - return true; + return variant == CloudType.NORMAL; } @Override public boolean isOpaqueCube(IBlockState state) { - return false; + return variant != CloudType.NORMAL; } @Override @@ -73,7 +72,7 @@ public class BlockCloud extends Block implements ICloudBlock, ITillable { @Override public BlockRenderLayer getRenderLayer() { - return BlockRenderLayer.TRANSLUCENT; + return variant == CloudType.NORMAL ? BlockRenderLayer.TRANSLUCENT : super.getRenderLayer(); } @Deprecated @@ -144,36 +143,9 @@ public class BlockCloud extends Block implements ICloudBlock, ITillable { return -1; } - @Override - public int damageDropped(IBlockState state) { - return ((CloudType)state.getValue(VARIANT)).getMetadata(); - } - - @Override - public void getSubBlocks(CreativeTabs tab, NonNullList list) { - for (CloudType i : CloudType.values()) { - list.add(new ItemStack(this, 1, i.getMetadata())); - } - } - - @Override - public IBlockState getStateFromMeta(int meta) { - return getDefaultState().withProperty(VARIANT, CloudType.byMetadata(meta)); - } - - @Override - public int getMetaFromState(IBlockState state) { - return ((CloudType)state.getValue(VARIANT)).getMetadata(); - } - - @Override - protected BlockStateContainer createBlockState() { - return new BlockStateContainer(this, VARIANT); - } - @Override public CloudType getCloudMaterialType(IBlockState blockState) { - return (CloudType)blockState.getValue(VARIANT); + return variant; } @Deprecated diff --git a/src/main/java/com/minelittlepony/unicopia/block/BlockCloudBanister.java b/src/main/java/com/minelittlepony/unicopia/block/BlockCloudBanister.java index e512bee9..dc807ad9 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/BlockCloudBanister.java +++ b/src/main/java/com/minelittlepony/unicopia/block/BlockCloudBanister.java @@ -4,6 +4,9 @@ import java.util.List; import javax.annotation.Nullable; +import com.minelittlepony.unicopia.CloudType; + +import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.Entity; import net.minecraft.util.BlockRenderLayer; @@ -43,8 +46,8 @@ public class BlockCloudBanister extends BlockCloudFence { new AxisAlignedBB(0, 0, 0, 1, h, 1) }; - public BlockCloudBanister(String domain, String name) { - super(domain, name); + public BlockCloudBanister(Material material, String domain, String name) { + super(material, CloudType.ENCHANTED, domain, name); } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/block/BlockCloudFarm.java b/src/main/java/com/minelittlepony/unicopia/block/BlockCloudFarm.java index 012965b9..2dc62ed8 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/BlockCloudFarm.java +++ b/src/main/java/com/minelittlepony/unicopia/block/BlockCloudFarm.java @@ -120,6 +120,6 @@ public class BlockCloudFarm extends UFarmland implements ICloudBlock { @Override protected IBlockState getDroppedState(IBlockState state) { - return UBlocks.cloud.getDefaultState(); + return UBlocks.normal_cloud.getDefaultState(); } } diff --git a/src/main/java/com/minelittlepony/unicopia/block/BlockCloudFence.java b/src/main/java/com/minelittlepony/unicopia/block/BlockCloudFence.java index 98e4cdf6..33eb46f6 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/BlockCloudFence.java +++ b/src/main/java/com/minelittlepony/unicopia/block/BlockCloudFence.java @@ -5,10 +5,10 @@ import java.util.List; import javax.annotation.Nullable; import com.minelittlepony.unicopia.CloudType; -import com.minelittlepony.unicopia.init.UMaterials; import net.minecraft.block.BlockFence; import net.minecraft.block.SoundType; +import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; @@ -23,8 +23,10 @@ import net.minecraft.world.World; public class BlockCloudFence extends BlockFence implements ICloudBlock { - public BlockCloudFence(String domain, String name) { - super(UMaterials.cloud, UMaterials.cloud.getMaterialMapColor()); + private final CloudType variant; + + public BlockCloudFence(Material material, CloudType variant, String domain, String name) { + super(material, material.getMaterialMapColor()); setTranslationKey(name); setRegistryName(domain, name); @@ -33,16 +35,18 @@ public class BlockCloudFence extends BlockFence implements ICloudBlock { setLightOpacity(20); setSoundType(SoundType.CLOTH); useNeighborBrightness = true; + + this.variant = variant; } @Override public boolean isTranslucent(IBlockState state) { - return true; + return variant == CloudType.NORMAL; } @Override public boolean isOpaqueCube(IBlockState state) { - return false; + return variant != CloudType.NORMAL; } @Override @@ -62,12 +66,12 @@ public class BlockCloudFence extends BlockFence implements ICloudBlock { @Override public CloudType getCloudMaterialType(IBlockState blockState) { - return CloudType.NORMAL; + return variant; } @Override public BlockRenderLayer getRenderLayer() { - return BlockRenderLayer.TRANSLUCENT; + return variant == CloudType.NORMAL ? BlockRenderLayer.TRANSLUCENT : super.getRenderLayer(); } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/block/BlockCloudSlab.java b/src/main/java/com/minelittlepony/unicopia/block/BlockCloudSlab.java index 6e86b763..6eb59397 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/BlockCloudSlab.java +++ b/src/main/java/com/minelittlepony/unicopia/block/BlockCloudSlab.java @@ -6,8 +6,8 @@ import java.util.Random; import javax.annotation.Nullable; import com.minelittlepony.unicopia.CloudType; -import com.minelittlepony.unicopia.init.UBlocks; +import net.minecraft.block.Block; import net.minecraft.block.BlockSlab; import net.minecraft.block.BlockStairs; import net.minecraft.block.SoundType; @@ -23,7 +23,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.BlockRenderLayer; import net.minecraft.util.EnumFacing; -import net.minecraft.util.NonNullList; +import net.minecraft.util.IStringSerializable; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; @@ -31,54 +31,61 @@ import net.minecraft.util.math.Vec3d; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; -public class BlockCloudSlab extends BlockSlab implements ICloudBlock { +public abstract class BlockCloudSlab extends BlockSlab implements ICloudBlock { - public static final PropertyEnum VARIANT = PropertyEnum.create("variant", CloudType.class); + public static final PropertyEnum VARIANT = PropertyEnum.create("variant", Variant.class); - private boolean isDouble; + protected final T modelBlock; - public BlockCloudSlab(boolean isDouble, Material material, String domain, String name) { + public BlockCloudSlab(T modelBlock, BlockCloudSlab single, Material material, String domain, String name) { super(material); setCreativeTab(CreativeTabs.BUILDING_BLOCKS); setHardness(0.5F); - setResistance(1.0F); + setResistance(1); setSoundType(SoundType.CLOTH); setLightOpacity(20); setTranslationKey(name); setRegistryName(domain, name); - this.isDouble = isDouble; + useNeighborBrightness = true; + + this.modelBlock = modelBlock; + this.fullBlock = isDouble(); } + @Deprecated @Override public boolean isTranslucent(IBlockState state) { - return UBlocks.cloud.isTranslucent(state); + return modelBlock.isTranslucent(state); } @Override public boolean isAir(IBlockState state, IBlockAccess world, BlockPos pos) { - return allowsFallingBlockToPass(state, world, pos); + return modelBlock.isAir(state, world, pos); } + @Deprecated @Override public boolean isOpaqueCube(IBlockState state) { - return isDouble() ? UBlocks.cloud.isOpaqueCube(state) : false; + return isDouble() && modelBlock != null && modelBlock.isOpaqueCube(state); } + @Deprecated @Override public boolean isFullCube(IBlockState state) { - return isDouble() ? UBlocks.cloud.isFullCube(state) : false; + return isDouble() && modelBlock.isFullCube(state); } + @Deprecated @Override public boolean isNormalCube(IBlockState state) { - return isDouble() ? UBlocks.cloud.isNormalCube(state) : false; + return isDouble() && modelBlock.isNormalCube(state); } @Override public BlockRenderLayer getRenderLayer() { - return UBlocks.cloud.getRenderLayer(); + return modelBlock.getRenderLayer(); } @Override @@ -88,17 +95,17 @@ public class BlockCloudSlab extends BlockSlab implements ICloudBlock { @Override public void onFallenUpon(World w, BlockPos pos, Entity entity, float fallDistance) { - UBlocks.cloud.onFallenUpon(w, pos, entity, fallDistance); + modelBlock.onFallenUpon(w, pos, entity, fallDistance); } @Override public void onLanded(World w, Entity entity) { - UBlocks.cloud.onLanded(w, entity); + modelBlock.onLanded(w, entity); } @Override public void onEntityCollision(World w, BlockPos pos, IBlockState state, Entity entity) { - UBlocks.cloud.onEntityCollision(w, pos, state, entity); + modelBlock.onEntityCollision(w, pos, state, entity); } @Override @@ -121,123 +128,170 @@ public class BlockCloudSlab extends BlockSlab implements ICloudBlock { @Deprecated @Override public float getPlayerRelativeBlockHardness(IBlockState state, EntityPlayer player, World worldIn, BlockPos pos) { - return UBlocks.cloud.getPlayerRelativeBlockHardness(state, player, worldIn, pos); - } - - @Override - public boolean doesSideBlockRendering(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing face) { - - IBlockState beside = world.getBlockState(pos.offset(face)); - - if (beside.getBlock() instanceof ICloudBlock) { - ICloudBlock cloud = ((ICloudBlock)beside.getBlock()); - - if (cloud.getCloudMaterialType(beside) == getCloudMaterialType(state)) { - if (isDouble) { - return true; - } - - if (face == EnumFacing.UP || face == EnumFacing.DOWN) { - return (state.getValue(HALF) == EnumBlockHalf.TOP) && (face == EnumFacing.UP); - } - - if (beside.getBlock() == this) { - return beside.getValue(HALF) == state.getValue(HALF); - } else { - if (beside.getBlock() instanceof BlockCloudStairs) { - return beside.getValue(BlockStairs.HALF).ordinal() == state.getValue(HALF).ordinal() - && beside.getValue(BlockStairs.FACING) == face; - } - } - } - } - - return false; + return modelBlock.getPlayerRelativeBlockHardness(state, player, worldIn, pos); } @Override public boolean canEntityDestroy(IBlockState state, IBlockAccess world, BlockPos pos, Entity entity) { - return UBlocks.cloud.canEntityDestroy(state, world, pos, entity); - } - - @Override - public Item getItemDropped(IBlockState state, Random rand, int fortune) { - return Item.getItemFromBlock(UBlocks.cloud_slab); - } - - @Override - public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) { - return new ItemStack(Item.getItemFromBlock(UBlocks.cloud_slab), 2, getMetaFromState(state)); + return modelBlock.canEntityDestroy(state, world, pos, entity); } @Override public String getTranslationKey(int meta) { - return super.getTranslationKey() + "." + CloudType.byMetadata(meta).getTranslationKey(); + return super.getTranslationKey(); } @Override - public IProperty getVariantProperty() { + public IProperty getVariantProperty() { return VARIANT; } - public Object getVariant(ItemStack stack) { - return CloudType.byMetadata(stack.getMetadata() & 7); - } - - @Override - public void getSubBlocks(CreativeTabs tab, NonNullList list) { - for (CloudType i : CloudType.values()) { - list.add(new ItemStack(this, 1, i.getMetadata())); - } - } - - @Override public CloudType getCloudMaterialType(IBlockState blockState) { - return (CloudType)blockState.getValue(VARIANT); + return modelBlock.getCloudMaterialType(blockState); } @Override - public IBlockState getStateFromMeta(int meta) { - IBlockState state = getDefaultState().withProperty(VARIANT, CloudType.byMetadata(meta & 7)); - if (!isDouble()) { - state = state.withProperty(HALF, (meta & 8) == 0 ? BlockSlab.EnumBlockHalf.BOTTOM : BlockSlab.EnumBlockHalf.TOP); + public Comparable getTypeForItem(ItemStack stack) { + return Variant.DEFAULT; + } + + public static class Single extends BlockCloudSlab { + + public final Double doubleSlab; + + public Single(T modelBlock, Material material, String domain, String name) { + super(modelBlock, null, material, domain, name); + + doubleSlab = new Double<>(this, domain, "double_" + name); } - return state; - } - /** - * Convert the BlockState into the correct metadata value - */ - @Override - public int getMetaFromState(IBlockState state) { - byte mask = 0; - int result = mask | getCloudMaterialType(state).getMetadata(); - if (!isDouble() && state.getValue(HALF) == BlockSlab.EnumBlockHalf.TOP) { - result |= 8; + @Override + public boolean isDouble() { + return false; + } + + + @Override + public boolean doesSideBlockRendering(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing face) { + + IBlockState beside = world.getBlockState(pos.offset(face)); + + if (beside.getBlock() instanceof ICloudBlock) { + ICloudBlock cloud = ((ICloudBlock)beside.getBlock()); + + if (cloud.getCloudMaterialType(beside) == getCloudMaterialType(state)) { + + EnumBlockHalf half = state.getValue(HALF); + + if (beside.getBlock() instanceof BlockCloudStairs) { + return beside.getValue(BlockStairs.HALF).ordinal() == state.getValue(HALF).ordinal() + && beside.getValue(BlockStairs.FACING) == face; + } + + if (face == EnumFacing.DOWN) { + return half == EnumBlockHalf.BOTTOM; + } + + if (face == EnumFacing.UP) { + return half == EnumBlockHalf.TOP; + } + + if (beside.getBlock() == this) { + return beside.getValue(HALF) == state.getValue(HALF); + } + } + } + + return false; + } + + @Override + public IBlockState getStateFromMeta(int meta) { + return getDefaultState() + .withProperty(VARIANT, Variant.DEFAULT) + .withProperty(HALF, (meta & 8) == 0 ? BlockSlab.EnumBlockHalf.BOTTOM : BlockSlab.EnumBlockHalf.TOP); + } + + @Override + public int getMetaFromState(IBlockState state) { + int i = 0; + + if (state.getValue(HALF) == BlockSlab.EnumBlockHalf.TOP) { + i |= 8; + } + + return i; + } + + @Override + protected BlockStateContainer createBlockState() { + return new BlockStateContainer(this, HALF, VARIANT); } - return result; } - @Override - protected BlockStateContainer createBlockState() { - return new BlockStateContainer(this, isDouble() ? - new IProperty[] {VARIANT} - : new IProperty[] {HALF, VARIANT}); + public static class Double extends BlockCloudSlab { + + public final Single singleSlab; + + public Double(Single single, String domain, String name) { + super(single.modelBlock, single, single.material, domain, name); + + this.singleSlab = single; + } + + @Override + public boolean isDouble() { + return true; + } + + @Override + public boolean doesSideBlockRendering(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing face) { + + IBlockState beside = world.getBlockState(pos.offset(face)); + + if (beside.getBlock() instanceof ICloudBlock) { + ICloudBlock cloud = ((ICloudBlock)beside.getBlock()); + + if (cloud.getCloudMaterialType(beside) == getCloudMaterialType(state)) { + return true; + } + } + + return false; + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) { + return Item.getItemFromBlock(singleSlab); + } + + @Override + public ItemStack getItem(World world, BlockPos pos, IBlockState state) { + return new ItemStack(getItemDropped(state, world.rand, 0)); + } + + @Override + public IBlockState getStateFromMeta(int meta) { + return getDefaultState().withProperty(VARIANT, Variant.DEFAULT); + } + + @Override + public int getMetaFromState(IBlockState state) { + return 0; + } + + @Override + protected BlockStateContainer createBlockState() { + return new BlockStateContainer(this, VARIANT); + } } - @Override - public int damageDropped(IBlockState state) { - return getCloudMaterialType(state).getMetadata(); - } + private static enum Variant implements IStringSerializable { + DEFAULT; - @Override - public boolean isDouble() { - return isDouble; - } - - @Override - public Comparable getTypeForItem(ItemStack stack) { - return CloudType.byMetadata(stack.getMetadata() & 7); + public String getName() { + return "normal"; + } } } diff --git a/src/main/java/com/minelittlepony/unicopia/entity/EntityCloud.java b/src/main/java/com/minelittlepony/unicopia/entity/EntityCloud.java index ed4ee7fb..8ae712ca 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/EntityCloud.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/EntityCloud.java @@ -441,7 +441,7 @@ public class EntityCloud extends EntityFlying implements IAnimals, IInAnimate { if (type == 2) { if (!isBurning()) { for (int i = 0; i < 50 * getCloudSize(); i++) { - Particles.instance().getEntityEmitter().emitDiggingParticles(this, UBlocks.cloud.getDefaultState()); + Particles.instance().getEntityEmitter().emitDiggingParticles(this, UBlocks.normal_cloud.getDefaultState()); } } } @@ -465,7 +465,7 @@ public class EntityCloud extends EntityFlying implements IAnimals, IInAnimate { public void pomf() { for (int i = 0; i < 50 * getCloudSize(); i++) { - Particles.instance().getEntityEmitter().emitDiggingParticles(this, UBlocks.cloud.getDefaultState()); + Particles.instance().getEntityEmitter().emitDiggingParticles(this, UBlocks.normal_cloud.getDefaultState()); } playHurtSound(DamageSource.GENERIC); @@ -537,7 +537,7 @@ public class EntityCloud extends EntityFlying implements IAnimals, IInAnimate { if (stat || canFly) { if (!isBurning()) { for (int i = 0; i < 50 * getCloudSize(); i++) { - Particles.instance().getEntityEmitter().emitDiggingParticles(this, UBlocks.cloud.getDefaultState()); + Particles.instance().getEntityEmitter().emitDiggingParticles(this, UBlocks.normal_cloud.getDefaultState()); } } diff --git a/src/main/java/com/minelittlepony/unicopia/init/UBlocks.java b/src/main/java/com/minelittlepony/unicopia/init/UBlocks.java index afaf41eb..f9ae0fa5 100644 --- a/src/main/java/com/minelittlepony/unicopia/init/UBlocks.java +++ b/src/main/java/com/minelittlepony/unicopia/init/UBlocks.java @@ -1,10 +1,10 @@ package com.minelittlepony.unicopia.init; +import com.minelittlepony.unicopia.CloudType; import com.minelittlepony.unicopia.Unicopia; import com.minelittlepony.unicopia.block.BlockAlfalfa; import com.minelittlepony.unicopia.block.BlockFruitLeaves; import com.minelittlepony.unicopia.block.BlockGlowingGem; -import com.minelittlepony.unicopia.block.BlockCloud; import com.minelittlepony.unicopia.block.BlockCloudAnvil; import com.minelittlepony.unicopia.block.BlockCloudBanister; import com.minelittlepony.unicopia.block.BlockCloudSlab; @@ -17,6 +17,7 @@ import com.minelittlepony.unicopia.item.ItemApple; import com.minelittlepony.unicopia.block.BlockCloudDoor; import com.minelittlepony.unicopia.block.BlockCloudFarm; import com.minelittlepony.unicopia.block.BlockCloudFence; +import com.minelittlepony.unicopia.block.BlockCloud; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; @@ -33,12 +34,15 @@ import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.registries.IForgeRegistry; public class UBlocks { - public static final BlockCloud cloud = new BlockCloud(UMaterials.cloud, Unicopia.MODID, "cloud_block"); + public static final BlockCloud normal_cloud = new BlockCloud(UMaterials.cloud, CloudType.NORMAL, Unicopia.MODID, "cloud_block"); + public static final BlockCloud enchanted_cloud = new BlockCloud(UMaterials.cloud, CloudType.ENCHANTED, Unicopia.MODID, "enchanted_cloud_block"); + public static final BlockCloud packed_cloud = new BlockCloud(UMaterials.cloud, CloudType.PACKED, Unicopia.MODID, "packed_cloud_block"); - public static final BlockCloudStairs cloud_stairs = new BlockCloudStairs(UBlocks.cloud.getDefaultState(), Unicopia.MODID, "cloud_stairs"); + public static final BlockCloudStairs cloud_stairs = new BlockCloudStairs(normal_cloud.getDefaultState(), Unicopia.MODID, "cloud_stairs"); - 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.Single cloud_slab = new BlockCloudSlab.Single<>(normal_cloud, UMaterials.cloud, Unicopia.MODID, "cloud_slab"); + public static final BlockCloudSlab.Single enchanted_cloud_slab = new BlockCloudSlab.Single<>(enchanted_cloud, UMaterials.cloud, Unicopia.MODID, "enchanted_cloud_slab"); + public static final BlockCloudSlab.Single packed_cloud_slab = new BlockCloudSlab.Single<>(enchanted_cloud, UMaterials.cloud, Unicopia.MODID, "packed_cloud_slab"); public static final BlockCloudDoor mist_door = new BlockCloudDoor(UMaterials.cloud, Unicopia.MODID, "mist_door"); @@ -46,8 +50,8 @@ public class UBlocks { public static final BlockCloudAnvil anvil = new BlockCloudAnvil(Unicopia.MODID, "anvil"); - public static final BlockCloudFence cloud_fence = new BlockCloudFence(Unicopia.MODID, "cloud_fence"); - public static final BlockCloudBanister cloud_banister = new BlockCloudBanister(Unicopia.MODID, "cloud_banister"); + public static final BlockCloudFence cloud_fence = new BlockCloudFence(UMaterials.cloud, CloudType.NORMAL, Unicopia.MODID, "cloud_fence"); + public static final BlockCloudBanister cloud_banister = new BlockCloudBanister(UMaterials.cloud, Unicopia.MODID, "cloud_banister"); public static final BlockAlfalfa alfalfa = new BlockAlfalfa(Unicopia.MODID, "alfalfa"); @@ -66,7 +70,12 @@ public class UBlocks { .setUnharvestFruit(w -> new ItemStack(UItems.rotten_apple)); static void init(IForgeRegistry registry) { - registry.registerAll(cloud, cloud_stairs, cloud_double_slab, cloud_slab, cloud_fence, cloud_banister, + registry.registerAll(normal_cloud, enchanted_cloud, packed_cloud, + cloud_stairs, + cloud_slab, cloud_slab.doubleSlab, + enchanted_cloud_slab, enchanted_cloud_slab.doubleSlab, + packed_cloud_slab, packed_cloud_slab.doubleSlab, + cloud_fence, cloud_banister, mist_door, anvil, cloud_farmland, sugar_block, alfalfa, diff --git a/src/main/java/com/minelittlepony/unicopia/init/UItems.java b/src/main/java/com/minelittlepony/unicopia/init/UItems.java index 28803f34..cd64de7a 100644 --- a/src/main/java/com/minelittlepony/unicopia/init/UItems.java +++ b/src/main/java/com/minelittlepony/unicopia/init/UItems.java @@ -17,7 +17,6 @@ import com.minelittlepony.unicopia.item.ItemTomato; import com.minelittlepony.unicopia.item.ItemTomatoSeeds; import com.minelittlepony.unicopia.item.ItemZapApple; import com.minelittlepony.unicopia.item.UItemBlock; -import com.minelittlepony.unicopia.item.UItemMultiTexture; import com.minelittlepony.unicopia.item.UItemDecoration; import com.minelittlepony.unicopia.item.UItemSlab; import com.minelittlepony.unicopia.spell.SpellRegistry; @@ -44,7 +43,6 @@ import net.minecraftforge.registries.IForgeRegistry; import static com.minelittlepony.unicopia.Predicates.*; -import com.minelittlepony.unicopia.CloudType; import com.minelittlepony.unicopia.UClient; import com.minelittlepony.unicopia.Unicopia; import com.minelittlepony.unicopia.edibles.BushToxicityDeterminent; @@ -83,29 +81,28 @@ public class UItems { public static final ItemCloud cloud_spawner = new ItemCloud(Unicopia.MODID, "cloud"); - public static final Item cloud_block = new UItemMultiTexture(UBlocks.cloud, stack -> - CloudType.byMetadata(stack.getMetadata()).getTranslationKey(), INTERACT_WITH_CLOUDS) - .setRegistryName(Unicopia.MODID, "cloud_block"); + public static final Item cloud_block = new UItemBlock(UBlocks.normal_cloud, INTERACT_WITH_CLOUDS); + public static final Item enchanted_cloud = new UItemBlock(UBlocks.enchanted_cloud, INTERACT_WITH_CLOUDS); + public static final Item packed_cloud = new UItemBlock(UBlocks.packed_cloud, INTERACT_WITH_CLOUDS); - public static final Item cloud_stairs = new UItemBlock(UBlocks.cloud_stairs, Unicopia.MODID, "cloud_stairs", INTERACT_WITH_CLOUDS); + public static final Item cloud_stairs = new UItemBlock(UBlocks.cloud_stairs, INTERACT_WITH_CLOUDS); - public static final Item cloud_farmland = new UItemBlock(UBlocks.cloud_farmland, Unicopia.MODID, "cloud_farmland", INTERACT_WITH_CLOUDS); + public static final Item cloud_farmland = new UItemBlock(UBlocks.cloud_farmland, INTERACT_WITH_CLOUDS); - public static final Item cloud_fence = new UItemBlock(UBlocks.cloud_fence, Unicopia.MODID, "cloud_fence", INTERACT_WITH_CLOUDS); - public static final Item cloud_banister = new UItemBlock(UBlocks.cloud_banister, Unicopia.MODID, "cloud_banister", INTERACT_WITH_CLOUDS); + public static final Item cloud_fence = new UItemBlock(UBlocks.cloud_fence, INTERACT_WITH_CLOUDS); + public static final Item cloud_banister = new UItemBlock(UBlocks.cloud_banister, INTERACT_WITH_CLOUDS); - public static final Item anvil = new UItemBlock(UBlocks.anvil, Unicopia.MODID, "anvil", INTERACT_WITH_CLOUDS) - .setTranslationKey("cloud_anvil"); + public static final Item anvil = new UItemBlock(UBlocks.anvil, INTERACT_WITH_CLOUDS).setTranslationKey("cloud_anvil"); public static final Item mist_door = new ItemDoor(UBlocks.mist_door) .setTranslationKey("mist_door") .setRegistryName(Unicopia.MODID, "mist_door"); - public static final Item sugar_block = new UItemDecoration(UBlocks.sugar_block, Unicopia.MODID, "sugar_block"); + public static final Item sugar_block = new UItemDecoration(UBlocks.sugar_block); - public static final Item cloud_slab = new UItemSlab(UBlocks.cloud_slab, UBlocks.cloud_double_slab, INTERACT_WITH_CLOUDS) - .setTranslationKey("cloud_slab") - .setRegistryName(Unicopia.MODID, "cloud_slab"); + public static final Item cloud_slab = new UItemSlab(UBlocks.cloud_slab, UBlocks.cloud_slab.doubleSlab, INTERACT_WITH_CLOUDS); + public static final Item enchanted_cloud_slab = new UItemSlab(UBlocks.enchanted_cloud_slab, UBlocks.enchanted_cloud_slab.doubleSlab, INTERACT_WITH_CLOUDS); + public static final Item packed_cloud_slab = new UItemSlab(UBlocks.packed_cloud_slab, UBlocks.packed_cloud_slab.doubleSlab, INTERACT_WITH_CLOUDS); public static final ItemSpell spell = new ItemSpell(Unicopia.MODID, "gem"); public static final ItemSpell curse = new ItemCurse(Unicopia.MODID, "corrupted_gem"); @@ -139,7 +136,7 @@ public class UItems { public static final Item apple_seeds = new UItemDecoration(UBlocks.apple_tree, Unicopia.MODID, "apple_seeds"); - public static final Item apple_leaves = new ItemFruitLeaves(UBlocks.apple_leaves, Unicopia.MODID, "apple_leaves"); + public static final Item apple_leaves = new ItemFruitLeaves(UBlocks.apple_leaves); public static final Item double_plant = new UItemFoodDelegate(Blocks.DOUBLE_PLANT, stack -> BlockDoublePlant.EnumPlantType.byMetadata(stack.getMetadata()).getTranslationKey() @@ -210,8 +207,10 @@ public class UItems { registry.registerAll( green_apple, sweet_apple, sour_apple, - cloud_spawner, dew_drop, cloud_matter, cloud_block, - cloud_stairs, cloud_slab, cloud_fence, cloud_banister, + cloud_spawner, dew_drop, cloud_matter, cloud_block, enchanted_cloud, packed_cloud, + cloud_stairs, + cloud_slab, enchanted_cloud_slab, packed_cloud_slab, + cloud_fence, cloud_banister, cloud_farmland, mist_door, anvil, bag_of_holding, spell, curse, spellbook, mug, enchanted_torch, @@ -229,8 +228,6 @@ public class UItems { apple_cider, juice, burned_juice); if (UClient.isClientSide()) { - ItemModels.registerAllVariants(cloud_slab, CloudType.getVariants("_cloud_slab")); - ItemModels.registerAllVariants(cloud_block, CloudType.getVariants("_cloud_block")); ItemModels.registerAll( cloud_spawner, @@ -241,7 +238,10 @@ public class UItems { tomato, cloudsdale_tomato, - cloud_spawner, cloud_matter, cloud_stairs, cloud_fence, cloud_banister, + cloud_spawner, cloud_matter, cloud_block, enchanted_cloud, packed_cloud, + cloud_stairs, + cloud_slab, enchanted_cloud_slab, packed_cloud_slab, + cloud_fence, cloud_banister, cloud_farmland, mist_door, anvil, bag_of_holding, spell, curse, spellbook, mug, enchanted_torch, diff --git a/src/main/java/com/minelittlepony/unicopia/item/ItemFruitLeaves.java b/src/main/java/com/minelittlepony/unicopia/item/ItemFruitLeaves.java index 9ff35ba4..561e259c 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/ItemFruitLeaves.java +++ b/src/main/java/com/minelittlepony/unicopia/item/ItemFruitLeaves.java @@ -4,8 +4,8 @@ import net.minecraft.block.Block; public class ItemFruitLeaves extends UItemDecoration { - public ItemFruitLeaves(Block block, String domain, String name) { - super(block, domain, name); + public ItemFruitLeaves(Block block) { + super(block); } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/item/UItemBlock.java b/src/main/java/com/minelittlepony/unicopia/item/UItemBlock.java index e7e8712c..5cb188ff 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/UItemBlock.java +++ b/src/main/java/com/minelittlepony/unicopia/item/UItemBlock.java @@ -6,6 +6,7 @@ import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; +import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -13,6 +14,19 @@ public class UItemBlock extends UItemDecoration { private final Predicate abilityTest; + public UItemBlock(Block block, Predicate abilityTest) { + super(block); + + this.abilityTest = abilityTest; + } + + public UItemBlock(Block block, ResourceLocation res, Predicate abilityTest) { + super(block, res); + + this.abilityTest = abilityTest; + } + + public UItemBlock(Block block, String domain, String name, Predicate abilityTest) { super(block, domain, name); diff --git a/src/main/java/com/minelittlepony/unicopia/item/UItemDecoration.java b/src/main/java/com/minelittlepony/unicopia/item/UItemDecoration.java index 86f26cb8..fb9e198d 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/UItemDecoration.java +++ b/src/main/java/com/minelittlepony/unicopia/item/UItemDecoration.java @@ -2,14 +2,23 @@ package com.minelittlepony.unicopia.item; import net.minecraft.block.Block; import net.minecraft.item.ItemBlock; +import net.minecraft.util.ResourceLocation; public class UItemDecoration extends ItemBlock { + public UItemDecoration(Block block) { + this(block, block.getRegistryName()); + } + public UItemDecoration(Block block, String domain, String name) { + this(block, new ResourceLocation(domain, name)); + } + + public UItemDecoration(Block block, ResourceLocation res) { super(block); - setTranslationKey(name); - setRegistryName(domain, name); + setTranslationKey(res.getPath()); + setRegistryName(res); setCreativeTab(block.getCreativeTab()); } } diff --git a/src/main/java/com/minelittlepony/unicopia/item/UItemMultiTexture.java b/src/main/java/com/minelittlepony/unicopia/item/UItemMultiTexture.java index 1ca937db..0b537fa6 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/UItemMultiTexture.java +++ b/src/main/java/com/minelittlepony/unicopia/item/UItemMultiTexture.java @@ -16,6 +16,7 @@ public class UItemMultiTexture extends ItemMultiTexture { public UItemMultiTexture(Block block, ItemMultiTexture.Mapper mapper, Predicate abilityTest) { super(block, block, mapper); + this.setRegistryName(block.getRegistryName()); this.abilityTest = abilityTest; } diff --git a/src/main/java/com/minelittlepony/unicopia/item/UItemSlab.java b/src/main/java/com/minelittlepony/unicopia/item/UItemSlab.java index 99a135df..23695f8b 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/UItemSlab.java +++ b/src/main/java/com/minelittlepony/unicopia/item/UItemSlab.java @@ -16,16 +16,19 @@ public class UItemSlab extends ItemSlab { public UItemSlab(BlockSlab singleSlab, BlockSlab doubleSlab, Predicate abilityTest) { super(singleSlab, singleSlab, doubleSlab); - this.abilityTest = abilityTest; + + setHasSubtypes(false); + setRegistryName(singleSlab.getRegistryName()); + setTranslationKey(singleSlab.getRegistryName().getPath()); } @Override - public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, EnumFacing side, EntityPlayer player, ItemStack stack) { + public boolean canPlaceBlockOnSide(World world, BlockPos origin, EnumFacing side, EntityPlayer player, ItemStack stack) { if (!(player.capabilities.isCreativeMode || abilityTest.test(player))) { return false; } - return super.canPlaceBlockOnSide(worldIn, pos, side, player, stack); + return super.canPlaceBlockOnSide(world, origin, side, player, stack); } } diff --git a/src/main/java/com/minelittlepony/util/fixers/BlockFixer.java b/src/main/java/com/minelittlepony/util/fixers/BlockFixer.java new file mode 100644 index 00000000..5dee01be --- /dev/null +++ b/src/main/java/com/minelittlepony/util/fixers/BlockFixer.java @@ -0,0 +1,101 @@ +package com.minelittlepony.util.fixers; + +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.datafix.IFixableData; +import net.minecraft.world.chunk.NibbleArray; + +public abstract class BlockFixer implements IFixableData { + + protected NBTTagCompound fixChunk(NBTTagCompound chunk) { + byte[] blocks = chunk.getByteArray("Blocks"); + + NibbleArray data = new NibbleArray(chunk.getByteArray("Data")); + NibbleArray add = chunk.hasKey("Add", 7) ? new NibbleArray(chunk.getByteArray("Add")) : null; + + boolean altered = false; + + for (int i = 0; i < 4096; i++) { + int xPos = i & 15; + int yPos = i >> 8 & 15; + int zPos = i >> 4 & 15; + + int extendedBlockId = (add == null ? 0 : add.get(xPos, yPos, zPos)); + int baseBlockId = blocks[i] & 255; + + + int blockid = (extendedBlockId << 8) | baseBlockId; + int metadata = data.get(xPos, yPos, zPos); + + int blockStateId = (blockid << 4) | metadata; + + Block block = Block.getBlockById(blockid); + + + if (block != null) { + IBlockState state = fixBlockState(blockid, metadata); + + if (state != null) { + @SuppressWarnings("deprecation") + int newBlockStateId = Block.BLOCK_STATE_IDS.get(state); + + if (newBlockStateId != blockStateId) { + metadata = newBlockStateId & 15; + blockid = newBlockStateId >> 4; + extendedBlockId = blockid >> 8; + baseBlockId = blockid & 255; + + if (extendedBlockId != 0) { + if (add == null) { + add = new NibbleArray(new byte[data.getData().length]); + } + + add.set(xPos, yPos, zPos, extendedBlockId); + } + + data.set(xPos, yPos, zPos, metadata); + blocks[i] = (byte)blockid; + + altered = true; + } + } + } + } + + if (altered) { + if (add != null) { + chunk.setByteArray("Add", add.getData()); + } + chunk.setByteArray("Blocks", blocks); + chunk.setByteArray("Data", data.getData()); + } + + return chunk; + } + + protected abstract IBlockState fixBlockState(int id, int metadata); + + @Override + public NBTTagCompound fixTagCompound(NBTTagCompound compound) { + + if (compound.hasKey("Level", 10)) { + NBTTagCompound level = compound.getCompoundTag("Level"); + + if (level.hasKey("Sections", 9)) { + NBTTagList sections = level.getTagList("Sections", 10); + + for (int i = 0; i < sections.tagCount(); i++) { + NBTTagCompound chunk = sections.getCompoundTagAt(i); + + if (chunk.hasKey("Blocks", 7) && chunk.hasKey("Data", 7)) { + sections.set(i, fixChunk(chunk)); + } + } + } + } + + return compound; + } +} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/blockstates/cloud_block.json b/src/main/resources/assets/unicopia/blockstates/cloud_block.json index 79e3cb5c..0dd87d3a 100644 --- a/src/main/resources/assets/unicopia/blockstates/cloud_block.json +++ b/src/main/resources/assets/unicopia/blockstates/cloud_block.json @@ -1,7 +1,5 @@ { "variants": { - "variant=normal": { "model": "unicopia:normal_cloud_block" }, - "variant=packed": { "model": "unicopia:packed_cloud_block" }, - "variant=enchanted": { "model": "unicopia:enchanted_cloud_block" } + "normal": { "model": "unicopia:normal_cloud_block" } } } diff --git a/src/main/resources/assets/unicopia/blockstates/cloud_double_slab.json b/src/main/resources/assets/unicopia/blockstates/cloud_double_slab.json deleted file mode 100644 index a9f10d46..00000000 --- a/src/main/resources/assets/unicopia/blockstates/cloud_double_slab.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "variants": { - "half=bottom,variant=normal": { "model": "unicopia:normal_cloud_block" }, - "half=bottom,variant=packed": { "model": "unicopia:packed_cloud_block" }, - "half=bottom,variant=enchanted": { "model": "unicopia:enchanted_cloud_block" }, - - "half=top,variant=normal": { "model": "unicopia:normal_cloud_block" }, - "half=top,variant=packed": { "model": "unicopia:packed_cloud_block" }, - "half=top,variant=enchanted": { "model": "unicopia:enchanted_cloud_block" } - } -} diff --git a/src/main/resources/assets/unicopia/blockstates/cloud_slab.json b/src/main/resources/assets/unicopia/blockstates/cloud_slab.json index 07f50f97..1a11fa07 100644 --- a/src/main/resources/assets/unicopia/blockstates/cloud_slab.json +++ b/src/main/resources/assets/unicopia/blockstates/cloud_slab.json @@ -1,10 +1,6 @@ { "variants": { - "half=bottom,variant=normal": { "model": "unicopia:half_slab_normal_cloud" }, - "half=top,variant=normal": { "model": "unicopia:upper_slab_normal_cloud" }, - "half=bottom,variant=packed": { "model": "unicopia:half_slab_packed_cloud" }, - "half=top,variant=packed": { "model": "unicopia:upper_slab_packed_cloud" }, - "half=bottom,variant=enchanted": { "model": "unicopia:half_slab_enchanted_cloud" }, - "half=top,variant=enchanted": { "model": "unicopia:upper_slab_enchanted_cloud" } + "half=bottom,variant=normal": { "model": "unicopia:half_slab_normal_cloud" }, + "half=top,variant=normal": { "model": "unicopia:upper_slab_normal_cloud" } } } \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/blockstates/double_cloud_slab.json b/src/main/resources/assets/unicopia/blockstates/double_cloud_slab.json new file mode 100644 index 00000000..4aaee84b --- /dev/null +++ b/src/main/resources/assets/unicopia/blockstates/double_cloud_slab.json @@ -0,0 +1,5 @@ +{ + "variants": { + "variant=normal": { "model": "unicopia:normal_cloud_block" } + } +} diff --git a/src/main/resources/assets/unicopia/blockstates/double_enchanted_cloud_slab.json b/src/main/resources/assets/unicopia/blockstates/double_enchanted_cloud_slab.json new file mode 100644 index 00000000..e7f9dad8 --- /dev/null +++ b/src/main/resources/assets/unicopia/blockstates/double_enchanted_cloud_slab.json @@ -0,0 +1,5 @@ +{ + "variants": { + "variant=normal": { "model": "unicopia:enchanted_cloud_block" } + } +} diff --git a/src/main/resources/assets/unicopia/blockstates/double_packed_cloud_slab.json b/src/main/resources/assets/unicopia/blockstates/double_packed_cloud_slab.json new file mode 100644 index 00000000..465e9512 --- /dev/null +++ b/src/main/resources/assets/unicopia/blockstates/double_packed_cloud_slab.json @@ -0,0 +1,5 @@ +{ + "variants": { + "variant=normal": { "model": "unicopia:packed_cloud_block" } + } +} diff --git a/src/main/resources/assets/unicopia/blockstates/enchanted_cloud_double_slab.json b/src/main/resources/assets/unicopia/blockstates/enchanted_cloud_block.json similarity index 100% rename from src/main/resources/assets/unicopia/blockstates/enchanted_cloud_double_slab.json rename to src/main/resources/assets/unicopia/blockstates/enchanted_cloud_block.json diff --git a/src/main/resources/assets/unicopia/blockstates/enchanted_cloud_slab.json b/src/main/resources/assets/unicopia/blockstates/enchanted_cloud_slab.json index c2e0d8cc..7258ab6e 100644 --- a/src/main/resources/assets/unicopia/blockstates/enchanted_cloud_slab.json +++ b/src/main/resources/assets/unicopia/blockstates/enchanted_cloud_slab.json @@ -1,6 +1,6 @@ { "variants": { - "half=bottom": { "model": "unicopia:half_slab_enchanted_cloud" }, - "half=top": { "model": "unicopia:upper_slab_enchanted_cloud" } + "half=bottom,variant=normal": { "model": "unicopia:half_slab_enchanted_cloud" }, + "half=top,variant=normal": { "model": "unicopia:upper_slab_enchanted_cloud" } } } \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/blockstates/normal_cloud_double_slab.json b/src/main/resources/assets/unicopia/blockstates/normal_cloud_double_slab.json deleted file mode 100644 index 0dd87d3a..00000000 --- a/src/main/resources/assets/unicopia/blockstates/normal_cloud_double_slab.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "variants": { - "normal": { "model": "unicopia:normal_cloud_block" } - } -} diff --git a/src/main/resources/assets/unicopia/blockstates/normal_cloud_slab.json b/src/main/resources/assets/unicopia/blockstates/normal_cloud_slab.json deleted file mode 100644 index ba725ff6..00000000 --- a/src/main/resources/assets/unicopia/blockstates/normal_cloud_slab.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "variants": { - "half=bottom": { "model": "unicopia:half_slab_normal_cloud" }, - "half=top": { "model": "unicopia:upper_slab_normal_cloud" } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/blockstates/packed_cloud_block.json b/src/main/resources/assets/unicopia/blockstates/packed_cloud_block.json new file mode 100644 index 00000000..0abf2904 --- /dev/null +++ b/src/main/resources/assets/unicopia/blockstates/packed_cloud_block.json @@ -0,0 +1,5 @@ +{ + "variants": { + "normal": { "model": "unicopia:enchanted_cloud_block" } + } +} diff --git a/src/main/resources/assets/unicopia/blockstates/packed_cloud_double_slab.json b/src/main/resources/assets/unicopia/blockstates/packed_cloud_double_slab.json deleted file mode 100644 index eebde8cf..00000000 --- a/src/main/resources/assets/unicopia/blockstates/packed_cloud_double_slab.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "variants": { - "normal": { "model": "unicopia:packed_cloud_block" } - } -} diff --git a/src/main/resources/assets/unicopia/blockstates/packed_cloud_slab.json b/src/main/resources/assets/unicopia/blockstates/packed_cloud_slab.json index ea955372..978908ec 100644 --- a/src/main/resources/assets/unicopia/blockstates/packed_cloud_slab.json +++ b/src/main/resources/assets/unicopia/blockstates/packed_cloud_slab.json @@ -1,6 +1,6 @@ { "variants": { - "half=bottom": { "model": "unicopia:half_slab_packed_cloud" }, - "half=top": { "model": "unicopia:upper_slab_packed_cloud" } + "half=bottom,variant=normal": { "model": "unicopia:half_slab_packed_cloud" }, + "half=top,variant=normal": { "model": "unicopia:upper_slab_packed_cloud" } } } \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/lang/en_US.lang b/src/main/resources/assets/unicopia/lang/en_US.lang index e7473a9d..79f00af0 100644 --- a/src/main/resources/assets/unicopia/lang/en_US.lang +++ b/src/main/resources/assets/unicopia/lang/en_US.lang @@ -1,10 +1,13 @@ -tile.cloud_block.normal.name=Block of Cloud -tile.cloud_block.packed.name=Dense Cloud -tile.cloud_block.enchanted.name=Enchanted Cloud +tile.normal_cloud_block.name=Block of Cloud +tile.packed_cloud_block.name=Dense Cloud +tile.enchanted_cloud_block.name=Enchanted Cloud -tile.cloud_slab.normal.name=Cloud Slab -tile.cloud_slab.packed.name=Dense Cloud Slab -tile.cloud_slab.enchanted.name=Enchanted Cloud Slab +tile.normal_cloud_slab.name=Cloud Slab +tile.double_normal_cloud_slab.name=Double Cloud Slab +tile.packed_cloud_slab.name=Dense Cloud Slab +tile.packed_normal_cloud_slab.name=Double Dense Cloud Slab +tile.enchanted_cloud_slab.name=Enchanted Cloud Slab +tile.double_enchanted_cloud_slab.name=Double Enchanted Cloud Slab tile.cloud_stairs.name=Cloud Stairs tile.cloud_fence.name=Cloud Fence diff --git a/src/main/resources/assets/unicopia/models/item/normal_cloud_block.json b/src/main/resources/assets/unicopia/models/item/cloud_block.json similarity index 100% rename from src/main/resources/assets/unicopia/models/item/normal_cloud_block.json rename to src/main/resources/assets/unicopia/models/item/cloud_block.json diff --git a/src/main/resources/assets/unicopia/models/item/normal_cloud_slab.json b/src/main/resources/assets/unicopia/models/item/cloud_slab.json similarity index 100% rename from src/main/resources/assets/unicopia/models/item/normal_cloud_slab.json rename to src/main/resources/assets/unicopia/models/item/cloud_slab.json diff --git a/src/main/resources/assets/unicopia/recipes/anvil.json b/src/main/resources/assets/unicopia/recipes/anvil.json index 426f5791..c06aaa3a 100644 --- a/src/main/resources/assets/unicopia/recipes/anvil.json +++ b/src/main/resources/assets/unicopia/recipes/anvil.json @@ -7,7 +7,7 @@ ], "key": { "#": [ - { "item": "unicopia:cloud_block", "data": 0 } + { "item": "unicopia:cloud_block" } ] }, "result": { "item": "unicopia:anvil", "data": 0, "count": 1 } diff --git a/src/main/resources/assets/unicopia/recipes/cloud_fence.json b/src/main/resources/assets/unicopia/recipes/cloud_fence.json index 9be713b0..86eb04ea 100644 --- a/src/main/resources/assets/unicopia/recipes/cloud_fence.json +++ b/src/main/resources/assets/unicopia/recipes/cloud_fence.json @@ -7,7 +7,7 @@ ], "key": { "B": [ - { "item": "unicopia:cloud_block", "data": 0 } + { "item": "unicopia:cloud_block" } ] }, "result": { "item": "unicopia:cloud_fence", "count": 3 } diff --git a/src/main/resources/assets/unicopia/recipes/cloud_stairs.json b/src/main/resources/assets/unicopia/recipes/cloud_stairs.json index 92b20770..cf57cd45 100644 --- a/src/main/resources/assets/unicopia/recipes/cloud_stairs.json +++ b/src/main/resources/assets/unicopia/recipes/cloud_stairs.json @@ -7,7 +7,7 @@ ], "key": { "#": [ - { "item": "unicopia:cloud_block", "data": 0 } + { "item": "unicopia:cloud_block" } ] }, "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 index 965b0d85..0a5f7541 100644 --- a/src/main/resources/assets/unicopia/recipes/construction_cloud.json +++ b/src/main/resources/assets/unicopia/recipes/construction_cloud.json @@ -7,7 +7,7 @@ ], "key": { "#": [ - { "item": "unicopia:cloud_block", "data": 0 } + { "item": "unicopia:cloud_block" } ], "*": [ { "item": "unicopia:cloud_matter" } diff --git a/src/main/resources/assets/unicopia/recipes/enchanted_cloud_block.json b/src/main/resources/assets/unicopia/recipes/enchanted_cloud_block.json index dcf5d407..784b23e9 100644 --- a/src/main/resources/assets/unicopia/recipes/enchanted_cloud_block.json +++ b/src/main/resources/assets/unicopia/recipes/enchanted_cloud_block.json @@ -7,7 +7,7 @@ ], "key": { "#": [ - { "item": "unicopia:cloud_block", "data": 0 } + { "item": "unicopia:cloud_block" } ], "$": [ { "item": "unicopia:dew_drop" } @@ -47,5 +47,5 @@ } ] }, - "result": { "item": "unicopia:cloud_block", "data": 2, "count": 5 } + "result": { "item": "unicopia:enchanted_cloud_block", "count": 5 } } diff --git a/src/main/resources/assets/unicopia/recipes/enchanted_cloud_slab.json b/src/main/resources/assets/unicopia/recipes/enchanted_cloud_slab.json index 410e8326..e4bfa6d6 100644 --- a/src/main/resources/assets/unicopia/recipes/enchanted_cloud_slab.json +++ b/src/main/resources/assets/unicopia/recipes/enchanted_cloud_slab.json @@ -5,8 +5,8 @@ ], "key": { "#": [ - { "item": "unicopia:cloud_block", "data": 2 } + { "item": "unicopia:enchanted_cloud_block" } ] }, - "result": { "item": "unicopia:cloud_slab", "data": 2, "count": 6 } + "result": { "item": "unicopia:enchanted_cloud_slab", "count": 6 } } diff --git a/src/main/resources/assets/unicopia/recipes/mist_door.json b/src/main/resources/assets/unicopia/recipes/mist_door.json index 937a817e..1a204206 100644 --- a/src/main/resources/assets/unicopia/recipes/mist_door.json +++ b/src/main/resources/assets/unicopia/recipes/mist_door.json @@ -7,7 +7,7 @@ ], "key": { "#": [ - { "item": "unicopia:cloud_block", "data": 0 } + { "item": "unicopia:cloud_block" } ] }, "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 index ad04d6ea..0d4d250e 100644 --- a/src/main/resources/assets/unicopia/recipes/normal_cloud_block.json +++ b/src/main/resources/assets/unicopia/recipes/normal_cloud_block.json @@ -10,5 +10,5 @@ { "item": "unicopia:cloud_matter" } ] }, - "result": { "item": "unicopia:cloud_block", "data": 0, "count": 1 } + "result": { "item": "unicopia:cloud_block", "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 index d9eaea97..323759cf 100644 --- a/src/main/resources/assets/unicopia/recipes/normal_cloud_slab.json +++ b/src/main/resources/assets/unicopia/recipes/normal_cloud_slab.json @@ -5,8 +5,8 @@ ], "key": { "#": [ - { "item": "unicopia:cloud_block", "data": 0 } + { "item": "unicopia:cloud_block" } ] }, - "result": { "item": "unicopia:cloud_slab", "data": 0, "count": 6 } + "result": { "item": "unicopia:cloud_slab", "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 index b4391ec8..528dbb2e 100644 --- a/src/main/resources/assets/unicopia/recipes/packed_cloud_block.json +++ b/src/main/resources/assets/unicopia/recipes/packed_cloud_block.json @@ -6,8 +6,8 @@ ], "key": { "#": [ - { "item": "unicopia:cloud_block", "data": 0 } + { "item": "unicopia:cloud_block" } ] }, - "result": { "item": "unicopia:cloud_block", "data": 1, "count": 1 } + "result": { "item": "unicopia:packed_cloud_block", "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 index 0b2ee3c2..224188c9 100644 --- a/src/main/resources/assets/unicopia/recipes/packed_cloud_slab.json +++ b/src/main/resources/assets/unicopia/recipes/packed_cloud_slab.json @@ -5,8 +5,8 @@ ], "key": { "#": [ - { "item": "unicopia:cloud_block", "data": 1 } + { "item": "unicopia:packed_cloud_block" } ] }, - "result": { "item": "unicopia:cloud_slab", "data": 1, "count": 6 } + "result": { "item": "unicopia:packed_cloud_slab", "count": 6 } } diff --git a/src/main/resources/assets/unicopia/recipes/racing_cloud.json b/src/main/resources/assets/unicopia/recipes/racing_cloud.json index 3c38ba55..f89a108a 100644 --- a/src/main/resources/assets/unicopia/recipes/racing_cloud.json +++ b/src/main/resources/assets/unicopia/recipes/racing_cloud.json @@ -6,7 +6,7 @@ ], "key": { "#": [ - { "item": "unicopia:cloud_block", "data": 0 } + { "item": "unicopia:cloud_block" } ], "*": [ { "item": "unicopia:cloud_matter" } diff --git a/src/main/resources/assets/unicopia/recipes/wild_cloud.json b/src/main/resources/assets/unicopia/recipes/wild_cloud.json index 5e01885a..b8ede3c2 100644 --- a/src/main/resources/assets/unicopia/recipes/wild_cloud.json +++ b/src/main/resources/assets/unicopia/recipes/wild_cloud.json @@ -7,7 +7,7 @@ ], "key": { "#": [ - { "item": "unicopia:cloud_block", "data": 0 } + { "item": "unicopia:cloud_block" } ] }, "result": { "item": "unicopia:cloud", "data": 2, "count": 1 } diff --git a/src/main/resources/assets/unicopia/structures/cloud/house_small.nbt b/src/main/resources/assets/unicopia/structures/cloud/house_small.nbt index c5ca685b..e7911210 100644 Binary files a/src/main/resources/assets/unicopia/structures/cloud/house_small.nbt and b/src/main/resources/assets/unicopia/structures/cloud/house_small.nbt differ diff --git a/src/main/resources/assets/unicopia/structures/cloud/island_tiny.nbt b/src/main/resources/assets/unicopia/structures/cloud/island_tiny.nbt index 3633eb31..75672620 100644 Binary files a/src/main/resources/assets/unicopia/structures/cloud/island_tiny.nbt and b/src/main/resources/assets/unicopia/structures/cloud/island_tiny.nbt differ diff --git a/src/main/resources/assets/unicopia/structures/cloud/temple_small.nbt b/src/main/resources/assets/unicopia/structures/cloud/temple_small.nbt index 281c3f1c..e92ca534 100644 Binary files a/src/main/resources/assets/unicopia/structures/cloud/temple_small.nbt and b/src/main/resources/assets/unicopia/structures/cloud/temple_small.nbt differ diff --git a/src/main/resources/assets/unicopia/structures/ground/temple_with_book.nbt b/src/main/resources/assets/unicopia/structures/ground/temple_with_book.nbt index cb771030..8ebf1c14 100644 Binary files a/src/main/resources/assets/unicopia/structures/ground/temple_with_book.nbt and b/src/main/resources/assets/unicopia/structures/ground/temple_with_book.nbt differ diff --git a/src/main/resources/assets/unicopia/structures/ground/temple_without_book.nbt b/src/main/resources/assets/unicopia/structures/ground/temple_without_book.nbt index 0ea35eaa..60ab1277 100644 Binary files a/src/main/resources/assets/unicopia/structures/ground/temple_without_book.nbt and b/src/main/resources/assets/unicopia/structures/ground/temple_without_book.nbt differ diff --git a/src/main/resources/assets/unicopia/structures/ground/tower.nbt b/src/main/resources/assets/unicopia/structures/ground/tower.nbt index 74757d0e..402941fa 100644 Binary files a/src/main/resources/assets/unicopia/structures/ground/tower.nbt and b/src/main/resources/assets/unicopia/structures/ground/tower.nbt differ diff --git a/src/main/resources/assets/unicopia/structures/ground/wizard_tower_blue.nbt b/src/main/resources/assets/unicopia/structures/ground/wizard_tower_blue.nbt index 24a871ef..f45ff2bd 100644 Binary files a/src/main/resources/assets/unicopia/structures/ground/wizard_tower_blue.nbt and b/src/main/resources/assets/unicopia/structures/ground/wizard_tower_blue.nbt differ diff --git a/src/main/resources/assets/unicopia/structures/ground/wizard_tower_red.nbt b/src/main/resources/assets/unicopia/structures/ground/wizard_tower_red.nbt index 36956a54..1e07bf36 100644 Binary files a/src/main/resources/assets/unicopia/structures/ground/wizard_tower_red.nbt and b/src/main/resources/assets/unicopia/structures/ground/wizard_tower_red.nbt differ