diff --git a/build.fabric.gradle.kts b/build.fabric.gradle.kts index 2c9fd43..3a376dd 100644 --- a/build.fabric.gradle.kts +++ b/build.fabric.gradle.kts @@ -27,9 +27,9 @@ sourceSets { } java { - toolchain.languageVersion.set(JavaLanguageVersion.of(17)) - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 + toolchain.languageVersion.set(JavaLanguageVersion.of(21)) + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 } base { diff --git a/build.neoforge.gradle.kts b/build.neoforge.gradle.kts index 128e333..93a2158 100644 --- a/build.neoforge.gradle.kts +++ b/build.neoforge.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("net.neoforged.moddev") version "2.0.137" + id("net.neoforged.moddev") version "2.0.141" id("java") } val modVersion = property("mod.version").toString() @@ -45,13 +45,18 @@ sourceSets { resources.srcDir( "${rootDir}/versions/datagen/${sc.current.version.substringBeforeLast("-")}/src/main/generated" ) + java { + val platform = "de/clickism/clicksigns/platform" + exclude("$platform/fabric/**") + exclude("$platform/forge/**") + } } } java { - toolchain.languageVersion.set(JavaLanguageVersion.of(17)) - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 + toolchain.languageVersion.set(JavaLanguageVersion.of(21)) + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 } base { diff --git a/settings.gradle.kts b/settings.gradle.kts index 9b25324..bfda808 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -22,6 +22,8 @@ stonecutter { } } version("1.20.1", "fabric", "forge") - vcsVersion = "1.20.1-fabric" + version("1.20.4", "fabric") + version("1.21.1", "fabric", "neoforge") + vcsVersion = "1.21.1-fabric" } } \ No newline at end of file diff --git a/src/main/java/de/clickism/clicksigns/ClickSigns.java b/src/main/java/de/clickism/clicksigns/ClickSigns.java index 3ce6d73..bb37236 100644 --- a/src/main/java/de/clickism/clicksigns/ClickSigns.java +++ b/src/main/java/de/clickism/clicksigns/ClickSigns.java @@ -31,7 +31,7 @@ public class ClickSigns { public static void initialize() { ClickSignsBlocks.initialize(); ClickSignsBlockEntityTypes.initialize(); - PacketRegistry.register(RoadSignUpdatePacket.TYPE); + PacketRegistry.register(RoadSignUpdatePacket.SUBTYPE); Platform.network().register(); // Register network // Add reload listener Platform.get().addReloadListener(new TileSetListener()); diff --git a/src/main/java/de/clickism/clicksigns/ClickSignsBlocks.java b/src/main/java/de/clickism/clicksigns/ClickSignsBlocks.java index ca35a71..73d85be 100644 --- a/src/main/java/de/clickism/clicksigns/ClickSignsBlocks.java +++ b/src/main/java/de/clickism/clicksigns/ClickSignsBlocks.java @@ -18,7 +18,10 @@ public class ClickSignsBlocks { */ public static final Supplier ROAD_SIGN = Platform.get().registerBlockWithItem( "road_sign", - BlockBehaviour.Properties.copy(Blocks.STONE), + //?if < 1.20.4 + /*BlockBehaviour.Properties.copy(Blocks.STONE),*/ + //? if >= 1.20.4 + BlockBehaviour.Properties.ofFullCopy(Blocks.STONE), RoadSignBlock::new ); diff --git a/src/main/java/de/clickism/clicksigns/block/RoadSignBlock.java b/src/main/java/de/clickism/clicksigns/block/RoadSignBlock.java index 415ebbc..3c3295e 100644 --- a/src/main/java/de/clickism/clicksigns/block/RoadSignBlock.java +++ b/src/main/java/de/clickism/clicksigns/block/RoadSignBlock.java @@ -1,5 +1,6 @@ package de.clickism.clicksigns.block; +import com.mojang.serialization.MapCodec; import de.clickism.clicksigns.entity.RoadSignBlockEntity; import de.clickism.clicksigns.gui.GuiUtils; import de.clickism.clicksigns.gui.screen.overview.SignOverviewScreen; @@ -9,8 +10,10 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.BaseEntityBlock; import net.minecraft.world.level.block.RenderShape; import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.shapes.CollisionContext; @@ -27,6 +30,8 @@ public class RoadSignBlock extends HorizontalFacingBlockWithEntity { // Shapes for each facing direction + //? if >= 1.20.4 + public static final MapCodec CODEC = simpleCodec(RoadSignBlock::new); private static final double THICKNESS = 0.03; private static final VoxelShape NORTH_SHAPE = Shapes.box(0, 0, 0, 1, 1, THICKNESS); private static final VoxelShape SOUTH_SHAPE = NORTH_SHAPE.move(0, 0, 1 - THICKNESS); @@ -37,6 +42,12 @@ public RoadSignBlock(Properties properties) { super(properties); } + //? if >= 1.20.4 { + @Override + protected MapCodec codec() { + return null; + }//? } + @Override public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { return new RoadSignBlockEntity(pos, state); @@ -62,12 +73,17 @@ public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { } @Override - public @NotNull InteractionResult use( + //? if < 1.21.1 + /*public*/ + //? if >= 1.21.1 + protected + @NotNull InteractionResult /*? if < 1.21.1 {*/ /*use*/ /*?} elif >= 1.21.1 {*/ useWithoutItem /*?}*/( @NotNull BlockState state, @NotNull Level level, @NotNull BlockPos pos, @NotNull Player player, - @NotNull InteractionHand hand, + //? if < 1.21.1 + /*@NotNull InteractionHand hand,*/ @NotNull BlockHitResult hit ) { if (!level.isClientSide) return InteractionResult.SUCCESS; @@ -101,4 +117,7 @@ public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { public @NotNull RenderShape getRenderShape(@NotNull BlockState state) { return RenderShape.INVISIBLE; } + //? if >= 1.21.1 { + + //? } } \ No newline at end of file diff --git a/src/main/java/de/clickism/clicksigns/entity/RoadSignBlockEntity.java b/src/main/java/de/clickism/clicksigns/entity/RoadSignBlockEntity.java index 376d815..2c1bc51 100644 --- a/src/main/java/de/clickism/clicksigns/entity/RoadSignBlockEntity.java +++ b/src/main/java/de/clickism/clicksigns/entity/RoadSignBlockEntity.java @@ -5,6 +5,7 @@ import de.clickism.clicksigns.sign.RoadSign; import de.clickism.clicksigns.util.nbt.NbtReaderWriterImpl; import net.minecraft.core.BlockPos; +import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientGamePacketListener; @@ -62,22 +63,39 @@ public void setChanged() { return ClientboundBlockEntityDataPacket.create(this); } + //Inverse comma syntax is pain @Override - public @NotNull CompoundTag getUpdateTag() { + public @NotNull CompoundTag getUpdateTag( + //? if >= 1.21.1 + HolderLookup.Provider provider + ) { var tag = new CompoundTag(); - this.saveAdditional(tag); + this.saveAdditional( + tag + //? if >= 1.21.1 + , provider + ); return tag; } @Override - protected void saveAdditional(CompoundTag tag) { - super.saveAdditional(tag); + protected void saveAdditional( + CompoundTag tag + //? if >= 1.21.1 + , HolderLookup.Provider provider + ) { + super.saveAdditional( + tag + //? if >= 1.21.1 + , provider + ); if (this.roadSign == null) return; var writer = new NbtReaderWriterImpl(tag); RoadSign.NBT_WRITER.write(writer, this.roadSign); } - @Override + //? if < 1.21.1 { + /*@Override public void load(CompoundTag tag) { super.load(tag); var reader = new NbtReaderWriterImpl(tag); @@ -87,4 +105,17 @@ public void load(CompoundTag tag) { ClickSigns.LOGGER.error("Failed to read road sign from block entity at {}", worldPosition, e); } } + *///? } + //? if >= 1.21.1 { + @Override + public void loadAdditional(CompoundTag tag, HolderLookup.Provider provider) { + super.loadAdditional(tag, provider); + var reader = new NbtReaderWriterImpl(tag); + try { + this.roadSign = RoadSign.NBT_READER.read(reader); + } catch (Exception e) { + ClickSigns.LOGGER.error("Failed to read road sign from block entity at {}", worldPosition, e); + } + } + //? } } diff --git a/src/main/java/de/clickism/clicksigns/gui/screen/BaseScreen.java b/src/main/java/de/clickism/clicksigns/gui/screen/BaseScreen.java index 8524e92..7df077a 100644 --- a/src/main/java/de/clickism/clicksigns/gui/screen/BaseScreen.java +++ b/src/main/java/de/clickism/clicksigns/gui/screen/BaseScreen.java @@ -50,16 +50,20 @@ protected BaseScreen(Component title, @Nullable Screen parent) { @Override public void render(GuiGraphics graphics, int mouseX, int mouseY, float partialTick) { - this.renderBackground(graphics); + this.actualRenderBackground(graphics); hoveredWidget = GuiUtils.findFirstHoveredWidget(this, mouseX, mouseY); super.render(graphics, mouseX, mouseY, partialTick); } - @Override - public void renderBackground(GuiGraphics graphics) { + public void actualRenderBackground(GuiGraphics graphics) { graphics.fillGradient(0, 0, this.width, this.height, -0x4FEFEFF0, -0x3FEFEFF0); } + @Override + public void renderBackground(GuiGraphics graphics /*? if >= 1.21.1 {*/, int i, int j, float f /*? }*/) { + actualRenderBackground(graphics); + } + @Override public void onClose() { GuiUtils.openScreen(parent); diff --git a/src/main/java/de/clickism/clicksigns/gui/util/VerticalScrollContainer.java b/src/main/java/de/clickism/clicksigns/gui/util/VerticalScrollContainer.java index 2ebdc93..6a8a67a 100644 --- a/src/main/java/de/clickism/clicksigns/gui/util/VerticalScrollContainer.java +++ b/src/main/java/de/clickism/clicksigns/gui/util/VerticalScrollContainer.java @@ -108,12 +108,13 @@ private void renderScrollbar(GuiGraphics guiGraphics) { } @Override - public boolean mouseScrolled(double d, double e, double f) { + public boolean mouseScrolled(double d, double e, double f/*? if >= 1.20.4 {*/, double g /*? }*/) { if (!this.visible) return false; this.scroll(this.scrollAmount - f * SCROLL_RATE); return true; } + /** * Set the scroll amount and clamp it. * diff --git a/src/main/java/de/clickism/clicksigns/gui/widget/AbstractTextBox.java b/src/main/java/de/clickism/clicksigns/gui/widget/AbstractTextBox.java index ae4b76e..f676e31 100644 --- a/src/main/java/de/clickism/clicksigns/gui/widget/AbstractTextBox.java +++ b/src/main/java/de/clickism/clicksigns/gui/widget/AbstractTextBox.java @@ -1,6 +1,9 @@ package de.clickism.clicksigns.gui.widget; -import net.minecraft.SharedConstants; +//? if < 1.21.1 +/*import net.minecraft.SharedConstants;*/ +//? if >= 1.21.1 +import net.minecraft.util.StringUtil; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; import net.minecraft.client.gui.GuiGraphics; @@ -275,8 +278,12 @@ public boolean listening() { * @param input the input string to filter * @return the filtered string */ + protected String filterInput(String input) { - return SharedConstants.filterText(input); + //? if < 1.21.1 + /*return SharedConstants.filterText(input);*/ + //? if >= 1.21.1 + return StringUtil.filterText(input); } @Override @@ -354,7 +361,10 @@ protected void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, flo @Override public boolean charTyped(char c, int modifiers) { if (!listening()) return false; - if (!SharedConstants.isAllowedChatCharacter(c)) return false; + //? if < 1.21.1 + /*if (!SharedConstants.isAllowedChatCharacter(c)) return false;*/ + //? if >= 1.21.1 + if (!StringUtil.isAllowedChatCharacter(c)) return false; insertText(Character.toString(c)); return true; } diff --git a/src/main/java/de/clickism/clicksigns/network/RoadSignUpdatePacket.java b/src/main/java/de/clickism/clicksigns/network/RoadSignUpdatePacket.java index b0a3226..484225e 100644 --- a/src/main/java/de/clickism/clicksigns/network/RoadSignUpdatePacket.java +++ b/src/main/java/de/clickism/clicksigns/network/RoadSignUpdatePacket.java @@ -8,6 +8,13 @@ import de.clickism.clicksigns.sign.RoadSign; import net.minecraft.client.Minecraft; import net.minecraft.core.BlockPos; +//? if >= 1.21.1 { +import io.netty.buffer.ByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.codec.StreamDecoder; +import net.minecraft.network.codec.StreamMemberEncoder; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +//? } /** * Packet for updating a road sign @@ -19,10 +26,10 @@ public record RoadSignUpdatePacket( BlockPos pos, RoadSign roadSign ) implements Packet { - - public static final PacketType TYPE = new PacketType<>( + public static final PacketType SUBTYPE = new PacketType<>( ClickSigns.identifier("road_sign_update"), - // Writer + //? if < 1.21.1 { + /*// Writer (buf, packet) -> { buf.writeBlockPos(packet.pos()); RoadSign.PACKET_WRITER.accept(buf, packet.roadSign()); @@ -32,7 +39,20 @@ public record RoadSignUpdatePacket( BlockPos pos = buf.readBlockPos(); RoadSign roadSign = RoadSign.PACKET_READER.apply(buf); return new RoadSignUpdatePacket(pos, roadSign); - }, + },*///? } + //? if >= 1.21.1 { + StreamCodec.of( + (buf, packet) -> { + buf.writeBlockPos(packet.pos()); + RoadSign.PACKET.encode(buf, packet.roadSign()); + }, + (buf) -> { + BlockPos pos = buf.readBlockPos(); + RoadSign roadSign = RoadSign.PACKET.decode(buf); + return new RoadSignUpdatePacket(pos, roadSign); + } + ), + //? } // Server Handler (packet, player) -> { var level = player.serverLevel(); @@ -54,8 +74,20 @@ public record RoadSignUpdatePacket( } ); + @Override + public PacketType subtype() { + return SUBTYPE; + } + //? if < 1.21.1 { + /*public static final PacketType TYPE = SUBTYPE; @Override public PacketType type() { return TYPE; } + *///? } elif >= 1.21.1 { + public static final Type TYPE = new CustomPacketPayload.Type(SUBTYPE.id()); + public Type type() { + return TYPE; + }; + //? } } diff --git a/src/main/java/de/clickism/clicksigns/platform/Platform.java b/src/main/java/de/clickism/clicksigns/platform/Platform.java index 85234ef..48b5bf6 100644 --- a/src/main/java/de/clickism/clicksigns/platform/Platform.java +++ b/src/main/java/de/clickism/clicksigns/platform/Platform.java @@ -29,7 +29,9 @@ static Platform get() { return de.clickism.clicksigns.platform.fabric.FabricPlatform.INSTANCE; //? } elif forge { /*return de.clickism.clicksigns.platform.forge.ForgePlatform.INSTANCE; - *///? } else { + *///? } elif neoforge { + /*return de.clickism.clicksigns.platform.neoforge.NeoForgePlatform.INSTANCE; + *///? } else { /*throw new UnsupportedOperationException("No platform implementation found"); *///? } } diff --git a/src/main/java/de/clickism/clicksigns/platform/fabric/FabricNetwork.java b/src/main/java/de/clickism/clicksigns/platform/fabric/FabricNetwork.java index d41a113..6d2aee3 100644 --- a/src/main/java/de/clickism/clicksigns/platform/fabric/FabricNetwork.java +++ b/src/main/java/de/clickism/clicksigns/platform/fabric/FabricNetwork.java @@ -4,6 +4,11 @@ import de.clickism.clicksigns.platform.network.Network; import de.clickism.clicksigns.platform.network.Packet; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; +//? if >= 1.21.1 { +import de.clickism.clicksigns.network.RoadSignUpdatePacket; +import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +//? } import net.fabricmc.fabric.api.networking.v1.PlayerLookup; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import net.minecraft.resources.ResourceLocation; @@ -24,10 +29,31 @@ public class FabricNetwork extends Network { private FabricNetwork() { // Singleton class } - @Override public void register() { + //? if >= 1.21.1 { + PayloadTypeRegistry.playS2C().register( + RoadSignUpdatePacket.TYPE, + RoadSignUpdatePacket.SUBTYPE.packet() + ); + PayloadTypeRegistry.playC2S().register( + RoadSignUpdatePacket.TYPE, + RoadSignUpdatePacket.SUBTYPE.packet() + ); ServerPlayNetworking.registerGlobalReceiver( + RoadSignUpdatePacket.TYPE, + (payload, context) -> { + handleServer(payload, context.server(), context.player()); + } + ); + ClientPlayNetworking.registerGlobalReceiver( + RoadSignUpdatePacket.TYPE, + (payload, context) -> { + handleClient(payload); + } + ); + //? } elif < 1.21.1 { + /*ServerPlayNetworking.registerGlobalReceiver( CHANNEL, (server, player, handler, buf, responseSender) -> { handleServer(readPacket(buf), server, player); @@ -39,16 +65,28 @@ public void register() { handleClient(readPacket(buf)); } ); + *///?} } @Override public void sendToServer(Packet packet) { - ClientPlayNetworking.send(CHANNEL, writePacket(packet)); + ClientPlayNetworking.send( + //? if < 1.21.1 + /*CHANNEL, writePacket(packet)*/ + //? if >= 1.21.1 + packet + ); } @Override public void sendToPlayer(ServerPlayer player, Packet packet) { - ServerPlayNetworking.send(player, CHANNEL, writePacket(packet)); + ServerPlayNetworking.send( + player, + //? if < 1.21.1 + /*CHANNEL, writePacket(packet)*/ + //? if >= 1.21.1 + packet + ); } @Override diff --git a/src/main/java/de/clickism/clicksigns/platform/fabric/datagen/ModLootTableProvider.java b/src/main/java/de/clickism/clicksigns/platform/fabric/datagen/ModLootTableProvider.java index 8f000aa..7e0e1a9 100644 --- a/src/main/java/de/clickism/clicksigns/platform/fabric/datagen/ModLootTableProvider.java +++ b/src/main/java/de/clickism/clicksigns/platform/fabric/datagen/ModLootTableProvider.java @@ -3,14 +3,25 @@ import de.clickism.clicksigns.ClickSignsBlocks; import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; import net.fabricmc.fabric.api.datagen.v1.provider.FabricBlockLootTableProvider; - +//? if >= 1.21.1 { +import net.minecraft.core.HolderLookup; +import java.util.concurrent.CompletableFuture; +//? } /** * Loot table generator */ class ModLootTableProvider extends FabricBlockLootTableProvider { - public ModLootTableProvider(FabricDataOutput output) { - super(output); + public ModLootTableProvider( + FabricDataOutput output + //? if >= 1.21.1 + ,CompletableFuture registryLookup + ) { + super( + output + //? if >= 1.21.1 + ,registryLookup + ); } @Override diff --git a/src/main/java/de/clickism/clicksigns/platform/fabric/datagen/ModRecipeProvider.java b/src/main/java/de/clickism/clicksigns/platform/fabric/datagen/ModRecipeProvider.java index 08b8028..14af58e 100644 --- a/src/main/java/de/clickism/clicksigns/platform/fabric/datagen/ModRecipeProvider.java +++ b/src/main/java/de/clickism/clicksigns/platform/fabric/datagen/ModRecipeProvider.java @@ -4,26 +4,45 @@ import de.clickism.clicksigns.ClickSignsBlocks; import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider; -import net.minecraft.data.recipes.FinishedRecipe; import net.minecraft.data.recipes.RecipeCategory; import net.minecraft.data.recipes.ShapedRecipeBuilder; import net.minecraft.tags.ItemTags; import net.minecraft.world.item.Items; import org.jetbrains.annotations.NotNull; - +//? if < 1.20.4 +/*import net.minecraft.data.recipes.FinishedRecipe;*/ +//? if >= 1.20.4 +import net.minecraft.data.recipes.RecipeOutput; import java.util.function.Consumer; - +//? if >= 1.21.1 { +import java.util.concurrent.CompletableFuture; +import net.minecraft.core.HolderLookup; +//? } /** * Recipe generator for the mod. */ class ModRecipeProvider extends FabricRecipeProvider { - public ModRecipeProvider(FabricDataOutput output) { - super(output); + public ModRecipeProvider( + FabricDataOutput output + //? if >= 1.21.1 + ,CompletableFuture registriesFuture + ) { + super( + output + //? if >= 1.21.1 + ,registriesFuture + ); } + @Override - public void buildRecipes(Consumer exporter) { + public void buildRecipes( + //? if < 1.20.4 + /*Consumer exporter*/ + //? if >= 1.20.4 + RecipeOutput exporter + ) { // Generate road sign recipe ShapedRecipeBuilder .shaped(RecipeCategory.DECORATIONS, ClickSignsBlocks.ROAD_SIGN.get(), 4) diff --git a/src/main/java/de/clickism/clicksigns/platform/network/Network.java b/src/main/java/de/clickism/clicksigns/platform/network/Network.java index 17a1f82..3385e6e 100644 --- a/src/main/java/de/clickism/clicksigns/platform/network/Network.java +++ b/src/main/java/de/clickism/clicksigns/platform/network/Network.java @@ -1,5 +1,6 @@ package de.clickism.clicksigns.platform.network; +import de.clickism.clicksigns.ClickSigns; import io.netty.buffer.Unpooled; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.MinecraftServer; @@ -48,8 +49,14 @@ public abstract class Network { */ @SuppressWarnings("unchecked") protected void handleServer(T packet, MinecraftServer server, ServerPlayer player) { - var type = (PacketType) packet.type(); + var type = (PacketType) packet + //? if < 1.21.1 + /* .type();*/ + //? if >= 1.21.1 + .subtype(); + server.execute(() -> type.serverHandler().handle(packet, player)); + ClickSigns.LOGGER.info("Succeeded at handling server"); } /** @@ -60,8 +67,14 @@ protected void handleServer(T packet, MinecraftServer server, */ @SuppressWarnings("unchecked") protected static void handleClient(T packet) { - PacketType type = (PacketType) packet.type(); + + PacketType type = (PacketType) packet + //? if < 1.21.1 + /* .type(); */ + //? if >= 1.21.1 + .subtype(); type.clientHandler().handle(packet); + ClickSigns.LOGGER.info("Succeeded at handling client"); } /** @@ -75,10 +88,17 @@ protected static void handleClient(T packet) { protected static FriendlyByteBuf writePacket(T packet) { var buf = new FriendlyByteBuf(Unpooled.buffer()); // Write packet id - var type = (PacketType) packet.type(); + var type = (PacketType) packet + //? if < 1.21.1 + /*.type(); */ + //? if >= 1.21.1 + .subtype(); buf.writeResourceLocation(type.id()); // Write packet data - type.writer().accept(buf, packet); + //? if < 1.21.1 + /*type.writer().accept(buf, packet);*/ + //? if >= 1.21.1 + type.packet().encode(buf, packet); return buf; } @@ -96,6 +116,9 @@ protected static Packet readPacket(FriendlyByteBuf buf) { throw new IllegalStateException("Received packet with unknown id: " + id); } // Read packet data - return type.reader().apply(buf); + //? if < 1.21.1 + /*return type.reader().apply(buf);*/ + //? if >= 1.21.1 + return type.packet().decode(buf); } } diff --git a/src/main/java/de/clickism/clicksigns/platform/network/Packet.java b/src/main/java/de/clickism/clicksigns/platform/network/Packet.java index 61a1732..e0c0c82 100644 --- a/src/main/java/de/clickism/clicksigns/platform/network/Packet.java +++ b/src/main/java/de/clickism/clicksigns/platform/network/Packet.java @@ -1,13 +1,26 @@ package de.clickism.clicksigns.platform.network; +//? if >= 1.21.1 { +import io.netty.buffer.ByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.codec.StreamDecoder; +import net.minecraft.network.codec.StreamMemberEncoder; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +//? } /** * Packet interface representing a network packet. */ -public interface Packet { +public interface Packet /*?if >= 1.21.1 {*/ extends CustomPacketPayload /*?} */ { /** - * The packet type of this packet + * The packet type of this packet. + * Implemented this way to support the new CustomPacketPayload API * * @return the packet type of this packet */ - PacketType type(); + PacketType subtype(); + //? if < 1.21.1 { + /*PacketType type(); + *///? } elif >= 1.21.1 { + Type type(); + //?} } diff --git a/src/main/java/de/clickism/clicksigns/platform/network/PacketType.java b/src/main/java/de/clickism/clicksigns/platform/network/PacketType.java index 6739c68..840fcf4 100644 --- a/src/main/java/de/clickism/clicksigns/platform/network/PacketType.java +++ b/src/main/java/de/clickism/clicksigns/platform/network/PacketType.java @@ -1,6 +1,10 @@ package de.clickism.clicksigns.platform.network; import net.minecraft.network.FriendlyByteBuf; +//? if >= 1.21.1 { +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +//?} import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; @@ -8,16 +12,24 @@ * Represents a type of packet, containing the logic to encode, decode and handle the packet. * * @param id the unique id of the packet type - * @param writer the function to write the packet data to a buffer - * @param reader the function to read the packet data from a buffer +//? if < 1.21.1 +//* @param writer the function to write the packet data to a buffer +//? if < 1.21.1 +//* @param reader the function to read the packet data from a buffer +//? if >= 1.21.1 + * @param packet the codec to write/read the packet data to/from a buffer * @param serverHandler the function to handle the packet on the server side * @param clientHandler the function to handle the packet on the client side * @param the type of payload of the packet */ public record PacketType( ResourceLocation id, - FriendlyByteBuf.Writer writer, + //? if < 1.21.1 { + /*FriendlyByteBuf.Writer writer, FriendlyByteBuf.Reader reader, + *///? } + //? if >= 1.21.1 + StreamCodec packet, ServerHandler serverHandler, ClientHandler clientHandler ) { diff --git a/src/main/java/de/clickism/clicksigns/render/TextureRenderer.java b/src/main/java/de/clickism/clicksigns/render/TextureRenderer.java index 68a4241..7b3a4c2 100644 --- a/src/main/java/de/clickism/clicksigns/render/TextureRenderer.java +++ b/src/main/java/de/clickism/clicksigns/render/TextureRenderer.java @@ -111,12 +111,22 @@ private void quad(VertexConsumer buffer, PoseStack.Pose pose, float x1, float y1 */ private void vertex(VertexConsumer buffer, PoseStack.Pose pose, float x, float y, float u, float v, int color) { var isXAxis = renderDirection.getAxis() == Direction.Axis.X; - buffer.vertex(pose.pose(), x, y, 0) + //? if < 1.21.1 { + /*buffer.vertex(pose.pose(), x, y, 0) .color(color) .uv(u, v) .overlayCoords(OverlayTexture.NO_OVERLAY) .uv2(light) .normal(pose.normal(), isXAxis ? 1 : 0, 0, isXAxis ? 0 : 1) .endVertex(); + *///? } + //? if >= 1.21.1 { + buffer.addVertex(pose.pose(), x, y, 0) + .setColor(color) + .setUv(u, v) + .setOverlay(OverlayTexture.NO_OVERLAY) + .setLight(light) + .setNormal(pose, isXAxis ? 1 : 0, 0, isXAxis ? 0 : 1); + //? } } } diff --git a/src/main/java/de/clickism/clicksigns/sign/RoadSign.java b/src/main/java/de/clickism/clicksigns/sign/RoadSign.java index b497a6c..7faf2d5 100644 --- a/src/main/java/de/clickism/clicksigns/sign/RoadSign.java +++ b/src/main/java/de/clickism/clicksigns/sign/RoadSign.java @@ -12,6 +12,8 @@ import de.clickism.clicksigns.util.nbt.NbtReader; import de.clickism.clicksigns.util.nbt.NbtWriter; import net.minecraft.network.FriendlyByteBuf; +//? if >= 1.21.1 +import net.minecraft.network.codec.StreamCodec; import net.minecraft.resources.ResourceLocation; import org.jetbrains.annotations.Nullable; @@ -202,8 +204,29 @@ public boolean isWithinBounds(SignElement element) { } /** - * Writer for packets + * Codec replaces read/write functions past 1.21.1 */ + //? if >= 1.21.1 { + public static final StreamCodec PACKET = StreamCodec.of( + (buf, sign) -> { + TextureSource.PACKET.encode(buf, sign.frontSource()); + TextureSource.PACKET.encode(buf, sign.backSource()); + buf.writeCollection(sign.elements(), SignElement.PACKET); + buf.writeInt(sign.alignment().ordinal()); + buf.writeNullable(sign.templateId(), FriendlyByteBuf::writeResourceLocation); + }, + (buf) -> { + var front = TextureSource.PACKET.decode(buf); + var back = TextureSource.PACKET.decode(buf); + var elements = buf.readList(SignElement.PACKET); + var alignment = Alignment.values()[buf.readInt()]; + var templateId = buf.readNullable(FriendlyByteBuf::readResourceLocation); + return new RoadSign(front, back, elements, alignment, templateId); + } + ); + //? } + //? if < 1.21.1 { + /* public static final FriendlyByteBuf.Writer PACKET_WRITER = (buf, sign) -> { TextureSource.PACKET_WRITER.accept(buf, sign.frontSource()); TextureSource.PACKET_WRITER.accept(buf, sign.backSource()); @@ -212,9 +235,6 @@ public boolean isWithinBounds(SignElement element) { buf.writeNullable(sign.templateId(), FriendlyByteBuf::writeResourceLocation); }; - /** - * Reader for packets - */ public static final FriendlyByteBuf.Reader PACKET_READER = (buf) -> { var front = TextureSource.PACKET_READER.apply(buf); var back = TextureSource.PACKET_READER.apply(buf); @@ -223,6 +243,7 @@ public boolean isWithinBounds(SignElement element) { var templateId = buf.readNullable(FriendlyByteBuf::readResourceLocation); return new RoadSign(front, back, elements, alignment, templateId); }; + *///? } /** * Writer for NBT diff --git a/src/main/java/de/clickism/clicksigns/sign/element/SignElement.java b/src/main/java/de/clickism/clicksigns/sign/element/SignElement.java index 94f2099..9d018fa 100644 --- a/src/main/java/de/clickism/clicksigns/sign/element/SignElement.java +++ b/src/main/java/de/clickism/clicksigns/sign/element/SignElement.java @@ -7,6 +7,8 @@ import de.clickism.clicksigns.util.nbt.NbtWriter; import de.clickism.clicksigns.util.nbt.TypeKeyed; import net.minecraft.network.FriendlyByteBuf; +//? if >= 1.21.1 +import net.minecraft.network.codec.StreamCodec; /** * An element that can be placed on a road sign. @@ -57,9 +59,62 @@ default int guiHeight(float guiScale) { */ SignElement withPosition(int localX, int localY); - /** - * Writer for packets - */ + //? if >= 1.21.1 { + StreamCodec PACKET = StreamCodec.of( + (buf, element) -> { + var type = element.typeKey(); + buf.writeUtf(type); + buf.writeInt(element.localX()); + buf.writeInt(element.localY()); + buf.writeInt(element.alignment().ordinal()); + if (element instanceof TextElement text) { + buf.writeFloat(text.scale()); + buf.writeUtf(text.color()); + var backgroundColor = text.backgroundColor() != null ? text.backgroundColor() : ""; + buf.writeUtf(backgroundColor); + buf.writeUtf(text.text()); + } else if (element instanceof SymbolElement symbol) { + buf.writeResourceLocation(symbol.symbol().identifier()); + TextureSource.PACKET.encode(buf, symbol.symbol().texture()); + } else if (element instanceof PlateElement plate) { + TextureSource.PACKET.encode(buf, plate.front()); + TextureSource.PACKET.encode(buf, plate.back()); + } + }, + (buf) -> { + var type = buf.readUtf(); + int localX = buf.readInt(); + int localY = buf.readInt(); + Alignment alignment = Alignment.values()[buf.readInt()]; + return switch (type) { + case TextElement.TYPE -> { + var scale = buf.readFloat(); + var color = buf.readUtf(); + var backgroundColor = buf.readUtf(); + if (backgroundColor.isEmpty()) { + backgroundColor = null; + } + var text = buf.readUtf(); + yield new TextElement(localX, localY, alignment, text, scale, color, backgroundColor); + } + case SymbolElement.TYPE -> { + var id = buf.readResourceLocation(); + var source = TextureSource.PACKET.decode(buf); + var symbol = SignRegistries.SYMBOLS.get(id).withTexture(source); + yield new SymbolElement(localX, localY, alignment, symbol); + } + case PlateElement.TYPE -> { + var front = TextureSource.PACKET.decode(buf); + var back = TextureSource.PACKET.decode(buf); + yield new PlateElement(localX, localY, alignment, front, back); + } + default -> throw new IllegalArgumentException("Unknown element type: " + type); + }; + } + ); + //? } + //? if < 1.21.1 { + /*//Writer for packets FriendlyByteBuf.Writer PACKET_WRITER = (buf, element) -> { var type = element.typeKey(); buf.writeUtf(type); @@ -81,9 +136,7 @@ default int guiHeight(float guiScale) { } }; - /** - * Reader for packets - */ + //Reader for packets FriendlyByteBuf.Reader PACKET_READER = (buf) -> { var type = buf.readUtf(); int localX = buf.readInt(); @@ -114,6 +167,7 @@ default int guiHeight(float guiScale) { default -> throw new IllegalArgumentException("Unknown element type: " + type); }; }; + *///? } /** * Nbt writer diff --git a/src/main/java/de/clickism/clicksigns/sign/reload/SignReloadListener.java b/src/main/java/de/clickism/clicksigns/sign/reload/SignReloadListener.java index 7b45eeb..ee6bb56 100644 --- a/src/main/java/de/clickism/clicksigns/sign/reload/SignReloadListener.java +++ b/src/main/java/de/clickism/clicksigns/sign/reload/SignReloadListener.java @@ -108,7 +108,10 @@ default String stripExtension(String path, String extension) { */ default ResourceLocation stripExtension(ResourceLocation location, String extension) { var path = stripExtension(location.getPath(), extension); - return new ResourceLocation(location.getNamespace(), path); + //? if < 1.21.1 + /*return new ResourceLocation(location.getNamespace(), path);*/ + //? if >= 1.21.1 + return ResourceLocation.fromNamespaceAndPath(location.getNamespace(), path); } /** @@ -124,7 +127,10 @@ default ResourceLocation replaceExtension(ResourceLocation location, String oldE if (path.endsWith(oldExtension)) { path = path.substring(0, path.length() - oldExtension.length()) + newExtension; } - return new ResourceLocation(location.getNamespace(), path); + //? if < 1.21.1 + /*return new ResourceLocation(location.getNamespace(), path);*/ + //? if >= 1.21.1 + return ResourceLocation.fromNamespaceAndPath(location.getNamespace(), path); } /** diff --git a/src/main/java/de/clickism/clicksigns/sign/texture/source/TextureSource.java b/src/main/java/de/clickism/clicksigns/sign/texture/source/TextureSource.java index 2d854c1..ad77507 100644 --- a/src/main/java/de/clickism/clicksigns/sign/texture/source/TextureSource.java +++ b/src/main/java/de/clickism/clicksigns/sign/texture/source/TextureSource.java @@ -8,6 +8,8 @@ import de.clickism.clicksigns.util.nbt.NbtWriter; import de.clickism.clicksigns.util.nbt.TypeKeyed; import net.minecraft.network.FriendlyByteBuf; +//? if >= 1.21.1 +import net.minecraft.network.codec.StreamCodec; /** * Represents a source for a texture, which can be resolved to obtain the actual texture. @@ -59,9 +61,55 @@ default TextureSource resizeToFit(PixelSized sized) { return resize(sized.width(), sized.height()); } - /** - * Writer for packets - */ + //? if >= 1.21.1 { + StreamCodec PACKET = StreamCodec.of( + (buf, texture) -> { + var type = texture.typeKey(); + buf.writeUtf(type); + if (texture instanceof TiledTextureSource tiled) { + // Tiled texture + buf.writeResourceLocation(tiled.tileSetId()); + buf.writeInt(tiled.width()); + buf.writeInt(tiled.height()); + } else if (texture instanceof StaticTextureSource staticTextureSource) { + // Static texture + buf.writeResourceLocation(staticTextureSource.location()); + } else if (texture instanceof ColorizedTextureSource colorized) { + // Colorized texture + buf.writeResourceLocation(colorized.baseTexture()); + buf.writeNullable(colorized.fromColor(), FriendlyByteBuf::writeUtf); + buf.writeUtf(colorized.toColor()); + } else { + throw new IllegalArgumentException("Unknown texture source type: " + texture.getClass()); + } + }, + (buf) -> { + var type = buf.readUtf(); + return switch (type) { + case TiledTextureSource.TYPE -> { + var tileSetId = buf.readResourceLocation(); + var pixelWidth = buf.readInt(); + var pixelHeight = buf.readInt(); + yield new TiledTextureSource(tileSetId, pixelWidth, pixelHeight); + } + case ColorizedTextureSource.TYPE -> { + var baseTexture = buf.readResourceLocation(); + var fromColor = buf.readNullable(FriendlyByteBuf::readUtf); + var toColor = buf.readUtf(); + yield new ColorizedTextureSource(baseTexture, fromColor, toColor); + } + case StaticTextureSource.TYPE -> { + var location = buf.readResourceLocation(); + yield new StaticTextureSource(location); + } + default -> throw new IllegalArgumentException("Unknown texture source type: " + type); + }; + } + ); + //? } + //? if < 1.21.1 { + /*// Writer for packets + FriendlyByteBuf.Writer PACKET_WRITER = (buf, texture) -> { var type = texture.typeKey(); buf.writeUtf(type); @@ -83,9 +131,9 @@ default TextureSource resizeToFit(PixelSized sized) { } }; - /** - * Reader for packets - */ + + //Reader for packets + FriendlyByteBuf.Reader PACKET_READER = (buf) -> { var type = buf.readUtf(); return switch (type) { @@ -108,6 +156,7 @@ default TextureSource resizeToFit(PixelSized sized) { default -> throw new IllegalArgumentException("Unknown texture source type: " + type); }; }; + *///? } /** * Writer for NBT diff --git a/stonecutter.gradle.kts b/stonecutter.gradle.kts index 2c483ba..c22be3a 100644 --- a/stonecutter.gradle.kts +++ b/stonecutter.gradle.kts @@ -1,7 +1,7 @@ plugins { id("dev.kikugie.stonecutter") } -stonecutter active "1.20.1-fabric" +stonecutter active "1.21.1-fabric" stonecutter parameters { constants.match( diff --git a/versions/1.20.4-fabric/gradle.properties b/versions/1.20.4-fabric/gradle.properties new file mode 100644 index 0000000..a742b1a --- /dev/null +++ b/versions/1.20.4-fabric/gradle.properties @@ -0,0 +1,9 @@ +# Mod Properties +mod.minecraft_version=1.20.4 +# Comma separated list of target versions +mod.publishing_target_minecraft_versions=1.20.4 + +# Dependencies +deps.fabric_loader=0.19.3 +deps.fabric_api=0.97.3+1.20.4 +deps.fabric_kotlin=1.13.10+kotlin.2.3.20 \ No newline at end of file diff --git a/versions/1.21.1-fabric/gradle.properties b/versions/1.21.1-fabric/gradle.properties new file mode 100644 index 0000000..142a058 --- /dev/null +++ b/versions/1.21.1-fabric/gradle.properties @@ -0,0 +1,9 @@ +# Mod Properties +mod.minecraft_version=1.21.1 +# Comma separated list of target versions +mod.publishing_target_minecraft_versions=1.21.1 + +# Dependencies +deps.fabric_loader=0.18.0 +deps.fabric_api=0.116.9+1.21.1 +deps.fabric_kotlin=1.13.10+kotlin.2.3.20 \ No newline at end of file diff --git a/versions/1.21.1-neoforge/gradle.properties b/versions/1.21.1-neoforge/gradle.properties new file mode 100644 index 0000000..0f63788 --- /dev/null +++ b/versions/1.21.1-neoforge/gradle.properties @@ -0,0 +1,9 @@ +# Mod Properties +mod.minecraft_version=1.21.1 +# Comma separated list of target versions +mod.publishing_target_minecraft_versions=1.21.1 + +# Dependencies +deps.neoforge=21.1.234 +# 5.3.0 >= 1.20.6 +deps.forge_kotlin=5.3.0 \ No newline at end of file diff --git a/versions/datagen/1.20.4/src/main/generated/assets/clicksigns/blockstates/road_sign.json b/versions/datagen/1.20.4/src/main/generated/assets/clicksigns/blockstates/road_sign.json new file mode 100644 index 0000000..b3f8806 --- /dev/null +++ b/versions/datagen/1.20.4/src/main/generated/assets/clicksigns/blockstates/road_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "clicksigns:block/road_sign" + } + } +} \ No newline at end of file diff --git a/versions/datagen/1.20.4/src/main/generated/assets/clicksigns/models/block/road_sign.json b/versions/datagen/1.20.4/src/main/generated/assets/clicksigns/models/block/road_sign.json new file mode 100644 index 0000000..63c15f7 --- /dev/null +++ b/versions/datagen/1.20.4/src/main/generated/assets/clicksigns/models/block/road_sign.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "clicksigns:block/road_sign" + } +} \ No newline at end of file diff --git a/versions/datagen/1.20.4/src/main/generated/assets/clicksigns/models/item/road_sign.json b/versions/datagen/1.20.4/src/main/generated/assets/clicksigns/models/item/road_sign.json new file mode 100644 index 0000000..4eea700 --- /dev/null +++ b/versions/datagen/1.20.4/src/main/generated/assets/clicksigns/models/item/road_sign.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "clicksigns:item/road_sign" + } +} \ No newline at end of file diff --git a/versions/datagen/1.20.4/src/main/generated/data/clicksigns/advancements/recipes/decorations/road_sign.json b/versions/datagen/1.20.4/src/main/generated/data/clicksigns/advancements/recipes/decorations/road_sign.json new file mode 100644 index 0000000..bdb1727 --- /dev/null +++ b/versions/datagen/1.20.4/src/main/generated/data/clicksigns/advancements/recipes/decorations/road_sign.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_iron_ingot": { + "conditions": { + "items": [ + { + "items": [ + "minecraft:iron_ingot" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "clicksigns:road_sign" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_iron_ingot", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "clicksigns:road_sign" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/versions/datagen/1.20.4/src/main/generated/data/clicksigns/loot_tables/blocks/road_sign.json b/versions/datagen/1.20.4/src/main/generated/data/clicksigns/loot_tables/blocks/road_sign.json new file mode 100644 index 0000000..69b639e --- /dev/null +++ b/versions/datagen/1.20.4/src/main/generated/data/clicksigns/loot_tables/blocks/road_sign.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "clicksigns:road_sign" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/versions/datagen/1.20.4/src/main/generated/data/clicksigns/recipes/road_sign.json b/versions/datagen/1.20.4/src/main/generated/data/clicksigns/recipes/road_sign.json new file mode 100644 index 0000000..163eaba --- /dev/null +++ b/versions/datagen/1.20.4/src/main/generated/data/clicksigns/recipes/road_sign.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "#": { + "item": "minecraft:iron_ingot" + }, + "*": { + "tag": "minecraft:signs" + } + }, + "pattern": [ + "###", + "#*#", + "###" + ], + "result": { + "count": 4, + "item": "clicksigns:road_sign" + }, + "show_notification": true +} \ No newline at end of file diff --git a/versions/datagen/1.20.4/src/main/generated/data/minecraft/tags/blocks/mineable/pickaxe.json b/versions/datagen/1.20.4/src/main/generated/data/minecraft/tags/blocks/mineable/pickaxe.json new file mode 100644 index 0000000..902b1cf --- /dev/null +++ b/versions/datagen/1.20.4/src/main/generated/data/minecraft/tags/blocks/mineable/pickaxe.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "clicksigns:road_sign" + ] +} \ No newline at end of file diff --git a/versions/datagen/1.21.1/src/main/generated/assets/clicksigns/blockstates/road_sign.json b/versions/datagen/1.21.1/src/main/generated/assets/clicksigns/blockstates/road_sign.json new file mode 100644 index 0000000..b3f8806 --- /dev/null +++ b/versions/datagen/1.21.1/src/main/generated/assets/clicksigns/blockstates/road_sign.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "clicksigns:block/road_sign" + } + } +} \ No newline at end of file diff --git a/versions/datagen/1.21.1/src/main/generated/assets/clicksigns/models/block/road_sign.json b/versions/datagen/1.21.1/src/main/generated/assets/clicksigns/models/block/road_sign.json new file mode 100644 index 0000000..63c15f7 --- /dev/null +++ b/versions/datagen/1.21.1/src/main/generated/assets/clicksigns/models/block/road_sign.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "clicksigns:block/road_sign" + } +} \ No newline at end of file diff --git a/versions/datagen/1.21.1/src/main/generated/assets/clicksigns/models/item/road_sign.json b/versions/datagen/1.21.1/src/main/generated/assets/clicksigns/models/item/road_sign.json new file mode 100644 index 0000000..4eea700 --- /dev/null +++ b/versions/datagen/1.21.1/src/main/generated/assets/clicksigns/models/item/road_sign.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "clicksigns:item/road_sign" + } +} \ No newline at end of file diff --git a/versions/datagen/1.21.1/src/main/generated/data/clicksigns/advancements/recipes/decorations/road_sign.json b/versions/datagen/1.21.1/src/main/generated/data/clicksigns/advancements/recipes/decorations/road_sign.json new file mode 100644 index 0000000..bdb1727 --- /dev/null +++ b/versions/datagen/1.21.1/src/main/generated/data/clicksigns/advancements/recipes/decorations/road_sign.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_iron_ingot": { + "conditions": { + "items": [ + { + "items": [ + "minecraft:iron_ingot" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "clicksigns:road_sign" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_iron_ingot", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "clicksigns:road_sign" + ] + }, + "sends_telemetry_event": false +} \ No newline at end of file diff --git a/versions/datagen/1.21.1/src/main/generated/data/clicksigns/loot_tables/blocks/road_sign.json b/versions/datagen/1.21.1/src/main/generated/data/clicksigns/loot_tables/blocks/road_sign.json new file mode 100644 index 0000000..69b639e --- /dev/null +++ b/versions/datagen/1.21.1/src/main/generated/data/clicksigns/loot_tables/blocks/road_sign.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "clicksigns:road_sign" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/versions/datagen/1.21.1/src/main/generated/data/clicksigns/recipes/road_sign.json b/versions/datagen/1.21.1/src/main/generated/data/clicksigns/recipes/road_sign.json new file mode 100644 index 0000000..163eaba --- /dev/null +++ b/versions/datagen/1.21.1/src/main/generated/data/clicksigns/recipes/road_sign.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "#": { + "item": "minecraft:iron_ingot" + }, + "*": { + "tag": "minecraft:signs" + } + }, + "pattern": [ + "###", + "#*#", + "###" + ], + "result": { + "count": 4, + "item": "clicksigns:road_sign" + }, + "show_notification": true +} \ No newline at end of file diff --git a/versions/datagen/1.21.1/src/main/generated/data/minecraft/tags/blocks/mineable/pickaxe.json b/versions/datagen/1.21.1/src/main/generated/data/minecraft/tags/blocks/mineable/pickaxe.json new file mode 100644 index 0000000..902b1cf --- /dev/null +++ b/versions/datagen/1.21.1/src/main/generated/data/minecraft/tags/blocks/mineable/pickaxe.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "clicksigns:road_sign" + ] +} \ No newline at end of file