From 23266d2f3a900117fda7b2ab8a088ee9494584ee Mon Sep 17 00:00:00 2001 From: Sollace Date: Sat, 21 Oct 2023 20:30:13 +0100 Subject: [PATCH] Some refinements. Cloud block items now float on other cloud blocks --- .../java/com/minelittlepony/unicopia/EquineContext.java | 4 ++++ src/main/java/com/minelittlepony/unicopia/UTags.java | 1 + .../minelittlepony/unicopia/block/cloud/CloudBlock.java | 3 +-- .../com/minelittlepony/unicopia/entity/ItemImpl.java | 5 +++++ .../unicopia/entity/mob/AirBalloonEntity.java | 8 +++++++- .../unicopia/mixin/MixinEntityShapeContext.java | 5 +++++ src/main/resources/data/unicopia/tags/blocks/clouds.json | 1 + .../resources/data/unicopia/tags/items/cloud_beds.json | 6 ++++++ .../resources/data/unicopia/tags/items/cloud_slabs.json | 8 ++++++++ .../resources/data/unicopia/tags/items/cloud_stairs.json | 8 ++++++++ src/main/resources/data/unicopia/tags/items/clouds.json | 9 +++++++++ .../tags/{blocks => items}/floats_on_clouds.json | 0 .../data/unicopia/tags/items/groups/pegasus.json | 4 ++++ 13 files changed, 59 insertions(+), 3 deletions(-) create mode 100644 src/main/resources/data/unicopia/tags/items/cloud_beds.json create mode 100644 src/main/resources/data/unicopia/tags/items/cloud_slabs.json create mode 100644 src/main/resources/data/unicopia/tags/items/cloud_stairs.json create mode 100644 src/main/resources/data/unicopia/tags/items/clouds.json rename src/main/resources/data/unicopia/tags/{blocks => items}/floats_on_clouds.json (100%) diff --git a/src/main/java/com/minelittlepony/unicopia/EquineContext.java b/src/main/java/com/minelittlepony/unicopia/EquineContext.java index e031b81c..bea77626 100644 --- a/src/main/java/com/minelittlepony/unicopia/EquineContext.java +++ b/src/main/java/com/minelittlepony/unicopia/EquineContext.java @@ -21,6 +21,10 @@ public interface EquineContext { return 0; } + default boolean collidesWithClouds() { + return getCompositeRace().any(Race::canInteractWithClouds); + } + static EquineContext of(ShapeContext context) { if (context == ShapeContext.absent()) { return Unicopia.SIDE.getPony().map(EquineContext.class::cast).orElse(ABSENT); diff --git a/src/main/java/com/minelittlepony/unicopia/UTags.java b/src/main/java/com/minelittlepony/unicopia/UTags.java index 9fc81d2c..fb924166 100644 --- a/src/main/java/com/minelittlepony/unicopia/UTags.java +++ b/src/main/java/com/minelittlepony/unicopia/UTags.java @@ -26,6 +26,7 @@ public interface UTags { TagKey CHANGELING_EDIBLE = item("food_types/changeling_edible"); TagKey SPOOKED_MOB_DROPS = item("spooked_mob_drops"); TagKey IS_DELIVERED_AGGRESSIVELY = item("is_delivered_aggressively"); + TagKey FLOATS_ON_CLOUDS = item("floats_on_clouds"); TagKey POLEARMS = item("polearms"); TagKey APPLE_SEEDS = item("apple_seeds"); diff --git a/src/main/java/com/minelittlepony/unicopia/block/cloud/CloudBlock.java b/src/main/java/com/minelittlepony/unicopia/block/cloud/CloudBlock.java index e64a34b9..812f157a 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/cloud/CloudBlock.java +++ b/src/main/java/com/minelittlepony/unicopia/block/cloud/CloudBlock.java @@ -3,7 +3,6 @@ package com.minelittlepony.unicopia.block.cloud; import org.jetbrains.annotations.Nullable; import com.minelittlepony.unicopia.EquineContext; -import com.minelittlepony.unicopia.Race; import com.minelittlepony.unicopia.entity.player.Pony; import net.minecraft.block.Block; @@ -176,7 +175,7 @@ public class CloudBlock extends Block { } protected boolean canInteract(BlockState state, BlockView world, BlockPos pos, EquineContext context) { - return context.getCompositeRace().any(Race::canInteractWithClouds); + return context.collidesWithClouds(); } @SuppressWarnings("deprecation") diff --git a/src/main/java/com/minelittlepony/unicopia/entity/ItemImpl.java b/src/main/java/com/minelittlepony/unicopia/entity/ItemImpl.java index cdc8ff22..50680348 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/ItemImpl.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/ItemImpl.java @@ -154,6 +154,11 @@ public class ItemImpl implements Equine { entity.getDataTracker().set(ITEM_RACE, Race.REGISTRY.getId(race).toString()); } + @Override + public boolean collidesWithClouds() { + return entity.getStack().isIn(UTags.FLOATS_ON_CLOUDS) || getSpecies().canInteractWithClouds(); + } + @Override public void toNBT(NbtCompound compound) { compound.putString("owner_race", Race.REGISTRY.getId(getSpecies()).toString()); diff --git a/src/main/java/com/minelittlepony/unicopia/entity/mob/AirBalloonEntity.java b/src/main/java/com/minelittlepony/unicopia/entity/mob/AirBalloonEntity.java index 9e19ef68..d6f032c8 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/mob/AirBalloonEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/mob/AirBalloonEntity.java @@ -458,9 +458,15 @@ public class AirBalloonEntity extends MobEntity implements EntityCollisions.Comp @Override public Race getSpecies() { - return isAirworthy() && !isAscending() ? Race.PEGASUS : Race.UNSET; + return Race.UNSET; } + @Override + public boolean collidesWithClouds() { + return isAirworthy() && !isAscending(); + } + + @Override public float getCloudWalkingStrength() { return isAirworthy() ? 2 : 0; diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/MixinEntityShapeContext.java b/src/main/java/com/minelittlepony/unicopia/mixin/MixinEntityShapeContext.java index 93647abb..9e375403 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/MixinEntityShapeContext.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/MixinEntityShapeContext.java @@ -39,4 +39,9 @@ abstract class MixinEntityShapeContext implements EquineContext { public float getCloudWalkingStrength() { return equineContext.getCloudWalkingStrength(); } + + @Override + public boolean collidesWithClouds() { + return equineContext.collidesWithClouds(); + } } diff --git a/src/main/resources/data/unicopia/tags/blocks/clouds.json b/src/main/resources/data/unicopia/tags/blocks/clouds.json index 44c0c4ab..3539ce34 100644 --- a/src/main/resources/data/unicopia/tags/blocks/clouds.json +++ b/src/main/resources/data/unicopia/tags/blocks/clouds.json @@ -5,6 +5,7 @@ "unicopia:cloud_planks", "unicopia:dense_cloud", "unicopia:compacted_cloud", + "unicopia:compacted_cloud_planks", "unicopia:unstable_cloud", "unicopia:soggy_cloud" ] diff --git a/src/main/resources/data/unicopia/tags/items/cloud_beds.json b/src/main/resources/data/unicopia/tags/items/cloud_beds.json new file mode 100644 index 00000000..4338e8fd --- /dev/null +++ b/src/main/resources/data/unicopia/tags/items/cloud_beds.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "unicopia:cloud_bed" + ] +} diff --git a/src/main/resources/data/unicopia/tags/items/cloud_slabs.json b/src/main/resources/data/unicopia/tags/items/cloud_slabs.json new file mode 100644 index 00000000..f928fc55 --- /dev/null +++ b/src/main/resources/data/unicopia/tags/items/cloud_slabs.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "unicopia:cloud_slab", + "unicopia:dense_cloud_slab", + "unicopia:cloud_planks_slab" + ] +} diff --git a/src/main/resources/data/unicopia/tags/items/cloud_stairs.json b/src/main/resources/data/unicopia/tags/items/cloud_stairs.json new file mode 100644 index 00000000..59c6c75c --- /dev/null +++ b/src/main/resources/data/unicopia/tags/items/cloud_stairs.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "unicopia:cloud_stairs", + "unicopia:dense_cloud_stairs", + "unicopia:cloud_planks_stairs" + ] +} diff --git a/src/main/resources/data/unicopia/tags/items/clouds.json b/src/main/resources/data/unicopia/tags/items/clouds.json new file mode 100644 index 00000000..f3922795 --- /dev/null +++ b/src/main/resources/data/unicopia/tags/items/clouds.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "unicopia:cloud", + "unicopia:cloud_planks", + "unicopia:dense_cloud", + "unicopia:unstable_cloud" + ] +} diff --git a/src/main/resources/data/unicopia/tags/blocks/floats_on_clouds.json b/src/main/resources/data/unicopia/tags/items/floats_on_clouds.json similarity index 100% rename from src/main/resources/data/unicopia/tags/blocks/floats_on_clouds.json rename to src/main/resources/data/unicopia/tags/items/floats_on_clouds.json diff --git a/src/main/resources/data/unicopia/tags/items/groups/pegasus.json b/src/main/resources/data/unicopia/tags/items/groups/pegasus.json index b06427f9..6353ea9d 100644 --- a/src/main/resources/data/unicopia/tags/items/groups/pegasus.json +++ b/src/main/resources/data/unicopia/tags/items/groups/pegasus.json @@ -4,8 +4,12 @@ "unicopia:cloud", "unicopia:cloud_slab", "unicopia:cloud_stairs", + "unicopia:cloud_planks", + "unicopia:cloud_planks_slab", + "unicopia:cloud_planks_stairs", "unicopia:dense_cloud", "unicopia:dense_cloud_slab", + "unicopia:dense_cloud_stairs", "unicopia:unstable_cloud", "unicopia:cloud_pillar", "#unicopia:food_types/raw_fish",