From d222b7fb6d646b8821b251febc23b1b3f2428c86 Mon Sep 17 00:00:00 2001 From: theEvilReaper Date: Mon, 25 Aug 2025 11:36:17 +0200 Subject: [PATCH 01/17] Add block module --- block/build.gradle.kts | 34 ++++++++++++++++++++++++++++++++++ settings.gradle.kts | 3 ++- 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 block/build.gradle.kts diff --git a/block/build.gradle.kts b/block/build.gradle.kts new file mode 100644 index 0000000..1ee6952 --- /dev/null +++ b/block/build.gradle.kts @@ -0,0 +1,34 @@ +plugins { + `java-library` +} + +group = "net.theevilreaper" +version = "0.0.1" + +java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(21)) + } +} + +dependencies { + implementation(platform(libs.mycelium.bom)) + compileOnly(libs.minestom) + + testImplementation(libs.minestom) + testImplementation(libs.cyano) + testImplementation(libs.junit.api) + testImplementation(libs.junit.params) + testImplementation(libs.junit.platform.launcher) + testRuntimeOnly(libs.junit.engine) +} + +tasks { + test { + jvmArgs("-Dminestom.inside-test=true") + useJUnitPlatform() + testLogging { + events("passed", "skipped", "failed") + } + } +} \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 47f0345..c3dc737 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -69,4 +69,5 @@ dependencyResolutionManagement { } include("common") -include("setup") \ No newline at end of file +include("setup") +include("block") \ No newline at end of file From 30fee705b1a6358e107bec641ae104aeb67687ad Mon Sep 17 00:00:00 2001 From: theEvilReaper Date: Mon, 25 Aug 2025 11:39:52 +0200 Subject: [PATCH 02/17] Add readme file --- block/README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 block/README.md diff --git a/block/README.md b/block/README.md new file mode 100644 index 0000000..9e4406f --- /dev/null +++ b/block/README.md @@ -0,0 +1,12 @@ +# 🧱 Block Module + +This module provides a collection of **block handlers** for different block types. + +> [!CAUTION] +> This module is **data-only**. +> It loads and registers block states but does **not** implement placement, interaction, or gameplay logic. +> Such behavior must be handled in other modules. + +> [!NOTE] +> This module is designed to be **extensible**. +> Additional block handlers and state definitions can be implemented as needed, without altering the existing structure. From 7a8211d245946864717ec977d1d85fa0ca690256 Mon Sep 17 00:00:00 2001 From: theEvilReaper Date: Mon, 25 Aug 2025 11:40:11 +0200 Subject: [PATCH 03/17] Add different implementation of block handlers --- .../bounce/block/BlockLoader.java | 4 +++ .../bounce/block/type/CandleBlockHandler.java | 31 +++++++++++++++++ .../bounce/block/type/ChainBlockHandler.java | 25 ++++++++++++++ .../block/type/LanternBlockHandler.java | 27 +++++++++++++++ .../bounce/block/type/SlabBlockHandler.java | 30 ++++++++++++++++ .../bounce/block/type/TorchBlockHandler.java | 20 +++++++++++ .../bounce/block/type/package-info.java | 4 +++ .../block/type/stair/StairBlockHandler.java | 34 +++++++++++++++++++ .../bounce/block/type/stair/StairType.java | 25 ++++++++++++++ .../bounce/block/type/stair/package-info.java | 4 +++ 10 files changed, 204 insertions(+) create mode 100644 block/src/main/java/net/theevilreaper/bounce/block/BlockLoader.java create mode 100644 block/src/main/java/net/theevilreaper/bounce/block/type/CandleBlockHandler.java create mode 100644 block/src/main/java/net/theevilreaper/bounce/block/type/ChainBlockHandler.java create mode 100644 block/src/main/java/net/theevilreaper/bounce/block/type/LanternBlockHandler.java create mode 100644 block/src/main/java/net/theevilreaper/bounce/block/type/SlabBlockHandler.java create mode 100644 block/src/main/java/net/theevilreaper/bounce/block/type/TorchBlockHandler.java create mode 100644 block/src/main/java/net/theevilreaper/bounce/block/type/package-info.java create mode 100644 block/src/main/java/net/theevilreaper/bounce/block/type/stair/StairBlockHandler.java create mode 100644 block/src/main/java/net/theevilreaper/bounce/block/type/stair/StairType.java create mode 100644 block/src/main/java/net/theevilreaper/bounce/block/type/stair/package-info.java diff --git a/block/src/main/java/net/theevilreaper/bounce/block/BlockLoader.java b/block/src/main/java/net/theevilreaper/bounce/block/BlockLoader.java new file mode 100644 index 0000000..db3d59e --- /dev/null +++ b/block/src/main/java/net/theevilreaper/bounce/block/BlockLoader.java @@ -0,0 +1,4 @@ +package net.theevilreaper.bounce.block; + +public class BlockLoader { +} diff --git a/block/src/main/java/net/theevilreaper/bounce/block/type/CandleBlockHandler.java b/block/src/main/java/net/theevilreaper/bounce/block/type/CandleBlockHandler.java new file mode 100644 index 0000000..0a341c6 --- /dev/null +++ b/block/src/main/java/net/theevilreaper/bounce/block/type/CandleBlockHandler.java @@ -0,0 +1,31 @@ +package net.theevilreaper.bounce.block.type; + +import net.kyori.adventure.key.Key; +import net.minestom.server.instance.block.BlockHandler; +import net.minestom.server.tag.Tag; + +import java.util.Collection; +import java.util.List; + +public class CandleBlockHandler implements BlockHandler { + + private final Key key; + + public CandleBlockHandler(Key key) { + this.key = key; + } + + @Override + public Key getKey() { + return this.key; + } + + @Override + public Collection> getBlockEntityTags() { + return List.of( + Tag.Integer("candles"), + Tag.Boolean("lit"), + Tag.Boolean("waterlogged") + ); + } +} diff --git a/block/src/main/java/net/theevilreaper/bounce/block/type/ChainBlockHandler.java b/block/src/main/java/net/theevilreaper/bounce/block/type/ChainBlockHandler.java new file mode 100644 index 0000000..e08f886 --- /dev/null +++ b/block/src/main/java/net/theevilreaper/bounce/block/type/ChainBlockHandler.java @@ -0,0 +1,25 @@ +package net.theevilreaper.bounce.block.type; + +import net.kyori.adventure.key.Key; +import net.minestom.server.instance.block.Block; +import net.minestom.server.instance.block.BlockHandler; +import net.minestom.server.tag.Tag; + +import java.util.Collection; +import java.util.List; + +public class ChainBlockHandler implements BlockHandler { + + @Override + public Key getKey() { + return Block.CHAIN.key(); + } + + @Override + public Collection> getBlockEntityTags() { + return List.of( + Tag.String("axis"), + Tag.Boolean("waterlogged") + ); + } +} diff --git a/block/src/main/java/net/theevilreaper/bounce/block/type/LanternBlockHandler.java b/block/src/main/java/net/theevilreaper/bounce/block/type/LanternBlockHandler.java new file mode 100644 index 0000000..1ca2ecf --- /dev/null +++ b/block/src/main/java/net/theevilreaper/bounce/block/type/LanternBlockHandler.java @@ -0,0 +1,27 @@ +package net.theevilreaper.bounce.block.type; + +import net.kyori.adventure.key.Key; +import net.minestom.server.instance.block.BlockHandler; +import net.minestom.server.instance.block.BlockSoundType; +import net.minestom.server.tag.Tag; + +import java.util.Collection; +import java.util.List; + +public class LanternBlockHandler implements BlockHandler { + + public static final Key KEY = BlockSoundType.LANTERN.key(); + + @Override + public Key getKey() { + return BlockSoundType.LANTERN.key(); + } + + @Override + public Collection> getBlockEntityTags() { + return List.of( + Tag.Boolean("hanging"), + Tag.Boolean("waterlogged") + ); + } +} diff --git a/block/src/main/java/net/theevilreaper/bounce/block/type/SlabBlockHandler.java b/block/src/main/java/net/theevilreaper/bounce/block/type/SlabBlockHandler.java new file mode 100644 index 0000000..2f88cfe --- /dev/null +++ b/block/src/main/java/net/theevilreaper/bounce/block/type/SlabBlockHandler.java @@ -0,0 +1,30 @@ +package net.theevilreaper.bounce.block.type; + +import net.kyori.adventure.key.Key; +import net.minestom.server.instance.block.BlockHandler; +import net.minestom.server.tag.Tag; + +import java.util.Collection; +import java.util.List; + +public class SlabBlockHandler implements BlockHandler { + + private final Key key; + + public SlabBlockHandler(Key key) { + this.key = key; + } + + @Override + public Key getKey() { + return this.key; + } + + @Override + public Collection> getBlockEntityTags() { + return List.of( + Tag.String("type"), + Tag.Boolean("waterlogged") + ); + } +} diff --git a/block/src/main/java/net/theevilreaper/bounce/block/type/TorchBlockHandler.java b/block/src/main/java/net/theevilreaper/bounce/block/type/TorchBlockHandler.java new file mode 100644 index 0000000..49941b2 --- /dev/null +++ b/block/src/main/java/net/theevilreaper/bounce/block/type/TorchBlockHandler.java @@ -0,0 +1,20 @@ +package net.theevilreaper.bounce.block.type; + +import net.kyori.adventure.key.Key; +import net.minestom.server.instance.block.BlockHandler; +import net.minestom.server.tag.Tag; + +import java.util.Collection; +import java.util.List; + +public class TorchBlockHandler implements BlockHandler { + @Override + public Key getKey() { + return Key.key("minecraft:torch"); + } + + @Override + public Collection> getBlockEntityTags() { + return List.of(Tag.String("facing")); + } +} diff --git a/block/src/main/java/net/theevilreaper/bounce/block/type/package-info.java b/block/src/main/java/net/theevilreaper/bounce/block/type/package-info.java new file mode 100644 index 0000000..6c80ca8 --- /dev/null +++ b/block/src/main/java/net/theevilreaper/bounce/block/type/package-info.java @@ -0,0 +1,4 @@ +@NotNullByDefault +package net.theevilreaper.bounce.block.type; + +import org.jetbrains.annotations.NotNullByDefault; \ No newline at end of file diff --git a/block/src/main/java/net/theevilreaper/bounce/block/type/stair/StairBlockHandler.java b/block/src/main/java/net/theevilreaper/bounce/block/type/stair/StairBlockHandler.java new file mode 100644 index 0000000..161f8f6 --- /dev/null +++ b/block/src/main/java/net/theevilreaper/bounce/block/type/stair/StairBlockHandler.java @@ -0,0 +1,34 @@ +package net.theevilreaper.bounce.block.type.stair; + +import net.kyori.adventure.key.Key; +import net.minestom.server.instance.block.Block; +import net.minestom.server.instance.block.BlockHandler; +import net.minestom.server.tag.Tag; +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; +import java.util.List; + +public class StairBlockHandler implements BlockHandler { + + private final Block block; + + public StairBlockHandler(@NotNull Block block) { + this.block = block; + } + + @Override + public @NotNull Key getKey() { + return block.key(); + } + + @Override + public @NotNull Collection> getBlockEntityTags() { + return List.of( + Tag.String("facing"), + Tag.String("half"), + Tag.String("shape"), + Tag.Boolean("waterlogged") + ); + } +} diff --git a/block/src/main/java/net/theevilreaper/bounce/block/type/stair/StairType.java b/block/src/main/java/net/theevilreaper/bounce/block/type/stair/StairType.java new file mode 100644 index 0000000..31cb182 --- /dev/null +++ b/block/src/main/java/net/theevilreaper/bounce/block/type/stair/StairType.java @@ -0,0 +1,25 @@ +package net.theevilreaper.bounce.block.type.stair; + +import net.minestom.server.instance.block.Block; +import org.jetbrains.annotations.NotNull; + +public enum StairType { + + OAK(Block.OAK_STAIRS), + SPRUCE(Block.SPRUCE_STAIRS), + BIRCH(Block.BIRCH_STAIRS), + JUNGLE(Block.JUNGLE_STAIRS), + ACACIA(Block.ACACIA_STAIRS), + DARK_OAK(Block.DARK_OAK_STAIRS); + + private final Block block; + + StairType(Block block) { + this.block = block; + } + + public Block getBlock() { + return block; + } + +} diff --git a/block/src/main/java/net/theevilreaper/bounce/block/type/stair/package-info.java b/block/src/main/java/net/theevilreaper/bounce/block/type/stair/package-info.java new file mode 100644 index 0000000..79e7fbc --- /dev/null +++ b/block/src/main/java/net/theevilreaper/bounce/block/type/stair/package-info.java @@ -0,0 +1,4 @@ +@NotNullByDefault +package net.theevilreaper.bounce.block.type.stair; + +import org.jetbrains.annotations.NotNullByDefault; \ No newline at end of file From 885f6be2929aa02c15d15ea0800d421622003696 Mon Sep 17 00:00:00 2001 From: theEvilReaper Date: Mon, 25 Aug 2025 11:46:48 +0200 Subject: [PATCH 04/17] Add lantern package --- .../block/type/LanternBlockHandler.java | 27 ---------- .../type/lantern/LanternBlockFactory.java | 44 +++++++++++++++++ .../type/lantern/LanternBlockHandler.java | 49 +++++++++++++++++++ .../block/type/lantern/package-info.java | 4 ++ 4 files changed, 97 insertions(+), 27 deletions(-) delete mode 100644 block/src/main/java/net/theevilreaper/bounce/block/type/LanternBlockHandler.java create mode 100644 block/src/main/java/net/theevilreaper/bounce/block/type/lantern/LanternBlockFactory.java create mode 100644 block/src/main/java/net/theevilreaper/bounce/block/type/lantern/LanternBlockHandler.java create mode 100644 block/src/main/java/net/theevilreaper/bounce/block/type/lantern/package-info.java diff --git a/block/src/main/java/net/theevilreaper/bounce/block/type/LanternBlockHandler.java b/block/src/main/java/net/theevilreaper/bounce/block/type/LanternBlockHandler.java deleted file mode 100644 index 1ca2ecf..0000000 --- a/block/src/main/java/net/theevilreaper/bounce/block/type/LanternBlockHandler.java +++ /dev/null @@ -1,27 +0,0 @@ -package net.theevilreaper.bounce.block.type; - -import net.kyori.adventure.key.Key; -import net.minestom.server.instance.block.BlockHandler; -import net.minestom.server.instance.block.BlockSoundType; -import net.minestom.server.tag.Tag; - -import java.util.Collection; -import java.util.List; - -public class LanternBlockHandler implements BlockHandler { - - public static final Key KEY = BlockSoundType.LANTERN.key(); - - @Override - public Key getKey() { - return BlockSoundType.LANTERN.key(); - } - - @Override - public Collection> getBlockEntityTags() { - return List.of( - Tag.Boolean("hanging"), - Tag.Boolean("waterlogged") - ); - } -} diff --git a/block/src/main/java/net/theevilreaper/bounce/block/type/lantern/LanternBlockFactory.java b/block/src/main/java/net/theevilreaper/bounce/block/type/lantern/LanternBlockFactory.java new file mode 100644 index 0000000..b9a395b --- /dev/null +++ b/block/src/main/java/net/theevilreaper/bounce/block/type/lantern/LanternBlockFactory.java @@ -0,0 +1,44 @@ +package net.theevilreaper.bounce.block.type.lantern; + +import net.minestom.server.instance.block.Block; +import org.jetbrains.annotations.Contract; + +public interface LanternBlockFactory { + + /** + * Creates a new {@link LanternBlockHandler} for the specified block type. + * + * @param type the type of block to create a handler for + * @return a new {@link LanternBlockHandler} for the specified block type + */ + @Contract("_ -> new") + static LanternBlockHandler create(Type type) { + return new LanternBlockHandler(type.getBlock()); + } + + public enum Type { + + LANTERN(Block.LANTERN), + SOUL_LANTERN(Block.SOUL_LANTERN); + + private final Block block; + + /** + * Constructs a new enumeration entry with the specified block. + * + * @param block the block associated with this type + */ + Type(Block block) { + this.block = block; + } + + /** + * Gets the block associated with this type. + * + * @return the block + */ + public Block getBlock() { + return this.block; + } + } +} diff --git a/block/src/main/java/net/theevilreaper/bounce/block/type/lantern/LanternBlockHandler.java b/block/src/main/java/net/theevilreaper/bounce/block/type/lantern/LanternBlockHandler.java new file mode 100644 index 0000000..dfc5813 --- /dev/null +++ b/block/src/main/java/net/theevilreaper/bounce/block/type/lantern/LanternBlockHandler.java @@ -0,0 +1,49 @@ +package net.theevilreaper.bounce.block.type.lantern; + +import net.kyori.adventure.key.Key; +import net.minestom.server.instance.block.Block; +import net.minestom.server.instance.block.BlockHandler; +import net.minestom.server.tag.Tag; + +import java.util.Collection; +import java.util.List; + +/** + * Represents the block handler for the lantern block. + * + * @author theEvilReaper + * @version 1.0.0 + * @since 0.1.0 + */ +public class LanternBlockHandler implements BlockHandler { + + private final Block block; + + /** + * Constructs a new {@code LanternBlockHandler} with the specified block. + * + * @param block the block associated with this handler + */ + LanternBlockHandler(Block block) { + this.block = block; + } + + /** + * {@inheritDoc} + */ + @Override + public Key getKey() { + return block.key(); + } + + /** + * {@inheritDoc} + */ + @Override + public Collection> getBlockEntityTags() { + return List.of( + Tag.Boolean("hanging"), + Tag.Boolean("waterlogged") + ); + } +} diff --git a/block/src/main/java/net/theevilreaper/bounce/block/type/lantern/package-info.java b/block/src/main/java/net/theevilreaper/bounce/block/type/lantern/package-info.java new file mode 100644 index 0000000..e66a654 --- /dev/null +++ b/block/src/main/java/net/theevilreaper/bounce/block/type/lantern/package-info.java @@ -0,0 +1,4 @@ +@NotNullByDefault +package net.theevilreaper.bounce.block.type.lantern; + +import org.jetbrains.annotations.NotNullByDefault; \ No newline at end of file From cc4967deb43cbae51c9e6c6a128eb254145d336e Mon Sep 17 00:00:00 2001 From: theEvilReaper Date: Mon, 25 Aug 2025 11:46:58 +0200 Subject: [PATCH 05/17] Add test for the lantern block handler creation --- .../type/lantern/LanternBlockFactoryTest.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 block/src/test/java/net/theevilreaper/bounce/block/type/lantern/LanternBlockFactoryTest.java diff --git a/block/src/test/java/net/theevilreaper/bounce/block/type/lantern/LanternBlockFactoryTest.java b/block/src/test/java/net/theevilreaper/bounce/block/type/lantern/LanternBlockFactoryTest.java new file mode 100644 index 0000000..43dcb26 --- /dev/null +++ b/block/src/test/java/net/theevilreaper/bounce/block/type/lantern/LanternBlockFactoryTest.java @@ -0,0 +1,17 @@ +package net.theevilreaper.bounce.block.type.lantern; + +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EnumSource; + +import static org.junit.jupiter.api.Assertions.*; + +class LanternBlockFactoryTest { + + @ParameterizedTest(name = "Test creation for lantern type {0}") + @EnumSource(LanternBlockFactory.Type.class) + void testLanternBlockHandlerCreation(LanternBlockFactory.Type type) { + LanternBlockHandler lanternBlockHandler = LanternBlockFactory.create(type); + assertNotNull(lanternBlockHandler, "LanternBlockHandler should not be null for type: " + type); + assertEquals(type.getBlock().key(), lanternBlockHandler.getKey()); + } +} From d87219c6afbb6bdf364c3d8c365d5046cdb8b24e Mon Sep 17 00:00:00 2001 From: theEvilReaper Date: Mon, 25 Aug 2025 12:07:51 +0200 Subject: [PATCH 06/17] Work on the loader part --- .../bounce/block/BlockLoader.java | 26 ++++++++++++++++++- .../bounce/block/BlockLoaderBuilder.java | 22 ++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 block/src/main/java/net/theevilreaper/bounce/block/BlockLoaderBuilder.java diff --git a/block/src/main/java/net/theevilreaper/bounce/block/BlockLoader.java b/block/src/main/java/net/theevilreaper/bounce/block/BlockLoader.java index db3d59e..7cdc1cb 100644 --- a/block/src/main/java/net/theevilreaper/bounce/block/BlockLoader.java +++ b/block/src/main/java/net/theevilreaper/bounce/block/BlockLoader.java @@ -1,4 +1,28 @@ package net.theevilreaper.bounce.block; -public class BlockLoader { +import net.minestom.server.instance.block.BlockManager; +import org.jetbrains.annotations.Contract; + +import net.theevilreaper.bounce.block.type.lantern.LanternBlockFactory.Type; + +public sealed interface BlockLoader permits BlockLoaderBuilder { + + /** + * Creates a new {@link BlockLoaderBuilder} for the specified block manager. + * + * @param blockManager the block manager to use + * @return a new {@link BlockLoaderBuilder} instance + */ + @Contract(value = "_ -> new", pure = true) + static BlockLoader builder(BlockManager blockManager) { + return new BlockLoaderBuilder(blockManager); + } + + /** + * Registers a new torch variant. + * + * @param type the type of the torch variant + * @return this builder instance for chaining + */ + BlockLoader lanternVariant(Type type); } diff --git a/block/src/main/java/net/theevilreaper/bounce/block/BlockLoaderBuilder.java b/block/src/main/java/net/theevilreaper/bounce/block/BlockLoaderBuilder.java new file mode 100644 index 0000000..5420b41 --- /dev/null +++ b/block/src/main/java/net/theevilreaper/bounce/block/BlockLoaderBuilder.java @@ -0,0 +1,22 @@ +package net.theevilreaper.bounce.block; + +import net.minestom.server.instance.block.BlockManager; +import net.theevilreaper.bounce.block.type.lantern.LanternBlockFactory; + +public final class BlockLoaderBuilder implements BlockLoader { + + private final BlockManager blockManager; + + BlockLoaderBuilder(BlockManager blockManager) { + this.blockManager = blockManager; + } + + /** + * {@inheritDoc} + */ + @Override + public BlockLoader lanternVariant(LanternBlockFactory.Type type) { + blockManager.registerHandler(type.getBlock().key(), () -> LanternBlockFactory.create(type)); + return this; + } +} From 47b37144ca8873f939eaa55301df433d5d2559bb Mon Sep 17 00:00:00 2001 From: theEvilReaper Date: Mon, 25 Aug 2025 12:08:04 +0200 Subject: [PATCH 07/17] Add package-info file --- .../java/net/theevilreaper/bounce/block/package-info.java | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 block/src/main/java/net/theevilreaper/bounce/block/package-info.java diff --git a/block/src/main/java/net/theevilreaper/bounce/block/package-info.java b/block/src/main/java/net/theevilreaper/bounce/block/package-info.java new file mode 100644 index 0000000..3bbc072 --- /dev/null +++ b/block/src/main/java/net/theevilreaper/bounce/block/package-info.java @@ -0,0 +1,4 @@ +@NotNullByDefault +package net.theevilreaper.bounce.block; + +import org.jetbrains.annotations.NotNullByDefault; \ No newline at end of file From 3c36e9a5680171eb28b6a56c50f5bc986115d501 Mon Sep 17 00:00:00 2001 From: theEvilReaper Date: Mon, 25 Aug 2025 12:08:17 +0200 Subject: [PATCH 08/17] Remove public keyword --- .../bounce/block/type/lantern/LanternBlockFactory.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/block/src/main/java/net/theevilreaper/bounce/block/type/lantern/LanternBlockFactory.java b/block/src/main/java/net/theevilreaper/bounce/block/type/lantern/LanternBlockFactory.java index b9a395b..a4d230f 100644 --- a/block/src/main/java/net/theevilreaper/bounce/block/type/lantern/LanternBlockFactory.java +++ b/block/src/main/java/net/theevilreaper/bounce/block/type/lantern/LanternBlockFactory.java @@ -16,7 +16,7 @@ static LanternBlockHandler create(Type type) { return new LanternBlockHandler(type.getBlock()); } - public enum Type { + enum Type { LANTERN(Block.LANTERN), SOUL_LANTERN(Block.SOUL_LANTERN); From f102664a0ccfec8724402c633af79c5e7b2dca09 Mon Sep 17 00:00:00 2001 From: theEvilReaper Date: Mon, 25 Aug 2025 12:09:35 +0200 Subject: [PATCH 09/17] Remove import --- .../net/theevilreaper/bounce/block/type/stair/StairType.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/block/src/main/java/net/theevilreaper/bounce/block/type/stair/StairType.java b/block/src/main/java/net/theevilreaper/bounce/block/type/stair/StairType.java index 31cb182..d632d63 100644 --- a/block/src/main/java/net/theevilreaper/bounce/block/type/stair/StairType.java +++ b/block/src/main/java/net/theevilreaper/bounce/block/type/stair/StairType.java @@ -1,7 +1,6 @@ package net.theevilreaper.bounce.block.type.stair; import net.minestom.server.instance.block.Block; -import org.jetbrains.annotations.NotNull; public enum StairType { @@ -21,5 +20,4 @@ public enum StairType { public Block getBlock() { return block; } - } From f367ba8e759428facb2604e8437754ea76ae4dfa Mon Sep 17 00:00:00 2001 From: theEvilReaper Date: Mon, 25 Aug 2025 20:30:09 +0200 Subject: [PATCH 10/17] Add more block handlers --- .../bounce/block/type/BarrelBlockHandler.java | 25 ++++++++++++++++++ .../block/type/GrindstoneBlockHandler.java | 25 ++++++++++++++++++ .../block/type/LecternBlockHandler.java | 26 +++++++++++++++++++ .../bounce/block/type/LeverBlockHandler.java | 25 ++++++++++++++++++ .../type/player/PlayerHeadBlockHandler.java | 25 ++++++++++++++++++ .../player/PlayerWallHeadBlockHandler.java | 25 ++++++++++++++++++ .../block/type/player/package-info.java | 4 +++ 7 files changed, 155 insertions(+) create mode 100644 block/src/main/java/net/theevilreaper/bounce/block/type/BarrelBlockHandler.java create mode 100644 block/src/main/java/net/theevilreaper/bounce/block/type/GrindstoneBlockHandler.java create mode 100644 block/src/main/java/net/theevilreaper/bounce/block/type/LecternBlockHandler.java create mode 100644 block/src/main/java/net/theevilreaper/bounce/block/type/LeverBlockHandler.java create mode 100644 block/src/main/java/net/theevilreaper/bounce/block/type/player/PlayerHeadBlockHandler.java create mode 100644 block/src/main/java/net/theevilreaper/bounce/block/type/player/PlayerWallHeadBlockHandler.java create mode 100644 block/src/main/java/net/theevilreaper/bounce/block/type/player/package-info.java diff --git a/block/src/main/java/net/theevilreaper/bounce/block/type/BarrelBlockHandler.java b/block/src/main/java/net/theevilreaper/bounce/block/type/BarrelBlockHandler.java new file mode 100644 index 0000000..377dcc6 --- /dev/null +++ b/block/src/main/java/net/theevilreaper/bounce/block/type/BarrelBlockHandler.java @@ -0,0 +1,25 @@ +package net.theevilreaper.bounce.block.type; + +import net.kyori.adventure.key.Key; +import net.minestom.server.instance.block.Block; +import net.minestom.server.instance.block.BlockHandler; +import net.minestom.server.tag.Tag; + +import java.util.Collection; +import java.util.List; + +public class BarrelBlockHandler implements BlockHandler { + + @Override + public Key getKey() { + return Block.BARREL.key(); + } + + @Override + public Collection> getBlockEntityTags() { + return List.of( + Tag.String("facing"), + Tag.Boolean("open") + ); + } +} diff --git a/block/src/main/java/net/theevilreaper/bounce/block/type/GrindstoneBlockHandler.java b/block/src/main/java/net/theevilreaper/bounce/block/type/GrindstoneBlockHandler.java new file mode 100644 index 0000000..90362c8 --- /dev/null +++ b/block/src/main/java/net/theevilreaper/bounce/block/type/GrindstoneBlockHandler.java @@ -0,0 +1,25 @@ +package net.theevilreaper.bounce.block.type; + +import net.kyori.adventure.key.Key; +import net.minestom.server.instance.block.Block; +import net.minestom.server.instance.block.BlockHandler; +import net.minestom.server.tag.Tag; + +import java.util.Collection; +import java.util.List; + +public class GrindstoneBlockHandler implements BlockHandler { + + @Override + public Key getKey() { + return Block.GRINDSTONE.key(); + } + + @Override + public Collection> getBlockEntityTags() { + return List.of( + Tag.String("face"), + Tag.String("facing") + ); + } +} diff --git a/block/src/main/java/net/theevilreaper/bounce/block/type/LecternBlockHandler.java b/block/src/main/java/net/theevilreaper/bounce/block/type/LecternBlockHandler.java new file mode 100644 index 0000000..7bfcdb2 --- /dev/null +++ b/block/src/main/java/net/theevilreaper/bounce/block/type/LecternBlockHandler.java @@ -0,0 +1,26 @@ +package net.theevilreaper.bounce.block.type; + +import net.kyori.adventure.key.Key; +import net.minestom.server.instance.block.Block; +import net.minestom.server.instance.block.BlockHandler; +import net.minestom.server.tag.Tag; +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; +import java.util.List; + +public class LecternBlockHandler implements BlockHandler { + @Override + public Key getKey() { + return Block.LECTERN.key(); + } + + @Override + public Collection> getBlockEntityTags() { + return List.of( + Tag.String("facing"), + Tag.Boolean("has_book"), + Tag.Boolean("powered") + ); + } +} diff --git a/block/src/main/java/net/theevilreaper/bounce/block/type/LeverBlockHandler.java b/block/src/main/java/net/theevilreaper/bounce/block/type/LeverBlockHandler.java new file mode 100644 index 0000000..537839e --- /dev/null +++ b/block/src/main/java/net/theevilreaper/bounce/block/type/LeverBlockHandler.java @@ -0,0 +1,25 @@ +package net.theevilreaper.bounce.block.type; + +import net.kyori.adventure.key.Key; +import net.minestom.server.instance.block.Block; +import net.minestom.server.instance.block.BlockHandler; +import net.minestom.server.tag.Tag; + +import java.util.Collection; +import java.util.List; + +public class LeverBlockHandler implements BlockHandler { + @Override + public Key getKey() { + return Block.LEVER.key(); + } + + @Override + public Collection> getBlockEntityTags() { + return List.of( + Tag.String("face"), + Tag.String("facing"), + Tag.Boolean("powered") + ); + } +} diff --git a/block/src/main/java/net/theevilreaper/bounce/block/type/player/PlayerHeadBlockHandler.java b/block/src/main/java/net/theevilreaper/bounce/block/type/player/PlayerHeadBlockHandler.java new file mode 100644 index 0000000..e72899e --- /dev/null +++ b/block/src/main/java/net/theevilreaper/bounce/block/type/player/PlayerHeadBlockHandler.java @@ -0,0 +1,25 @@ +package net.theevilreaper.bounce.block.type.player; + +import net.kyori.adventure.key.Key; +import net.minestom.server.instance.block.Block; +import net.minestom.server.instance.block.BlockHandler; +import net.minestom.server.tag.Tag; + +import java.util.Collection; +import java.util.List; + +public class PlayerHeadBlockHandler implements BlockHandler { + + @Override + public Key getKey() { + return Block.PLAYER_HEAD.key(); + } + + @Override + public Collection> getBlockEntityTags() { + return List.of( + Tag.Boolean("powered"), + Tag.Integer("rotation") + ); + } +} diff --git a/block/src/main/java/net/theevilreaper/bounce/block/type/player/PlayerWallHeadBlockHandler.java b/block/src/main/java/net/theevilreaper/bounce/block/type/player/PlayerWallHeadBlockHandler.java new file mode 100644 index 0000000..3638c22 --- /dev/null +++ b/block/src/main/java/net/theevilreaper/bounce/block/type/player/PlayerWallHeadBlockHandler.java @@ -0,0 +1,25 @@ +package net.theevilreaper.bounce.block.type.player; + +import net.kyori.adventure.key.Key; +import net.minestom.server.instance.block.Block; +import net.minestom.server.instance.block.BlockHandler; +import net.minestom.server.tag.Tag; + +import java.util.Collection; +import java.util.List; + +public class PlayerWallHeadBlockHandler implements BlockHandler { + + @Override + public Key getKey() { + return Block.PLAYER_WALL_HEAD.key(); + } + + @Override + public Collection> getBlockEntityTags() { + return List.of( + Tag.String("facing"), + Tag.Boolean("powered") + ); + } +} diff --git a/block/src/main/java/net/theevilreaper/bounce/block/type/player/package-info.java b/block/src/main/java/net/theevilreaper/bounce/block/type/player/package-info.java new file mode 100644 index 0000000..5a5a7ac --- /dev/null +++ b/block/src/main/java/net/theevilreaper/bounce/block/type/player/package-info.java @@ -0,0 +1,4 @@ +@NotNullByDefault +package net.theevilreaper.bounce.block.type.player; + +import org.jetbrains.annotations.NotNullByDefault; \ No newline at end of file From 2f267c93834c75f90c538766a58f008a39275d45 Mon Sep 17 00:00:00 2001 From: theEvilReaper Date: Mon, 8 Sep 2025 21:20:17 +0200 Subject: [PATCH 11/17] Add block module --- setup/build.gradle.kts | 1 + 1 file changed, 1 insertion(+) diff --git a/setup/build.gradle.kts b/setup/build.gradle.kts index 8cab97c..849c17f 100644 --- a/setup/build.gradle.kts +++ b/setup/build.gradle.kts @@ -11,6 +11,7 @@ description = "Bounce Setup Server" dependencies { implementation(project(":common")) + implementation(project(":block")) implementation(platform(libs.mycelium.bom)) implementation(platform(libs.aonyx.bom)) implementation(libs.adventure) From 454d5224c64b7879ce00190070248d668931d9c4 Mon Sep 17 00:00:00 2001 From: theEvilReaper Date: Mon, 8 Sep 2025 21:20:46 +0200 Subject: [PATCH 12/17] Add more handler options --- .../bounce/block/BlockLoader.java | 36 +++++++++++ .../bounce/block/BlockLoaderBuilder.java | 62 +++++++++++++++++++ 2 files changed, 98 insertions(+) diff --git a/block/src/main/java/net/theevilreaper/bounce/block/BlockLoader.java b/block/src/main/java/net/theevilreaper/bounce/block/BlockLoader.java index 7cdc1cb..5823977 100644 --- a/block/src/main/java/net/theevilreaper/bounce/block/BlockLoader.java +++ b/block/src/main/java/net/theevilreaper/bounce/block/BlockLoader.java @@ -1,5 +1,6 @@ package net.theevilreaper.bounce.block; +import net.minestom.server.instance.block.BlockHandler; import net.minestom.server.instance.block.BlockManager; import org.jetbrains.annotations.Contract; @@ -25,4 +26,39 @@ static BlockLoader builder(BlockManager blockManager) { * @return this builder instance for chaining */ BlockLoader lanternVariant(Type type); + + /** + * Registers a new head variant. + * + * @return this builder instance for chaining + */ + BlockLoader playerHead(); + + /** + * Registers a new wall head variant. + * + * @return this builder instance for chaining + */ + BlockLoader playerWallHead(); + + /** + * Registers a new barrel variant. + * + * @return this builder instance for chaining + */ + BlockLoader barrel(); + + /** + * Registers a new iron bars variant. + * + * @return this builder instance for chaining + */ + BlockLoader ironBars(); + + /** + * Registers a new grindstone variant. + * + * @return this builder instance for chaining + */ + BlockLoader grindStone(); } diff --git a/block/src/main/java/net/theevilreaper/bounce/block/BlockLoaderBuilder.java b/block/src/main/java/net/theevilreaper/bounce/block/BlockLoaderBuilder.java index 5420b41..c51abfd 100644 --- a/block/src/main/java/net/theevilreaper/bounce/block/BlockLoaderBuilder.java +++ b/block/src/main/java/net/theevilreaper/bounce/block/BlockLoaderBuilder.java @@ -1,7 +1,12 @@ package net.theevilreaper.bounce.block; +import net.minestom.server.instance.block.BlockHandler; import net.minestom.server.instance.block.BlockManager; +import net.theevilreaper.bounce.block.type.BarrelBlockHandler; +import net.theevilreaper.bounce.block.type.GrindstoneBlockHandler; import net.theevilreaper.bounce.block.type.lantern.LanternBlockFactory; +import net.theevilreaper.bounce.block.type.player.PlayerHeadBlockHandler; +import net.theevilreaper.bounce.block.type.player.PlayerWallHeadBlockHandler; public final class BlockLoaderBuilder implements BlockLoader { @@ -11,6 +16,15 @@ public final class BlockLoaderBuilder implements BlockLoader { this.blockManager = blockManager; } + public static void fromAll(BlockManager blockManager) { + BlockLoaderBuilder builder = new BlockLoaderBuilder(blockManager); + builder.loadAll(); + } + + private void loadAll() { + + } + /** * {@inheritDoc} */ @@ -19,4 +33,52 @@ public BlockLoader lanternVariant(LanternBlockFactory.Type type) { blockManager.registerHandler(type.getBlock().key(), () -> LanternBlockFactory.create(type)); return this; } + + /** + * {@inheritDoc} + */ + @Override + public BlockLoader playerHead() { + BlockHandler blockHandler = new PlayerHeadBlockHandler(); + blockManager.registerHandler(blockHandler.getKey(), () -> blockHandler); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public BlockLoader playerWallHead() { + BlockHandler blockHandler = new PlayerWallHeadBlockHandler(); + blockManager.registerHandler(blockHandler.getKey(), () -> blockHandler); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public BlockLoader barrel() { + BlockHandler blockHandler = new BarrelBlockHandler(); + blockManager.registerHandler(blockHandler.getKey(), () -> blockHandler); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public BlockLoader ironBars() { + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public BlockLoader grindStone() { + BlockHandler blockHandler = new GrindstoneBlockHandler(); + blockManager.registerHandler(blockHandler.getKey(), () -> blockHandler); + return this; + } } From 99d9841884bf0b2a72bc531ceff5ed715284520a Mon Sep 17 00:00:00 2001 From: theEvilReaper Date: Sun, 4 Jan 2026 21:43:15 +0100 Subject: [PATCH 13/17] chore(java): update used version to 25 --- block/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/block/build.gradle.kts b/block/build.gradle.kts index 1ee6952..a63694e 100644 --- a/block/build.gradle.kts +++ b/block/build.gradle.kts @@ -7,7 +7,7 @@ version = "0.0.1" java { toolchain { - languageVersion.set(JavaLanguageVersion.of(21)) + languageVersion.set(JavaLanguageVersion.of(25)) } } From a91dac25e7dca87bf0fce8ef8bc16bc3431bb8a9 Mon Sep 17 00:00:00 2001 From: theEvilReaper Date: Sun, 4 Jan 2026 22:19:59 +0100 Subject: [PATCH 14/17] chore(block): work on more block handlers --- .../bounce/block/BlockLoader.java | 5 +++- .../bounce/block/BlockLoaderBuilder.java | 20 ++++++++++++++ ...andler.java => IronChainBlockHandler.java} | 4 +-- .../type/grates/IronGrateBlockHandler.java | 27 +++++++++++++++++++ 4 files changed, 53 insertions(+), 3 deletions(-) rename block/src/main/java/net/theevilreaper/bounce/block/type/{ChainBlockHandler.java => IronChainBlockHandler.java} (83%) create mode 100644 block/src/main/java/net/theevilreaper/bounce/block/type/grates/IronGrateBlockHandler.java diff --git a/block/src/main/java/net/theevilreaper/bounce/block/BlockLoader.java b/block/src/main/java/net/theevilreaper/bounce/block/BlockLoader.java index 5823977..78936d0 100644 --- a/block/src/main/java/net/theevilreaper/bounce/block/BlockLoader.java +++ b/block/src/main/java/net/theevilreaper/bounce/block/BlockLoader.java @@ -1,6 +1,5 @@ package net.theevilreaper.bounce.block; -import net.minestom.server.instance.block.BlockHandler; import net.minestom.server.instance.block.BlockManager; import org.jetbrains.annotations.Contract; @@ -61,4 +60,8 @@ static BlockLoader builder(BlockManager blockManager) { * @return this builder instance for chaining */ BlockLoader grindStone(); + + BlockLoader candle(); + + BlockLoader ironChain(); } diff --git a/block/src/main/java/net/theevilreaper/bounce/block/BlockLoaderBuilder.java b/block/src/main/java/net/theevilreaper/bounce/block/BlockLoaderBuilder.java index c51abfd..d5209fe 100644 --- a/block/src/main/java/net/theevilreaper/bounce/block/BlockLoaderBuilder.java +++ b/block/src/main/java/net/theevilreaper/bounce/block/BlockLoaderBuilder.java @@ -1,9 +1,13 @@ package net.theevilreaper.bounce.block; +import net.minestom.server.instance.block.Block; import net.minestom.server.instance.block.BlockHandler; import net.minestom.server.instance.block.BlockManager; import net.theevilreaper.bounce.block.type.BarrelBlockHandler; +import net.theevilreaper.bounce.block.type.CandleBlockHandler; import net.theevilreaper.bounce.block.type.GrindstoneBlockHandler; +import net.theevilreaper.bounce.block.type.IronChainBlockHandler; +import net.theevilreaper.bounce.block.type.grates.IronGrateBlockHandler; import net.theevilreaper.bounce.block.type.lantern.LanternBlockFactory; import net.theevilreaper.bounce.block.type.player.PlayerHeadBlockHandler; import net.theevilreaper.bounce.block.type.player.PlayerWallHeadBlockHandler; @@ -69,6 +73,8 @@ public BlockLoader barrel() { */ @Override public BlockLoader ironBars() { + BlockHandler blockHandler = new IronGrateBlockHandler(); + blockManager.registerHandler(blockHandler.getKey(), () -> blockHandler); return this; } @@ -81,4 +87,18 @@ public BlockLoader grindStone() { blockManager.registerHandler(blockHandler.getKey(), () -> blockHandler); return this; } + + @Override + public BlockLoader ironChain() { + BlockHandler blockHandler = new IronChainBlockHandler(); + blockManager.registerHandler(blockHandler.getKey(), () -> blockHandler); + return this; + } + + @Override + public BlockLoader candle() { + BlockHandler blockHandler = new CandleBlockHandler(Block.RED_CANDLE.key()); + blockManager.registerHandler(blockHandler.getKey(), () -> blockHandler); + return this; + } } diff --git a/block/src/main/java/net/theevilreaper/bounce/block/type/ChainBlockHandler.java b/block/src/main/java/net/theevilreaper/bounce/block/type/IronChainBlockHandler.java similarity index 83% rename from block/src/main/java/net/theevilreaper/bounce/block/type/ChainBlockHandler.java rename to block/src/main/java/net/theevilreaper/bounce/block/type/IronChainBlockHandler.java index e08f886..6adce11 100644 --- a/block/src/main/java/net/theevilreaper/bounce/block/type/ChainBlockHandler.java +++ b/block/src/main/java/net/theevilreaper/bounce/block/type/IronChainBlockHandler.java @@ -8,11 +8,11 @@ import java.util.Collection; import java.util.List; -public class ChainBlockHandler implements BlockHandler { +public class IronChainBlockHandler implements BlockHandler { @Override public Key getKey() { - return Block.CHAIN.key(); + return Block.IRON_CHAIN.key(); } @Override diff --git a/block/src/main/java/net/theevilreaper/bounce/block/type/grates/IronGrateBlockHandler.java b/block/src/main/java/net/theevilreaper/bounce/block/type/grates/IronGrateBlockHandler.java new file mode 100644 index 0000000..68aebbc --- /dev/null +++ b/block/src/main/java/net/theevilreaper/bounce/block/type/grates/IronGrateBlockHandler.java @@ -0,0 +1,27 @@ +package net.theevilreaper.bounce.block.type.grates; + +import net.kyori.adventure.key.Key; +import net.minestom.server.instance.block.BlockHandler; +import net.minestom.server.item.Material; +import net.minestom.server.tag.Tag; + +import java.util.Collection; +import java.util.List; + +public class IronGrateBlockHandler implements BlockHandler { + @Override + public Key getKey() { + return Material.IRON_BARS.key(); + } + + @Override + public Collection> getBlockEntityTags() { + return List.of( + Tag.Boolean("east"), + Tag.Boolean("north"), + Tag.Boolean("south"), + Tag.Boolean("west"), + Tag.Boolean("waterlogged") + ); + } +} From 4af1f71d04d675dcfe6f220f5f295efef374d7a2 Mon Sep 17 00:00:00 2001 From: theEvilReaper Date: Sun, 4 Jan 2026 22:20:12 +0100 Subject: [PATCH 15/17] chore(block): add usage of the block module --- build.gradle.kts | 1 + .../java/net/theevilreaper/bounce/Bounce.java | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/build.gradle.kts b/build.gradle.kts index a72b375..53f7a60 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -14,6 +14,7 @@ dependencies { implementation(platform(libs.mycelium.bom)) implementation(platform(libs.aonyx.bom)) implementation(platform(libs.cloudnet.bom)) + implementation(project(":block")) implementation(libs.adventure) implementation(libs.pvp) implementation(libs.minestom) diff --git a/src/main/java/net/theevilreaper/bounce/Bounce.java b/src/main/java/net/theevilreaper/bounce/Bounce.java index 02bf24a..b98167f 100644 --- a/src/main/java/net/theevilreaper/bounce/Bounce.java +++ b/src/main/java/net/theevilreaper/bounce/Bounce.java @@ -14,7 +14,13 @@ import net.minestom.server.event.player.PlayerChatEvent; import net.minestom.server.event.player.PlayerDisconnectEvent; import net.minestom.server.event.player.PlayerSpawnEvent; +import net.minestom.server.instance.block.Block; +import net.minestom.server.instance.block.BlockHandler; +import net.minestom.server.instance.block.BlockManager; import net.theevilreaper.aves.map.provider.MapProvider; +import net.theevilreaper.bounce.block.BlockLoader; +import net.theevilreaper.bounce.block.BlockLoaderBuilder; +import net.theevilreaper.bounce.block.type.lantern.LanternBlockFactory; import net.theevilreaper.bounce.commands.StartCommand; import net.theevilreaper.bounce.common.ListenerHandling; import net.theevilreaper.bounce.common.config.GameConfig; @@ -92,6 +98,7 @@ public void load() { .add(CombatFeatures.VANILLA_ENCHANTMENT) .build(); globalEventHandler.addChild(featureSet.createNode()); + loadBlocks(); } public void unload() { @@ -153,4 +160,17 @@ private void handleGeneralJoin(@NotNull Player player) { this.mapProvider.teleportToSpawn(player, false); this.scoreboard.addViewer(player); } + + private void loadBlocks() { + BlockManager blockHandler = MinecraftServer.getBlockManager(); + BlockLoader blockLoader = BlockLoader.builder(blockHandler); + blockLoader + .candle() + .barrel() + .ironBars() + .grindStone() + .lanternVariant(LanternBlockFactory.Type.LANTERN) + .ironChain(); + + } } From 8e8e1129dc01046c312ee924e1630b31368e1b96 Mon Sep 17 00:00:00 2001 From: theEvilReaper Date: Mon, 5 Jan 2026 21:04:34 +0100 Subject: [PATCH 16/17] chore(block): more block handling stuff --- .../bounce/block/BlockLoader.java | 10 +++ .../bounce/block/BlockLoaderBuilder.java | 61 ++++++++++++++++--- .../block/type/BambooPotBlockHandler.java | 23 +++++++ .../block/type/gates/GateBlockHandler.java | 31 ++++++++++ .../block/type/stairs/StairsBlockHandler.java | 33 ++++++++++ .../java/net/theevilreaper/bounce/Bounce.java | 8 ++- 6 files changed, 155 insertions(+), 11 deletions(-) create mode 100644 block/src/main/java/net/theevilreaper/bounce/block/type/BambooPotBlockHandler.java create mode 100644 block/src/main/java/net/theevilreaper/bounce/block/type/gates/GateBlockHandler.java create mode 100644 block/src/main/java/net/theevilreaper/bounce/block/type/stairs/StairsBlockHandler.java diff --git a/block/src/main/java/net/theevilreaper/bounce/block/BlockLoader.java b/block/src/main/java/net/theevilreaper/bounce/block/BlockLoader.java index 78936d0..0f7d578 100644 --- a/block/src/main/java/net/theevilreaper/bounce/block/BlockLoader.java +++ b/block/src/main/java/net/theevilreaper/bounce/block/BlockLoader.java @@ -18,6 +18,10 @@ static BlockLoader builder(BlockManager blockManager) { return new BlockLoaderBuilder(blockManager); } + BlockLoader torch(); + + BlockLoader fenceGate(); + /** * Registers a new torch variant. * @@ -64,4 +68,10 @@ static BlockLoader builder(BlockManager blockManager) { BlockLoader candle(); BlockLoader ironChain(); + + BlockLoader stairs(); + + BlockLoader slab(); + + BlockLoader flowerPot(); } diff --git a/block/src/main/java/net/theevilreaper/bounce/block/BlockLoaderBuilder.java b/block/src/main/java/net/theevilreaper/bounce/block/BlockLoaderBuilder.java index d5209fe..1744e28 100644 --- a/block/src/main/java/net/theevilreaper/bounce/block/BlockLoaderBuilder.java +++ b/block/src/main/java/net/theevilreaper/bounce/block/BlockLoaderBuilder.java @@ -3,14 +3,19 @@ import net.minestom.server.instance.block.Block; import net.minestom.server.instance.block.BlockHandler; import net.minestom.server.instance.block.BlockManager; +import net.theevilreaper.bounce.block.type.BambooPotBlockHandler; import net.theevilreaper.bounce.block.type.BarrelBlockHandler; import net.theevilreaper.bounce.block.type.CandleBlockHandler; import net.theevilreaper.bounce.block.type.GrindstoneBlockHandler; import net.theevilreaper.bounce.block.type.IronChainBlockHandler; +import net.theevilreaper.bounce.block.type.SlabBlockHandler; +import net.theevilreaper.bounce.block.type.TorchBlockHandler; +import net.theevilreaper.bounce.block.type.gates.GateBlockHandler; import net.theevilreaper.bounce.block.type.grates.IronGrateBlockHandler; import net.theevilreaper.bounce.block.type.lantern.LanternBlockFactory; import net.theevilreaper.bounce.block.type.player.PlayerHeadBlockHandler; import net.theevilreaper.bounce.block.type.player.PlayerWallHeadBlockHandler; +import net.theevilreaper.bounce.block.type.stairs.StairsBlockHandler; public final class BlockLoaderBuilder implements BlockLoader { @@ -20,15 +25,6 @@ public final class BlockLoaderBuilder implements BlockLoader { this.blockManager = blockManager; } - public static void fromAll(BlockManager blockManager) { - BlockLoaderBuilder builder = new BlockLoaderBuilder(blockManager); - builder.loadAll(); - } - - private void loadAll() { - - } - /** * {@inheritDoc} */ @@ -95,10 +91,57 @@ public BlockLoader ironChain() { return this; } + @Override + public BlockLoader stairs() { + blockManager.registerHandler(Block.OAK_STAIRS.key(), () -> new StairsBlockHandler(Block.OAK_STAIRS)); + blockManager.registerHandler(Block.SPRUCE_STAIRS.key(), () -> new StairsBlockHandler(Block.OAK_STAIRS)); + blockManager.registerHandler(Block.PALE_OAK_STAIRS.key(), () -> new StairsBlockHandler(Block.OAK_STAIRS)); + return this; + } + @Override public BlockLoader candle() { BlockHandler blockHandler = new CandleBlockHandler(Block.RED_CANDLE.key()); blockManager.registerHandler(blockHandler.getKey(), () -> blockHandler); return this; } + + @Override + public BlockLoader torch() { + BlockHandler blockHandler = new TorchBlockHandler(); + blockManager.registerHandler(blockHandler.getKey(), () -> blockHandler); + return this; + } + + @Override + public BlockLoader fenceGate() { + blockManager.registerHandler(Block.OAK_FENCE_GATE.key(), () -> new GateBlockHandler(Block.OAK_PLANKS.key())); + blockManager.registerHandler(Block.BIRCH_FENCE_GATE.key(), () -> new GateBlockHandler(Block.OAK_PLANKS.key())); + blockManager.registerHandler(Block.SPRUCE_FENCE_GATE.key(), () -> new GateBlockHandler(Block.OAK_PLANKS.key())); + blockManager.registerHandler(Block.JUNGLE_FENCE_GATE.key(), () -> new GateBlockHandler(Block.OAK_PLANKS.key())); + blockManager.registerHandler(Block.ACACIA_FENCE_GATE.key(), () -> new GateBlockHandler(Block.OAK_PLANKS.key())); + blockManager.registerHandler(Block.PALE_OAK_FENCE_GATE.key(), () -> new GateBlockHandler(Block.OAK_PLANKS.key())); + return this; + } + + @Override + public BlockLoader slab() { + blockManager.registerHandler( + Block.OAK_SLAB.key(), () -> new SlabBlockHandler(Block.OAK_SLAB.key()) + ); + blockManager.registerHandler( + Block.OAK_SLAB.key(), () -> new SlabBlockHandler(Block.SPRUCE_SLAB.key()) + ); + blockManager.registerHandler( + Block.OAK_SLAB.key(), () -> new SlabBlockHandler(Block.WARPED_SLAB.key()) + ); + return this; + + } + + @Override + public BlockLoader flowerPot() { + blockManager.registerHandler(Block.POTTED_BAMBOO.key(), BambooPotBlockHandler::new); + return this; + } } diff --git a/block/src/main/java/net/theevilreaper/bounce/block/type/BambooPotBlockHandler.java b/block/src/main/java/net/theevilreaper/bounce/block/type/BambooPotBlockHandler.java new file mode 100644 index 0000000..b1edfac --- /dev/null +++ b/block/src/main/java/net/theevilreaper/bounce/block/type/BambooPotBlockHandler.java @@ -0,0 +1,23 @@ +package net.theevilreaper.bounce.block.type; + +import net.kyori.adventure.key.Key; +import net.minestom.server.instance.block.Block; +import net.minestom.server.instance.block.BlockHandler; +import net.minestom.server.tag.Tag; + +import java.util.Collection; +import java.util.List; + +public class BambooPotBlockHandler implements BlockHandler { + @Override + public Key getKey() { + return Block.POTTED_BAMBOO.key(); + } + + @Override + public Collection> getBlockEntityTags() { + return List.of( + Tag.Integer("rotating") + ); + } +} diff --git a/block/src/main/java/net/theevilreaper/bounce/block/type/gates/GateBlockHandler.java b/block/src/main/java/net/theevilreaper/bounce/block/type/gates/GateBlockHandler.java new file mode 100644 index 0000000..4639799 --- /dev/null +++ b/block/src/main/java/net/theevilreaper/bounce/block/type/gates/GateBlockHandler.java @@ -0,0 +1,31 @@ +package net.theevilreaper.bounce.block.type.gates; + +import net.kyori.adventure.key.Key; +import net.minestom.server.instance.block.BlockHandler; +import net.minestom.server.tag.Tag; + +import java.util.Collection; +import java.util.List; + +public class GateBlockHandler implements BlockHandler { + + private final Key key; + + public GateBlockHandler(Key key) { + } + + @Override + public Key getKey() { + return key; + } + + @Override + public Collection> getBlockEntityTags() { + return List.of( + Tag.String("facing"), + Tag.Boolean("in_wall"), + Tag.Boolean("open"), + Tag.Boolean("powered") + ); + } +} diff --git a/block/src/main/java/net/theevilreaper/bounce/block/type/stairs/StairsBlockHandler.java b/block/src/main/java/net/theevilreaper/bounce/block/type/stairs/StairsBlockHandler.java new file mode 100644 index 0000000..bed85c9 --- /dev/null +++ b/block/src/main/java/net/theevilreaper/bounce/block/type/stairs/StairsBlockHandler.java @@ -0,0 +1,33 @@ +package net.theevilreaper.bounce.block.type.stairs; + +import net.kyori.adventure.key.Key; +import net.minestom.server.instance.block.Block; +import net.minestom.server.instance.block.BlockHandler; +import net.minestom.server.tag.Tag; + +import java.util.Collection; +import java.util.List; + +public class StairsBlockHandler implements BlockHandler { + + private final Block block; + + public StairsBlockHandler(Block block) { + this.block = block; + } + + @Override + public Key getKey() { + return this.block.key(); + } + + @Override + public Collection> getBlockEntityTags() { + return List.of( + Tag.String("facing"), + Tag.String("half"), + Tag.String("shape"), + Tag.Boolean("waterlogged") + ); + } +} diff --git a/src/main/java/net/theevilreaper/bounce/Bounce.java b/src/main/java/net/theevilreaper/bounce/Bounce.java index b98167f..c040f9c 100644 --- a/src/main/java/net/theevilreaper/bounce/Bounce.java +++ b/src/main/java/net/theevilreaper/bounce/Bounce.java @@ -165,12 +165,16 @@ private void loadBlocks() { BlockManager blockHandler = MinecraftServer.getBlockManager(); BlockLoader blockLoader = BlockLoader.builder(blockHandler); blockLoader + .torch() .candle() .barrel() + .fenceGate() .ironBars() .grindStone() .lanternVariant(LanternBlockFactory.Type.LANTERN) - .ironChain(); - + .ironChain() + .stairs() + .slab() + .flowerPot(); } } From e503b63a0f7004af56ec205870e6424125f11701 Mon Sep 17 00:00:00 2001 From: theEvilReaper Date: Mon, 5 Jan 2026 21:04:55 +0100 Subject: [PATCH 17/17] chore(block): finish constructor definition --- .../theevilreaper/bounce/block/type/gates/GateBlockHandler.java | 1 + 1 file changed, 1 insertion(+) diff --git a/block/src/main/java/net/theevilreaper/bounce/block/type/gates/GateBlockHandler.java b/block/src/main/java/net/theevilreaper/bounce/block/type/gates/GateBlockHandler.java index 4639799..d9245a1 100644 --- a/block/src/main/java/net/theevilreaper/bounce/block/type/gates/GateBlockHandler.java +++ b/block/src/main/java/net/theevilreaper/bounce/block/type/gates/GateBlockHandler.java @@ -12,6 +12,7 @@ public class GateBlockHandler implements BlockHandler { private final Key key; public GateBlockHandler(Key key) { + this.key = key; } @Override