diff --git a/src/generated/resources/assets/hybrid-aquatic/lang/en_us.json b/src/generated/resources/assets/hybrid-aquatic/lang/en_us.json index 86e87d02b..6435f9ee8 100644 --- a/src/generated/resources/assets/hybrid-aquatic/lang/en_us.json +++ b/src/generated/resources/assets/hybrid-aquatic/lang/en_us.json @@ -61,7 +61,6 @@ "block.hybrid-aquatic.tiger_shark_plushie": "Tiger Shark Plushie", "block.hybrid-aquatic.tube_sponge": "Tube Sponge", "block.hybrid-aquatic.whale_shark_plushie": "Whale Shark Plushie", - "block.minecraft.air": "Wall Glowstick", "effect.hybrid-aquatic.bleeding": "Bleeding", "effect.hybrid-aquatic.clarity": "Clarity", "effect.hybrid-aquatic.thalassophobia": "Thalassophobia", diff --git a/src/generated/resources/data/minecraft/loot_tables/blocks/dead_fire_coral_fan.json b/src/generated/resources/data/minecraft/loot_tables/blocks/dead_fire_coral_fan.json deleted file mode 100644 index 38fe9914a..000000000 --- a/src/generated/resources/data/minecraft/loot_tables/blocks/dead_fire_coral_fan.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:air" - } - ], - "rolls": 1.0 - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/loot_tables/blocks/fire_coral_fan.json b/src/generated/resources/data/minecraft/loot_tables/blocks/fire_coral_fan.json deleted file mode 100644 index 38fe9914a..000000000 --- a/src/generated/resources/data/minecraft/loot_tables/blocks/fire_coral_fan.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:air" - } - ], - "rolls": 1.0 - } - ] -} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/loot_tables/blocks/torch.json b/src/generated/resources/data/minecraft/loot_tables/blocks/torch.json deleted file mode 100644 index a82c94a7a..000000000 --- a/src/generated/resources/data/minecraft/loot_tables/blocks/torch.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "minecraft:torch" - } - ], - "rolls": 1.0 - } - ] -} \ No newline at end of file diff --git a/src/main/kotlin/dev/hybridlabs/aquatic/block/GlowstickBlock.kt b/src/main/kotlin/dev/hybridlabs/aquatic/block/GlowstickBlock.kt index 7338c11fc..75aef066d 100644 --- a/src/main/kotlin/dev/hybridlabs/aquatic/block/GlowstickBlock.kt +++ b/src/main/kotlin/dev/hybridlabs/aquatic/block/GlowstickBlock.kt @@ -5,14 +5,11 @@ import net.minecraft.fluid.FluidState import net.minecraft.fluid.Fluids import net.minecraft.item.ItemPlacementContext import net.minecraft.particle.ParticleTypes.GLOW -import net.minecraft.particle.ParticleTypes.SMOKE import net.minecraft.registry.tag.FluidTags import net.minecraft.state.StateManager import net.minecraft.state.property.Properties import net.minecraft.util.math.BlockPos import net.minecraft.util.math.Direction -import net.minecraft.util.shape.VoxelShape -import net.minecraft.world.BlockView import net.minecraft.world.WorldAccess class GlowstickBlock(settings: Settings) : TorchBlock(settings, GLOW), Waterloggable { @@ -32,36 +29,25 @@ class GlowstickBlock(settings: Settings) : TorchBlock(settings, GLOW), Waterlogg world.scheduleFluidTick(pos, Fluids.WATER, Fluids.WATER.getTickRate(world)) } - return if (!canPlaceAt(state, world, pos)) { - Blocks.AIR.defaultState - } else super.getStateForNeighborUpdate(state, direction, neighborState, world, pos, neighborPos) + return super.getStateForNeighborUpdate(state, direction, neighborState, world, pos, neighborPos) } - override fun getPlacementState(ctx: ItemPlacementContext): BlockState? { - val fluidState = ctx.world.getFluidState(ctx.blockPos) - return if (fluidState.isIn(FluidTags.WATER)) defaultState.with( - Properties.WATERLOGGED, ctx.world.getFluidState(ctx.blockPos).isOf( - Fluids.WATER)) else null - } - - override fun getOutlineShape( - state: BlockState?, - world: BlockView?, - pos: BlockPos?, - context: ShapeContext? - ): VoxelShape { - return BOUNDING_SHAPE + override fun getPlacementState(context: ItemPlacementContext): BlockState? { + val fluidState = context.world.getFluidState(context.blockPos) + return super.getPlacementState(context)?.with(Properties.WATERLOGGED, fluidState == Fluids.WATER.getStill(false)) } override fun getFluidState(state: BlockState): FluidState { return if (state.get(Properties.WATERLOGGED)) Fluids.WATER.getStill(false) else super.getFluidState(state) } - override fun getRenderType(state: BlockState): BlockRenderType { - return BlockRenderType.MODEL - } - override fun appendProperties(builder: StateManager.Builder) { builder.add(Properties.WATERLOGGED) } -} \ No newline at end of file + + companion object { + fun luminance(state: BlockState): Int { + return if (state.get(Properties.WATERLOGGED)) 14 else 0 + } + } +} diff --git a/src/main/kotlin/dev/hybridlabs/aquatic/block/HybridAquaticBlocks.kt b/src/main/kotlin/dev/hybridlabs/aquatic/block/HybridAquaticBlocks.kt index 0cfdf2c02..ce808017c 100644 --- a/src/main/kotlin/dev/hybridlabs/aquatic/block/HybridAquaticBlocks.kt +++ b/src/main/kotlin/dev/hybridlabs/aquatic/block/HybridAquaticBlocks.kt @@ -103,21 +103,21 @@ object HybridAquaticBlocks { val LOPHELIA_CORAL_BLOCK = register("lophelia_coral_block", CoralBlockBlock(DEAD_LOPHELIA_CORAL_BLOCK, FabricBlockSettings.copyOf(Blocks.FIRE_CORAL_BLOCK).mapColor(MapColor.OFF_WHITE).instrument(Instrument.BASEDRUM).requiresTool().hardness(1.0F).sounds(BlockSoundGroup.CORAL))) val DEAD_LOPHELIA_CORAL_FAN = register("dead_lophelia_coral_fan", DeadCoralFanBlock(FabricBlockSettings.copyOf(Blocks.DEAD_FIRE_CORAL_FAN))) val LOPHELIA_CORAL_FAN = register("lophelia_coral_fan", CoralFanBlock(DEAD_LOPHELIA_CORAL_FAN, FabricBlockSettings.copyOf(Blocks.FIRE_CORAL_FAN))) - val DEAD_LOPHELIA_CORAL_WALL_FAN = register("dead_lophelia_coral_wall_fan", DeadCoralWallFanBlock(FabricBlockSettings.copyOf(Blocks.DEAD_FIRE_CORAL_WALL_FAN))) - val LOPHELIA_CORAL_WALL_FAN = register("lophelia_coral_wall_fan", CoralWallFanBlock(DEAD_LOPHELIA_CORAL_WALL_FAN, FabricBlockSettings.copyOf(Blocks.FIRE_CORAL_WALL_FAN))) val DEAD_LOPHELIA_CORAL = register("dead_lophelia_coral", DeadCoralBlock(FabricBlockSettings.copyOf(Blocks.DEAD_FIRE_CORAL))) + val DEAD_LOPHELIA_CORAL_WALL_FAN = register("dead_lophelia_coral_wall_fan", DeadCoralWallFanBlock(FabricBlockSettings.copyOf(Blocks.DEAD_FIRE_CORAL_WALL_FAN).dropsLike(DEAD_LOPHELIA_CORAL))) val LOPHELIA_CORAL = register("lophelia_coral", CoralBlock(DEAD_LOPHELIA_CORAL, FabricBlockSettings.copyOf(Blocks.FIRE_CORAL))) + val LOPHELIA_CORAL_WALL_FAN = register("lophelia_coral_wall_fan", CoralWallFanBlock(DEAD_LOPHELIA_CORAL_WALL_FAN, FabricBlockSettings.copyOf(Blocks.FIRE_CORAL_WALL_FAN).dropsLike(LOPHELIA_CORAL))) val DEAD_THORN_CORAL_BLOCK = register("dead_thorn_coral_block", DeadCoralBlock(FabricBlockSettings.copyOf(Blocks.DEAD_FIRE_CORAL_BLOCK).mapColor(MapColor.OFF_WHITE).instrument(Instrument.BASEDRUM).requiresTool().hardness(1.0F).sounds(BlockSoundGroup.CORAL))) val THORN_CORAL_BLOCK = register("thorn_coral_block", CoralBlockBlock(DEAD_THORN_CORAL_BLOCK, FabricBlockSettings.copyOf(Blocks.FIRE_CORAL_BLOCK).mapColor(MapColor.OFF_WHITE).instrument(Instrument.BASEDRUM).requiresTool().hardness(1.0F).sounds(BlockSoundGroup.CORAL))) val DEAD_THORN_CORAL_FAN = register("dead_thorn_coral_fan", DeadCoralFanBlock(FabricBlockSettings.copyOf(Blocks.DEAD_FIRE_CORAL_FAN))) val THORN_CORAL_FAN = register("thorn_coral_fan", CoralFanBlock(DEAD_THORN_CORAL_FAN, FabricBlockSettings.copyOf(Blocks.FIRE_CORAL_FAN))) - val DEAD_THORN_CORAL_WALL_FAN = register("dead_thorn_coral_wall_fan", DeadCoralWallFanBlock(FabricBlockSettings.copyOf(Blocks.DEAD_FIRE_CORAL_WALL_FAN))) - val THORN_CORAL_WALL_FAN = register("thorn_coral_wall_fan", CoralWallFanBlock(DEAD_THORN_CORAL_WALL_FAN, FabricBlockSettings.copyOf(Blocks.FIRE_CORAL_WALL_FAN))) val DEAD_THORN_CORAL = register("dead_thorn_coral", DeadCoralBlock(FabricBlockSettings.copyOf(Blocks.DEAD_FIRE_CORAL))) + val DEAD_THORN_CORAL_WALL_FAN = register("dead_thorn_coral_wall_fan", DeadCoralWallFanBlock(FabricBlockSettings.copyOf(Blocks.DEAD_FIRE_CORAL_WALL_FAN).dropsLike(DEAD_THORN_CORAL))) val THORN_CORAL = register("thorn_coral", CoralBlock(DEAD_THORN_CORAL, FabricBlockSettings.copyOf(Blocks.FIRE_CORAL))) + val THORN_CORAL_WALL_FAN = register("thorn_coral_wall_fan", CoralWallFanBlock(DEAD_THORN_CORAL_WALL_FAN, FabricBlockSettings.copyOf(Blocks.FIRE_CORAL_WALL_FAN).dropsLike(THORN_CORAL))) - val GLOWSTICK = register("glowstick", GlowstickBlock(FabricBlockSettings.copyOf(Blocks.TORCH).noCollision().luminance(14).nonOpaque())) - val WALL_GLOWSTICK = register("wall_glowstick", WallTorchBlock(FabricBlockSettings.copyOf(Blocks.WALL_TORCH).noCollision().luminance(14).nonOpaque(), GLOW)) + val GLOWSTICK = register("glowstick", GlowstickBlock(FabricBlockSettings.copyOf(Blocks.TORCH).noCollision().luminance(GlowstickBlock::luminance).nonOpaque())) + val WALL_GLOWSTICK = register("wall_glowstick", WallGlowstickBlock(FabricBlockSettings.copyOf(Blocks.WALL_TORCH).dropsLike(GLOWSTICK).noCollision().luminance(GlowstickBlock::luminance).nonOpaque())) val TUBE_SPONGE = register("tube_sponge", TubeSpongeBlock(FabricBlockSettings.copyOf(Blocks.WET_SPONGE) .nonOpaque() diff --git a/src/main/kotlin/dev/hybridlabs/aquatic/block/WallGlowstickBlock.kt b/src/main/kotlin/dev/hybridlabs/aquatic/block/WallGlowstickBlock.kt new file mode 100644 index 000000000..fb0a22218 --- /dev/null +++ b/src/main/kotlin/dev/hybridlabs/aquatic/block/WallGlowstickBlock.kt @@ -0,0 +1,48 @@ +package dev.hybridlabs.aquatic.block + +import net.minecraft.block.* +import net.minecraft.fluid.FluidState +import net.minecraft.fluid.Fluids +import net.minecraft.item.ItemPlacementContext +import net.minecraft.particle.ParticleTypes.GLOW +import net.minecraft.registry.tag.FluidTags +import net.minecraft.state.StateManager +import net.minecraft.state.property.Properties +import net.minecraft.util.math.BlockPos +import net.minecraft.util.math.Direction +import net.minecraft.world.WorldAccess +import net.minecraft.world.WorldView + +class WallGlowstickBlock(settings: Settings) : WallTorchBlock(settings, GLOW), Waterloggable { + init { + defaultState = stateManager.defaultState.with(Properties.WATERLOGGED, false) + } + + override fun getStateForNeighborUpdate( + state: BlockState, + direction: Direction, + neighborState: BlockState, + world: WorldAccess, + pos: BlockPos, + neighborPos: BlockPos + ): BlockState { + if (state.get(Properties.WATERLOGGED)) { + world.scheduleFluidTick(pos, Fluids.WATER, Fluids.WATER.getTickRate(world)) + } + + return super.getStateForNeighborUpdate(state, direction, neighborState, world, pos, neighborPos) + } + + override fun getPlacementState(context: ItemPlacementContext): BlockState? { + val fluidState = context.world.getFluidState(context.blockPos) + return super.getPlacementState(context)?.with(Properties.WATERLOGGED, fluidState == Fluids.WATER.getStill(false)) + } + + override fun getFluidState(state: BlockState): FluidState { + return if (state.get(Properties.WATERLOGGED)) Fluids.WATER.getStill(false) else super.getFluidState(state) + } + + override fun appendProperties(builder: StateManager.Builder) { + super.appendProperties(builder.add(Properties.WATERLOGGED)) + } +} diff --git a/src/main/kotlin/dev/hybridlabs/aquatic/data/client/LanguageProvider.kt b/src/main/kotlin/dev/hybridlabs/aquatic/data/client/LanguageProvider.kt index a38fae02e..5147e345e 100644 --- a/src/main/kotlin/dev/hybridlabs/aquatic/data/client/LanguageProvider.kt +++ b/src/main/kotlin/dev/hybridlabs/aquatic/data/client/LanguageProvider.kt @@ -84,7 +84,6 @@ class LanguageProvider(output: FabricDataOutput) : FabricLanguageProvider(output HybridAquaticBlocks.THORN_CORAL_FAN to "Thorn Coral Fan", HybridAquaticBlocks.DEAD_THORN_CORAL_FAN to "Dead Thorn Coral Fan", HybridAquaticBlocks.GLOWSTICK to "Glowstick", - HybridAquaticBlocks.WALL_GLOWSTICK to "Wall Glowstick", HybridAquaticBlocks.DRIFTWOOD_LOG to "Driftwood Log", HybridAquaticBlocks.DRIFTWOOD_WOOD to "Driftwood Wood", HybridAquaticBlocks.STRIPPED_DRIFTWOOD_LOG to "Stripped Driftwood Log", diff --git a/src/main/kotlin/dev/hybridlabs/aquatic/data/server/loot/BlockLootTableProvider.kt b/src/main/kotlin/dev/hybridlabs/aquatic/data/server/loot/BlockLootTableProvider.kt index 42d03cca7..2065a2b67 100644 --- a/src/main/kotlin/dev/hybridlabs/aquatic/data/server/loot/BlockLootTableProvider.kt +++ b/src/main/kotlin/dev/hybridlabs/aquatic/data/server/loot/BlockLootTableProvider.kt @@ -4,10 +4,14 @@ import dev.hybridlabs.aquatic.block.HybridAquaticBlocks import dev.hybridlabs.aquatic.block.entity.MessageInABottleBlockEntity.Companion.MESSAGE_KEY import dev.hybridlabs.aquatic.block.entity.MessageInABottleBlockEntity.Companion.VARIANT_KEY import dev.hybridlabs.aquatic.data.HybridAquaticDataGenerator.filterHybridAquatic +import dev.hybridlabs.aquatic.item.HybridAquaticItems import dev.hybridlabs.aquatic.loot.HybridAquaticLootTables import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput import net.fabricmc.fabric.api.datagen.v1.provider.FabricBlockLootTableProvider import net.minecraft.block.Blocks +import net.minecraft.block.CoralWallFanBlock +import net.minecraft.block.DeadCoralWallFanBlock +import net.minecraft.block.WallTorchBlock import net.minecraft.item.BlockItem.BLOCK_ENTITY_TAG_KEY import net.minecraft.item.Items import net.minecraft.item.WrittenBookItem.* @@ -50,7 +54,6 @@ class BlockLootTableProvider(output: FabricDataOutput) : FabricBlockLootTablePro addDrop(HybridAquaticBlocks.DRIFTWOOD_DOOR, doorDrops(HybridAquaticBlocks.DRIFTWOOD_DOOR)) addDrop(HybridAquaticBlocks.GLOWSTICK) - addDrop(Blocks.TORCH) //endregion @@ -251,7 +254,10 @@ class BlockLootTableProvider(output: FabricDataOutput) : FabricBlockLootTablePro // generate remaining drops Registries.BLOCK .filter(filterHybridAquatic(Registries.BLOCK)) - .filter { block -> block.lootTableId !in lootTables } + .filter { block -> + block !is WallTorchBlock && block !is DeadCoralWallFanBlock + && block.lootTableId !in lootTables + } .forEach(::addDrop) } } diff --git a/src/main/kotlin/dev/hybridlabs/aquatic/item/HybridAquaticItems.kt b/src/main/kotlin/dev/hybridlabs/aquatic/item/HybridAquaticItems.kt index 53c7a115d..12afb02be 100644 --- a/src/main/kotlin/dev/hybridlabs/aquatic/item/HybridAquaticItems.kt +++ b/src/main/kotlin/dev/hybridlabs/aquatic/item/HybridAquaticItems.kt @@ -13,6 +13,7 @@ import net.minecraft.item.* import net.minecraft.registry.Registries import net.minecraft.registry.Registry import net.minecraft.util.Identifier +import net.minecraft.util.math.Direction object HybridAquaticItems { @@ -424,7 +425,8 @@ object HybridAquaticItems { val TIGER_SHARK_PLUSHIE = registerBlockItem("tiger_shark_plushie", HybridAquaticBlocks.TIGER_SHARK_PLUSHIE) val WHALE_SHARK_PLUSHIE = registerBlockItem("whale_shark_plushie", HybridAquaticBlocks.WHALE_SHARK_PLUSHIE) - val GLOWSTICK = registerBlockItem("glowstick", HybridAquaticBlocks.GLOWSTICK) + val GLOWSTICK = registerVerticallyAttachable("glowstick", HybridAquaticBlocks.GLOWSTICK, HybridAquaticBlocks.WALL_GLOWSTICK) + val HYBRID_CRATE = registerBlockItem("hybrid_crate", HybridAquaticBlocks.HYBRID_CRATE) val DRIFTWOOD_CRATE = registerBlockItem("driftwood_crate", HybridAquaticBlocks.DRIFTWOOD_CRATE) val OAK_CRATE = registerBlockItem("oak_crate", HybridAquaticBlocks.OAK_CRATE) @@ -454,14 +456,14 @@ object HybridAquaticItems { val DEAD_LOPHELIA_CORAL_BLOCK = registerBlockItem("dead_lophelia_coral_block", HybridAquaticBlocks.DEAD_LOPHELIA_CORAL_BLOCK) val LOPHELIA_CORAL = registerBlockItem("lophelia_coral", HybridAquaticBlocks.LOPHELIA_CORAL) val DEAD_LOPHELIA_CORAL = registerBlockItem("dead_lophelia_coral", HybridAquaticBlocks.DEAD_LOPHELIA_CORAL) - val LOPHELIA_CORAL_FAN = registerBlockItem("lophelia_coral_fan", HybridAquaticBlocks.LOPHELIA_CORAL_FAN) - val DEAD_LOPHELIA_CORAL_FAN = registerBlockItem("dead_lophelia_coral_fan", HybridAquaticBlocks.DEAD_LOPHELIA_CORAL_FAN) + val LOPHELIA_CORAL_FAN = registerVerticallyAttachable("lophelia_coral_fan", HybridAquaticBlocks.LOPHELIA_CORAL_FAN, HybridAquaticBlocks.LOPHELIA_CORAL_WALL_FAN) + val DEAD_LOPHELIA_CORAL_FAN = registerVerticallyAttachable("dead_lophelia_coral_fan", HybridAquaticBlocks.DEAD_LOPHELIA_CORAL_FAN, HybridAquaticBlocks.DEAD_LOPHELIA_CORAL_WALL_FAN) val THORN_CORAL_BLOCK = registerBlockItem("thorn_coral_block", HybridAquaticBlocks.THORN_CORAL_BLOCK) val DEAD_THORN_CORAL_BLOCK = registerBlockItem("dead_thorn_coral_block", HybridAquaticBlocks.DEAD_THORN_CORAL_BLOCK) val THORN_CORAL = registerBlockItem("thorn_coral", HybridAquaticBlocks.THORN_CORAL) val DEAD_THORN_CORAL = registerBlockItem("dead_thorn_coral", HybridAquaticBlocks.DEAD_THORN_CORAL) - val THORN_CORAL_FAN = registerBlockItem("thorn_coral_fan", HybridAquaticBlocks.THORN_CORAL_FAN) - val DEAD_THORN_CORAL_FAN = registerBlockItem("dead_thorn_coral_fan", HybridAquaticBlocks.DEAD_THORN_CORAL_FAN) + val THORN_CORAL_FAN = registerVerticallyAttachable("thorn_coral_fan", HybridAquaticBlocks.THORN_CORAL_FAN, HybridAquaticBlocks.THORN_CORAL_WALL_FAN) + val DEAD_THORN_CORAL_FAN = registerVerticallyAttachable("dead_thorn_coral_fan", HybridAquaticBlocks.DEAD_THORN_CORAL_FAN, HybridAquaticBlocks.DEAD_THORN_CORAL_WALL_FAN) // fish spawn eggs val ANGLERFISH_SPAWN_EGG = registerSpawnEgg("anglerfish_spawn_egg", HybridAquaticEntityTypes.ANGLERFISH, 0x4d4848, 0xc4faff) @@ -570,4 +572,8 @@ object HybridAquaticItems { private fun registerPlaceableInWaterBlockItem(id: String, block: Block): Item { return register(id, PlaceableInWaterItem(block, FabricItemSettings())) } + + private fun registerVerticallyAttachable(id: String, standingBlock: Block, wallBlock: Block, direction: Direction = Direction.DOWN): Item { + return register(id, VerticallyAttachableBlockItem(standingBlock, wallBlock, FabricItemSettings(), direction)) + } }