From e3bb03f53b8ac621b1b3f251e3ddec6843a73268 Mon Sep 17 00:00:00 2001 From: Sollace Date: Mon, 14 Aug 2023 20:31:33 +0100 Subject: [PATCH] Add the rest of the palm wood set --- .../com/minelittlepony/unicopia/Debug.java | 3 +- .../com/minelittlepony/unicopia/UTags.java | 1 + .../block/BlockEntityTypeSupportHelper.java | 13 ++ .../unicopia/block/UBlocks.java | 30 +++-- .../unicopia/block/UWoodTypes.java | 25 ++++ .../unicopia/client/URenderers.java | 4 + .../render/entity/AirBalloonEntityModel.java | 2 +- .../entity/AirBalloonEntityRenderer.java | 2 +- .../unicopia/entity/AirBalloonEntity.java | 68 +++++++--- .../unicopia/entity/UEntities.java | 1 - .../unicopia/item/BasketItem.java | 10 +- .../minelittlepony/unicopia/item/UItems.java | 35 +++-- .../unicopia/mixin/MixinBlockEntityType.java | 28 ++++ .../unicopia/blockstates/palm_door.json | 124 ++++++++++++++++++ .../blockstates/palm_hanging_sign.json | 7 + .../unicopia/blockstates/palm_sign.json | 7 + .../unicopia/blockstates/palm_trapdoor.json | 58 ++++++++ .../blockstates/palm_wall_hanging_sign.json | 7 + .../unicopia/blockstates/palm_wall_sign.json | 7 + .../resources/assets/unicopia/lang/en_us.json | 8 ++ .../models/block/palm_door_bottom_left.json | 7 + .../block/palm_door_bottom_left_open.json | 7 + .../models/block/palm_door_bottom_right.json | 7 + .../block/palm_door_bottom_right_open.json | 7 + .../models/block/palm_door_top_left.json | 7 + .../models/block/palm_door_top_left_open.json | 7 + .../models/block/palm_door_top_right.json | 7 + .../block/palm_door_top_right_open.json | 7 + .../models/block/palm_hanging_sign.json | 5 + .../unicopia/models/block/palm_sign.json | 5 + .../models/block/palm_trapdoor_bottom.json | 6 + .../models/block/palm_trapdoor_open.json | 6 + .../models/block/palm_trapdoor_top.json | 6 + .../unicopia/models/item/palm_basket.json | 6 + .../unicopia/models/item/palm_boat.json | 6 + .../unicopia/models/item/palm_chest_boat.json | 6 + .../unicopia/models/item/palm_door.json | 6 + .../models/item/palm_hanging_sign.json | 6 + .../unicopia/models/item/palm_sign.json | 6 + .../unicopia/models/item/palm_trapdoor.json | 3 + .../textures/block/palm_door_bottom.png | Bin 0 -> 7089 bytes .../unicopia/textures/block/palm_door_top.png | Bin 0 -> 7095 bytes .../unicopia/textures/block/palm_trapdoor.png | Bin 0 -> 7045 bytes .../unicopia/textures/entity/boat/palm.png | Bin 0 -> 11389 bytes .../textures/entity/chest_boat/palm.png | Bin 0 -> 15392 bytes .../textures/entity/signs/hanging/palm.png | Bin 0 -> 7786 bytes .../unicopia/textures/entity/signs/palm.png | Bin 0 -> 7922 bytes .../unicopia/textures/item/palm_boat.png | Bin 0 -> 6650 bytes .../textures/item/palm_chest_boat.png | Bin 0 -> 6848 bytes .../unicopia/textures/item/palm_door.png | Bin 0 -> 6376 bytes .../textures/item/palm_hanging_sign.png | Bin 0 -> 6484 bytes .../unicopia/textures/item/palm_sign.png | Bin 0 -> 6404 bytes .../minecraft/tags/blocks/standing_signs.json | 6 + .../minecraft/tags/blocks/wall_signs.json | 6 + .../minecraft/tags/blocks/wooden_doors.json | 6 + .../tags/blocks/wooden_trapdoors.json | 6 + .../data/minecraft/tags/items/signs.json | 6 + .../minecraft/tags/items/wooden_doors.json | 6 + .../tags/items/wooden_trapdoors.json | 6 + .../loot_tables/blocks/palm_door.json | 29 ++++ .../loot_tables/blocks/palm_hanging_sign.json | 20 +++ .../loot_tables/blocks/palm_sign.json | 20 +++ .../loot_tables/blocks/palm_trapdoor.json | 20 +++ .../data/unicopia/recipes/palm_basket.json | 18 +++ .../data/unicopia/recipes/palm_boat.json | 16 +++ .../unicopia/recipes/palm_chest_boat.json | 15 +++ .../data/unicopia/recipes/palm_door.json | 18 +++ .../unicopia/recipes/palm_hanging_sign.json | 21 +++ .../data/unicopia/recipes/palm_sign.json | 21 +++ .../data/unicopia/recipes/palm_trapdoor.json | 17 +++ .../data/unicopia/tags/items/baskets.json | 15 +++ src/main/resources/unicopia.mixin.json | 1 + 72 files changed, 786 insertions(+), 50 deletions(-) create mode 100644 src/main/java/com/minelittlepony/unicopia/block/BlockEntityTypeSupportHelper.java create mode 100644 src/main/java/com/minelittlepony/unicopia/block/UWoodTypes.java create mode 100644 src/main/java/com/minelittlepony/unicopia/mixin/MixinBlockEntityType.java create mode 100644 src/main/resources/assets/unicopia/blockstates/palm_door.json create mode 100644 src/main/resources/assets/unicopia/blockstates/palm_hanging_sign.json create mode 100644 src/main/resources/assets/unicopia/blockstates/palm_sign.json create mode 100644 src/main/resources/assets/unicopia/blockstates/palm_trapdoor.json create mode 100644 src/main/resources/assets/unicopia/blockstates/palm_wall_hanging_sign.json create mode 100644 src/main/resources/assets/unicopia/blockstates/palm_wall_sign.json create mode 100644 src/main/resources/assets/unicopia/models/block/palm_door_bottom_left.json create mode 100644 src/main/resources/assets/unicopia/models/block/palm_door_bottom_left_open.json create mode 100644 src/main/resources/assets/unicopia/models/block/palm_door_bottom_right.json create mode 100644 src/main/resources/assets/unicopia/models/block/palm_door_bottom_right_open.json create mode 100644 src/main/resources/assets/unicopia/models/block/palm_door_top_left.json create mode 100644 src/main/resources/assets/unicopia/models/block/palm_door_top_left_open.json create mode 100644 src/main/resources/assets/unicopia/models/block/palm_door_top_right.json create mode 100644 src/main/resources/assets/unicopia/models/block/palm_door_top_right_open.json create mode 100644 src/main/resources/assets/unicopia/models/block/palm_hanging_sign.json create mode 100644 src/main/resources/assets/unicopia/models/block/palm_sign.json create mode 100644 src/main/resources/assets/unicopia/models/block/palm_trapdoor_bottom.json create mode 100644 src/main/resources/assets/unicopia/models/block/palm_trapdoor_open.json create mode 100644 src/main/resources/assets/unicopia/models/block/palm_trapdoor_top.json create mode 100644 src/main/resources/assets/unicopia/models/item/palm_basket.json create mode 100644 src/main/resources/assets/unicopia/models/item/palm_boat.json create mode 100644 src/main/resources/assets/unicopia/models/item/palm_chest_boat.json create mode 100644 src/main/resources/assets/unicopia/models/item/palm_door.json create mode 100644 src/main/resources/assets/unicopia/models/item/palm_hanging_sign.json create mode 100644 src/main/resources/assets/unicopia/models/item/palm_sign.json create mode 100644 src/main/resources/assets/unicopia/models/item/palm_trapdoor.json create mode 100644 src/main/resources/assets/unicopia/textures/block/palm_door_bottom.png create mode 100644 src/main/resources/assets/unicopia/textures/block/palm_door_top.png create mode 100644 src/main/resources/assets/unicopia/textures/block/palm_trapdoor.png create mode 100644 src/main/resources/assets/unicopia/textures/entity/boat/palm.png create mode 100644 src/main/resources/assets/unicopia/textures/entity/chest_boat/palm.png create mode 100644 src/main/resources/assets/unicopia/textures/entity/signs/hanging/palm.png create mode 100644 src/main/resources/assets/unicopia/textures/entity/signs/palm.png create mode 100644 src/main/resources/assets/unicopia/textures/item/palm_boat.png create mode 100644 src/main/resources/assets/unicopia/textures/item/palm_chest_boat.png create mode 100644 src/main/resources/assets/unicopia/textures/item/palm_door.png create mode 100644 src/main/resources/assets/unicopia/textures/item/palm_hanging_sign.png create mode 100644 src/main/resources/assets/unicopia/textures/item/palm_sign.png create mode 100644 src/main/resources/data/minecraft/tags/blocks/standing_signs.json create mode 100644 src/main/resources/data/minecraft/tags/blocks/wall_signs.json create mode 100644 src/main/resources/data/minecraft/tags/blocks/wooden_doors.json create mode 100644 src/main/resources/data/minecraft/tags/blocks/wooden_trapdoors.json create mode 100644 src/main/resources/data/minecraft/tags/items/signs.json create mode 100644 src/main/resources/data/minecraft/tags/items/wooden_doors.json create mode 100644 src/main/resources/data/minecraft/tags/items/wooden_trapdoors.json create mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/palm_door.json create mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/palm_hanging_sign.json create mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/palm_sign.json create mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/palm_trapdoor.json create mode 100644 src/main/resources/data/unicopia/recipes/palm_basket.json create mode 100644 src/main/resources/data/unicopia/recipes/palm_boat.json create mode 100644 src/main/resources/data/unicopia/recipes/palm_chest_boat.json create mode 100644 src/main/resources/data/unicopia/recipes/palm_door.json create mode 100644 src/main/resources/data/unicopia/recipes/palm_hanging_sign.json create mode 100644 src/main/resources/data/unicopia/recipes/palm_sign.json create mode 100644 src/main/resources/data/unicopia/recipes/palm_trapdoor.json create mode 100644 src/main/resources/data/unicopia/tags/items/baskets.json diff --git a/src/main/java/com/minelittlepony/unicopia/Debug.java b/src/main/java/com/minelittlepony/unicopia/Debug.java index b4a19934..6773ab2a 100644 --- a/src/main/java/com/minelittlepony/unicopia/Debug.java +++ b/src/main/java/com/minelittlepony/unicopia/Debug.java @@ -1,5 +1,6 @@ package com.minelittlepony.unicopia; +import com.minelittlepony.unicopia.entity.AirBalloonEntity; import com.minelittlepony.unicopia.entity.UEntities; import net.minecraft.entity.vehicle.BoatEntity; @@ -20,7 +21,7 @@ public interface Debug { try { for (var type : BoatEntity.Type.values()) { var balloon = UEntities.AIR_BALLOON.create(world); - balloon.setBasketType(type); + balloon.setBasketType(AirBalloonEntity.BasketType.of(type)); balloon.asItem(); } } catch (Throwable t) { diff --git a/src/main/java/com/minelittlepony/unicopia/UTags.java b/src/main/java/com/minelittlepony/unicopia/UTags.java index 233e0d57..7ba3f51b 100644 --- a/src/main/java/com/minelittlepony/unicopia/UTags.java +++ b/src/main/java/com/minelittlepony/unicopia/UTags.java @@ -27,6 +27,7 @@ public interface UTags { TagKey APPLE_SEEDS = item("apple_seeds"); TagKey ACORNS = item("acorns"); + TagKey BASKETS = item("baskets"); TagKey GLASS_PANES = block("glass_panes"); TagKey GLASS_BLOCKS = block("glass_blocks"); diff --git a/src/main/java/com/minelittlepony/unicopia/block/BlockEntityTypeSupportHelper.java b/src/main/java/com/minelittlepony/unicopia/block/BlockEntityTypeSupportHelper.java new file mode 100644 index 00000000..3bfc8b05 --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/block/BlockEntityTypeSupportHelper.java @@ -0,0 +1,13 @@ +package com.minelittlepony.unicopia.block; + +import net.minecraft.block.Block; +import net.minecraft.block.entity.BlockEntityType; + +public interface BlockEntityTypeSupportHelper { + + static BlockEntityTypeSupportHelper of(BlockEntityType type) { + return (BlockEntityTypeSupportHelper)type; + } + + BlockEntityTypeSupportHelper addSupportedBlocks(Block... blocks); +} diff --git a/src/main/java/com/minelittlepony/unicopia/block/UBlocks.java b/src/main/java/com/minelittlepony/unicopia/block/UBlocks.java index 02e927e4..6e7d3437 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/UBlocks.java +++ b/src/main/java/com/minelittlepony/unicopia/block/UBlocks.java @@ -7,12 +7,16 @@ import com.minelittlepony.unicopia.Unicopia; import com.minelittlepony.unicopia.item.UItems; import com.minelittlepony.unicopia.item.group.ItemGroupRegistry; import com.minelittlepony.unicopia.server.world.UTreeGen; +import com.terraformersmc.terraform.boat.api.TerraformBoatType; +import com.terraformersmc.terraform.boat.api.TerraformBoatTypeRegistry; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.registry.FlammableBlockRegistry; import net.fabricmc.fabric.api.registry.StrippableBlockRegistry; import net.minecraft.block.*; import net.minecraft.block.AbstractBlock.Settings; +import net.minecraft.block.entity.BlockEntityType; +import net.minecraft.block.enums.Instrument; import net.minecraft.block.piston.PistonBehavior; import net.minecraft.item.*; import net.minecraft.sound.BlockSoundGroup; @@ -59,15 +63,14 @@ public interface UBlocks { Block PALM_SLAB = register("palm_slab", new SlabBlock(Settings.create().mapColor(PALM_PLANKS.getDefaultMapColor()).strength(2, 3).sounds(BlockSoundGroup.WOOD).pistonBehavior(PistonBehavior.NORMAL)), ItemGroups.BUILDING_BLOCKS); Block PALM_FENCE = register("palm_fence", new FenceBlock(Settings.create().mapColor(PALM_PLANKS.getDefaultMapColor()).strength(2, 3).sounds(BlockSoundGroup.WOOD).pistonBehavior(PistonBehavior.NORMAL)), ItemGroups.BUILDING_BLOCKS); Block PALM_FENCE_GATE = register("palm_fence_gate", new FenceGateBlock(Settings.create().mapColor(PALM_PLANKS.getDefaultMapColor()).strength(2, 3).sounds(BlockSoundGroup.WOOD).pistonBehavior(PistonBehavior.NORMAL), WoodType.OAK), ItemGroups.BUILDING_BLOCKS); - // Block PALM_DOOR = register("palm_door", new DoorBlock(Settings.of(Material.WOOD, PALM_PLANKS.getDefaultMapColor()).strength(3.0f).sounds(BlockSoundGroup.WOOD).nonOpaque(), SoundEvents.BLOCK_WOODEN_DOOR_CLOSE, SoundEvents.BLOCK_WOODEN_DOOR_OPEN), ItemGroups.BUILDING_BLOCKS); - // Block PALM_TRAPDOOR = register("palm_trapdoor", new TrapdoorBlock(Settings.of(Material.WOOD, PALM_PLANKS.getDefaultMapColor()).strength(3.0f).sounds(BlockSoundGroup.WOOD).nonOpaque().allowsSpawning(UBlocks::never), SoundEvents.BLOCK_WOODEN_TRAPDOOR_CLOSE, SoundEvents.BLOCK_WOODEN_TRAPDOOR_OPEN), ItemGroups.BUILDING_BLOCKS); + Block PALM_DOOR = register("palm_door", new DoorBlock(Settings.create().mapColor(PALM_PLANKS.getDefaultMapColor()).instrument(Instrument.BASS).strength(3.0f).nonOpaque().burnable().pistonBehavior(PistonBehavior.DESTROY), UWoodTypes.PALM.setType()), ItemGroups.FUNCTIONAL); + Block PALM_TRAPDOOR = register("palm_trapdoor", new TrapdoorBlock(Settings.create().mapColor(PALM_PLANKS.getDefaultMapColor()).instrument(Instrument.BASS).strength(3).nonOpaque().allowsSpawning(BlockConstructionUtils::never).burnable(), UWoodTypes.PALM.setType()), ItemGroups.FUNCTIONAL); Block PALM_PRESSURE_PLATE = register("palm_pressure_plate", new PressurePlateBlock(PressurePlateBlock.ActivationRule.EVERYTHING, Settings.create().mapColor(PALM_PLANKS.getDefaultMapColor()).noCollision().strength(0.5f).sounds(BlockSoundGroup.WOOD).pistonBehavior(PistonBehavior.DESTROY), BlockSetType.OAK), ItemGroups.BUILDING_BLOCKS); Block PALM_BUTTON = register("palm_button", BlockConstructionUtils.woodenButton(), ItemGroups.BUILDING_BLOCKS); - // Block PALM_SIGN = register("palm_sign", new SignBlock(Settings.of(Material.WOOD).noCollision().strength(1.0f).sounds(BlockSoundGroup.WOOD), PALM_SIGN_TYPE), ItemGroups.BUILDING_BLOCKS); - // - // Block PALM_WALL_SIGN = register("palm_wall_sign", new WallSignBlock(Settings.of(Material.WOOD).noCollision().strength(1.0f).sounds(BlockSoundGroup.WOOD).dropsLike(PALM_SIGN), PALM_SIGN_TYPE), ItemGroups.BUILDING_BLOCKS); - // Block PALM_HANGING_SIGN = register("palm_hanging_sign", new HangingSignBlock(AbstractBlock.Settings.of(Material.WOOD, PALM_LOG.getDefaultMapColor()).noCollision().strength(1.0f).sounds(BlockSoundGroup.HANGING_SIGN).requires(FeatureFlags.UPDATE_1_20), PALM_SIGN_TYPE), ItemGroups.BUILDING_BLOCKS); - // Block PALM_WALL_HANGING_SIGN = register("palm_wall_hanging_sign", new WallHangingSignBlock(AbstractBlock.Settings.of(Material.WOOD, PALM_LOG.getDefaultMapColor()).noCollision().strength(1.0f).sounds(BlockSoundGroup.HANGING_SIGN).requires(FeatureFlags.UPDATE_1_20).dropsLike(PALM_HANGING_SIGN), PALM_SIGN_TYPE), ItemGroups.BUILDING_BLOCKS); + Block PALM_SIGN = register("palm_sign", new SignBlock(Settings.create().mapColor(PALM_PLANKS.getDefaultMapColor()).solid().instrument(Instrument.BASS).noCollision().strength(1).burnable().sounds(BlockSoundGroup.WOOD), UWoodTypes.PALM), ItemGroups.FUNCTIONAL); + Block PALM_WALL_SIGN = register("palm_wall_sign", new WallSignBlock(Settings.create().mapColor(PALM_PLANKS.getDefaultMapColor()).solid().instrument(Instrument.BASS).noCollision().strength(1).dropsLike(PALM_SIGN).burnable(), UWoodTypes.PALM)); + Block PALM_HANGING_SIGN = register("palm_hanging_sign", new HangingSignBlock(Settings.create().mapColor(PALM_LOG.getDefaultMapColor()).solid().instrument(Instrument.BASS).noCollision().strength(1).burnable(), UWoodTypes.PALM), ItemGroups.FUNCTIONAL); + Block PALM_WALL_HANGING_SIGN = register("palm_wall_hanging_sign", new WallHangingSignBlock(Settings.create().mapColor(PALM_LOG.getDefaultMapColor()).solid().instrument(Instrument.BASS).noCollision().strength(1.0f).burnable().dropsLike(PALM_HANGING_SIGN), UWoodTypes.PALM)); Block PALM_LEAVES = register("palm_leaves", BlockConstructionUtils.createLeavesBlock(BlockSoundGroup.GRASS), ItemGroups.BUILDING_BLOCKS); @@ -114,7 +117,7 @@ public interface UBlocks { } static T register(Identifier id, T block, RegistryKey group) { - UItems.register(id, ItemGroupRegistry.register(new BlockItem(block, new Item.Settings()), group)); + BlockItem.BLOCK_ITEMS.put(block, UItems.register(id, ItemGroupRegistry.register(new BlockItem(block, new Item.Settings()), group))); return register(id, block); } @@ -122,13 +125,16 @@ public interface UBlocks { if (block instanceof TintedBlock) { TintedBlock.REGISTRY.add(block); } - if (block instanceof SaplingBlock || block instanceof SproutBlock || block instanceof FruitBlock || block instanceof CropBlock) { + if (block instanceof SaplingBlock || block instanceof SproutBlock || block instanceof FruitBlock || block instanceof CropBlock || block instanceof DoorBlock || block instanceof TrapdoorBlock) { TRANSLUCENT_BLOCKS.add(block); } return Registry.register(Registries.BLOCK, id, block); } static void bootstrap() { + BlockEntityTypeSupportHelper.of(BlockEntityType.SIGN).addSupportedBlocks(PALM_SIGN, PALM_WALL_SIGN); + BlockEntityTypeSupportHelper.of(BlockEntityType.HANGING_SIGN).addSupportedBlocks(PALM_HANGING_SIGN, PALM_WALL_HANGING_SIGN); + StrippableBlockRegistry.register(ZAP_LOG, STRIPPED_ZAP_LOG); StrippableBlockRegistry.register(PALM_LOG, STRIPPED_PALM_LOG); StrippableBlockRegistry.register(ZAP_WOOD, STRIPPED_ZAP_WOOD); @@ -145,5 +151,11 @@ public interface UBlocks { FlammableBlockRegistry.getDefaultInstance().add(BANANAS, 5, 20); UBlockEntities.bootstrap(); + + Registry.register(TerraformBoatTypeRegistry.INSTANCE, Unicopia.id("palm"), new TerraformBoatType.Builder() + .planks(PALM_PLANKS.asItem()) + .item(UItems.PALM_BOAT) + .build()); + } } diff --git a/src/main/java/com/minelittlepony/unicopia/block/UWoodTypes.java b/src/main/java/com/minelittlepony/unicopia/block/UWoodTypes.java new file mode 100644 index 00000000..5f090ce9 --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/block/UWoodTypes.java @@ -0,0 +1,25 @@ +package com.minelittlepony.unicopia.block; + +import com.minelittlepony.unicopia.Unicopia; +import com.terraformersmc.terraform.boat.api.TerraformBoatType; +import com.terraformersmc.terraform.boat.api.TerraformBoatTypeRegistry; + +import net.fabricmc.fabric.api.object.builder.v1.block.type.BlockSetTypeBuilder; +import net.fabricmc.fabric.api.object.builder.v1.block.type.WoodTypeBuilder; +import net.minecraft.block.WoodType; +import net.minecraft.registry.RegistryKey; +import net.minecraft.util.Identifier; + +public interface UWoodTypes { + WoodType PALM = register("palm"); + RegistryKey PALM_BOAT_TYPE = TerraformBoatTypeRegistry.createKey(Unicopia.id("palm")); + + static WoodType register(String name) { + Identifier id = Unicopia.id(name); + return new WoodTypeBuilder().register(id, new BlockSetTypeBuilder().register(id)); + } + + + + +} diff --git a/src/main/java/com/minelittlepony/unicopia/client/URenderers.java b/src/main/java/com/minelittlepony/unicopia/client/URenderers.java index ae5c192c..dbfc4433 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/URenderers.java +++ b/src/main/java/com/minelittlepony/unicopia/client/URenderers.java @@ -1,5 +1,6 @@ package com.minelittlepony.unicopia.client; +import com.minelittlepony.unicopia.Unicopia; import com.minelittlepony.unicopia.block.*; import com.minelittlepony.unicopia.client.particle.ChangelingMagicParticle; import com.minelittlepony.unicopia.client.particle.CloudsEscapingParticle; @@ -20,6 +21,7 @@ import com.minelittlepony.unicopia.item.ChameleonItem; import com.minelittlepony.unicopia.item.EnchantableItem; import com.minelittlepony.unicopia.item.UItems; import com.minelittlepony.unicopia.particle.UParticles; +import com.terraformersmc.terraform.boat.api.client.TerraformBoatClientHelper; import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap; import net.fabricmc.fabric.api.client.particle.v1.ParticleFactoryRegistry; @@ -154,6 +156,8 @@ public interface URenderers { BlockRenderLayerMap.INSTANCE.putBlocks(RenderLayer.getCutout(), UBlocks.TRANSLUCENT_BLOCKS.stream().toArray(Block[]::new)); // for lava boats BlockRenderLayerMap.INSTANCE.putFluids(RenderLayer.getTranslucent(), Fluids.LAVA, Fluids.FLOWING_LAVA); + + TerraformBoatClientHelper.registerModelLayers(Unicopia.id("palm"), false); } static PendingParticleFactory createFactory(ParticleSupplier supplier) { diff --git a/src/main/java/com/minelittlepony/unicopia/client/render/entity/AirBalloonEntityModel.java b/src/main/java/com/minelittlepony/unicopia/client/render/entity/AirBalloonEntityModel.java index afb09e71..b42bea8e 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/render/entity/AirBalloonEntityModel.java +++ b/src/main/java/com/minelittlepony/unicopia/client/render/entity/AirBalloonEntityModel.java @@ -96,7 +96,7 @@ public class AirBalloonEntityModel extends EntityModel { if (isBalloon) { root.pivotY = 0; root.pivotX = inflation * MathHelper.cos(limbSwingAmount + entity.age / 5F) / 4F; - if (entity.getBasketType() == BoatEntity.Type.BAMBOO) { + if (entity.getBasketType().isOf(BoatEntity.Type.BAMBOO)) { ropes.forEach(rope -> rope.pivotY = 0); } else { ropes.forEach(ModelPart::resetTransform); diff --git a/src/main/java/com/minelittlepony/unicopia/client/render/entity/AirBalloonEntityRenderer.java b/src/main/java/com/minelittlepony/unicopia/client/render/entity/AirBalloonEntityRenderer.java index f7b3e3c0..3b74caaa 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/render/entity/AirBalloonEntityRenderer.java +++ b/src/main/java/com/minelittlepony/unicopia/client/render/entity/AirBalloonEntityRenderer.java @@ -41,7 +41,7 @@ public class AirBalloonEntityRenderer extends MobEntityRenderer ASCENDING = DataTracker.registerData(AirBalloonEntity.class, TrackedDataHandlerRegistry.BOOLEAN); private static final TrackedData BOOSTING = DataTracker.registerData(AirBalloonEntity.class, TrackedDataHandlerRegistry.INTEGER); private static final TrackedData INFLATION = DataTracker.registerData(AirBalloonEntity.class, TrackedDataHandlerRegistry.INTEGER); - private static final TrackedData BASKET_TYPE = DataTracker.registerData(AirBalloonEntity.class, TrackedDataHandlerRegistry.INTEGER); + private static final TrackedData BASKET_TYPE = DataTracker.registerData(AirBalloonEntity.class, TrackedDataHandlerRegistry.STRING); private static final TrackedData BALLOON_DESIGN = DataTracker.registerData(AirBalloonEntity.class, TrackedDataHandlerRegistry.INTEGER); private boolean prevBoosting; @@ -59,16 +68,16 @@ public class AirBalloonEntity extends MobEntity implements EntityCollisions.Comp dataTracker.startTracking(ASCENDING, false); dataTracker.startTracking(BOOSTING, 0); dataTracker.startTracking(INFLATION, 0); - dataTracker.startTracking(BASKET_TYPE, 0); + dataTracker.startTracking(BASKET_TYPE, ""); dataTracker.startTracking(BALLOON_DESIGN, 0); } - public BoatEntity.Type getBasketType() { - return BoatEntity.Type.getType(dataTracker.get(BASKET_TYPE)); + public BasketType getBasketType() { + return BasketType.REGISTRY.get(Identifier.tryParse(dataTracker.get(BASKET_TYPE))); } - public void setBasketType(BoatEntity.Type type) { - dataTracker.set(BASKET_TYPE, type.ordinal()); + public void setBasketType(BasketType type) { + dataTracker.set(BASKET_TYPE, type.id().toString()); } public BalloonDesign getDesign() { @@ -367,17 +376,7 @@ public class AirBalloonEntity extends MobEntity implements EntityCollisions.Comp } public Item asItem() { - return switch (getBasketType()) { - case SPRUCE -> UItems.SPRUCE_BASKET; - case BIRCH -> UItems.BIRCH_BASKET; - case JUNGLE -> UItems.JUNGLE_BASKET; - case ACACIA -> UItems.ACACIA_BASKET; - case CHERRY -> UItems.CHERRY_BASKET; - case DARK_OAK -> UItems.DARK_OAK_BASKET; - case MANGROVE -> UItems.MANGROVE_BASKET; - case BAMBOO -> UItems.BAMBOO_BASKET; - default -> UItems.OAK_BASKET; - }; + return Objects.requireNonNull(BasketItem.REGISTRY.get(getBasketType())); } @Override @@ -465,7 +464,7 @@ public class AirBalloonEntity extends MobEntity implements EntityCollisions.Comp double wallheight = box.maxY + 0.7; double wallThickness = 0.7; - if (getBasketType() != BoatEntity.Type.BAMBOO) { + if (!getBasketType().isOf(BoatEntity.Type.BAMBOO)) { // front left (next to door) output.accept(VoxelShapes.cuboid(new Box(box.minX, box.minY, box.minZ, box.minX + wallThickness + 0.2, wallheight, box.minZ + wallThickness))); // front right (next to door) @@ -489,7 +488,7 @@ public class AirBalloonEntity extends MobEntity implements EntityCollisions.Comp @Override public void readCustomDataFromNbt(NbtCompound compound) { super.readCustomDataFromNbt(compound); - setBasketType(BoatEntity.Type.getType(compound.getString("basketType"))); + setBasketType(BasketType.of(compound.getString("basket"))); setDesign(BalloonDesign.getType(compound.getString("design"))); setAscending(compound.getBoolean("burnerActive")); setBoostTicks(compound.getInt("boostTicks")); @@ -501,7 +500,7 @@ public class AirBalloonEntity extends MobEntity implements EntityCollisions.Comp public void writeCustomDataToNbt(NbtCompound compound) { super.writeCustomDataToNbt(compound); compound.putString("design", getDesign().asString()); - compound.putString("basket", getBasketType().asString()); + compound.putString("basket", getBasketType().id().toString()); compound.putBoolean("burnerActive", isAscending()); compound.putInt("boostTicks", getBoostTicks()); compound.putInt("inflationAmount", getInflation()); @@ -530,6 +529,33 @@ public class AirBalloonEntity extends MobEntity implements EntityCollisions.Comp return CODEC.byId(name, LUNA); } } + + public record BasketType(Identifier id, @Nullable BoatEntity.Type boatType) { + private static final Map REGISTRY = new HashMap<>(); + static { + Arrays.stream(BoatEntity.Type.values()).forEach(BasketType::of); + } + + public boolean isOf(BoatEntity.Type boatType) { + return this.boatType == boatType; + } + + public static BasketType of(String name) { + Identifier id = Identifier.tryParse(name); + if (id == null) { + return of(BoatEntity.Type.OAK); + } + return REGISTRY.get(id); + } + + public static BasketType of(BoatEntity.Type boatType) { + return REGISTRY.computeIfAbsent(new Identifier(boatType.asString()), id -> new BasketType(id, boatType)); + } + + public static BasketType of(RegistryKey id) { + return REGISTRY.computeIfAbsent(id.getValue(), i -> new BasketType(i, null)); + } + } } diff --git a/src/main/java/com/minelittlepony/unicopia/entity/UEntities.java b/src/main/java/com/minelittlepony/unicopia/entity/UEntities.java index 2f242f95..d2d60917 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/UEntities.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/UEntities.java @@ -5,7 +5,6 @@ import java.util.function.Predicate; import com.minelittlepony.unicopia.Unicopia; import com.minelittlepony.unicopia.entity.behaviour.EntityBehaviour; import com.minelittlepony.unicopia.projectile.MagicProjectileEntity; - import net.fabricmc.fabric.api.biome.v1.BiomeModifications; import net.fabricmc.fabric.api.biome.v1.BiomeSelectionContext; import net.fabricmc.fabric.api.biome.v1.BiomeSelectors; diff --git a/src/main/java/com/minelittlepony/unicopia/item/BasketItem.java b/src/main/java/com/minelittlepony/unicopia/item/BasketItem.java index 35ee94f6..d9408802 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/BasketItem.java +++ b/src/main/java/com/minelittlepony/unicopia/item/BasketItem.java @@ -1,5 +1,7 @@ package com.minelittlepony.unicopia.item; +import java.util.HashMap; +import java.util.Map; import java.util.function.Predicate; import org.jetbrains.annotations.Nullable; @@ -11,7 +13,6 @@ import com.minelittlepony.unicopia.util.Dispensable; import net.minecraft.block.DispenserBlock; import net.minecraft.entity.Entity; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.entity.vehicle.BoatEntity; import net.minecraft.item.BoatItem; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -32,12 +33,15 @@ public class BasketItem extends Item implements Dispensable { private static final Predicate RIDERS = EntityPredicates.EXCEPT_SPECTATOR.and(Entity::canHit); private static final double REACH = 5; - private final BoatEntity.Type type; + private final AirBalloonEntity.BasketType type; - public BasketItem(BoatEntity.Type type, Item.Settings settings) { + public static final Map REGISTRY = new HashMap<>(); + + public BasketItem(AirBalloonEntity.BasketType type, Item.Settings settings) { super(settings); this.type = type; DispenserBlock.registerBehavior(this, createDispenserBehaviour()); + REGISTRY.put(type, this); } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/item/UItems.java b/src/main/java/com/minelittlepony/unicopia/item/UItems.java index 4831b95f..55cb4af8 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/UItems.java +++ b/src/main/java/com/minelittlepony/unicopia/item/UItems.java @@ -5,11 +5,14 @@ import java.util.List; import com.minelittlepony.unicopia.*; import com.minelittlepony.unicopia.block.UBlocks; +import com.minelittlepony.unicopia.block.UWoodTypes; +import com.minelittlepony.unicopia.entity.AirBalloonEntity; import com.minelittlepony.unicopia.entity.UEntities; import com.minelittlepony.unicopia.item.enchantment.UEnchantments; import com.minelittlepony.unicopia.item.group.ItemGroupRegistry; import com.minelittlepony.unicopia.item.group.UItemGroups; import com.minelittlepony.unicopia.item.toxin.UFoodComponents; +import com.terraformersmc.terraform.boat.api.item.TerraformBoatItemHelper; import net.minecraft.entity.vehicle.BoatEntity; import net.minecraft.item.*; @@ -43,10 +46,7 @@ public interface UItems { Item MUSIC_DISC_POPULAR = register("music_disc_popular", USounds.RECORD_POPULAR, 112); Item MUSIC_DISC_FUNK = register("music_disc_funk", USounds.RECORD_FUNK, 91); - FriendshipBraceletItem FRIENDSHIP_BRACELET = register("friendship_bracelet", new FriendshipBraceletItem( - new FabricItemSettings() - .rarity(Rarity.UNCOMMON) - ), ItemGroups.TOOLS); + FriendshipBraceletItem FRIENDSHIP_BRACELET = register("friendship_bracelet", new FriendshipBraceletItem(new FabricItemSettings().rarity(Rarity.UNCOMMON)), ItemGroups.TOOLS); Item EMPTY_JAR = register("empty_jar", new JarItem(new Item.Settings().maxCount(16).fireproof(), false, false, false), ItemGroups.FUNCTIONAL); FilledJarItem FILLED_JAR = register("filled_jar", new FilledJarItem(new Item.Settings().maxCount(1))); @@ -118,16 +118,21 @@ public interface UItems { Item BUTTERFLY_SPAWN_EGG = register("butterfly_spawn_egg", new SpawnEggItem(UEntities.BUTTERFLY, 0x222200, 0xaaeeff, new Item.Settings()), ItemGroups.SPAWN_EGGS); Item BUTTERFLY = register("butterfly", new Item(new Item.Settings().food(UFoodComponents.INSECTS)), ItemGroups.FOOD_AND_DRINK); + Item PALM_BOAT = ItemGroupRegistry.register(TerraformBoatItemHelper.registerBoatItem(Unicopia.id("palm_boat"), UWoodTypes.PALM_BOAT_TYPE, false), ItemGroups.FUNCTIONAL); + Item PALM_CHEST_BOAT = ItemGroupRegistry.register(TerraformBoatItemHelper.registerBoatItem(Unicopia.id("palm_chest_boat"), UWoodTypes.PALM_BOAT_TYPE, true), ItemGroups.FUNCTIONAL); + Item SPELLBOOK = register("spellbook", new SpellbookItem(new Item.Settings().maxCount(1).rarity(Rarity.UNCOMMON)), ItemGroups.TOOLS); - Item OAK_BASKET = register("oak_basket", new BasketItem(BoatEntity.Type.OAK, new Item.Settings().maxCount(1)), ItemGroups.TOOLS); - Item SPRUCE_BASKET = register("spruce_basket", new BasketItem(BoatEntity.Type.SPRUCE, new Item.Settings().maxCount(1)), ItemGroups.TOOLS); - Item BIRCH_BASKET = register("birch_basket", new BasketItem(BoatEntity.Type.BIRCH, new Item.Settings().maxCount(1)), ItemGroups.TOOLS); - Item JUNGLE_BASKET = register("jungle_basket", new BasketItem(BoatEntity.Type.JUNGLE, new Item.Settings().maxCount(1)), ItemGroups.TOOLS); - Item ACACIA_BASKET = register("acacia_basket", new BasketItem(BoatEntity.Type.ACACIA, new Item.Settings().maxCount(1)), ItemGroups.TOOLS); - Item CHERRY_BASKET = register("cherry_basket", new BasketItem(BoatEntity.Type.CHERRY, new Item.Settings().maxCount(1)), ItemGroups.TOOLS); - Item DARK_OAK_BASKET = register("dark_oak_basket", new BasketItem(BoatEntity.Type.DARK_OAK, new Item.Settings().maxCount(1)), ItemGroups.TOOLS); - Item MANGROVE_BASKET = register("mangrove_basket", new BasketItem(BoatEntity.Type.MANGROVE, new Item.Settings().maxCount(1)), ItemGroups.TOOLS); - Item BAMBOO_BASKET = register("bamboo_basket", new BasketItem(BoatEntity.Type.BAMBOO, new Item.Settings().maxCount(1)), ItemGroups.TOOLS); + + Item OAK_BASKET = register("oak_basket", new BasketItem(AirBalloonEntity.BasketType.of(BoatEntity.Type.OAK), new Item.Settings().maxCount(1)), ItemGroups.TOOLS); + Item SPRUCE_BASKET = register("spruce_basket", new BasketItem(AirBalloonEntity.BasketType.of(BoatEntity.Type.SPRUCE), new Item.Settings().maxCount(1)), ItemGroups.TOOLS); + Item BIRCH_BASKET = register("birch_basket", new BasketItem(AirBalloonEntity.BasketType.of(BoatEntity.Type.BIRCH), new Item.Settings().maxCount(1)), ItemGroups.TOOLS); + Item JUNGLE_BASKET = register("jungle_basket", new BasketItem(AirBalloonEntity.BasketType.of(BoatEntity.Type.JUNGLE), new Item.Settings().maxCount(1)), ItemGroups.TOOLS); + Item ACACIA_BASKET = register("acacia_basket", new BasketItem(AirBalloonEntity.BasketType.of(BoatEntity.Type.ACACIA), new Item.Settings().maxCount(1)), ItemGroups.TOOLS); + Item CHERRY_BASKET = register("cherry_basket", new BasketItem(AirBalloonEntity.BasketType.of(BoatEntity.Type.CHERRY), new Item.Settings().maxCount(1)), ItemGroups.TOOLS); + Item DARK_OAK_BASKET = register("dark_oak_basket", new BasketItem(AirBalloonEntity.BasketType.of(BoatEntity.Type.DARK_OAK), new Item.Settings().maxCount(1)), ItemGroups.TOOLS); + Item MANGROVE_BASKET = register("mangrove_basket", new BasketItem(AirBalloonEntity.BasketType.of(BoatEntity.Type.MANGROVE), new Item.Settings().maxCount(1)), ItemGroups.TOOLS); + Item BAMBOO_BASKET = register("bamboo_basket", new BasketItem(AirBalloonEntity.BasketType.of(BoatEntity.Type.BAMBOO), new Item.Settings().maxCount(1)), ItemGroups.TOOLS); + Item PALM_BASKET = register("palm_basket", new BasketItem(AirBalloonEntity.BasketType.of(UWoodTypes.PALM_BOAT_TYPE), new Item.Settings().maxCount(1)), ItemGroups.TOOLS); Item GIANT_BALLOON = register("giant_balloon", new HotAirBalloonItem(new Item.Settings().maxCount(1)), ItemGroups.TOOLS); @@ -160,6 +165,9 @@ public interface UItems { } static T register(Identifier id, T item) { + if (item instanceof BlockItem bi && bi.getBlock() == null) { + throw new NullPointerException("Registered block item did not have a block " + id); + } ITEMS.add(item); return Registry.register(Registries.ITEM, id, item); } @@ -183,6 +191,7 @@ public interface UItems { FuelRegistry.INSTANCE.add(BUTTERFLY, 2); FuelRegistry.INSTANCE.add(SPELLBOOK, 9000); FuelRegistry.INSTANCE.add(MEADOWBROOKS_STAFF, 300); + FuelRegistry.INSTANCE.add(UTags.BASKETS, 700); CompostingChanceRegistry.INSTANCE.add(GREEN_APPLE, 0.65F); CompostingChanceRegistry.INSTANCE.add(SWEET_APPLE, 0.65F); diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/MixinBlockEntityType.java b/src/main/java/com/minelittlepony/unicopia/mixin/MixinBlockEntityType.java new file mode 100644 index 00000000..9171bdb4 --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/mixin/MixinBlockEntityType.java @@ -0,0 +1,28 @@ +package com.minelittlepony.unicopia.mixin; + +import java.util.HashSet; +import java.util.Set; + +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Mutable; +import org.spongepowered.asm.mixin.Shadow; + +import com.minelittlepony.unicopia.block.BlockEntityTypeSupportHelper; + +import net.minecraft.block.Block; +import net.minecraft.block.entity.BlockEntityType; + +@Mixin(BlockEntityType.class) +abstract class MixinBlockEntityType implements BlockEntityTypeSupportHelper { + @Shadow + @Mutable + private @Final Set blocks; + + @Override + public BlockEntityTypeSupportHelper addSupportedBlocks(Block...blocks) { + this.blocks = new HashSet<>(this.blocks); + this.blocks.addAll(Set.of(blocks)); + return this; + } +} diff --git a/src/main/resources/assets/unicopia/blockstates/palm_door.json b/src/main/resources/assets/unicopia/blockstates/palm_door.json new file mode 100644 index 00000000..8f0edd6d --- /dev/null +++ b/src/main/resources/assets/unicopia/blockstates/palm_door.json @@ -0,0 +1,124 @@ +{ + "variants": { + "facing=east,half=lower,hinge=left,open=false": { + "model": "unicopia:block/palm_door_bottom_left" + }, + "facing=east,half=lower,hinge=left,open=true": { + "model": "unicopia:block/palm_door_bottom_left_open", + "y": 90 + }, + "facing=east,half=lower,hinge=right,open=false": { + "model": "unicopia:block/palm_door_bottom_right" + }, + "facing=east,half=lower,hinge=right,open=true": { + "model": "unicopia:block/palm_door_bottom_right_open", + "y": 270 + }, + "facing=east,half=upper,hinge=left,open=false": { + "model": "unicopia:block/palm_door_top_left" + }, + "facing=east,half=upper,hinge=left,open=true": { + "model": "unicopia:block/palm_door_top_left_open", + "y": 90 + }, + "facing=east,half=upper,hinge=right,open=false": { + "model": "unicopia:block/palm_door_top_right" + }, + "facing=east,half=upper,hinge=right,open=true": { + "model": "unicopia:block/palm_door_top_right_open", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=false": { + "model": "unicopia:block/palm_door_bottom_left", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=true": { + "model": "unicopia:block/palm_door_bottom_left_open" + }, + "facing=north,half=lower,hinge=right,open=false": { + "model": "unicopia:block/palm_door_bottom_right", + "y": 270 + }, + "facing=north,half=lower,hinge=right,open=true": { + "model": "unicopia:block/palm_door_bottom_right_open", + "y": 180 + }, + "facing=north,half=upper,hinge=left,open=false": { + "model": "unicopia:block/palm_door_top_left", + "y": 270 + }, + "facing=north,half=upper,hinge=left,open=true": { + "model": "unicopia:block/palm_door_top_left_open" + }, + "facing=north,half=upper,hinge=right,open=false": { + "model": "unicopia:block/palm_door_top_right", + "y": 270 + }, + "facing=north,half=upper,hinge=right,open=true": { + "model": "unicopia:block/palm_door_top_right_open", + "y": 180 + }, + "facing=south,half=lower,hinge=left,open=false": { + "model": "unicopia:block/palm_door_bottom_left", + "y": 90 + }, + "facing=south,half=lower,hinge=left,open=true": { + "model": "unicopia:block/palm_door_bottom_left_open", + "y": 180 + }, + "facing=south,half=lower,hinge=right,open=false": { + "model": "unicopia:block/palm_door_bottom_right", + "y": 90 + }, + "facing=south,half=lower,hinge=right,open=true": { + "model": "unicopia:block/palm_door_bottom_right_open" + }, + "facing=south,half=upper,hinge=left,open=false": { + "model": "unicopia:block/palm_door_top_left", + "y": 90 + }, + "facing=south,half=upper,hinge=left,open=true": { + "model": "unicopia:block/palm_door_top_left_open", + "y": 180 + }, + "facing=south,half=upper,hinge=right,open=false": { + "model": "unicopia:block/palm_door_top_right", + "y": 90 + }, + "facing=south,half=upper,hinge=right,open=true": { + "model": "unicopia:block/palm_door_top_right_open" + }, + "facing=west,half=lower,hinge=left,open=false": { + "model": "unicopia:block/palm_door_bottom_left", + "y": 180 + }, + "facing=west,half=lower,hinge=left,open=true": { + "model": "unicopia:block/palm_door_bottom_left_open", + "y": 270 + }, + "facing=west,half=lower,hinge=right,open=false": { + "model": "unicopia:block/palm_door_bottom_right", + "y": 180 + }, + "facing=west,half=lower,hinge=right,open=true": { + "model": "unicopia:block/palm_door_bottom_right_open", + "y": 90 + }, + "facing=west,half=upper,hinge=left,open=false": { + "model": "unicopia:block/palm_door_top_left", + "y": 180 + }, + "facing=west,half=upper,hinge=left,open=true": { + "model": "unicopia:block/palm_door_top_left_open", + "y": 270 + }, + "facing=west,half=upper,hinge=right,open=false": { + "model": "unicopia:block/palm_door_top_right", + "y": 180 + }, + "facing=west,half=upper,hinge=right,open=true": { + "model": "unicopia:block/palm_door_top_right_open", + "y": 90 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/blockstates/palm_hanging_sign.json b/src/main/resources/assets/unicopia/blockstates/palm_hanging_sign.json new file mode 100644 index 00000000..c49365e4 --- /dev/null +++ b/src/main/resources/assets/unicopia/blockstates/palm_hanging_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "unicopia:block/palm_hanging_sign" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/blockstates/palm_sign.json b/src/main/resources/assets/unicopia/blockstates/palm_sign.json new file mode 100644 index 00000000..9805da33 --- /dev/null +++ b/src/main/resources/assets/unicopia/blockstates/palm_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "unicopia:block/palm_sign" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/blockstates/palm_trapdoor.json b/src/main/resources/assets/unicopia/blockstates/palm_trapdoor.json new file mode 100644 index 00000000..5753984b --- /dev/null +++ b/src/main/resources/assets/unicopia/blockstates/palm_trapdoor.json @@ -0,0 +1,58 @@ +{ + "variants": { + "facing=east,half=bottom,open=false": { + "model": "unicopia:block/palm_trapdoor_bottom" + }, + "facing=east,half=bottom,open=true": { + "model": "unicopia:block/palm_trapdoor_open", + "y": 90 + }, + "facing=east,half=top,open=false": { + "model": "unicopia:block/palm_trapdoor_top" + }, + "facing=east,half=top,open=true": { + "model": "unicopia:block/palm_trapdoor_open", + "y": 90 + }, + "facing=north,half=bottom,open=false": { + "model": "unicopia:block/palm_trapdoor_bottom" + }, + "facing=north,half=bottom,open=true": { + "model": "unicopia:block/palm_trapdoor_open" + }, + "facing=north,half=top,open=false": { + "model": "unicopia:block/palm_trapdoor_top" + }, + "facing=north,half=top,open=true": { + "model": "unicopia:block/palm_trapdoor_open" + }, + "facing=south,half=bottom,open=false": { + "model": "unicopia:block/palm_trapdoor_bottom" + }, + "facing=south,half=bottom,open=true": { + "model": "unicopia:block/palm_trapdoor_open", + "y": 180 + }, + "facing=south,half=top,open=false": { + "model": "unicopia:block/palm_trapdoor_top" + }, + "facing=south,half=top,open=true": { + "model": "unicopia:block/palm_trapdoor_open", + "y": 180 + }, + "facing=west,half=bottom,open=false": { + "model": "unicopia:block/palm_trapdoor_bottom" + }, + "facing=west,half=bottom,open=true": { + "model": "unicopia:block/palm_trapdoor_open", + "y": 270 + }, + "facing=west,half=top,open=false": { + "model": "unicopia:block/palm_trapdoor_top" + }, + "facing=west,half=top,open=true": { + "model": "unicopia:block/palm_trapdoor_open", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/blockstates/palm_wall_hanging_sign.json b/src/main/resources/assets/unicopia/blockstates/palm_wall_hanging_sign.json new file mode 100644 index 00000000..c49365e4 --- /dev/null +++ b/src/main/resources/assets/unicopia/blockstates/palm_wall_hanging_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "unicopia:block/palm_hanging_sign" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/blockstates/palm_wall_sign.json b/src/main/resources/assets/unicopia/blockstates/palm_wall_sign.json new file mode 100644 index 00000000..9805da33 --- /dev/null +++ b/src/main/resources/assets/unicopia/blockstates/palm_wall_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "unicopia:block/palm_sign" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/lang/en_us.json b/src/main/resources/assets/unicopia/lang/en_us.json index 596ec0b3..5ca86ce0 100644 --- a/src/main/resources/assets/unicopia/lang/en_us.json +++ b/src/main/resources/assets/unicopia/lang/en_us.json @@ -32,7 +32,11 @@ "item.unicopia.dark_oak_basket": "Dark Oak Basket", "item.unicopia.mangrove_basket": "Mangrove Basket", "item.unicopia.bamboo_basket": "Bamboo Basket", + "item.unicopia.palm_basket": "Palm Basket", "item.unicopia.giant_balloon": "Giant Balloon", + + "item.unicopia.palm_boat": "Palm Boat", + "item.unicopia.palm_chest_boat": "Palm Boat with Chest", "item.unicopia.spellbook": "Spellbook", "emi.category.unicopia.spellbook": "Spellbook", @@ -165,6 +169,10 @@ "block.unicopia.stripped_palm_log": "Stripped Palm Log", "block.unicopia.stripped_palm_wood": "Stripped Palm Wood", "block.unicopia.palm_leaves": "Palm Leaves", + "block.unicopia.palm_door": "Palm Door", + "block.unicopia.palm_trapdoor": "Palm Trapdoor", + "block.unicopia.palm_sign": "Palm Sign", + "block.unicopia.palm_hanging_sign": "Palm Hanging Sign", "block.unicopia.apple_pie": "Apple Pie", "block.unicopia.weather_vane": "Weather Vane", diff --git a/src/main/resources/assets/unicopia/models/block/palm_door_bottom_left.json b/src/main/resources/assets/unicopia/models/block/palm_door_bottom_left.json new file mode 100644 index 00000000..8719bc87 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/palm_door_bottom_left.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_bottom_left", + "textures": { + "bottom": "unicopia:block/palm_door_bottom", + "top": "unicopia:block/palm_door_top" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/block/palm_door_bottom_left_open.json b/src/main/resources/assets/unicopia/models/block/palm_door_bottom_left_open.json new file mode 100644 index 00000000..e6ec3a9a --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/palm_door_bottom_left_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_bottom_left_open", + "textures": { + "bottom": "unicopia:block/palm_door_bottom", + "top": "unicopia:block/palm_door_top" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/block/palm_door_bottom_right.json b/src/main/resources/assets/unicopia/models/block/palm_door_bottom_right.json new file mode 100644 index 00000000..c7756ab7 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/palm_door_bottom_right.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_bottom_right", + "textures": { + "bottom": "unicopia:block/palm_door_bottom", + "top": "unicopia:block/palm_door_top" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/block/palm_door_bottom_right_open.json b/src/main/resources/assets/unicopia/models/block/palm_door_bottom_right_open.json new file mode 100644 index 00000000..c8ca22b8 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/palm_door_bottom_right_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_bottom_right_open", + "textures": { + "bottom": "unicopia:block/palm_door_bottom", + "top": "unicopia:block/palm_door_top" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/block/palm_door_top_left.json b/src/main/resources/assets/unicopia/models/block/palm_door_top_left.json new file mode 100644 index 00000000..ad96f313 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/palm_door_top_left.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_top_left", + "textures": { + "bottom": "unicopia:block/palm_door_bottom", + "top": "unicopia:block/palm_door_top" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/block/palm_door_top_left_open.json b/src/main/resources/assets/unicopia/models/block/palm_door_top_left_open.json new file mode 100644 index 00000000..cc5854f9 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/palm_door_top_left_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_top_left_open", + "textures": { + "bottom": "unicopia:block/palm_door_bottom", + "top": "unicopia:block/palm_door_top" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/block/palm_door_top_right.json b/src/main/resources/assets/unicopia/models/block/palm_door_top_right.json new file mode 100644 index 00000000..e77082de --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/palm_door_top_right.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_top_right", + "textures": { + "bottom": "unicopia:block/palm_door_bottom", + "top": "unicopia:block/palm_door_top" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/block/palm_door_top_right_open.json b/src/main/resources/assets/unicopia/models/block/palm_door_top_right_open.json new file mode 100644 index 00000000..44dee227 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/palm_door_top_right_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/door_top_right_open", + "textures": { + "bottom": "unicopia:block/palm_door_bottom", + "top": "unicopia:block/palm_door_top" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/block/palm_hanging_sign.json b/src/main/resources/assets/unicopia/models/block/palm_hanging_sign.json new file mode 100644 index 00000000..0186191b --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/palm_hanging_sign.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "unicopia:block/stripped_palm_log" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/block/palm_sign.json b/src/main/resources/assets/unicopia/models/block/palm_sign.json new file mode 100644 index 00000000..3cd27604 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/palm_sign.json @@ -0,0 +1,5 @@ +{ + "textures": { + "particle": "unicopia:block/palm_planks" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/block/palm_trapdoor_bottom.json b/src/main/resources/assets/unicopia/models/block/palm_trapdoor_bottom.json new file mode 100644 index 00000000..d24be742 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/palm_trapdoor_bottom.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_trapdoor_bottom", + "textures": { + "texture": "unicopia:block/palm_trapdoor" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/block/palm_trapdoor_open.json b/src/main/resources/assets/unicopia/models/block/palm_trapdoor_open.json new file mode 100644 index 00000000..2b33f3c9 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/palm_trapdoor_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_trapdoor_open", + "textures": { + "texture": "unicopia:block/palm_trapdoor" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/block/palm_trapdoor_top.json b/src/main/resources/assets/unicopia/models/block/palm_trapdoor_top.json new file mode 100644 index 00000000..58ef2dc7 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/palm_trapdoor_top.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_trapdoor_top", + "textures": { + "texture": "unicopia:block/palm_trapdoor" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/item/palm_basket.json b/src/main/resources/assets/unicopia/models/item/palm_basket.json new file mode 100644 index 00000000..dea1c792 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/item/palm_basket.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "unicopia:item/palm_basket" + } +} diff --git a/src/main/resources/assets/unicopia/models/item/palm_boat.json b/src/main/resources/assets/unicopia/models/item/palm_boat.json new file mode 100644 index 00000000..4ff232f9 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/item/palm_boat.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "unicopia:item/palm_boat" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/item/palm_chest_boat.json b/src/main/resources/assets/unicopia/models/item/palm_chest_boat.json new file mode 100644 index 00000000..f6ea0dc0 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/item/palm_chest_boat.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "unicopia:item/palm_chest_boat" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/item/palm_door.json b/src/main/resources/assets/unicopia/models/item/palm_door.json new file mode 100644 index 00000000..37111865 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/item/palm_door.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "unicopia:item/palm_door" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/item/palm_hanging_sign.json b/src/main/resources/assets/unicopia/models/item/palm_hanging_sign.json new file mode 100644 index 00000000..c3fed3ae --- /dev/null +++ b/src/main/resources/assets/unicopia/models/item/palm_hanging_sign.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "unicopia:item/palm_hanging_sign" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/item/palm_sign.json b/src/main/resources/assets/unicopia/models/item/palm_sign.json new file mode 100644 index 00000000..9c622f85 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/item/palm_sign.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "unicopia:item/palm_sign" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/models/item/palm_trapdoor.json b/src/main/resources/assets/unicopia/models/item/palm_trapdoor.json new file mode 100644 index 00000000..32193397 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/item/palm_trapdoor.json @@ -0,0 +1,3 @@ +{ + "parent": "unicopia:block/palm_trapdoor_bottom" +} \ No newline at end of file diff --git a/src/main/resources/assets/unicopia/textures/block/palm_door_bottom.png b/src/main/resources/assets/unicopia/textures/block/palm_door_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..c909fdb38fd790e321d6fb4cb5cfbdb25c3f26d6 GIT binary patch literal 7089 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/unicopia/textures/block/palm_door_top.png b/src/main/resources/assets/unicopia/textures/block/palm_door_top.png new file mode 100644 index 0000000000000000000000000000000000000000..43fd973918046cbfee27e13c375911c004890783 GIT binary patch literal 7095 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 TZ&sZ^|MXDf~1aFx+=2b7WxfyCVaGf>@!va29)P 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 NH0sH5^)Xqc{|WZalYIaH literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/unicopia/textures/entity/boat/palm.png b/src/main/resources/assets/unicopia/textures/entity/boat/palm.png new file mode 100644 index 0000000000000000000000000000000000000000..62e1ab55529f7fda222ec12ae69072ca3c929558 GIT binary patch literal 11389 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/unicopia/textures/entity/signs/hanging/palm.png b/src/main/resources/assets/unicopia/textures/entity/signs/hanging/palm.png new file mode 100644 index 0000000000000000000000000000000000000000..b69100da7f25b76ae715702833617517681e242c GIT binary patch literal 7786 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 WH93y%_4h^p^*GzFvMaIqHT9pSClHzd literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/unicopia/textures/entity/signs/palm.png b/src/main/resources/assets/unicopia/textures/entity/signs/palm.png new file mode 100644 index 0000000000000000000000000000000000000000..c50a5c3c6fb76e74ba9b035a677fd7592a782730 GIT binary patch literal 7922 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/unicopia/textures/item/palm_boat.png b/src/main/resources/assets/unicopia/textures/item/palm_boat.png new file mode 100644 index 0000000000000000000000000000000000000000..fd7bb9ff075afd33079fbe53cfafcb7539d05d08 GIT binary patch literal 6650 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 E7ds~r`Tzg` literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/unicopia/textures/item/palm_chest_boat.png b/src/main/resources/assets/unicopia/textures/item/palm_chest_boat.png new file mode 100644 index 0000000000000000000000000000000000000000..42010389dc57358af73601301532c3524780d274 GIT binary patch literal 6848 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/unicopia/textures/item/palm_hanging_sign.png b/src/main/resources/assets/unicopia/textures/item/palm_hanging_sign.png new file mode 100644 index 0000000000000000000000000000000000000000..7c2a27c4040930b04bfc0bf4840b259937ad503f GIT binary patch literal 6484 zcmeHKd0bOh7Jf+x2@w$_2r5d9TTrtnW)V=9AhCi3P|?=vBYA;nHj}WnbVTchE2!04 zwUVMJ#jS!?ovETCZf#v!D_T32s#xu!t+uuuq31rfXq|DKPX9CfZr;hg=X~dU-?{Jc z?!x4x(Op@+SQv(N)h5KHz||iOrZ;?t{n&zI81pqEU2D{8hhR*Y15b(NFbF#yhtKdi)WSSXeeiZU@(U}tbb@IPZ2&$ zB$ml!VS`nXN=XFpmLL#{kB^UU7vGSsT|*@OLiJ-J8MmVRZqA8h@k|jp{|C)4jZ4wGh@ZuK;@Ye&T5FKpoED&SXo9 zO3Il1V|LXBrJTJpK$_v0?ZfI39MZGbz(Ip~;X`Ed;R>Zn9UG^KADy5blbSYu!o>7R zll2C|n3-jo?sR464Km2&_{!c$Y_~lo`3-N6K zv@&~)R{-#$dU?^j7>E~znu~}Bc+vZby}L*282HRUuB3>`jwvbIRqNAVnsO&7!*Q0? zV}R_-fp-x#lG%SpZ1(@etbxSCblb*r7dJ)3uz2p0 zt%uHPg3cAxYS_u%g>2oZzUwvYiQ;Q3&T81FXG0z)xW-q|U{ZUV4(mPd=`>hDHe2^n zeW?*b<42!fsnb|r!2y7AHch9=$REUK>(X?mVX^F1uWE27bQ(70yiODJ=JmM%fnd-G z{gADj+_&sqlzKe;?jvXGCT*BhqhY6&zIt23o={)KhG@@Gfc*N-fC$PH24fRSbOWXI z4Dz&d(qPey+?Jt&dq0N4AYj6~4w8i21IL-w{|1VLAy+%CKcx8&>&UlI52C8Bzj4!D zOay}5hb(Mef;SjF+XeD-7xU!Mq**>1KGM4H(Uf+u(mZ7{Xw2Q7$a9NiUi>UMn&rJc;M zf1=Z5_eKi#f$jCu=D~klY+V=xyKQW@H$j8Xe>&_TRkzA5?&9ka(zhW&>@?^AtJyZgzpajX&sIKI>%a32rau>go>fsfY4YB$QkJP&rrdHlL1@x0Wvr#=Vd)lm( zI!*erRZz+&KYPx1+kDeqeCV#{)YI%IakN7<(o>!VKFyAZD&}qLmdt}K^Jhm(1NMSl z!-0P*ubX0HleMw29J|A2G?@tu%Uf4i5}9yhRA}AQ)Vh>Pzi&B>%gfXanoY_JL)c|8 zTY@HMi}u~?vbK6axM1n*8MU>`>MG|f+P&Rx`)tkwO5?4@@|)a&&BE~N1$VE$ANKus zk>7nmiFx;=Y`2h-wVyDgXvM3i1~Fa^IOKnr$rVU)KUL4YJI%4MQ z>BH{tJa?qZoOM)sR5$*7_|)V3svKW5R*mmn&&EP0{dMEc^;E?c7KeDk2TD9p{x734|< zHbw0KZ0n*h$EbOhso|T*{mFdiD%fdU6EWataIAy zv)B_8JK(L(HWfe*VIFQ5iUlH}#Uk{KaJn=(0Mb^_6C<2y`F28>LO5;N4n3jCA*`Inn|-~toii1ov9h0FEEov9LP1G=& zn0|qNUdyYs7vMAHR`9)siecKvXj~n=|gqq1VFA zvu&L8%bVqM6N;x9c8y6-)|FJPPLu@)UfIPQVJ%(A>yhLXw2W-}SCcR8ZxPgKI~+Ws zqW;QRI`+Z$yZ0SfvgR%NsQFhEZ?PTuIQ9LcCC5Ib+3pW5JuzTIlTNUHiK|zAkBPze zO5ba!S~qCo{GMkyD^48W^3cb)IB-#&d(Gxi^S2&tK2fx8ueovNqGeatZx7&=2KoMW z)PKzl--_+A{ZTB>+^_iN>YkRx>z6~uJ4EHC{oG4F zTN{^tmX^P1T3vO(*95)%T<^(Y)52>uPjUy)lBZN|`gK8Ajc{ANmcHZIta;8Q>mQVc zzRY@fX8P#mDX$G3v3AkYjjZa20?WbQZhu_PdTGLx=IgIg2VN{)U1uG#7M*#unxwex IG1F%M4)X1si2wiq literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/unicopia/textures/item/palm_sign.png b/src/main/resources/assets/unicopia/textures/item/palm_sign.png new file mode 100644 index 0000000000000000000000000000000000000000..724fa85dec45ab662e10df13fbea026a8a17180b GIT binary patch literal 6404 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/data/minecraft/tags/blocks/standing_signs.json b/src/main/resources/data/minecraft/tags/blocks/standing_signs.json new file mode 100644 index 00000000..cad58ba6 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/standing_signs.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "unicopia:palm_sign" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/wall_signs.json b/src/main/resources/data/minecraft/tags/blocks/wall_signs.json new file mode 100644 index 00000000..24175517 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/wall_signs.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "unicopia:palm_wall_sign" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/wooden_doors.json b/src/main/resources/data/minecraft/tags/blocks/wooden_doors.json new file mode 100644 index 00000000..e7071e6f --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/wooden_doors.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "unicopia:palm_door" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/wooden_trapdoors.json b/src/main/resources/data/minecraft/tags/blocks/wooden_trapdoors.json new file mode 100644 index 00000000..cddd514f --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/wooden_trapdoors.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "unicopia:palm_trapdoor" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/items/signs.json b/src/main/resources/data/minecraft/tags/items/signs.json new file mode 100644 index 00000000..cad58ba6 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/items/signs.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "unicopia:palm_sign" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/items/wooden_doors.json b/src/main/resources/data/minecraft/tags/items/wooden_doors.json new file mode 100644 index 00000000..e7071e6f --- /dev/null +++ b/src/main/resources/data/minecraft/tags/items/wooden_doors.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "unicopia:palm_door" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/items/wooden_trapdoors.json b/src/main/resources/data/minecraft/tags/items/wooden_trapdoors.json new file mode 100644 index 00000000..cddd514f --- /dev/null +++ b/src/main/resources/data/minecraft/tags/items/wooden_trapdoors.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "unicopia:palm_trapdoor" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/palm_door.json b/src/main/resources/data/unicopia/loot_tables/blocks/palm_door.json new file mode 100644 index 00000000..f913d7ab --- /dev/null +++ b/src/main/resources/data/unicopia/loot_tables/blocks/palm_door.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "block": "unicopia:palm_door", + "condition": "minecraft:block_state_property", + "properties": { + "half": "lower" + } + } + ], + "name": "unicopia:palm_door" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/palm_hanging_sign.json b/src/main/resources/data/unicopia/loot_tables/blocks/palm_hanging_sign.json new file mode 100644 index 00000000..093e13be --- /dev/null +++ b/src/main/resources/data/unicopia/loot_tables/blocks/palm_hanging_sign.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "unicopia:palm_sign" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/palm_sign.json b/src/main/resources/data/unicopia/loot_tables/blocks/palm_sign.json new file mode 100644 index 00000000..093e13be --- /dev/null +++ b/src/main/resources/data/unicopia/loot_tables/blocks/palm_sign.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "unicopia:palm_sign" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/palm_trapdoor.json b/src/main/resources/data/unicopia/loot_tables/blocks/palm_trapdoor.json new file mode 100644 index 00000000..e9a45c67 --- /dev/null +++ b/src/main/resources/data/unicopia/loot_tables/blocks/palm_trapdoor.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "unicopia:palm_trapdoor" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/palm_basket.json b/src/main/resources/data/unicopia/recipes/palm_basket.json new file mode 100644 index 00000000..9a442dd4 --- /dev/null +++ b/src/main/resources/data/unicopia/recipes/palm_basket.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "basket", + "key": { + "#": { + "item": "unicopia:palm_planks" + } + }, + "pattern": [ + "# #", + "# #", + "###" + ], + "result": { + "count": 1, + "item": "unicopia:palm_basket" + } +} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/palm_boat.json b/src/main/resources/data/unicopia/recipes/palm_boat.json new file mode 100644 index 00000000..e47257d7 --- /dev/null +++ b/src/main/resources/data/unicopia/recipes/palm_boat.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "boat", + "key": { + "#": { + "item": "unicopia:palm_planks" + } + }, + "pattern": [ + "# #", + "###" + ], + "result": { + "item": "unicopia:palm_boat" + } +} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/palm_chest_boat.json b/src/main/resources/data/unicopia/recipes/palm_chest_boat.json new file mode 100644 index 00000000..f0d38ec2 --- /dev/null +++ b/src/main/resources/data/unicopia/recipes/palm_chest_boat.json @@ -0,0 +1,15 @@ +{ + "type": "minecraft:crafting_shapeless", + "group": "chest_boat", + "ingredients": [ + { + "item": "minecraft:chest" + }, + { + "item": "unicopia:palm_boat" + } + ], + "result": { + "item": "unicopia:palm_chest_boat" + } +} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/palm_door.json b/src/main/resources/data/unicopia/recipes/palm_door.json new file mode 100644 index 00000000..f91ce24b --- /dev/null +++ b/src/main/resources/data/unicopia/recipes/palm_door.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_door", + "key": { + "#": { + "item": "unicopia:palm_planks" + } + }, + "pattern": [ + "##", + "##", + "##" + ], + "result": { + "count": 3, + "item": "unicopia:palm_door" + } +} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/palm_hanging_sign.json b/src/main/resources/data/unicopia/recipes/palm_hanging_sign.json new file mode 100644 index 00000000..1eb8892a --- /dev/null +++ b/src/main/resources/data/unicopia/recipes/palm_hanging_sign.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_sign", + "key": { + "#": { + "item": "unicopia:palm_planks" + }, + "|": { + "item": "minecraft:chain" + } + }, + "pattern": [ + "| |", + "###", + "###" + ], + "result": { + "count": 3, + "item": "unicopia:palm_hanging_sign" + } +} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/palm_sign.json b/src/main/resources/data/unicopia/recipes/palm_sign.json new file mode 100644 index 00000000..aff51be7 --- /dev/null +++ b/src/main/resources/data/unicopia/recipes/palm_sign.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_sign", + "key": { + "#": { + "item": "unicopia:palm_planks" + }, + "X": { + "item": "minecraft:stick" + } + }, + "pattern": [ + "###", + "###", + " X " + ], + "result": { + "count": 3, + "item": "unicopia:palm_sign" + } +} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/palm_trapdoor.json b/src/main/resources/data/unicopia/recipes/palm_trapdoor.json new file mode 100644 index 00000000..16fda6df --- /dev/null +++ b/src/main/resources/data/unicopia/recipes/palm_trapdoor.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "wooden_trapdoor", + "key": { + "#": { + "item": "unicopia:palm_planks" + } + }, + "pattern": [ + "###", + "###" + ], + "result": { + "count": 2, + "item": "unicopia:palm_trapdoor" + } +} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/tags/items/baskets.json b/src/main/resources/data/unicopia/tags/items/baskets.json new file mode 100644 index 00000000..41231c85 --- /dev/null +++ b/src/main/resources/data/unicopia/tags/items/baskets.json @@ -0,0 +1,15 @@ +{ + "replace": false, + "values": [ + "unicopia:oak_basket", + "unicopia:spruce_basket", + "unicopia:birch_basket", + "unicopia:jungle_basket", + "unicopia:acacia_basket", + "unicopia:cherry_basket", + "unicopia:dark_oak_basket", + "unicopia:mangrove_basket", + "unicopia:bamboo_basket", + "unicopia:palm_basket" + ] +} diff --git a/src/main/resources/unicopia.mixin.json b/src/main/resources/unicopia.mixin.json index 323dda19..47dda76f 100644 --- a/src/main/resources/unicopia.mixin.json +++ b/src/main/resources/unicopia.mixin.json @@ -9,6 +9,7 @@ "MixinBlazeEntity", "MixinBlock", "MixinBlockEntity", + "MixinBlockEntityType", "MixinBlockItem", "MixinBoatEntity", "MixinBrain",