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 00000000..c909fdb3 Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/block/palm_door_bottom.png differ 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 00000000..43fd9739 Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/block/palm_door_top.png differ diff --git a/src/main/resources/assets/unicopia/textures/block/palm_trapdoor.png b/src/main/resources/assets/unicopia/textures/block/palm_trapdoor.png new file mode 100644 index 00000000..9935a2bf Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/block/palm_trapdoor.png differ 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 00000000..62e1ab55 Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/entity/boat/palm.png differ diff --git a/src/main/resources/assets/unicopia/textures/entity/chest_boat/palm.png b/src/main/resources/assets/unicopia/textures/entity/chest_boat/palm.png new file mode 100644 index 00000000..1a4601dd Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/entity/chest_boat/palm.png differ 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 00000000..b69100da Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/entity/signs/hanging/palm.png differ 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 00000000..c50a5c3c Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/entity/signs/palm.png differ 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 00000000..fd7bb9ff Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/item/palm_boat.png differ 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 00000000..42010389 Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/item/palm_chest_boat.png differ diff --git a/src/main/resources/assets/unicopia/textures/item/palm_door.png b/src/main/resources/assets/unicopia/textures/item/palm_door.png new file mode 100644 index 00000000..16d7dc94 Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/item/palm_door.png differ 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 00000000..7c2a27c4 Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/item/palm_hanging_sign.png differ 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 00000000..724fa85d Binary files /dev/null and b/src/main/resources/assets/unicopia/textures/item/palm_sign.png differ 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",