From ff6d24e25f4dc0e8d5a08f65a2c00bd8983e0d1a Mon Sep 17 00:00:00 2001 From: Sollace Date: Tue, 31 Oct 2023 16:45:41 +0000 Subject: [PATCH] Added cloud bricks, carved cloud, and orange cloud bed --- .../unicopia/block/UBlockEntities.java | 2 +- .../unicopia/block/UBlocks.java | 31 +- .../unicopia/block/cloud/CloudBedBlock.java | 4 +- .../block/cloud/OrientedCloudBlock.java | 42 +++ .../unicopia/client/URenderers.java | 185 ++++++------ .../render/AccessoryFeatureRenderer.java | 6 +- .../client/render/PolearmRenderer.java | 22 +- .../entity/CloudBedBlockEntityRenderer.java | 9 +- .../minelittlepony/unicopia/item/UItems.java | 3 +- .../unicopia/blockstates/carved_cloud.json | 10 + .../unicopia/blockstates/cloud_bed.json | 5 - .../blockstates/cloud_brick_slab.json | 7 + ...ks_stairs.json => cloud_brick_stairs.json} | 80 +++--- .../unicopia/blockstates/cloud_bricks.json | 5 + .../blockstates/cloud_plank_slab.json | 7 + .../blockstates/cloud_plank_stairs.json | 209 ++++++++++++++ .../blockstates/cloud_planks_slab.json | 7 - .../blockstates/compacted_cloud_bricks.json | 268 ++++++++++++++++++ .../blockstates/orange_cloud_bed.json | 5 + .../unicopia/blockstates/white_cloud_bed.json | 5 + .../resources/assets/unicopia/lang/en_us.json | 9 +- .../unicopia/models/block/carved_cloud.json | 8 + .../models/block/cloud_brick_slab.json | 8 + .../models/block/cloud_brick_slab_top.json | 8 + .../models/block/cloud_brick_stairs.json | 8 + .../block/cloud_brick_stairs_inner.json | 8 + .../block/cloud_brick_stairs_outer.json | 8 + .../unicopia/models/block/cloud_bricks.json | 6 + ...planks_slab.json => cloud_plank_slab.json} | 0 ...lab_top.json => cloud_plank_slab_top.json} | 0 ...ks_stairs.json => cloud_plank_stairs.json} | 0 ...ner.json => cloud_plank_stairs_inner.json} | 0 ...ter.json => cloud_plank_stairs_outer.json} | 0 .../flattened_cloud_bricks_corner_full.json | 6 + .../flattened_cloud_bricks_corner_x.json | 6 + .../flattened_cloud_bricks_corner_xy.json | 6 + .../flattened_cloud_bricks_corner_xyz.json | 6 + .../flattened_cloud_bricks_corner_xz.json | 6 + .../flattened_cloud_bricks_corner_y.json | 6 + .../flattened_cloud_bricks_corner_yz.json | 6 + .../flattened_cloud_bricks_corner_z.json | 6 + .../{cloud_bed.json => orange_cloud_bed.json} | 0 .../models/block/white_cloud_bed.json | 5 + .../unicopia/models/item/carved_cloud.json | 3 + .../models/item/cloud_brick_slab.json | 3 + .../models/item/cloud_brick_stairs.json | 3 + .../unicopia/models/item/cloud_bricks.json | 3 + .../models/item/cloud_plank_slab.json | 3 + .../models/item/cloud_plank_stairs.json | 3 + .../models/item/cloud_planks_slab.json | 3 - .../models/item/cloud_planks_stairs.json | 3 - .../models/item/orange_cloud_bed.json | 6 + .../{cloud_bed.json => white_cloud_bed.json} | 0 .../unicopia/textures/block/carved_cloud.png | Bin 0 -> 5784 bytes .../textures/block/carved_cloud_bottom.png | Bin 0 -> 5629 bytes .../textures/block/carved_cloud_top.png | Bin 0 -> 7618 bytes .../unicopia/textures/block/cloud_bricks.png | Bin 0 -> 5839 bytes .../textures/block/cloud_pillar_side.png | Bin 7633 -> 7822 bytes .../textures/block/cloud_pillar_top.png | Bin 7090 -> 7298 bytes .../unicopia/textures/block/cloud_planks.png | Bin 5178 -> 5548 bytes .../recipes/blocks/cloud_brick_slab.json | 30 ++ .../recipes/blocks/cloud_brick_stairs.json | 30 ++ ...planks_slab.json => cloud_brick_slab.json} | 4 +- ...ks_stairs.json => cloud_brick_stairs.json} | 2 +- .../loot_tables/blocks/cloud_bricks.json | 20 ++ .../loot_tables/blocks/cloud_plank_slab.json | 36 +++ .../blocks/cloud_plank_stairs.json | 20 ++ .../loot_tables/blocks/orange_cloud_bed.json | 29 ++ .../{cloud_bed.json => white_cloud_bed.json} | 4 +- .../recipes/blocks/cloud_brick_slab.json | 12 + .../recipes/blocks/cloud_brick_stairs.json | 14 + .../recipes/blocks/cloud_plank_slab.json | 2 +- .../recipes/blocks/cloud_plank_stairs.json | 2 +- 73 files changed, 1075 insertions(+), 188 deletions(-) create mode 100644 src/main/java/com/minelittlepony/unicopia/block/cloud/OrientedCloudBlock.java create mode 100644 src/main/resources/assets/unicopia/blockstates/carved_cloud.json delete mode 100644 src/main/resources/assets/unicopia/blockstates/cloud_bed.json create mode 100644 src/main/resources/assets/unicopia/blockstates/cloud_brick_slab.json rename src/main/resources/assets/unicopia/blockstates/{cloud_planks_stairs.json => cloud_brick_stairs.json} (62%) create mode 100644 src/main/resources/assets/unicopia/blockstates/cloud_bricks.json create mode 100644 src/main/resources/assets/unicopia/blockstates/cloud_plank_slab.json create mode 100644 src/main/resources/assets/unicopia/blockstates/cloud_plank_stairs.json delete mode 100644 src/main/resources/assets/unicopia/blockstates/cloud_planks_slab.json create mode 100644 src/main/resources/assets/unicopia/blockstates/compacted_cloud_bricks.json create mode 100644 src/main/resources/assets/unicopia/blockstates/orange_cloud_bed.json create mode 100644 src/main/resources/assets/unicopia/blockstates/white_cloud_bed.json create mode 100644 src/main/resources/assets/unicopia/models/block/carved_cloud.json create mode 100644 src/main/resources/assets/unicopia/models/block/cloud_brick_slab.json create mode 100644 src/main/resources/assets/unicopia/models/block/cloud_brick_slab_top.json create mode 100644 src/main/resources/assets/unicopia/models/block/cloud_brick_stairs.json create mode 100644 src/main/resources/assets/unicopia/models/block/cloud_brick_stairs_inner.json create mode 100644 src/main/resources/assets/unicopia/models/block/cloud_brick_stairs_outer.json create mode 100644 src/main/resources/assets/unicopia/models/block/cloud_bricks.json rename src/main/resources/assets/unicopia/models/block/{cloud_planks_slab.json => cloud_plank_slab.json} (100%) rename src/main/resources/assets/unicopia/models/block/{cloud_planks_slab_top.json => cloud_plank_slab_top.json} (100%) rename src/main/resources/assets/unicopia/models/block/{cloud_planks_stairs.json => cloud_plank_stairs.json} (100%) rename src/main/resources/assets/unicopia/models/block/{cloud_planks_stairs_inner.json => cloud_plank_stairs_inner.json} (100%) rename src/main/resources/assets/unicopia/models/block/{cloud_planks_stairs_outer.json => cloud_plank_stairs_outer.json} (100%) create mode 100644 src/main/resources/assets/unicopia/models/block/flattened_cloud_bricks_corner_full.json create mode 100644 src/main/resources/assets/unicopia/models/block/flattened_cloud_bricks_corner_x.json create mode 100644 src/main/resources/assets/unicopia/models/block/flattened_cloud_bricks_corner_xy.json create mode 100644 src/main/resources/assets/unicopia/models/block/flattened_cloud_bricks_corner_xyz.json create mode 100644 src/main/resources/assets/unicopia/models/block/flattened_cloud_bricks_corner_xz.json create mode 100644 src/main/resources/assets/unicopia/models/block/flattened_cloud_bricks_corner_y.json create mode 100644 src/main/resources/assets/unicopia/models/block/flattened_cloud_bricks_corner_yz.json create mode 100644 src/main/resources/assets/unicopia/models/block/flattened_cloud_bricks_corner_z.json rename src/main/resources/assets/unicopia/models/block/{cloud_bed.json => orange_cloud_bed.json} (100%) create mode 100644 src/main/resources/assets/unicopia/models/block/white_cloud_bed.json create mode 100644 src/main/resources/assets/unicopia/models/item/carved_cloud.json create mode 100644 src/main/resources/assets/unicopia/models/item/cloud_brick_slab.json create mode 100644 src/main/resources/assets/unicopia/models/item/cloud_brick_stairs.json create mode 100644 src/main/resources/assets/unicopia/models/item/cloud_bricks.json create mode 100644 src/main/resources/assets/unicopia/models/item/cloud_plank_slab.json create mode 100644 src/main/resources/assets/unicopia/models/item/cloud_plank_stairs.json delete mode 100644 src/main/resources/assets/unicopia/models/item/cloud_planks_slab.json delete mode 100644 src/main/resources/assets/unicopia/models/item/cloud_planks_stairs.json create mode 100644 src/main/resources/assets/unicopia/models/item/orange_cloud_bed.json rename src/main/resources/assets/unicopia/models/item/{cloud_bed.json => white_cloud_bed.json} (100%) create mode 100644 src/main/resources/assets/unicopia/textures/block/carved_cloud.png create mode 100644 src/main/resources/assets/unicopia/textures/block/carved_cloud_bottom.png create mode 100644 src/main/resources/assets/unicopia/textures/block/carved_cloud_top.png create mode 100644 src/main/resources/assets/unicopia/textures/block/cloud_bricks.png create mode 100644 src/main/resources/data/unicopia/advancements/recipes/blocks/cloud_brick_slab.json create mode 100644 src/main/resources/data/unicopia/advancements/recipes/blocks/cloud_brick_stairs.json rename src/main/resources/data/unicopia/loot_tables/blocks/{cloud_planks_slab.json => cloud_brick_slab.json} (86%) rename src/main/resources/data/unicopia/loot_tables/blocks/{cloud_planks_stairs.json => cloud_brick_stairs.json} (85%) create mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/cloud_bricks.json create mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/cloud_plank_slab.json create mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/cloud_plank_stairs.json create mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/orange_cloud_bed.json rename src/main/resources/data/unicopia/loot_tables/blocks/{cloud_bed.json => white_cloud_bed.json} (83%) create mode 100644 src/main/resources/data/unicopia/recipes/blocks/cloud_brick_slab.json create mode 100644 src/main/resources/data/unicopia/recipes/blocks/cloud_brick_stairs.json diff --git a/src/main/java/com/minelittlepony/unicopia/block/UBlockEntities.java b/src/main/java/com/minelittlepony/unicopia/block/UBlockEntities.java index d525d275..0cee11db 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/UBlockEntities.java +++ b/src/main/java/com/minelittlepony/unicopia/block/UBlockEntities.java @@ -10,7 +10,7 @@ import net.minecraft.registry.Registries; public interface UBlockEntities { BlockEntityType WEATHER_VANE = create("weather_vane", BlockEntityType.Builder.create(WeatherVaneBlock.WeatherVane::new, UBlocks.WEATHER_VANE)); - BlockEntityType CLOUD_BED = create("cloud_bed", BlockEntityType.Builder.create(CloudBedBlock.Tile::new, UBlocks.CLOUD_BED)); + BlockEntityType CLOUD_BED = create("cloud_bed", BlockEntityType.Builder.create(CloudBedBlock.Tile::new, UBlocks.WHITE_CLOUD_BED, UBlocks.ORANGE_CLOUD_BED)); static BlockEntityType create(String id, Builder builder) { return Registry.register(Registries.BLOCK_ENTITY_TYPE, id, builder.build(null)); diff --git a/src/main/java/com/minelittlepony/unicopia/block/UBlocks.java b/src/main/java/com/minelittlepony/unicopia/block/UBlocks.java index 453889d2..11a76134 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/UBlocks.java +++ b/src/main/java/com/minelittlepony/unicopia/block/UBlocks.java @@ -10,6 +10,7 @@ import com.minelittlepony.unicopia.block.cloud.CloudSlabBlock; import com.minelittlepony.unicopia.block.cloud.CloudStairsBlock; import com.minelittlepony.unicopia.block.cloud.CompactedCloudBlock; import com.minelittlepony.unicopia.block.cloud.NaturalCloudBlock; +import com.minelittlepony.unicopia.block.cloud.OrientedCloudBlock; import com.minelittlepony.unicopia.block.cloud.CloudBedBlock; import com.minelittlepony.unicopia.block.cloud.CloudBlock; import com.minelittlepony.unicopia.block.cloud.SoggyCloudBlock; @@ -29,6 +30,7 @@ import net.minecraft.block.enums.Instrument; import net.minecraft.block.piston.PistonBehavior; import net.minecraft.item.*; import net.minecraft.sound.BlockSoundGroup; +import net.minecraft.util.DyeColor; import net.minecraft.util.Identifier; import net.minecraft.util.math.Direction; import net.minecraft.util.shape.VoxelShapes; @@ -144,24 +146,37 @@ public interface UBlocks { Block CLOUD = register("cloud", new NaturalCloudBlock(Settings.create().mapColor(MapColor.OFF_WHITE).hardness(0.3F).resistance(0).sounds(BlockSoundGroup.WOOL), true, () -> UBlocks.SOGGY_CLOUD, () -> UBlocks.COMPACTED_CLOUD), ItemGroups.NATURAL); + Block COMPACTED_CLOUD = register("compacted_cloud", new CompactedCloudBlock(Settings.copy(CLOUD))); Block CLOUD_SLAB = register("cloud_slab", new CloudSlabBlock(Settings.copy(CLOUD), true, () -> UBlocks.SOGGY_CLOUD_SLAB), ItemGroups.NATURAL); Block CLOUD_STAIRS = register("cloud_stairs", new CloudStairsBlock(CLOUD.getDefaultState(), Settings.copy(CLOUD), () -> UBlocks.SOGGY_CLOUD_STAIRS), ItemGroups.NATURAL); - Block COMPACTED_CLOUD = register("compacted_cloud", new CompactedCloudBlock(Settings.copy(CLOUD))); - Block CLOUD_PLANKS = register("cloud_planks", new NaturalCloudBlock(Settings.copy(CLOUD).requiresTool(), false, + + Block CLOUD_PLANKS = register("cloud_planks", new NaturalCloudBlock(Settings.copy(CLOUD).hardness(0.4F).requiresTool(), false, null, () -> UBlocks.COMPACTED_CLOUD_PLANKS), ItemGroups.BUILDING_BLOCKS); - Block CLOUD_PLANKS_SLAB = register("cloud_planks_slab", new CloudSlabBlock(Settings.copy(CLOUD_PLANKS), false, null), ItemGroups.BUILDING_BLOCKS); - Block CLOUD_PLANKS_STAIRS = register("cloud_planks_stairs", new CloudStairsBlock(CLOUD_PLANKS.getDefaultState(), Settings.copy(CLOUD_PLANKS), null), ItemGroups.BUILDING_BLOCKS); Block COMPACTED_CLOUD_PLANKS = register("compacted_cloud_planks", new CompactedCloudBlock(Settings.copy(CLOUD_PLANKS))); - Block UNSTABLE_CLOUD = register("unstable_cloud", new UnstableCloudBlock(Settings.copy(CLOUD)), ItemGroups.NATURAL); - SoggyCloudBlock SOGGY_CLOUD = register("soggy_cloud", new SoggyCloudBlock(Settings.copy(CLOUD), () -> UBlocks.CLOUD)); - SoggyCloudSlabBlock SOGGY_CLOUD_SLAB = register("soggy_cloud_slab", new SoggyCloudSlabBlock(Settings.copy(CLOUD), () -> UBlocks.CLOUD_SLAB)); + Block CLOUD_PLANK_SLAB = register("cloud_plank_slab", new CloudSlabBlock(Settings.copy(CLOUD_PLANKS), false, null), ItemGroups.BUILDING_BLOCKS); + Block CLOUD_PLANK_STAIRS = register("cloud_plank_stairs", new CloudStairsBlock(CLOUD_PLANKS.getDefaultState(), Settings.copy(CLOUD_PLANKS), null), ItemGroups.BUILDING_BLOCKS); + + Block CLOUD_BRICKS = register("cloud_bricks", new NaturalCloudBlock(Settings.copy(CLOUD).hardness(0.6F).requiresTool(), false, + null, + () -> UBlocks.COMPACTED_CLOUD_BRICKS), ItemGroups.BUILDING_BLOCKS); + Block COMPACTED_CLOUD_BRICKS = register("compacted_cloud_bricks", new CompactedCloudBlock(Settings.copy(CLOUD_BRICKS))); + Block CLOUD_BRICK_SLAB = register("cloud_brick_slab", new CloudSlabBlock(Settings.copy(CLOUD_BRICKS), false, null), ItemGroups.BUILDING_BLOCKS); + Block CLOUD_BRICK_STAIRS = register("cloud_brick_stairs", new CloudStairsBlock(CLOUD_BRICKS.getDefaultState(), Settings.copy(CLOUD_PLANKS), null), ItemGroups.BUILDING_BLOCKS); + + SoggyCloudBlock SOGGY_CLOUD = register("soggy_cloud", new SoggyCloudBlock(Settings.copy(CLOUD).hardness(0.7F), () -> UBlocks.CLOUD)); + SoggyCloudSlabBlock SOGGY_CLOUD_SLAB = register("soggy_cloud_slab", new SoggyCloudSlabBlock(Settings.copy(SOGGY_CLOUD), () -> UBlocks.CLOUD_SLAB)); CloudStairsBlock SOGGY_CLOUD_STAIRS = register("soggy_cloud_stairs", new CloudStairsBlock(SOGGY_CLOUD.getDefaultState(), Settings.copy(CLOUD), null)); + Block DENSE_CLOUD = register("dense_cloud", new CloudBlock(Settings.create().mapColor(MapColor.GRAY).hardness(0.5F).resistance(0).sounds(BlockSoundGroup.WOOL), false), ItemGroups.NATURAL); Block DENSE_CLOUD_SLAB = register("dense_cloud_slab", new CloudSlabBlock(Settings.copy(DENSE_CLOUD), false, null), ItemGroups.NATURAL); Block DENSE_CLOUD_STAIRS = register("dense_cloud_stairs", new CloudStairsBlock(DENSE_CLOUD.getDefaultState(), Settings.copy(DENSE_CLOUD), null), ItemGroups.NATURAL); + + Block CARVED_CLOUD = register("carved_cloud", new OrientedCloudBlock(Settings.copy(CLOUD).hardness(0.4F).requiresTool(), false), ItemGroups.BUILDING_BLOCKS); + Block UNSTABLE_CLOUD = register("unstable_cloud", new UnstableCloudBlock(Settings.copy(CLOUD)), ItemGroups.NATURAL); Block CLOUD_PILLAR = register("cloud_pillar", new CloudPillarBlock(Settings.create().mapColor(MapColor.GRAY).hardness(0.5F).resistance(0).sounds(BlockSoundGroup.WOOL)), ItemGroups.NATURAL); - Block CLOUD_BED = register("cloud_bed", new CloudBedBlock(CLOUD.getDefaultState(), Settings.copy(Blocks.WHITE_BED).sounds(BlockSoundGroup.WOOL))); + Block WHITE_CLOUD_BED = register("white_cloud_bed", new CloudBedBlock(DyeColor.WHITE, CLOUD.getDefaultState(), Settings.copy(Blocks.WHITE_BED).sounds(BlockSoundGroup.WOOL))); + Block ORANGE_CLOUD_BED = register("orange_cloud_bed", new CloudBedBlock(DyeColor.ORANGE, CLOUD.getDefaultState(), Settings.copy(Blocks.ORANGE_BED).sounds(BlockSoundGroup.WOOL))); private static T register(String name, T item) { return register(Unicopia.id(name), item); diff --git a/src/main/java/com/minelittlepony/unicopia/block/cloud/CloudBedBlock.java b/src/main/java/com/minelittlepony/unicopia/block/cloud/CloudBedBlock.java index 33794c02..4745e66b 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/cloud/CloudBedBlock.java +++ b/src/main/java/com/minelittlepony/unicopia/block/cloud/CloudBedBlock.java @@ -29,8 +29,8 @@ public class CloudBedBlock extends BedBlock { private final BlockState baseState; private final CloudBlock baseBlock; - public CloudBedBlock(BlockState baseState, Settings settings) { - super(DyeColor.WHITE, settings); + public CloudBedBlock(DyeColor color, BlockState baseState, Settings settings) { + super(color, settings); this.baseState = baseState; this.baseBlock = (CloudBlock)baseState.getBlock(); } diff --git a/src/main/java/com/minelittlepony/unicopia/block/cloud/OrientedCloudBlock.java b/src/main/java/com/minelittlepony/unicopia/block/cloud/OrientedCloudBlock.java new file mode 100644 index 00000000..2d3886db --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/block/cloud/OrientedCloudBlock.java @@ -0,0 +1,42 @@ +package com.minelittlepony.unicopia.block.cloud; + +import com.minelittlepony.unicopia.EquineContext; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.item.ItemPlacementContext; +import net.minecraft.state.StateManager; +import net.minecraft.state.property.DirectionProperty; +import net.minecraft.state.property.Properties; +import net.minecraft.util.BlockMirror; +import net.minecraft.util.BlockRotation; +import net.minecraft.util.math.Direction; + +public class OrientedCloudBlock extends CloudBlock { + public static final DirectionProperty FACING = Properties.FACING; + + public OrientedCloudBlock(Settings settings, boolean meltable) { + super(settings, meltable); + this.setDefaultState(getDefaultState().with(FACING, Direction.UP)); + } + + @Override + protected void appendProperties(StateManager.Builder builder) { + builder.add(FACING); + } + + @Override + public BlockState rotate(BlockState state, BlockRotation rotation) { + return state.with(FACING, rotation.rotate(state.get(FACING))); + } + + @Override + public BlockState mirror(BlockState state, BlockMirror mirror) { + return state.rotate(mirror.getRotation(state.get(FACING))); + } + + @Override + public BlockState getPlacementState(ItemPlacementContext ctx, EquineContext equineContext) { + return getDefaultState().with(FACING, ctx.getSide().getOpposite()); + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/client/URenderers.java b/src/main/java/com/minelittlepony/unicopia/client/URenderers.java index 4e3cd4f1..4bf43bca 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/URenderers.java +++ b/src/main/java/com/minelittlepony/unicopia/client/URenderers.java @@ -1,5 +1,7 @@ package com.minelittlepony.unicopia.client; +import org.jetbrains.annotations.Nullable; + import com.minelittlepony.unicopia.Unicopia; import com.minelittlepony.unicopia.block.*; import com.minelittlepony.unicopia.client.particle.ChangelingMagicParticle; @@ -30,9 +32,10 @@ import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap; import net.fabricmc.fabric.api.client.particle.v1.ParticleFactoryRegistry; import net.fabricmc.fabric.api.client.particle.v1.ParticleFactoryRegistry.PendingParticleFactory; import net.fabricmc.fabric.api.client.rendering.v1.*; +import net.fabricmc.fabric.api.client.rendering.v1.BuiltinItemRendererRegistry.DynamicItemRenderer; import net.minecraft.block.Block; +import net.minecraft.block.BlockState; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.color.block.BlockColorProvider; import net.minecraft.client.color.world.BiomeColors; import net.minecraft.client.color.world.FoliageColors; import net.minecraft.client.item.ModelPredicateProviderRegistry; @@ -43,11 +46,14 @@ import net.minecraft.client.render.block.entity.BlockEntityRendererFactories; import net.minecraft.client.render.entity.FlyingItemEntityRenderer; import net.minecraft.client.render.item.ItemRenderer; import net.minecraft.client.render.model.json.ModelTransformationMode; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.world.ClientWorld; import net.minecraft.fluid.Fluids; import net.minecraft.item.*; import net.minecraft.particle.ParticleEffect; import net.minecraft.util.Identifier; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.BlockRenderView; public interface URenderers { static void bootstrap() { @@ -65,14 +71,11 @@ public interface URenderers { ParticleFactoryRegistry.getInstance().register(UParticles.CLOUDS_ESCAPING, CloudsEscapingParticle::new); ParticleFactoryRegistry.getInstance().register(UParticles.LIGHTNING_BOLT, LightningBoltParticle::new); - AccessoryFeatureRenderer.register(BraceletFeatureRenderer::new); - AccessoryFeatureRenderer.register(AmuletFeatureRenderer::new); - AccessoryFeatureRenderer.register(WingsFeatureRenderer::new); - AccessoryFeatureRenderer.register(HornFeatureRenderer::new); - AccessoryFeatureRenderer.register(IcarusWingsFeatureRenderer::new); - AccessoryFeatureRenderer.register(BatWingsFeatureRenderer::new); - AccessoryFeatureRenderer.register(GlassesFeatureRenderer::new); - AccessoryFeatureRenderer.register(HeldEntityFeatureRenderer::new); + AccessoryFeatureRenderer.register( + BraceletFeatureRenderer::new, AmuletFeatureRenderer::new, GlassesFeatureRenderer::new, + WingsFeatureRenderer::new, HornFeatureRenderer::new, IcarusWingsFeatureRenderer::new, BatWingsFeatureRenderer::new, + HeldEntityFeatureRenderer::new + ); EntityRendererRegistry.register(UEntities.THROWN_ITEM, FlyingItemEntityRenderer::new); EntityRendererRegistry.register(UEntities.MUFFIN, FlyingItemEntityRenderer::new); @@ -91,94 +94,17 @@ public interface URenderers { BlockEntityRendererFactories.register(UBlockEntities.WEATHER_VANE, WeatherVaneBlockEntityRenderer::new); BlockEntityRendererFactories.register(UBlockEntities.CLOUD_BED, CloudBedBlockEntityRenderer::new); + register(URenderers::renderJarItem, UItems.FILLED_JAR); + register(URenderers::renderBedItem, UItems.WHITE_CLOUD_BED, UItems.ORANGE_CLOUD_BED); + PolearmRenderer.register(UItems.WOODEN_POLEARM, UItems.STONE_POLEARM, UItems.IRON_POLEARM, UItems.GOLDEN_POLEARM, UItems.DIAMOND_POLEARM, UItems.NETHERITE_POLEARM); + ModelPredicateProviderRegistry.register(UItems.GEMSTONE, new Identifier("affinity"), (stack, world, entity, seed) -> EnchantableItem.isEnchanted(stack) ? EnchantableItem.getSpellKey(stack).getAffinity().getAlignment() : 0); + ModelPredicateProviderRegistry.register(UItems.ROCK_CANDY, new Identifier("count"), (stack, world, entity, seed) -> stack.getCount() / (float)stack.getMaxCount()); + + ColorProviderRegistry.BLOCK.register(URenderers::getTintedBlockColor, TintedBlock.REGISTRY.stream().toArray(Block[]::new)); + ColorProviderRegistry.ITEM.register((stack, i) -> getTintedBlockColor(Block.getBlockFromItem(stack.getItem()).getDefaultState(), null, null, i), TintedBlock.REGISTRY.stream().map(Block::asItem).filter(i -> i != Items.AIR).toArray(Item[]::new)); ColorProviderRegistry.ITEM.register((stack, i) -> i > 0 ? -1 : ((DyeableItem)stack.getItem()).getColor(stack), UItems.FRIENDSHIP_BRACELET); - BuiltinItemRendererRegistry.INSTANCE.register(UItems.FILLED_JAR, (stack, mode, matrices, vertices, light, overlay) -> { - - ItemRenderer renderer = MinecraftClient.getInstance().getItemRenderer(); - - ChameleonItem item = (ChameleonItem)stack.getItem(); - - // Reset stuff done in the beforelands - matrices.pop(); - - if (mode == ModelTransformationMode.GUI) { - DiffuseLighting.disableGuiDepthLighting(); - } - - VertexConsumerProvider.Immediate immediate = MinecraftClient.getInstance().getBufferBuilders().getEntityVertexConsumers(); - ClientWorld world = MinecraftClient.getInstance().world; - - if (item.hasAppearance(stack)) { - matrices.push(); - if (mode.isFirstPerson()) { - matrices.translate(0.05, 0.06, 0.06); - } else if (mode == ModelTransformationMode.HEAD) { - matrices.translate(0, 0.4, 0); - } else if (mode == ModelTransformationMode.GROUND - || mode == ModelTransformationMode.THIRD_PERSON_LEFT_HAND || mode == ModelTransformationMode.THIRD_PERSON_RIGHT_HAND) { - matrices.translate(0, 0.06, 0); - } - // GUI, FIXED, NONE - translate(0, 0, 0) - //matrices.scale(0.5F, 0.5F, 0.5F); - - float scale = 0.5F; - matrices.scale(scale, scale, scale); - - ItemStack appearance = item.getAppearanceStack(stack); - renderer.renderItem(appearance, mode, light, overlay, matrices, immediate, world, 0); - matrices.pop(); - } - renderer.renderItem(item.createAppearanceStack(stack, UItems.EMPTY_JAR), mode, light, OverlayTexture.DEFAULT_UV, matrices, vertices, world, 0); - - if (mode == ModelTransformationMode.GUI) { - DiffuseLighting.enableGuiDepthLighting(); - } - matrices.push(); - - }); - BuiltinItemRendererRegistry.INSTANCE.register(UItems.CLOUD_BED, (stack, mode, matrices, vertices, light, overlay) -> { - MinecraftClient.getInstance().getBlockEntityRenderDispatcher().renderEntity(((CloudBedItem)stack.getItem()).getRenderEntity(), matrices, vertices, light, overlay); - }); - PolearmRenderer.register(UItems.WOODEN_POLEARM); - PolearmRenderer.register(UItems.STONE_POLEARM); - PolearmRenderer.register(UItems.IRON_POLEARM); - PolearmRenderer.register(UItems.GOLDEN_POLEARM); - PolearmRenderer.register(UItems.DIAMOND_POLEARM); - PolearmRenderer.register(UItems.NETHERITE_POLEARM); - ModelPredicateProviderRegistry.register(UItems.GEMSTONE, new Identifier("affinity"), (stack, world, entity, seed) -> { - return EnchantableItem.isEnchanted(stack) ? EnchantableItem.getSpellKey(stack).getAffinity().getAlignment() : 0; - }); - ModelPredicateProviderRegistry.register(UItems.ROCK_CANDY, new Identifier("count"), (stack, world, entity, seed) -> { - return stack.getCount() / (float)stack.getMaxCount(); - }); - ColorProviderRegistry.ITEM.register((stack, i) -> { - return i > 0 || !EnchantableItem.isEnchanted(stack) ? -1 : EnchantableItem.getSpellKey(stack).getColor(); - }, UItems.GEMSTONE); - ColorProviderRegistry.ITEM.register((stack, i) -> { - if (i == 1 && EnchantableItem.isEnchanted(stack)) { - return EnchantableItem.getSpellKey(stack).getColor(); - } - return -1; - }, UItems.MAGIC_STAFF); - - BlockColorProvider tintedProvider = (state, view, pos, color) -> { - if (view == null || pos == null) { - color = FoliageColors.getDefaultColor(); - } else { - color = BiomeColors.getFoliageColor(view, pos); - } - - if (state.getBlock() instanceof TintedBlock block) { - return block.getTint(state, view, pos, color); - } - - return color; - }; - - ColorProviderRegistry.BLOCK.register(tintedProvider, TintedBlock.REGISTRY.stream().toArray(Block[]::new)); - ColorProviderRegistry.ITEM.register((stack, i) -> { - return tintedProvider.getColor(Block.getBlockFromItem(stack.getItem()).getDefaultState(), null, null, i); - }, TintedBlock.REGISTRY.stream().map(Block::asItem).filter(i -> i != Items.AIR).toArray(Item[]::new)); + ColorProviderRegistry.ITEM.register((stack, i) -> i > 0 || !EnchantableItem.isEnchanted(stack) ? -1 : EnchantableItem.getSpellKey(stack).getColor(), UItems.GEMSTONE); + ColorProviderRegistry.ITEM.register((stack, i) -> i == 1 && EnchantableItem.isEnchanted(stack) ? EnchantableItem.getSpellKey(stack).getColor() : -1, UItems.MAGIC_STAFF); BlockRenderLayerMap.INSTANCE.putBlocks(RenderLayer.getCutout(), UBlocks.TRANSLUCENT_BLOCKS.stream().toArray(Block[]::new)); BlockRenderLayerMap.INSTANCE.putBlocks(RenderLayer.getTranslucent(), UBlocks.SEMI_TRANSPARENT_BLOCKS.stream().toArray(Block[]::new)); @@ -190,6 +116,73 @@ public interface URenderers { SpellRendererFactory.bootstrap(); } + private static void register(DynamicItemRenderer renderer, ItemConvertible...items) { + for (ItemConvertible item : items) { + BuiltinItemRendererRegistry.INSTANCE.register(item, renderer); + } + } + + private static void renderBedItem(ItemStack stack, ModelTransformationMode mode, MatrixStack matrices, VertexConsumerProvider vertices, int light, int overlay) { + MinecraftClient.getInstance().getBlockEntityRenderDispatcher().renderEntity(((CloudBedItem)stack.getItem()).getRenderEntity(), matrices, vertices, light, overlay); + } + + private static void renderJarItem(ItemStack stack, ModelTransformationMode mode, MatrixStack matrices, VertexConsumerProvider vertices, int light, int overlay) { + ItemRenderer renderer = MinecraftClient.getInstance().getItemRenderer(); + + ChameleonItem item = (ChameleonItem)stack.getItem(); + + // Reset stuff done in the beforelands + matrices.pop(); + + if (mode == ModelTransformationMode.GUI) { + DiffuseLighting.disableGuiDepthLighting(); + } + + VertexConsumerProvider.Immediate immediate = MinecraftClient.getInstance().getBufferBuilders().getEntityVertexConsumers(); + ClientWorld world = MinecraftClient.getInstance().world; + + if (item.hasAppearance(stack)) { + matrices.push(); + if (mode.isFirstPerson()) { + matrices.translate(0.05, 0.06, 0.06); + } else if (mode == ModelTransformationMode.HEAD) { + matrices.translate(0, 0.4, 0); + } else if (mode == ModelTransformationMode.GROUND + || mode == ModelTransformationMode.THIRD_PERSON_LEFT_HAND || mode == ModelTransformationMode.THIRD_PERSON_RIGHT_HAND) { + matrices.translate(0, 0.06, 0); + } + // GUI, FIXED, NONE - translate(0, 0, 0) + //matrices.scale(0.5F, 0.5F, 0.5F); + + float scale = 0.5F; + matrices.scale(scale, scale, scale); + + ItemStack appearance = item.getAppearanceStack(stack); + renderer.renderItem(appearance, mode, light, overlay, matrices, immediate, world, 0); + matrices.pop(); + } + renderer.renderItem(item.createAppearanceStack(stack, UItems.EMPTY_JAR), mode, light, OverlayTexture.DEFAULT_UV, matrices, vertices, world, 0); + + if (mode == ModelTransformationMode.GUI) { + DiffuseLighting.enableGuiDepthLighting(); + } + matrices.push(); + } + + private static int getTintedBlockColor(BlockState state, @Nullable BlockRenderView view, @Nullable BlockPos pos, int color) { + if (view == null || pos == null) { + color = FoliageColors.getDefaultColor(); + } else { + color = BiomeColors.getFoliageColor(view, pos); + } + + if (state.getBlock() instanceof TintedBlock block) { + return block.getTint(state, view, pos, color); + } + + return color; + } + static PendingParticleFactory createFactory(ParticleSupplier supplier) { return provider -> (effect, world, x, y, z, dx, dy, dz) -> supplier.get(effect, provider, world, x, y, z, dx, dy, dz); } diff --git a/src/main/java/com/minelittlepony/unicopia/client/render/AccessoryFeatureRenderer.java b/src/main/java/com/minelittlepony/unicopia/client/render/AccessoryFeatureRenderer.java index 94a0a77e..5ef86cf0 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/render/AccessoryFeatureRenderer.java +++ b/src/main/java/com/minelittlepony/unicopia/client/render/AccessoryFeatureRenderer.java @@ -24,8 +24,10 @@ public class AccessoryFeatureRenderer< private static final List> REGISTRY = new ArrayList<>(); - public static void register(FeatureFactory factory) { - REGISTRY.add(factory); + public static void register(FeatureFactory...factories) { + for (var factory : factories) { + REGISTRY.add(factory); + } } private final Iterable> features; diff --git a/src/main/java/com/minelittlepony/unicopia/client/render/PolearmRenderer.java b/src/main/java/com/minelittlepony/unicopia/client/render/PolearmRenderer.java index 6d94f06b..36993336 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/render/PolearmRenderer.java +++ b/src/main/java/com/minelittlepony/unicopia/client/render/PolearmRenderer.java @@ -4,6 +4,7 @@ import net.fabricmc.fabric.api.client.model.ModelLoadingRegistry; import net.fabricmc.fabric.api.client.rendering.v1.BuiltinItemRendererRegistry; import net.fabricmc.fabric.api.client.rendering.v1.BuiltinItemRendererRegistry.DynamicItemRenderer; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.item.ClampedModelPredicateProvider; import net.minecraft.client.item.ModelPredicateProviderRegistry; import net.minecraft.client.model.*; import net.minecraft.client.render.VertexConsumerProvider; @@ -20,19 +21,23 @@ import net.minecraft.util.Identifier; import net.minecraft.util.math.RotationAxis; import net.minecraft.registry.Registries; -public class PolearmRenderer implements DynamicItemRenderer { +public class PolearmRenderer implements DynamicItemRenderer, ClampedModelPredicateProvider { private static final PolearmRenderer INSTANCE = new PolearmRenderer(); private static final Identifier THROWING = new Identifier("throwing"); private final TridentEntityModel model = new TridentEntityModel(getTexturedModelData().createModel()); - public static void register(Item item) { - BuiltinItemRendererRegistry.INSTANCE.register(item, INSTANCE); - ModelPredicateProviderRegistry.register(item, THROWING, (ItemStack stack, ClientWorld world, LivingEntity entity, int seed) -> { - return entity != null && entity.isUsingItem() && entity.getActiveItem() == stack ? 1 : 0; + public static void register(Item...items) { + for (Item item : items) { + BuiltinItemRendererRegistry.INSTANCE.register(item, INSTANCE); + ModelPredicateProviderRegistry.register(item, THROWING, INSTANCE); + } + ModelLoadingRegistry.INSTANCE.registerModelProvider((renderer, out) -> { + for (Item item : items) { + out.accept(getModelId(item)); + } }); - ModelLoadingRegistry.INSTANCE.registerModelProvider((renderer, out) -> out.accept(getModelId(item))); } static ModelIdentifier getModelId(ItemConvertible item) { @@ -52,6 +57,11 @@ public class PolearmRenderer implements DynamicItemRenderer { return TexturedModelData.of(data, 32, 32); } + @Override + public float unclampedCall(ItemStack stack, ClientWorld world, LivingEntity entity, int seed) { + return entity != null && entity.isUsingItem() && entity.getActiveItem() == stack ? 1 : 0; + } + @Override public void render(ItemStack stack, ModelTransformationMode mode, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay) { diff --git a/src/main/java/com/minelittlepony/unicopia/client/render/entity/CloudBedBlockEntityRenderer.java b/src/main/java/com/minelittlepony/unicopia/client/render/entity/CloudBedBlockEntityRenderer.java index 1db8e63d..8a7e5ad8 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/render/entity/CloudBedBlockEntityRenderer.java +++ b/src/main/java/com/minelittlepony/unicopia/client/render/entity/CloudBedBlockEntityRenderer.java @@ -30,8 +30,6 @@ import net.minecraft.util.math.RotationAxis; import net.minecraft.world.World; public class CloudBedBlockEntityRenderer implements BlockEntityRenderer { - private static final Identifier TEXTURE = Unicopia.id("textures/entity/cloud_bed/white.png"); - private final ModelPart bedHead; private final ModelPart bedFoot; @@ -66,9 +64,10 @@ public class CloudBedBlockEntityRenderer implements BlockEntityRendererI4cdWN%-sx52PzZmMxd;Q+` ze((E!-!YF~Y)wsWAJHQML6G+56jK`PJ1VVR8~EMlr&=C%r$M^eZZ;1_+QA1XsR~C_ ziVSS3CgU(wE2I^i`wMKH;8>ASS`St0V80ZOd)AFVhU3^e8D$Ty3Pak%z8E$Fj-z3} z1vdGE&{^ehtbE!9|L8CzC{f=hn=Mu~p~W$+o`m}`LeJqCr^nT}fx`(7!{Pa=4UHNp zNZLcU{t5MaUrtQ4niCV%ZjZ|@X8{BW6wg_1OgTKf*U>4HK1&PWI{y9U!V%hv!QoS)4#jFxrlt#@4}Eiq94IKA^~*0ayVYd; zQ1iUkvr(1O{ITlw-~b=x>NwUlk*k?=EjDg+!~^!h`w89p&%JTr&W}B73J=d+-<{gI zCihzG4(lype}2YA>*CHw@T98P%b$8Pu6}(qqog|H$@-^@t}fWK^F;RAekpv^=#G7d zkL=yW#`jJAa^#Z5k$2xTK20o`(tq`sZ4ohSSL?!vzdu-5TY2Ak^4hu0>!MS`4(j$i z!`p=W^WHhUr(&6-EITZGeO_G2^-?Nt&DgU&d!sqwragK2w+jZ|SFL{Qn=31{-3$A* zp7uCD>B_UE<%8acycD*P+PnAB(9}Njhh(oTS9R!+_n;Ffo%MBDY1!U+|M=?36V;uA zp7U!W2ZbX@RE=y)_oZ9LaH7khAl&hPhY{d%p- zlc~d5mepZ|jv!DdfqHYDK0bgtz5Nu35QYhOMUU+E$u6f_!Q=&3w$G^1z;$)Keh#s13~H(`rRE~Tdo`E(ty{M?GZsz4siPVHHDDG zhW+krPgc+zNz{QX;DDlDcq-oPNG0PMb|@5N$_{sM7bLrxq))atlGRK%WhH1%Q$^tR z2Ha-S^|l9vp_IkKnOtJFqMq4g)F|h3l1r2&E;uA9+|E!qjbb!Tp(HS1sDR;mlmS2w z1i=pUB;N$e?DYD0rw9}%2(FbO4o^v#Xplq{X9NNz2||zZ6cAAcV+Df*NFb1G6Ns@M z8Ac_a)l@45N`g>?ff5-5OQN*MKy65tKv~AXpcn-x2CyVel0*O|0S&?k2)U8Lzkz>UU+_Pa4M8h%mlD{)P-yPy!<<%pciO8PqTKE(Cc9+&~|_d z1{OmpfYW-05Jez}&C$IsyU)*iKtd+u5po5?Gx!Uojtx3$P;+VjG@y6^5{BX!N?3<71a+a;ntVHya02_~`}X?T4m z8U(u@kUWh_EUVN6fkhdZ!>EMg7{vmCXUUiBMV8YO9FD&}6IlaE6C}+jMT$mA-cF)| zou*J+qC`6>>3Ix<3e8LLq8_*5B!@vSvUQpL8UocW;()draFifmJtr9gLs?#gStIg1 z#fUgg(V@!z5>3Qej-X$kiL@lrxB>n?2s}o@K!qX8NQ{W;S&=3%14&>wXkI}6pIlVD zSa(luZeqMnxuVn;*m&J&l0vj#|RJ(89(tdYoc9$;m*U~pOZN2v&dgGjl z=a7jm+$)T)8c@0E*p{2cu><;64M{f;q5o5*Zm~kKKq`Eo>Y6TRn@jW z7m|0<-CA#*d@-tM5^{oN@9axz*WYozx|Tk(o!*~1>Rq?tqwx_79wOH~&ES!!Mku9^W<2 zRD3dW<%zO+txwr=Dt;Z1`TV_u%hweBOFosm{Ki^u^$+WwyiwGB{LxHl;Jws)vyTkm biRZ|}k1ZR%+@XF9os5{1Qcc@NOkMC_^kJcP literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/unicopia/textures/block/carved_cloud_bottom.png b/src/main/resources/assets/unicopia/textures/block/carved_cloud_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..9f731f01ee8bf60e7d305bb9ba767b077c36b554 GIT binary patch literal 5629 zcmeHLe^3)w9$x|iq9WoCdaY<0nNzEq>~40G-94gsBuEsHA_BIa*WJxqTqQq90tqMz zwdbL7DvCG7qUTv>tfDfGKj?{I)pKn9)zdmy^`z)o9e-8P)~cs)Zxen_J9FcV`WMN( zytnUtzn|~#?{0Q!YRcpRVQ+>Z2r|H&XiS51ggion;qSoM&#G7lc0KnB3M3JwCU zhroFo9MYftvKru8{)GCzdIjR6=$I#)lT($18pqUH67pk&mc=nviz{)GB?uP7p!|T1 zT^h+q!7bXeP`{6)`1n+Fe7w@(w2M*>KoDAam2Axb@e`k|w z#ojQ}XAyJ%lo6eze*WQa2bh;F|Fro%$9-Yft>&xSs~1-*Ll+i*zMmeuKXGZ>)G(Ac z&_5ijo4>NoQ=F>Np1QRxV4dxgt;Sg=Ety9*WCmf&76uKfs01g?X_3*#&Knjis9*kI z`{^64!;9vg=8LDrtiX@#S*kD1)>#)noRItRP_XuKmG|)GevuQMe`tC97uO+BlD*`V zd+r80Y5cH@S(1=JQdgy`rQ2>+Xe_ZAj6JvU_>9H_qZe^ww$zMwt-l@`nf1@en9|f# zQ(y3H>Dg^-__s~}Z3%DX&TGo2zMa{(YWL*9CHRnn$OglRdMV&$Ya{{BzqsbQn)t=(NkB--Y%m?2L zc~H>&ysTktzy3{%5~`;5`h=8`#bn;v0|DXTB`pe2ECjFuH>dPkb8IfwYf$-cS-6(BH7cc##68cT z%7S?mZ+8MEsV3DJYVu0?gla;VGS+Dk*)(H9I|RHksOGrc4pyV_csy#4R&94?YjB2P zG#H^F2ozGFt^%8z^P)D_C>g?!VFWJ0DLLGd-KLZ=Io_V)#2lU&hA0!mc%Y+_0UZ|@tMcXL4S*K#ya==; z*A2>SbGbR20Awf#u9hH<9^f>|U^EJWc$8#F3(D*DG|G!Qj2A?a(o&Xg5YwCz%t|h& zyH+xk1ws)zN}zQNiRuL!YC|#v%FsF*#VA10fFboHN%){F0-IoWS~(a_$;xE|jl-7h zJCGgDPD(W!RD>Gq+DXmf+#+N!sFEaGp112DU9y7dZcg?lu48Duj=%{F`U0o@f_!)x z!0CdSC}aA1r;l9@3k!{bj^*S$g#f;NXbT(f1f1LMOt;%}464qq+j*P}%gMsIIV0x= z5VW%or+4(>aTo@>aTmSaB8dh6k6JDsWvoBsiINM-FYs;oD{4B(^nR!~bUdXKMGMhUFfY?Yh9z~c&qN(BY5~dV zQ47P!J%MLXnkO05g5wy)0G?yWmmEcg)e50yMD{c>RwLiPJGxJ-<`@0RPtfg#4{O-J2OlKhbBU(&!KA&op}w#3)7}?fr3j_6 zSI7(bx7S_0?s_2)yby73cJ;dJg*@;=#J$<|(%co+^=bpy;6D-%d~x9=zRZ$eQ}I(L z87_w$&f(Ahp;b!Bc zbovBXbJ=z&v46tAugdStHeNU$u)nCyQ(eM3SK(*(lJQQ>o$;&hP>USi`|ma`YWyx^ z`zIF;T^@IMdV*qA%&`0)-Mh|+LwAg5-KyTPcg@!1rUm7yO>+hfE*`6`E+tnp1`V%J z#07?1tusCivCi9j=Xg%mvMGTh5{KEFLgVNy*U#1KoA+V6#ir1vg19g0Mw&j#9e$&> zw)Ww|gKd@neh=As{`Rhlv`2N%N2RQ7dTQ6sH)dVD7>qvsv7szzTz-()tY~gMI;pUA zO60qhyW2cBD#~j@RVpNWLCCG>YbDnX*lusEWJ-@G-Kbjk59?d>4C4sb)KH}1KjZIZ z?`c$r?k?T4GCXn;@qq4sgsb0~S9|Hom1!fRE7DS8R>tJret(Mb*?wU}ag?X6a`TGeat$%$icU>FDas{Ikc`zPLOssPwBC)rlf+u=-43?oDEf;^97PRL~OcrQ0`sJ?5LI**kPu tE6Wa!QfNoTetYlH*JBxzk-}U1oH7-MZ~SiY9GEPK*_2}3`TGw({2x_3ewP3M literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/unicopia/textures/block/carved_cloud_top.png b/src/main/resources/assets/unicopia/textures/block/carved_cloud_top.png new file mode 100644 index 0000000000000000000000000000000000000000..9e2240e9442cba44edab9e8dc4d3fa767cc53484 GIT binary patch literal 7618 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 YWZmNHZ6}h-fdR_k>FVdQ&MBb@06VhYHvj+t delta 528 zcmeCPy=Xn*ynvylf}xp}p@Efw3ByI1HBuYzdvYoAb|N*}O$0fkUkBz*#;91_rhyZ+91l{~)+v@AAo$wPY3Qh55NyEW^2; zFfcHBdAc};Se!1Me7dOFfXB5zXL^g8!OJE8|5x5snQ6ArMlIn=Yh^{uqO((3gu*Ym zN?l!_{q(1fPBaJ0|A&^-r``VY=97fQRKCO9vuEq5UC0#aGSHY&#uDn<7@YW0{Yqe_ zXh&BO=Z#lVv-fh|W%;qv=KCq-hI$E3)=%?e<({5-b3T^ez1z2FZQGw|GZ_P9r?1<& zK}Y}G)%|svtJo^O`R@|!VRg9{d(0>8^MT`AE*!o%$x`CiyuuzgkLTSpBOX+LdL4g0 zuWEZ{wa@C?>2p3mKUB1m?Odzt@*OkvrtdWOshTy#bGbr`_Fb*>UkwvfW6oKHDL&nF zHb>=bH^)qeX>SeMN?Sy>=Y*v#e=x^6QC9J&ZszsmfM;<``=SdR*E*i+$}{Tx-|3wB z(IGhePHt!Cbd?i_67*kBPtP%Z5PUFIGB5p_V9@I?U!95>-`i^ZVf<3QYTaSMB1>Sf OGkCiCxvX{snr5bJY-Vbjlw_8YmTYJ~`8w}%UJG+`15-mILqh{oQ=`e zwG9j=bMh;o32ip#zrr+GLoim!+$7o1(!fC1%)r!G*TldqQ8zKsGD$Zj#SCaqnwhzA z;^c??-e}r431xGLmDz|WFfcH%C3(BMFnnfs$ndc9*U#?BjZzBr@&cMBf4ar)0HyDF zx;TbdoL(Ayny*?cFKY&5x3;tEK)M-J(t>;TAn^*Ld?4F zVW-%RS&3Bc>S8b}cHugiTe01Rt6Cwo`Ao!f^I`$bDWy*%TNHu}t|@AN64^VCkMTi` z)NI4EH&V`3v-NCRr?Aht-ZK1}D8mC&n~xi=-8a4F*dkJW_vgwv(vfBRW=OA>Xvs5( z%bTKl>Ey(?{@0K7TKJ8x9~bHfxuVK2nI&1a>Mra1jX7srYqo8en7k%|+jXAP8Oee> yT0JLY3^`K&Bz@lA`|ycn^JBA3uGRZLvvch@&%NrJ)ODa&89ZJ6T-G@yGywp5p|ZvR delta 441 zcmZp&++;rCynvyZf{~$>p{bRzF~b+{Q|~t3_uyjUx7)1A-NmGmW|3%QnrM)!YnW_c zp=)Afk*aH%Xl$u#VPcw`W@Mgbo}8LE`8w}%UUL%*b7Ny;b2BqjW6R0idbMh;o32ip#zrwWnolpXY*p}pO9tH*mwj^(N7l!{JxM1({$&*v073u{<_!W5{ zotz1j{^;rA7-DgH?qqMjBL)I4@@o49XP*1(e}M5up~5$_1wRhEthx2rVk6tdNmnOX zZ;KDr^k1L$ z*mtSdzAE0mJ#$5^;K|p4y?+}tIk(JDy+5f^VMXecA778w_ia>tp4hXrP?z7T_r?DG bpY`>GFTY5gToM-w^ge^9tDnm{r-UW|pO3ZS diff --git a/src/main/resources/assets/unicopia/textures/block/cloud_planks.png b/src/main/resources/assets/unicopia/textures/block/cloud_planks.png index b984504f5981d2e0e11591f7eb1829cf4e18a3be..ea02f32c85de92d138c835cf35d33f6231a700d7 100644 GIT binary patch delta 1169 zcmdm`u||8sZ8c*<1w#`nLvt%5QwBx`#s$nkk^zi?6a!Zu!+jvHWilh9Y`tsdYQ8c7 z!7~AK-z-w<+sfs-LLjR(Ox8#5Z<89YXIJ;)2T=tdk~hA3@Mz8I=G6)ubqzaqS!nL^ z==|@^rJH1H@$UHU>i*s34FUSbXJ2(O&dQs;(k13hO8C)v;VcGSbu5BYW~QF;3=)z( ze%-dFW^ebWHRqoHlc~)*m(<{|(q~wIcuS{wN4i;V^Jlxl8KS9Ef6S>kw1iv8z9{zN zkKW>gsg3DvXG^l?S@`IP-HOOe4l^-*l=-M*)ypaRDK=r2`Gwa`gMwb79c_Fke*C8db5&WR+u6c>{j$ponSRV~)ZY7a{guX>{+F_Kb&FVda+t-h>-yeg z)+=vVsP1f*8vg0B$fwE&e|z?6a`W6{YBXKH{h6Jge1l2p)IE%Re2pKOQrDMPl;>CH z|DTun?K^XfXwlplmD+Fy20@n0kcg59UmvUF{LQnN8kkfpQqxkCER&OTEz;7AbWM^C zjdU%H6U}tfk`fI~Qq7Ys(kzW9+p#X^wJF*UL@GN1g3wSdpqFa#FW+6D%b z3)mFUgf`D(yTUZNpCd-a(#*u%$i&=2*TTTkT-PKq%|tgT&D>PiFvT=E%_PM*(IC}m zGC!vm)BpoZD-%nQnG4y|Rm>9242@C^%ylizP0e&olG1=~O-VA=O*S%0F)}nvG%*G$ zMCb)4J)qvr>73adVsC&6h2b;9LxzW)zkYU4ej%t(FV80^xudv31DGE7 zdb&7bg@NJy8-KF4%dG4F%E+!`Jgau^y3jzywyW>fPErwNV0Gk)cW{5!$?9Z% zGBona9L5KaU$dL2-Pk60sJ@J2q0sv4*^}O^I+U!qq4(R?UWVrPJ`5^`#vV+~PE0c- zU-KDESt2i~*|aylI`qn15r>Tr{Xa6u9C&WEdey#AH@W1NkVuWzjXPuY@3#K#Z|AzP zHLJgULv6g(jl}rtt!_e-^bhxHy!1D%e*blw)vfB;+iQ1ZdQ3X*!j`Yv!`@RbFXki> zJoD%G=x0o`)C8Xw%$az9_wV>*qe=7FZg{RsUvII-T!-0{sn>a;v2$3SLeBA1rR7Qd zfsD)xudH>Svt563181w;?aklq=FE0pb3?-X>|us^VS9f6K69-2ON)xld`;0K=RXDn znrF|j^VOQ3d&}4D*4t#6$eB7X!t_5w!cU3Em?Y=hS>s@-~-~Sq_C^dce`O`O3(Rk)O{}`c# a59-%H(LU0pxnl~bjPZ2!b6Mw<&;$VXkl6QGcr0cF#rJo0iXi_0RR910RR9100000x~|Fe0004l zlK}x8f2C3?ie?b$kfA!+MMWHI6^c+H)C#RSn2&xzlZGV4#ZhoAIQX$xb#QUk)xlK| z1V2DrU7QqMq{ROvg%&X$9QWhhy~o`iR`;$>gd)A;$u0&>*>fus`_StyP?w zfAo?fNuc+|aX!X?&@RwwIL`O6W_AiU=F*51eI1CXVz(l@}tAuwK|>~)`a_jUL7@0oUg zKY>_stmR8nqyPX9K50}~bXZMHI%98bvz!8d0wiWLVl!nlH8?F|V`VojG-EI|En+t^ zHZ5afF=H@eHe_WvGcc1s1*Z)+I5IXjGchwUG&wdglk){|4l*!QF*!OjGCDCaD=;yW zaRwj`GB8vzIXW{kIx#UTFfp^A2GjzxISXJ27W<2fk^lez24YJ`L;(K){{a7>y{D6t zuM;4D6cQi{PpZ?$0006KNkl92L{+OLh6YxVLco7|zd0AEe;xznkTJ0N$!JCw;I4 z$285}^;Xq7913}Muw=%Z?)5HuH(ED(lLkJ2Hm)Ol{nov{hjKdl``f!V$)`mhTpP8s zKAbEIGqH^!MX=`SaxPlkl!epEnzA+1?o%lo5~I;>H+Ad<$DF0>%T3Bb4++O&S1(x! z9*?0-8p;w_b)G@3ht4N>!ILMjEj7SEKmoO6L$mzt} z&)sC;$1AtiX#De?^6kH=byDW(l8m`;{@%m#>)~?j>a+84tDerQnQ?2<>5@G>hx=At zTiAM1M;5UUt6*zQos1wNEXxkP^|_C*MJ5;Ro-8T3|7^ZoxS?W3(FPwMgfKcb^}a*W z407e^Y4LmxCGQEhhG|cl-TRd~xVNfy4l7Ge{s(ug8Yvy*=RW`d002ovPDHLkV1g>? B5)S|X diff --git a/src/main/resources/data/unicopia/advancements/recipes/blocks/cloud_brick_slab.json b/src/main/resources/data/unicopia/advancements/recipes/blocks/cloud_brick_slab.json new file mode 100644 index 00000000..88c40580 --- /dev/null +++ b/src/main/resources/data/unicopia/advancements/recipes/blocks/cloud_brick_slab.json @@ -0,0 +1,30 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "unicopia:blocks/cloud_brick_slab" + ] + }, + "criteria": { + "has_ingredients": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { "item": "unicopia:cloud_bricks" } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "unicopia:blocks/cloud_brick_slab" + } + } + }, + "requirements": [ + [ + "has_ingredients", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/advancements/recipes/blocks/cloud_brick_stairs.json b/src/main/resources/data/unicopia/advancements/recipes/blocks/cloud_brick_stairs.json new file mode 100644 index 00000000..25aed1f6 --- /dev/null +++ b/src/main/resources/data/unicopia/advancements/recipes/blocks/cloud_brick_stairs.json @@ -0,0 +1,30 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "unicopia:blocks/cloud_brick_stairs" + ] + }, + "criteria": { + "has_ingredients": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { "item": "unicopia:cloud_bricks" } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "unicopia:blocks/cloud_brick_stairs" + } + } + }, + "requirements": [ + [ + "has_ingredients", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/cloud_planks_slab.json b/src/main/resources/data/unicopia/loot_tables/blocks/cloud_brick_slab.json similarity index 86% rename from src/main/resources/data/unicopia/loot_tables/blocks/cloud_planks_slab.json rename to src/main/resources/data/unicopia/loot_tables/blocks/cloud_brick_slab.json index ae08d3ec..84bc3447 100644 --- a/src/main/resources/data/unicopia/loot_tables/blocks/cloud_planks_slab.json +++ b/src/main/resources/data/unicopia/loot_tables/blocks/cloud_brick_slab.json @@ -7,7 +7,7 @@ "entries": [ { "type": "minecraft:item", - "name": "unicopia:cloud_planks_slab", + "name": "unicopia:cloud_brick_slab", "functions": [ { "add": false, @@ -15,7 +15,7 @@ "function": "minecraft:set_count", "conditions": [ { - "block": "unicopia:cloud_planks_slab", + "block": "unicopia:cloud_brick_slab", "condition": "minecraft:block_state_property", "properties": { "type": "double" diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/cloud_planks_stairs.json b/src/main/resources/data/unicopia/loot_tables/blocks/cloud_brick_stairs.json similarity index 85% rename from src/main/resources/data/unicopia/loot_tables/blocks/cloud_planks_stairs.json rename to src/main/resources/data/unicopia/loot_tables/blocks/cloud_brick_stairs.json index 29999dd7..cd3e6120 100644 --- a/src/main/resources/data/unicopia/loot_tables/blocks/cloud_planks_stairs.json +++ b/src/main/resources/data/unicopia/loot_tables/blocks/cloud_brick_stairs.json @@ -7,7 +7,7 @@ "entries": [ { "type": "minecraft:item", - "name": "unicopia:cloud_planks_stairs" + "name": "unicopia:cloud_brick_stairs" } ], "conditions": [ diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/cloud_bricks.json b/src/main/resources/data/unicopia/loot_tables/blocks/cloud_bricks.json new file mode 100644 index 00000000..bd4602d9 --- /dev/null +++ b/src/main/resources/data/unicopia/loot_tables/blocks/cloud_bricks.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "unicopia:cloud_bricks" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/cloud_plank_slab.json b/src/main/resources/data/unicopia/loot_tables/blocks/cloud_plank_slab.json new file mode 100644 index 00000000..64b9de8c --- /dev/null +++ b/src/main/resources/data/unicopia/loot_tables/blocks/cloud_plank_slab.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "unicopia:cloud_plank_slab", + "functions": [ + { + "add": false, + "count": 2, + "function": "minecraft:set_count", + "conditions": [ + { + "block": "unicopia:cloud_plank_slab", + "condition": "minecraft:block_state_property", + "properties": { + "type": "double" + } + } + ] + } + ] + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/cloud_plank_stairs.json b/src/main/resources/data/unicopia/loot_tables/blocks/cloud_plank_stairs.json new file mode 100644 index 00000000..3fa584df --- /dev/null +++ b/src/main/resources/data/unicopia/loot_tables/blocks/cloud_plank_stairs.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1.0, + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "unicopia:cloud_plank_stairs" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/orange_cloud_bed.json b/src/main/resources/data/unicopia/loot_tables/blocks/orange_cloud_bed.json new file mode 100644 index 00000000..b2b54b29 --- /dev/null +++ b/src/main/resources/data/unicopia/loot_tables/blocks/orange_cloud_bed.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "functions": [ + { + "function": "minecraft:explosion_decay" + } + ], + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "block": "unicopia:orange_cloud_bed", + "condition": "minecraft:block_state_property", + "properties": { + "part": "head" + } + } + ], + "name": "unicopia:orange_cloud_bed" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/cloud_bed.json b/src/main/resources/data/unicopia/loot_tables/blocks/white_cloud_bed.json similarity index 83% rename from src/main/resources/data/unicopia/loot_tables/blocks/cloud_bed.json rename to src/main/resources/data/unicopia/loot_tables/blocks/white_cloud_bed.json index 29561aae..4076dcad 100644 --- a/src/main/resources/data/unicopia/loot_tables/blocks/cloud_bed.json +++ b/src/main/resources/data/unicopia/loot_tables/blocks/white_cloud_bed.json @@ -13,14 +13,14 @@ "type": "minecraft:item", "conditions": [ { - "block": "unicopia:cloud_bed", + "block": "unicopia:white_cloud_bed", "condition": "minecraft:block_state_property", "properties": { "part": "head" } } ], - "name": "unicopia:cloud_bed" + "name": "unicopia:white_cloud_bed" } ], "rolls": 1.0 diff --git a/src/main/resources/data/unicopia/recipes/blocks/cloud_brick_slab.json b/src/main/resources/data/unicopia/recipes/blocks/cloud_brick_slab.json new file mode 100644 index 00000000..9b4480e8 --- /dev/null +++ b/src/main/resources/data/unicopia/recipes/blocks/cloud_brick_slab.json @@ -0,0 +1,12 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "###" + ], + "key": { + "#": [ + { "item": "unicopia:cloud_bricks" } + ] + }, + "result": { "item": "unicopia:cloud_brick_slab", "count": 6 } +} diff --git a/src/main/resources/data/unicopia/recipes/blocks/cloud_brick_stairs.json b/src/main/resources/data/unicopia/recipes/blocks/cloud_brick_stairs.json new file mode 100644 index 00000000..01d2cea2 --- /dev/null +++ b/src/main/resources/data/unicopia/recipes/blocks/cloud_brick_stairs.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "# ", + "## ", + "###" + ], + "key": { + "#": [ + { "item": "unicopia:cloud_bricks" } + ] + }, + "result": { "item": "unicopia:cloud_brick_stairs", "count": 4 } +} diff --git a/src/main/resources/data/unicopia/recipes/blocks/cloud_plank_slab.json b/src/main/resources/data/unicopia/recipes/blocks/cloud_plank_slab.json index f6f99b84..4eca09e0 100644 --- a/src/main/resources/data/unicopia/recipes/blocks/cloud_plank_slab.json +++ b/src/main/resources/data/unicopia/recipes/blocks/cloud_plank_slab.json @@ -8,5 +8,5 @@ { "item": "unicopia:cloud_planks" } ] }, - "result": { "item": "unicopia:cloud_planks_slab", "count": 6 } + "result": { "item": "unicopia:cloud_plank_slab", "count": 6 } } diff --git a/src/main/resources/data/unicopia/recipes/blocks/cloud_plank_stairs.json b/src/main/resources/data/unicopia/recipes/blocks/cloud_plank_stairs.json index 0ff48eb1..82295d31 100644 --- a/src/main/resources/data/unicopia/recipes/blocks/cloud_plank_stairs.json +++ b/src/main/resources/data/unicopia/recipes/blocks/cloud_plank_stairs.json @@ -10,5 +10,5 @@ { "item": "unicopia:cloud_planks" } ] }, - "result": { "item": "unicopia:cloud_planks_stairs", "count": 4 } + "result": { "item": "unicopia:cloud_plank_stairs", "count": 4 } }