From 2366dea995554583c88c75718c483a149f1f8178 Mon Sep 17 00:00:00 2001 From: AViewFromTheTop <87103914+AViewFromTheTop@users.noreply.github.com> Date: Sat, 21 Dec 2024 19:27:33 -0500 Subject: [PATCH] Prototype Ectoplasm Blocks --- .../blockstates/ectoplasm_block.json | 7 ++ .../models/item/ectoplasm_block.json | 3 + .../tags/block/fall_damage_resetting.json | 5 ++ .../minecraft/tags/block/impermeable.json | 5 ++ .../advancement/recipes/misc/ectoplasm.json | 32 +++++++++ .../recipes/misc/ectoplasm_block.json | 32 +++++++++ .../loot_table/blocks/ectoplasm_block.json | 20 ++++++ .../data/trailiertales/recipe/ectoplasm.json | 13 ++++ .../trailiertales/recipe/ectoplasm_block.json | 18 +++++ .../trailiertales/TrailierTales.java | 10 +++ .../trailiertales/block/EctoplasmBlock.java | 43 ++++++++++++ .../client/TTBlockRenderLayers.java | 2 + .../datagen/loot/TTBlockLootProvider.java | 1 + .../datagen/model/TTModelProvider.java | 10 +++ .../datagen/recipe/TTRecipeProvider.java | 3 + .../datagen/tag/TTBlockTagProvider.java | 6 ++ .../impl/InEctoplasmBlockInterface.java | 7 ++ .../ectoplasm_block/BlockGetterMixin.java | 65 ++++++++++++++++++ .../common/ectoplasm_block/EntityMixin.java | 25 +++++++ .../trailiertales/registry/TTBlocks.java | 17 +++++ .../assets/trailiertales/lang/en_us.json | 2 + .../models/block/ectoplasm_block.json | 34 +++++++++ .../textures/block/ectoplasm_block.png | Bin 0 -> 511 bytes .../resources/trailiertales.accesswidener | 1 + src/main/resources/trailiertales.mixins.json | 2 + 25 files changed, 363 insertions(+) create mode 100644 src/main/generated/assets/trailiertales/blockstates/ectoplasm_block.json create mode 100644 src/main/generated/assets/trailiertales/models/item/ectoplasm_block.json create mode 100644 src/main/generated/data/minecraft/tags/block/fall_damage_resetting.json create mode 100644 src/main/generated/data/minecraft/tags/block/impermeable.json create mode 100644 src/main/generated/data/trailiertales/advancement/recipes/misc/ectoplasm.json create mode 100644 src/main/generated/data/trailiertales/advancement/recipes/misc/ectoplasm_block.json create mode 100644 src/main/generated/data/trailiertales/loot_table/blocks/ectoplasm_block.json create mode 100644 src/main/generated/data/trailiertales/recipe/ectoplasm.json create mode 100644 src/main/generated/data/trailiertales/recipe/ectoplasm_block.json create mode 100644 src/main/java/net/frozenblock/trailiertales/block/EctoplasmBlock.java create mode 100644 src/main/java/net/frozenblock/trailiertales/impl/InEctoplasmBlockInterface.java create mode 100644 src/main/java/net/frozenblock/trailiertales/mixin/common/ectoplasm_block/BlockGetterMixin.java create mode 100644 src/main/java/net/frozenblock/trailiertales/mixin/common/ectoplasm_block/EntityMixin.java create mode 100644 src/main/resources/assets/trailiertales/models/block/ectoplasm_block.json create mode 100644 src/main/resources/assets/trailiertales/textures/block/ectoplasm_block.png diff --git a/src/main/generated/assets/trailiertales/blockstates/ectoplasm_block.json b/src/main/generated/assets/trailiertales/blockstates/ectoplasm_block.json new file mode 100644 index 00000000..3b07da4d --- /dev/null +++ b/src/main/generated/assets/trailiertales/blockstates/ectoplasm_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "trailiertales:block/ectoplasm_block" + } + } +} \ No newline at end of file diff --git a/src/main/generated/assets/trailiertales/models/item/ectoplasm_block.json b/src/main/generated/assets/trailiertales/models/item/ectoplasm_block.json new file mode 100644 index 00000000..bff53518 --- /dev/null +++ b/src/main/generated/assets/trailiertales/models/item/ectoplasm_block.json @@ -0,0 +1,3 @@ +{ + "parent": "trailiertales:block/ectoplasm_block" +} \ No newline at end of file diff --git a/src/main/generated/data/minecraft/tags/block/fall_damage_resetting.json b/src/main/generated/data/minecraft/tags/block/fall_damage_resetting.json new file mode 100644 index 00000000..bdd8b780 --- /dev/null +++ b/src/main/generated/data/minecraft/tags/block/fall_damage_resetting.json @@ -0,0 +1,5 @@ +{ + "values": [ + "trailiertales:ectoplasm_block" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/minecraft/tags/block/impermeable.json b/src/main/generated/data/minecraft/tags/block/impermeable.json new file mode 100644 index 00000000..bdd8b780 --- /dev/null +++ b/src/main/generated/data/minecraft/tags/block/impermeable.json @@ -0,0 +1,5 @@ +{ + "values": [ + "trailiertales:ectoplasm_block" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/trailiertales/advancement/recipes/misc/ectoplasm.json b/src/main/generated/data/trailiertales/advancement/recipes/misc/ectoplasm.json new file mode 100644 index 00000000..71062d85 --- /dev/null +++ b/src/main/generated/data/trailiertales/advancement/recipes/misc/ectoplasm.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ectoplasm_block": { + "conditions": { + "items": [ + { + "items": "trailiertales:ectoplasm_block" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "minecraft:ectoplasm" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_ectoplasm_block" + ] + ], + "rewards": { + "recipes": [ + "minecraft:ectoplasm" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/trailiertales/advancement/recipes/misc/ectoplasm_block.json b/src/main/generated/data/trailiertales/advancement/recipes/misc/ectoplasm_block.json new file mode 100644 index 00000000..7f9d9b87 --- /dev/null +++ b/src/main/generated/data/trailiertales/advancement/recipes/misc/ectoplasm_block.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_ectoplasm": { + "conditions": { + "items": [ + { + "items": "trailiertales:ectoplasm" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "minecraft:ectoplasm_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_ectoplasm" + ] + ], + "rewards": { + "recipes": [ + "minecraft:ectoplasm_block" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/trailiertales/loot_table/blocks/ectoplasm_block.json b/src/main/generated/data/trailiertales/loot_table/blocks/ectoplasm_block.json new file mode 100644 index 00000000..6c4823ae --- /dev/null +++ b/src/main/generated/data/trailiertales/loot_table/blocks/ectoplasm_block.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "trailiertales:ectoplasm_block" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/generated/data/trailiertales/recipe/ectoplasm.json b/src/main/generated/data/trailiertales/recipe/ectoplasm.json new file mode 100644 index 00000000..67f11576 --- /dev/null +++ b/src/main/generated/data/trailiertales/recipe/ectoplasm.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "trailiertales:ectoplasm_block" + } + ], + "result": { + "count": 9, + "id": "trailiertales:ectoplasm" + } +} \ No newline at end of file diff --git a/src/main/generated/data/trailiertales/recipe/ectoplasm_block.json b/src/main/generated/data/trailiertales/recipe/ectoplasm_block.json new file mode 100644 index 00000000..2b5589d9 --- /dev/null +++ b/src/main/generated/data/trailiertales/recipe/ectoplasm_block.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "#": { + "item": "trailiertales:ectoplasm" + } + }, + "pattern": [ + "###", + "###", + "###" + ], + "result": { + "count": 1, + "id": "trailiertales:ectoplasm_block" + } +} \ No newline at end of file diff --git a/src/main/java/net/frozenblock/trailiertales/TrailierTales.java b/src/main/java/net/frozenblock/trailiertales/TrailierTales.java index 92ef606f..d9269afd 100644 --- a/src/main/java/net/frozenblock/trailiertales/TrailierTales.java +++ b/src/main/java/net/frozenblock/trailiertales/TrailierTales.java @@ -7,6 +7,8 @@ import net.frozenblock.lib.FrozenBools; import net.frozenblock.lib.entrypoint.api.FrozenModInitializer; import net.frozenblock.lib.feature_flag.api.FrozenFeatureFlags; +import net.frozenblock.lib.gravity.api.GravityAPI; +import net.frozenblock.trailiertales.block.EctoplasmBlock; import net.frozenblock.trailiertales.config.TTMiscConfig; import net.frozenblock.trailiertales.datafix.trailiertales.TTDataFixer; import net.frozenblock.trailiertales.mod_compat.TTModIntegrations; @@ -85,6 +87,14 @@ public void onInitialize(String modId, ModContainer container) { ResourcePackActivationType.DEFAULT_ENABLED : ResourcePackActivationType.NORMAL ); + GravityAPI.MODIFICATIONS.register(gravityContext -> { + if (gravityContext.entity != null) { + if (gravityContext.entity.getInBlockState().getBlock() instanceof EctoplasmBlock) { + gravityContext.gravity = gravityContext.gravity.scale(EctoplasmBlock.GRAVITY_SLOWDOWN); + } + } + }); + ResourceManagerHelper.get(PackType.SERVER_DATA).registerReloadListener(new SimpleSynchronousResourceReloadListener() { @Override public ResourceLocation getFabricId() { diff --git a/src/main/java/net/frozenblock/trailiertales/block/EctoplasmBlock.java b/src/main/java/net/frozenblock/trailiertales/block/EctoplasmBlock.java new file mode 100644 index 00000000..fa728e99 --- /dev/null +++ b/src/main/java/net/frozenblock/trailiertales/block/EctoplasmBlock.java @@ -0,0 +1,43 @@ +package net.frozenblock.trailiertales.block; + +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.*; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.PushReaction; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.NotNull; + +public class EctoplasmBlock extends HalfTransparentBlock { + public static final VoxelShape COLLISION_SHAPE = Shapes.empty(); + public static final int LIGHT_BLOCK = 2; + public static final double GRAVITY_SLOWDOWN = 0.4D; + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec((instance) -> instance.group( + propertiesCodec() + ).apply(instance, EctoplasmBlock::new)); + + public EctoplasmBlock(@NotNull Properties properties) { + super(properties.pushReaction(PushReaction.DESTROY)); + } + + @NotNull + @Override + protected MapCodec codec() { + return CODEC; + } + + @Override + @NotNull + public VoxelShape getCollisionShape(@NotNull BlockState blockState, @NotNull BlockGetter blockGetter, @NotNull BlockPos blockPos, @NotNull CollisionContext collisionContext) { + return COLLISION_SHAPE; + } + + @Override + public int getLightBlock(@NotNull BlockState blockState, @NotNull BlockGetter blockGetter, @NotNull BlockPos blockPos) { + return LIGHT_BLOCK; + } +} diff --git a/src/main/java/net/frozenblock/trailiertales/client/TTBlockRenderLayers.java b/src/main/java/net/frozenblock/trailiertales/client/TTBlockRenderLayers.java index cf61e63c..170b8e66 100644 --- a/src/main/java/net/frozenblock/trailiertales/client/TTBlockRenderLayers.java +++ b/src/main/java/net/frozenblock/trailiertales/client/TTBlockRenderLayers.java @@ -15,6 +15,8 @@ public static void init() { BlockEntityWithoutLevelRendererRegistry.register(TTBlocks.COFFIN, TTBlockEntityTypes.COFFIN); BlockRenderLayerMap renderLayerRegistry = BlockRenderLayerMap.INSTANCE; + renderLayerRegistry.putBlock(TTBlocks.ECTOPLASM_BLOCK, RenderType.translucent()); + renderLayerRegistry.putBlock(TTBlocks.POTTED_CYAN_ROSE, RenderType.cutout()); renderLayerRegistry.putBlock(TTBlocks.CYAN_ROSE, RenderType.cutout()); renderLayerRegistry.putBlock(TTBlocks.CYAN_ROSE_CROP, RenderType.cutout()); diff --git a/src/main/java/net/frozenblock/trailiertales/datagen/loot/TTBlockLootProvider.java b/src/main/java/net/frozenblock/trailiertales/datagen/loot/TTBlockLootProvider.java index a89e6d05..325094c5 100644 --- a/src/main/java/net/frozenblock/trailiertales/datagen/loot/TTBlockLootProvider.java +++ b/src/main/java/net/frozenblock/trailiertales/datagen/loot/TTBlockLootProvider.java @@ -207,6 +207,7 @@ public void generate() { this.add(TTBlocks.SUSPICIOUS_CLAY, noDrop()); this.add(TTBlocks.COFFIN, noDrop()); this.dropSelf(TTBlocks.SURVEYOR); + this.dropSelf(TTBlocks.ECTOPLASM_BLOCK); } public LootTable.@NotNull Builder createMultifaceBlockDrops(Block drop) { diff --git a/src/main/java/net/frozenblock/trailiertales/datagen/model/TTModelProvider.java b/src/main/java/net/frozenblock/trailiertales/datagen/model/TTModelProvider.java index 2ade5874..c51e308e 100644 --- a/src/main/java/net/frozenblock/trailiertales/datagen/model/TTModelProvider.java +++ b/src/main/java/net/frozenblock/trailiertales/datagen/model/TTModelProvider.java @@ -82,6 +82,8 @@ public void generateBlockStateModels(@NotNull BlockModelGenerators generator) { generator.createBrushableBlock(TTBlocks.SUSPICIOUS_DIRT); generator.createBrushableBlock(TTBlocks.SUSPICIOUS_CLAY); + createEctoplasmBlock(generator); + generator.family(Blocks.POLISHED_GRANITE).generateFor(BlockFamilies.POLISHED_GRANITE); generator.family(TTBlocks.GRANITE_BRICKS).generateFor(TTBlocks.FAMILY_GRANITE_BRICK); generator.family(TTBlocks.MOSSY_GRANITE_BRICKS).generateFor(TTBlocks.FAMILY_MOSSY_GRANITE_BRICK); @@ -316,4 +318,12 @@ private static void createDawntrailCrop(@NotNull BlockModelGenerators generator) ); generator.blockStateOutput.accept(MultiVariantGenerator.multiVariant(crop).with(propertyDispatch)); } + + private static void createEctoplasmBlock(@NotNull BlockModelGenerators generator) { + Block block = TTBlocks.ECTOPLASM_BLOCK; + ResourceLocation model = TTConstants.id("block/ectoplasm_block"); + + generator.blockStateOutput.accept( BlockModelGenerators.createSimpleBlock(block, model)); + generator.delegateItemModel(block, model); + } } diff --git a/src/main/java/net/frozenblock/trailiertales/datagen/recipe/TTRecipeProvider.java b/src/main/java/net/frozenblock/trailiertales/datagen/recipe/TTRecipeProvider.java index e31bdb7f..43379471 100644 --- a/src/main/java/net/frozenblock/trailiertales/datagen/recipe/TTRecipeProvider.java +++ b/src/main/java/net/frozenblock/trailiertales/datagen/recipe/TTRecipeProvider.java @@ -11,6 +11,7 @@ import net.minecraft.core.HolderLookup; import net.minecraft.data.recipes.RecipeCategory; import net.minecraft.data.recipes.RecipeOutput; +import net.minecraft.data.recipes.RecipeProvider; import net.minecraft.data.recipes.ShapedRecipeBuilder; import net.minecraft.data.recipes.ShapelessRecipeBuilder; import net.minecraft.data.recipes.SimpleCookingRecipeBuilder; @@ -43,6 +44,8 @@ public void buildRecipes(RecipeOutput recipeOutput) { .unlockedBy("has_ectoplasm", has(TTItems.ECTOPLASM)) .save(recipeOutput); + RecipeProvider.nineBlockStorageRecipes(recipeOutput, RecipeCategory.MISC, TTItems.ECTOPLASM, RecipeCategory.MISC, TTBlocks.ECTOPLASM_BLOCK); + ShapedRecipeBuilder.shaped(RecipeCategory.MISC, Blocks.SUSPICIOUS_GRAVEL, 4) .define('#', Items.GRAVEL) .pattern(" # ") diff --git a/src/main/java/net/frozenblock/trailiertales/datagen/tag/TTBlockTagProvider.java b/src/main/java/net/frozenblock/trailiertales/datagen/tag/TTBlockTagProvider.java index 9fc789b8..f157c016 100644 --- a/src/main/java/net/frozenblock/trailiertales/datagen/tag/TTBlockTagProvider.java +++ b/src/main/java/net/frozenblock/trailiertales/datagen/tag/TTBlockTagProvider.java @@ -280,6 +280,12 @@ protected void addTags(@NotNull HolderLookup.Provider arg) { this.getOrCreateTagBuilder(BlockTags.FEATURES_CANNOT_REPLACE) .add(TTBlocks.COFFIN); + this.getOrCreateTagBuilder(BlockTags.FALL_DAMAGE_RESETTING) + .add(TTBlocks.ECTOPLASM_BLOCK); + + this.getOrCreateTagBuilder(BlockTags.IMPERMEABLE) + .add(TTBlocks.ECTOPLASM_BLOCK); + // WILDER WILD this.getOrCreateTagBuilder(getTag("wilderwild:sculk_slab_replaceable_worldgen")) diff --git a/src/main/java/net/frozenblock/trailiertales/impl/InEctoplasmBlockInterface.java b/src/main/java/net/frozenblock/trailiertales/impl/InEctoplasmBlockInterface.java new file mode 100644 index 00000000..33129d35 --- /dev/null +++ b/src/main/java/net/frozenblock/trailiertales/impl/InEctoplasmBlockInterface.java @@ -0,0 +1,7 @@ +package net.frozenblock.trailiertales.impl; + +public interface InEctoplasmBlockInterface { + void trailierTales$setClipInEctoplasm(boolean clipInEctoplasm); + + boolean trailierTales$wasClipInEctoplasm(); +} diff --git a/src/main/java/net/frozenblock/trailiertales/mixin/common/ectoplasm_block/BlockGetterMixin.java b/src/main/java/net/frozenblock/trailiertales/mixin/common/ectoplasm_block/BlockGetterMixin.java new file mode 100644 index 00000000..e23dea88 --- /dev/null +++ b/src/main/java/net/frozenblock/trailiertales/mixin/common/ectoplasm_block/BlockGetterMixin.java @@ -0,0 +1,65 @@ +package net.frozenblock.trailiertales.mixin.common.ectoplasm_block; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import net.frozenblock.trailiertales.block.EctoplasmBlock; +import net.frozenblock.trailiertales.impl.InEctoplasmBlockInterface; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.ClipContext; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.Vec3; +import net.minecraft.world.phys.shapes.EntityCollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(BlockGetter.class) +public interface BlockGetterMixin { + + @Shadow + BlockState getBlockState(BlockPos var1); + + @Inject(method = "clip", at = @At("HEAD")) + default void trailierTales$setClipInEctoplasmBlock(ClipContext context, CallbackInfoReturnable info) { + if (context.collisionContext instanceof EntityCollisionContext entityCollisionContext) { + Entity entity = entityCollisionContext.getEntity(); + if (entity instanceof InEctoplasmBlockInterface inEctoplasmBlockInterface) { + BlockState eyeState = getBlockState(BlockPos.containing(entity.getEyePosition())); + if (eyeState != null) { + inEctoplasmBlockInterface.trailierTales$setClipInEctoplasm(eyeState.getBlock() instanceof EctoplasmBlock); + } + } + } + } + + @WrapOperation( + method = "method_17743", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/world/level/BlockGetter;clipWithInteractionOverride(Lnet/minecraft/world/phys/Vec3;Lnet/minecraft/world/phys/Vec3;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/phys/shapes/VoxelShape;Lnet/minecraft/world/level/block/state/BlockState;)Lnet/minecraft/world/phys/BlockHitResult;" + ) + ) + default BlockHitResult trailierTales$ectoplasmBlockClip( + BlockGetter instance, Vec3 startVec, Vec3 endVec, BlockPos pos, VoxelShape shape, BlockState state, Operation operation, + ClipContext context + ) { + if (context.collisionContext instanceof EntityCollisionContext entityCollisionContext) { + if ( + entityCollisionContext.getEntity() instanceof InEctoplasmBlockInterface inEctoplasmBlockInterface + && inEctoplasmBlockInterface.trailierTales$wasClipInEctoplasm() + && state.getBlock() instanceof EctoplasmBlock + ) { + shape = Shapes.empty(); + } + } + return operation.call(instance, startVec, endVec, pos, shape, state); + } + +} diff --git a/src/main/java/net/frozenblock/trailiertales/mixin/common/ectoplasm_block/EntityMixin.java b/src/main/java/net/frozenblock/trailiertales/mixin/common/ectoplasm_block/EntityMixin.java new file mode 100644 index 00000000..109c45fc --- /dev/null +++ b/src/main/java/net/frozenblock/trailiertales/mixin/common/ectoplasm_block/EntityMixin.java @@ -0,0 +1,25 @@ +package net.frozenblock.trailiertales.mixin.common.ectoplasm_block; + +import net.frozenblock.trailiertales.impl.InEctoplasmBlockInterface; +import net.minecraft.world.entity.Entity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; + +@Mixin(Entity.class) +public class EntityMixin implements InEctoplasmBlockInterface { + + @Unique + private boolean trailierTales$clipInEctoplasm; + + @Unique + @Override + public void trailierTales$setClipInEctoplasm(boolean clipInEctoplasm) { + this.trailierTales$clipInEctoplasm = clipInEctoplasm; + } + + @Unique + @Override + public boolean trailierTales$wasClipInEctoplasm() { + return this.trailierTales$clipInEctoplasm; + } +} diff --git a/src/main/java/net/frozenblock/trailiertales/registry/TTBlocks.java b/src/main/java/net/frozenblock/trailiertales/registry/TTBlocks.java index 6980edf8..a45591d3 100644 --- a/src/main/java/net/frozenblock/trailiertales/registry/TTBlocks.java +++ b/src/main/java/net/frozenblock/trailiertales/registry/TTBlocks.java @@ -7,6 +7,7 @@ import net.frozenblock.trailiertales.block.CyanRoseCropBlock; import net.frozenblock.trailiertales.block.DawntrailBlock; import net.frozenblock.trailiertales.block.DawntrailCropBlock; +import net.frozenblock.trailiertales.block.EctoplasmBlock; import net.frozenblock.trailiertales.block.ManedropCropBlock; import net.frozenblock.trailiertales.block.NonFallingBrushableBlock; import net.frozenblock.trailiertales.block.SurveyorBlock; @@ -508,6 +509,20 @@ public class TTBlocks { .requiredFeatures(TTFeatureFlags.FEATURE_FLAG) ); + public static final EctoplasmBlock ECTOPLASM_BLOCK = new EctoplasmBlock( + BlockBehaviour.Properties.of() + .mapColor(MapColor.COLOR_LIGHT_BLUE) + .noOcclusion() + .instabreak() + .strength(0.2F) + .emissiveRendering(Blocks::always) + .lightLevel(state -> 1) + .sound(SoundType.WOOL) + .isSuffocating(Blocks::never) + .isViewBlocking(Blocks::never) + .requiredFeatures(TTFeatureFlags.FEATURE_FLAG) + ); + public static void init() { TTConstants.log("Registering Blocks for Trailier Tales.", TTConstants.UNSTABLE_LOGGING); @@ -640,6 +655,8 @@ public static void init() { registerBlockAfter(Blocks.VAULT, "coffin", COFFIN, CreativeModeTabs.FUNCTIONAL_BLOCKS); registerBlockAfter(Blocks.OBSERVER, "surveyor", SURVEYOR, CreativeModeTabs.REDSTONE_BLOCKS); + + registerBlockAfter(Blocks.WAXED_OXIDIZED_COPPER_BULB, "ectoplasm_block", ECTOPLASM_BLOCK, CreativeModeTabs.BUILDING_BLOCKS); } private static void registerBlock(String path, Block block) { diff --git a/src/main/resources/assets/trailiertales/lang/en_us.json b/src/main/resources/assets/trailiertales/lang/en_us.json index 3cfdafc5..e96b2017 100644 --- a/src/main/resources/assets/trailiertales/lang/en_us.json +++ b/src/main/resources/assets/trailiertales/lang/en_us.json @@ -18,6 +18,8 @@ "item.trailiertales.apparition_spawn_egg": "Apparition Spawn Egg", "item.trailiertales.ectoplasm": "Ectoplasm", + "block.trailiertales.ectoplasm_block": "Block of Ectoplasm", + "filled_map.trailiertales.catacombs": "Catacombs Explorer Map", "item.trailiertales.bait_pottery_sherd": "Bait Pottery Sherd", diff --git a/src/main/resources/assets/trailiertales/models/block/ectoplasm_block.json b/src/main/resources/assets/trailiertales/models/block/ectoplasm_block.json new file mode 100644 index 00000000..a93f34e2 --- /dev/null +++ b/src/main/resources/assets/trailiertales/models/block/ectoplasm_block.json @@ -0,0 +1,34 @@ +{ + "parent": "block/block", + "ambientocclusion": false, + "textures": { + "texture": "trailiertales:block/ectoplasm_block", + "particle": "#texture" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [0, 0, 16, 16], "texture": "#texture", "cullface": "north"}, + "east": {"uv": [0, 0, 16, 16], "texture": "#texture", "cullface": "east"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#texture", "cullface": "south"}, + "west": {"uv": [0, 0, 16, 16], "texture": "#texture", "cullface": "west"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#texture", "cullface": "up"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#texture", "cullface": "down"} + } + }, + { + "from": [16, 16, 16], + "to": [0, 0, 0], + "faces": { + "north": {"uv": [0, 16, 16, 0], "texture": "#texture", "cullface": "south"}, + "east": {"uv": [0, 16, 16, 0], "texture": "#texture", "cullface": "west"}, + "south": {"uv": [0, 16, 16, 0], "texture": "#texture", "cullface": "north"}, + "west": {"uv": [0, 16, 16, 0], "texture": "#texture", "cullface": "east"}, + "up": {"uv": [16, 0, 0, 16], "texture": "#texture", "cullface": "down"}, + "down": {"uv": [16, 0, 0, 16], "texture": "#texture", "cullface": "up"} + } + } + ] +} diff --git a/src/main/resources/assets/trailiertales/textures/block/ectoplasm_block.png b/src/main/resources/assets/trailiertales/textures/block/ectoplasm_block.png new file mode 100644 index 0000000000000000000000000000000000000000..4013ac603b0c73eff8e64f08b7aa909f7c18a708 GIT binary patch literal 511 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufiR<}hF1enLzSnCV~B-+>EykBOo0Ne-`nL|a}ouFofaC3 zm`SM|J9miv18a_kZVj__{NeUPM@}7L;&xi3IO~J7X&c1y8=k;c9etAOd_R-|u>qhsYsb@yJ~ zSIeJImy~RIE*|c?`ckH&;V1RashfU$`g=Zcl0wM+v#o1xs-HS)(7-M)ZpQigN!|NW z$26&nZ;yI2Dc%t*Qkl_^@Z3+)sMo5`=(p672l4EY$_)--%?-jvd`I5z=Y7VgrLjwC zcEIMoq}iHh7`1LzvHF%vZ@ngaA)PORBPe|FgInseAHR9zd*I3?Uk;^}C+BjNG#;AO zd@ecNr>wQ*tf_M)f1_N-yF+t7EZ6+&YjaS>gXM(l$9a4C2)i1Kvxb6Mw<&;$U#D$y$d literal 0 HcmV?d00001 diff --git a/src/main/resources/trailiertales.accesswidener b/src/main/resources/trailiertales.accesswidener index f130a3cb..55c92910 100644 --- a/src/main/resources/trailiertales.accesswidener +++ b/src/main/resources/trailiertales.accesswidener @@ -9,6 +9,7 @@ mutable field net/minecraft/advancements/critereon/MobEffectsPredicate effectMap accessible method net/minecraft/world/entity/projectile/ProjectileUtil getHitResult (Lnet/minecraft/world/phys/Vec3;Lnet/minecraft/world/entity/Entity;Ljava/util/function/Predicate;Lnet/minecraft/world/phys/Vec3;Lnet/minecraft/world/level/Level;FLnet/minecraft/world/level/ClipContext$Block;)Lnet/minecraft/world/phys/HitResult; # Entity +accessible field net/minecraft/world/level/ClipContext collisionContext Lnet/minecraft/world/phys/shapes/CollisionContext; accessible method net/minecraft/world/entity/LivingEntity makePoofParticles ()V # Mob Effect diff --git a/src/main/resources/trailiertales.mixins.json b/src/main/resources/trailiertales.mixins.json index 481c7371..a3a1578a 100644 --- a/src/main/resources/trailiertales.mixins.json +++ b/src/main/resources/trailiertales.mixins.json @@ -24,6 +24,8 @@ "common.datafix.V3689Mixin", "common.dawntrail.ShearsDispenseItemBehaviorMixin", "common.decorated_pot.DecoratedPotBlockEntityMixin", + "common.ectoplasm_block.BlockGetterMixin", + "common.ectoplasm_block.EntityMixin", "common.rail.RailStructureRotationFix", "common.surveyor.RedStoneWireBlockMixin", "datagen.common.feature_flag.FeatureFlagsMixin",