Merge pull request #26 from lukasabbe/1.21.9

1.21.10
This commit is contained in:
Lukas
2025-10-08 10:40:10 +02:00
committed by GitHub
26 changed files with 125 additions and 104 deletions
+1 -1
View File
@@ -1,5 +1,5 @@
name: build
on: [push, pull_request]
on: [push]
jobs:
build:
+2 -3
View File
@@ -1,7 +1,6 @@
plugins {
// see https://fabricmc.net/develop/ for new versions
id 'fabric-loom' version '1.10-SNAPSHOT' apply false
id 'fabric-loom' version '1.11-SNAPSHOT' apply false
// see https://projects.neoforged.net/neoforged/moddevgradle for new versions
id 'net.neoforged.moddev' version '2.0.97' apply false
id 'net.neoforged.moddev' version '2.0.112' apply false
}
@@ -19,7 +19,7 @@ public class Config {
public void loadConfig(){
Path configPath = Services.PLATFORM.getConfigPath("bookshelfinspector-config.yml");
if(!Files.exists(configPath))createConfig(configPath);
if(!Files.exists(configPath)) createConfig(configPath);
Yaml yaml = new Yaml();
try{
Map<String, Object> configMap = yaml.load(new FileReader(configPath.toFile()));
@@ -39,7 +39,8 @@ public class Config {
}
private void createConfig(Path configPath){
Path defaultConfigPath = Services.PLATFORM.getFileInModContainer("bookshelfinspector", "bookshelfinspector-config.yml");
Path defaultConfigPath = Services.PLATFORM.getFileOrCopyInModContainer("bookshelfinspector", "bookshelfinspector-config.yml");
if(defaultConfigPath == null) return;
try {
Files.copy(defaultConfigPath, configPath);
} catch (IOException e) {
@@ -1,15 +0,0 @@
package com.lukasabbe.bookshelfinspector.mixin;
import net.minecraft.world.level.block.ChiseledBookShelfBlock;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.BlockHitResult;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Invoker;
import java.util.OptionalInt;
@Mixin(ChiseledBookShelfBlock.class)
public interface BookshelfInvoker {
@Invoker("getHitSlot")
OptionalInt invokerGetSlotForHitPos(BlockHitResult hit, BlockState state);
}
@@ -1,6 +1,5 @@
package com.lukasabbe.bookshelfinspector.mixin;
import com.lukasabbe.bookshelfinspector.Constants;
import com.lukasabbe.bookshelfinspector.renderer.Inspector;
import net.minecraft.client.Minecraft;
import net.minecraft.client.player.LocalPlayer;
@@ -1,6 +1,5 @@
package com.lukasabbe.bookshelfinspector.mixin;
import com.lukasabbe.bookshelfinspector.Constants;
import com.lukasabbe.bookshelfinspector.renderer.HudRenderer;
import net.minecraft.client.DeltaTracker;
import net.minecraft.client.Minecraft;
@@ -7,14 +7,7 @@ public interface IPlatformHelper {
boolean isModLoaded(String modId);
boolean isDevelopmentEnvironment();
Path getConfigPath(String file);
Path getFileInModContainer(String mod, String fileName);
default String getEnvironmentName() {
return isDevelopmentEnvironment() ? "development" : "production";
}
Path getFileOrCopyInModContainer(String mod, String fileName);
}
@@ -1,10 +1,8 @@
package com.lukasabbe.bookshelfinspector.renderer;
import com.lukasabbe.bookshelfinspector.BookshelfInspectorClient;
import com.lukasabbe.bookshelfinspector.Constants;
import com.lukasabbe.bookshelfinspector.data.BookData;
import com.lukasabbe.bookshelfinspector.util.RomanNumerals;
import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.ChatFormatting;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Font;
@@ -3,13 +3,11 @@ package com.lukasabbe.bookshelfinspector.renderer;
import com.lukasabbe.bookshelfinspector.BookshelfInspectorClient;
import com.lukasabbe.bookshelfinspector.data.BookData;
import com.lukasabbe.bookshelfinspector.data.Tags;
import com.lukasabbe.bookshelfinspector.mixin.BookshelfInvoker;
import com.lukasabbe.bookshelfinspector.network.packets.BookShelfInventoryRequestPayload;
import com.lukasabbe.bookshelfinspector.network.packets.LecternInventoryRequestPayload;
import com.lukasabbe.bookshelfinspector.platform.Services;
import net.minecraft.client.Minecraft;
import net.minecraft.core.BlockPos;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.ChiseledBookShelfBlock;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.BlockHitResult;
@@ -23,9 +21,9 @@ public class Inspector {
public void inspect(Minecraft client){
if(!modAvailable) return;
if(client.cameraEntity == null || client.player == null) return;
if(client.getCameraEntity() == null || client.player == null) return;
HitResult hit = client.cameraEntity.pick(5f,0f,false);
HitResult hit = client.getCameraEntity().pick(5f,0f,false);
//find block hit, if not found block returns
final HitResult.Type type = hit.getType();
@@ -81,7 +79,7 @@ public class Inspector {
//Gets index position for a book in the bookshelf
ChiseledBookShelfBlock bookshelfBlock = (ChiseledBookShelfBlock) blockState.getBlock();
OptionalInt optionalInt = ((BookshelfInvoker)bookshelfBlock).invokerGetSlotForHitPos(blockHitResult,blockState);
OptionalInt optionalInt = bookshelfBlock.getHitSlot(blockHitResult, blockState.getValue(ChiseledBookShelfBlock.FACING));
//if the position is empty, return
if(optionalInt.isEmpty()) {
@@ -8,8 +8,7 @@
],
"client": [
"BookshelfMixin",
"InGameHudMixin",
"BookshelfInvoker"
"InGameHudMixin"
],
"server": [],
"injectors": {
+22
View File
@@ -1,6 +1,7 @@
plugins {
id 'multiloader-loader'
id 'fabric-loom'
id "com.modrinth.minotaur" version "2.+"
}
repositories {
maven { url "https://maven.shedaniel.me/" }
@@ -45,3 +46,24 @@ loom {
}
}
}
modrinth {
token = System.getenv("MODRINTH_TOKEN")
projectId = "rOrXjyPb" // https://modrinth.com/mod/bookshelf-inspector
version = project.version
versionType = project.versionType
uploadFile = remapJar
gameVersions = [project.minecraft_version]
loaders = ["fabric"]
if(project.versionType == "beta" || project.versionType == "alpha"){
dependencies {
required.project "fabric-api"
}
}else{
dependencies {
required.project "fabric-api"
required.project "cloth-config"
required.project "modmenu"
}
}
}
@@ -1,5 +1,6 @@
package com.lukasabbe.bookshelfinspector;
package com.lukasabbe.bookshelfinspector.config;
import com.lukasabbe.bookshelfinspector.BookshelfInspectorClient;
import com.terraformersmc.modmenu.api.ConfigScreenFactory;
import com.terraformersmc.modmenu.api.ModMenuApi;
import me.shedaniel.clothconfig2.api.ConfigBuilder;
@@ -15,23 +15,16 @@ public class FabricPlatformHelper implements IPlatformHelper {
@Override
public boolean isModLoaded(String modId) {
return FabricLoader.getInstance().isModLoaded(modId);
}
@Override
public boolean isDevelopmentEnvironment() {
return FabricLoader.getInstance().isDevelopmentEnvironment();
}
@Override
public Path getConfigPath(String file) {
return FabricLoader.getInstance().getConfigDir().resolve(file);
}
@Override
public Path getFileInModContainer(String mod, String fileName) {
public Path getFileOrCopyInModContainer(String mod, String fileName) {
if(FabricLoader.getInstance().getModContainer(mod).isEmpty()) return null;
ModContainer modContainer = FabricLoader.getInstance().getModContainer(mod).get();
return modContainer.findPath(fileName).orElseThrow();
+2 -2
View File
@@ -22,7 +22,7 @@
"com.lukasabbe.bookshelfinspector.BookshelfInspectorFabricClient"
],
"modmenu": [
"com.lukasabbe.bookshelfinspector.ModMenu"
"com.lukasabbe.bookshelfinspector.config.ModMenu"
]
},
"mixins": [
@@ -31,7 +31,7 @@
"depends": {
"fabricloader": ">=${fabric_loader_version}",
"fabric-api": "*",
"minecraft": "~${minecraft_version}",
"minecraft": "~1.21.9-beta.1",
"java": ">=${java_version}"
}
}
+15 -11
View File
@@ -1,28 +1,32 @@
version=2.1+1.21.8
version=2.1+1.21.10
# release, beta & alpha
versionType=release
group=com.lukasabbe.bookshelfinspector
java_version=21
# Common
minecraft_version=1.21.8
minecraft_version=1.21.10
mod_name=BookshelfInspector
mod_author=Lukasabbe
mod_id=bookshelfinspector
license=MIT
credits=
description=Inspect any book in a chiseled bookshelf.
minecraft_version_range=[1.21.8, 1.22)
minecraft_version_range=[1.21.10, 1.22)
neo_form_version=1.21.8-20250717.133445
# https://projects.neoforged.net/neoforged/neoform
neo_form_version=1.21.10-20251007.142004
# The version of ParchmentMC that is used, see https://parchmentmc.org/docs/getting-started#choose-a-version for new versions
parchment_minecraft=1.21.8
parchment_version=2025.07.20
parchment_minecraft=1.21.9
parchment_version=2025.10.05
# Fabric
fabric_version=0.132.0+1.21.8
fabric_version=0.134.1+1.21.10
fabric_loader_version=0.17.2
# NeoForge
neoforge_version=21.8.39
neoforge_version=21.10.1-beta
neoforge_loader_version_range=[4,)
# Gradle
@@ -30,6 +34,6 @@ org.gradle.jvmargs=-Xmx3G
org.gradle.daemon=false
# Global dep
YAML_snake=2.4
cloth_config=19.0.147
mod_menu=15.0.0-beta.3
YAML_snake=2.5
cloth_config=20.0.148
mod_menu=16.0.0-rc.1
+1 -1
View File
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
+21 -1
View File
@@ -1,6 +1,7 @@
plugins {
id 'multiloader-loader'
id 'net.neoforged.moddev'
id "com.modrinth.minotaur" version "2.+"
}
repositories {
maven { url "https://maven.shedaniel.me/" }
@@ -45,7 +46,26 @@ neoForge {
dependencies {
jarJar(implementation("org.yaml:snakeyaml:2.4")){}
additionalRuntimeClasspath "org.yaml:snakeyaml:2.4"
runtimeOnly "org.yaml:snakeyaml:2.4"
}
sourceSets.main.resources { srcDir 'src/generated/resources' }
sourceSets.main.resources { srcDir 'src/generated/resources' }
modrinth {
token = System.getenv("MODRINTH_TOKEN")
projectId = "rOrXjyPb" // https://modrinth.com/mod/bookshelf-inspector
version = project.version
versionType = project.versionType
uploadFile = jar
gameVersions = [project.minecraft_version]
loaders = ["neoforge"]
if(project.versionType == "beta" || project.versionType == "alpha"){
dependencies {}
}else{
dependencies {
required.project "cloth-config"
}
}
}
@@ -1,11 +1,12 @@
package com.lukasabbe.bookshelfinspector;
import com.lukasabbe.bookshelfinspector.util.EventHandler;
import com.lukasabbe.bookshelfinspector.util.NetworkHandler;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.fml.common.Mod;
@Mod(value = Constants.MOD_ID)
public class BookshelfInspectorNeoForge {
public BookshelfInspectorNeoForge(IEventBus eventBus) {
EventHandler.initServer();
eventBus.addListener(NetworkHandler::registerPayloads);
@@ -1,5 +1,7 @@
package com.lukasabbe.bookshelfinspector;
import com.lukasabbe.bookshelfinspector.config.ClothConfigGenerator;
import com.lukasabbe.bookshelfinspector.util.EventHandler;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.fml.ModLoadingContext;
@@ -1,5 +1,6 @@
package com.lukasabbe.bookshelfinspector;
package com.lukasabbe.bookshelfinspector.config;
import com.lukasabbe.bookshelfinspector.BookshelfInspectorClient;
import me.shedaniel.clothconfig2.api.ConfigBuilder;
import me.shedaniel.clothconfig2.api.ConfigEntryBuilder;
import net.minecraft.client.gui.screens.Screen;
@@ -1,6 +1,6 @@
package com.lukasabbe.bookshelfinspector.platform;
import com.lukasabbe.bookshelfinspector.EventHandler;
import com.lukasabbe.bookshelfinspector.util.EventHandler;
import com.lukasabbe.bookshelfinspector.platform.handlers.OnPlayerDisconnectEvent;
import com.lukasabbe.bookshelfinspector.platform.handlers.OnPlayerJoinEvent;
import com.lukasabbe.bookshelfinspector.platform.services.IEventHelper;
@@ -12,7 +12,5 @@ public class NeoForgeEventHelper implements IEventHelper {
}
@Override
public void registerOnPlayerDisconnect(OnPlayerDisconnectEvent event) {
EventHandler.playerDisconnectEvents.add(event);
}
public void registerOnPlayerDisconnect(OnPlayerDisconnectEvent event) { EventHandler.playerDisconnectEvents.add(event); }
}
@@ -7,7 +7,9 @@ import net.neoforged.fml.config.ModConfig;
import net.neoforged.fml.loading.FMLLoader;
import net.neoforged.fml.loading.FMLPaths;
import java.io.*;
import java.nio.file.Path;
import java.nio.file.Paths;
public class NeoForgePlatformHelper implements IPlatformHelper {
@@ -19,25 +21,29 @@ public class NeoForgePlatformHelper implements IPlatformHelper {
@Override
public boolean isModLoaded(String modId) {
return ModList.get().isLoaded(modId);
}
@Override
public boolean isDevelopmentEnvironment() {
return !FMLLoader.isProduction();
}
@Override
public Path getConfigPath(String file) {
return FMLPaths.CONFIGDIR.get().resolve(file);
}
@Override
public Path getFileInModContainer(String mod, String fileName) {
public Path getFileOrCopyInModContainer(String mod, String fileName) {
if(ModList.get().getModContainerById(mod).isEmpty()) return null;
ModContainer container = ModList.get().getModContainerById(mod).get();
return container.getModInfo().getOwningFile().getFile().findResource(fileName);
try {
InputStream inputStream = container.getModInfo().getOwningFile().getFile().getContents().get(fileName).open();
File targetFile = new File(getConfigPath("bookshelfinspector-config.yml").toUri());
try(OutputStream outputStream = new FileOutputStream(targetFile)){
byte[] buffer = new byte[8192];
int bytesRead;
while((bytesRead = inputStream.read(buffer)) != -1){
outputStream.write(buffer, 0, bytesRead);
}
}catch (IOException ignore){}
}catch (IOException ignore){}
return null;
}
}
@@ -1,4 +1,4 @@
package com.lukasabbe.bookshelfinspector;
package com.lukasabbe.bookshelfinspector.util;
import com.lukasabbe.bookshelfinspector.platform.handlers.OnPlayerDisconnectEvent;
import com.lukasabbe.bookshelfinspector.platform.handlers.OnPlayerJoinEvent;
@@ -17,12 +17,10 @@ public class EventHandler {
public static void initClient(){
NeoForge.EVENT_BUS.addListener(EventHandler::onDisconnect);
}
public static void initServer(){
NeoForge.EVENT_BUS.addListener(EventHandler::onJoin);
}
public static void initServer(){ NeoForge.EVENT_BUS.addListener(EventHandler::onJoin); }
private static void onJoin(PlayerEvent.PlayerLoggedInEvent event){
playerJoinEvents.forEach(onPlayerJoinEvent -> onPlayerJoinEvent.onPlayerJoin((ServerPlayer) event.getEntity(),event.getEntity().getServer()));
playerJoinEvents.forEach(onPlayerJoinEvent -> onPlayerJoinEvent.onPlayerJoin((ServerPlayer) event.getEntity(), ((ServerPlayer)event.getEntity()).level().getServer()));
}
private static void onDisconnect(ClientPlayerNetworkEvent.LoggingOut event){
@@ -1,5 +1,7 @@
package com.lukasabbe.bookshelfinspector;
package com.lukasabbe.bookshelfinspector.util;
import com.lukasabbe.bookshelfinspector.BookshelfInspector;
import com.lukasabbe.bookshelfinspector.Constants;
import com.lukasabbe.bookshelfinspector.network.packets.BookShelfInventoryPayload;
import com.lukasabbe.bookshelfinspector.network.packets.BookShelfInventoryRequestPayload;
import com.lukasabbe.bookshelfinspector.network.packets.LecternInventoryRequestPayload;
@@ -7,7 +9,6 @@ import com.lukasabbe.bookshelfinspector.network.packets.ModCheckPayload;
import net.minecraft.client.player.LocalPlayer;
import net.minecraft.server.level.ServerPlayer;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.neoforge.network.event.RegisterConfigurationTasksEvent;
import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent;
import net.neoforged.neoforge.network.registration.PayloadRegistrar;
@@ -15,7 +16,7 @@ public class NetworkHandler {
@SubscribeEvent
public static void registerPayloads(final RegisterPayloadHandlersEvent event){
final PayloadRegistrar registrar = event.registrar("bookshelfinspector").optional();
final PayloadRegistrar registrar = event.registrar(Constants.MOD_ID).optional();
registrar.playToClient(
BookShelfInventoryPayload.ID,
BookShelfInventoryPayload.CODEC,
@@ -11,3 +11,15 @@ authors = "${mod_author}" #optional
description = '''${description}''' #mandatory (Supports multiline text)
[[mixins]]
config = "${mod_id}.mixins.json"
[[dependencies.${mod_id}]] #optional
modId = "neoforge" #mandatory
type = "required" #mandatory (Can be one of "required", "optional", "incompatible" or "discouraged")
versionRange = "[${neoforge_version},)" #mandatory
ordering = "NONE" # The order that this dependency should load in relation to your mod, required to be either 'BEFORE' or 'AFTER' if the dependency is not mandatory
side = "BOTH" # Side this dependency is applied on - 'BOTH', 'CLIENT' or 'SERVER'
[[dependencies.${mod_id}]]
modId = "minecraft"
type="required" #mandatory (Can be one of "required", "optional", "incompatible" or "discouraged")
versionRange = "${minecraft_version_range}"
ordering = "NONE"
side = "BOTH"
+4 -13
View File
@@ -3,18 +3,11 @@ pluginManagement {
gradlePluginPortal()
mavenCentral()
exclusiveContent {
forRepository {
maven {
name = 'Fabric'
url = uri('https://maven.fabricmc.net')
}
}
filter {
includeGroup('net.fabricmc')
includeGroup('fabric-loom')
}
maven {
name = 'Fabric'
url = uri('https://maven.fabricmc.net')
}
exclusiveContent {
forRepository {
maven {
@@ -49,5 +42,3 @@ rootProject.name = 'BookshelfInspectorMultiloader'
include('common')
include('fabric')
include('neoforge')
include 'spigot'