diff --git a/build.gradle b/build.gradle index 0da3ba0..bfda4d2 100644 --- a/build.gradle +++ b/build.gradle @@ -11,10 +11,7 @@ base { } repositories { - maven { - name 'Xander Maven' - url 'https://maven.isxander.dev/releases' - } + maven { url 'https://maven.wispforest.io' } } loom { @@ -35,7 +32,9 @@ dependencies { modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" - modImplementation "dev.isxander.yacl:yet-another-config-lib-fabric:${project.yacl_version}" + + annotationProcessor(modImplementation("io.wispforest:owo-lib:${project.owo_version}")) + include "io.wispforest:owo-sentinel:${project.owo_version}" // Uncomment the following line to enable the deprecated Fabric API modules. // modImplementation "net.fabricmc.fabric-api:fabric-api-deprecated:${project.fabric_version}" diff --git a/gradle.properties b/gradle.properties index 118aedf..2d3d5f9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,4 +15,4 @@ archives_base_name=headed-rewritten # Dependencies fabric_version=0.91.1+1.20.3 -yacl_version=3.3.2+1.20.4 \ No newline at end of file +owo_version=0.12.3+1.20.3 \ No newline at end of file diff --git a/src/client/java/net/pedroricardo/mixin/client/HeadCollisionMixin.java b/src/client/java/net/pedroricardo/mixin/client/HeadCollisionMixin.java index 4d866a5..71ae5c3 100644 --- a/src/client/java/net/pedroricardo/mixin/client/HeadCollisionMixin.java +++ b/src/client/java/net/pedroricardo/mixin/client/HeadCollisionMixin.java @@ -8,15 +8,13 @@ import net.minecraft.block.entity.SkullBlockEntity; import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.block.entity.SkullBlockEntityModel; -import net.minecraft.client.render.entity.model.SkullEntityModel; -import net.minecraft.client.world.ClientWorld; import net.minecraft.util.math.BlockPos; import net.minecraft.util.shape.VoxelShape; import net.minecraft.util.shape.VoxelShapes; import net.minecraft.world.BlockView; -import net.minecraft.world.World; import net.pedroricardo.HeadedContext; -import net.pedroricardo.content.HeadedRewrittenConfig; +import net.pedroricardo.HeadedRewritten; +import net.pedroricardo.content.HeadedRewrittenConfigModel; import net.pedroricardo.content.TextureToHeadMap; import net.pedroricardo.content.models.HeadedRewrittenModel; import org.joml.Vector3f; @@ -30,7 +28,7 @@ public class HeadCollisionMixin { @Inject(method = "getOutlineShape", at = @At("HEAD"), cancellable = true) private void headedrewritten$getAccurateOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { - if (HeadedRewrittenConfig.HANDLER.instance().changeHeadCollisions && world.getBlockEntity(pos) instanceof SkullBlockEntity blockEntity && blockEntity.getOwner() != null && blockEntity.getOwner().getProperties().containsKey("textures") && TextureToHeadMap.MAP.containsKey(MinecraftClient.getInstance().getSkinProvider().getSkinTextures(blockEntity.getOwner()).textureUrl())) { + if (HeadedRewritten.CONFIG.changeHeadCollisions() && world.getBlockEntity(pos) instanceof SkullBlockEntity blockEntity && blockEntity.getOwner() != null && blockEntity.getOwner().getProperties().containsKey("textures") && TextureToHeadMap.MAP.containsKey(MinecraftClient.getInstance().getSkinProvider().getSkinTextures(blockEntity.getOwner()).textureUrl())) { SkullBlockEntityModel model = TextureToHeadMap.MAP.get(MinecraftClient.getInstance().getSkinProvider().getSkinTextures(blockEntity.getOwner()).textureUrl()).getModel(MinecraftClient.getInstance().getEntityModelLoader()); Vector3f boxSize; if (model instanceof HeadedRewrittenModel headedRewrittenModel) { diff --git a/src/client/java/net/pedroricardo/mixin/client/WallHeadCollisionMixin.java b/src/client/java/net/pedroricardo/mixin/client/WallHeadCollisionMixin.java index 36801fe..378c4e9 100644 --- a/src/client/java/net/pedroricardo/mixin/client/WallHeadCollisionMixin.java +++ b/src/client/java/net/pedroricardo/mixin/client/WallHeadCollisionMixin.java @@ -16,7 +16,8 @@ import net.minecraft.util.shape.VoxelShapes; import net.minecraft.world.BlockView; import net.pedroricardo.HeadedContext; -import net.pedroricardo.content.HeadedRewrittenConfig; +import net.pedroricardo.HeadedRewritten; +import net.pedroricardo.content.HeadedRewrittenConfigModel; import net.pedroricardo.content.TextureToHeadMap; import net.pedroricardo.content.models.HeadedRewrittenModel; import org.joml.Vector3f; @@ -30,7 +31,7 @@ public class WallHeadCollisionMixin { @Inject(method = "getOutlineShape", at = @At("HEAD"), cancellable = true) private void headedrewritten$getAccurateWallOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { - if (HeadedRewrittenConfig.HANDLER.instance().changeHeadCollisions && world.getBlockEntity(pos) instanceof SkullBlockEntity blockEntity && blockEntity.getOwner() != null && blockEntity.getOwner().getProperties().containsKey("textures") && TextureToHeadMap.MAP.containsKey(MinecraftClient.getInstance().getSkinProvider().getSkinTextures(blockEntity.getOwner()).textureUrl())) { + if (HeadedRewritten.CONFIG.changeHeadCollisions() && world.getBlockEntity(pos) instanceof SkullBlockEntity blockEntity && blockEntity.getOwner() != null && blockEntity.getOwner().getProperties().containsKey("textures") && TextureToHeadMap.MAP.containsKey(MinecraftClient.getInstance().getSkinProvider().getSkinTextures(blockEntity.getOwner()).textureUrl())) { SkullBlockEntityModel model = TextureToHeadMap.MAP.get(MinecraftClient.getInstance().getSkinProvider().getSkinTextures(blockEntity.getOwner()).textureUrl()).getModel(MinecraftClient.getInstance().getEntityModelLoader()); Vector3f boxSize; if (model instanceof HeadedRewrittenModel headedRewrittenModel) { diff --git a/src/main/generated/HeadedRewrittenConfig.java b/src/main/generated/HeadedRewrittenConfig.java new file mode 100644 index 0000000..5a58424 --- /dev/null +++ b/src/main/generated/HeadedRewrittenConfig.java @@ -0,0 +1,61 @@ +package net.pedroricardo.content; + +import blue.endless.jankson.Jankson; +import io.wispforest.owo.config.ConfigWrapper; +import io.wispforest.owo.config.Option; +import io.wispforest.owo.util.Observable; + +import java.util.HashMap; +import java.util.Map; +import java.util.function.Consumer; + +public class HeadedRewrittenConfig extends ConfigWrapper { + + public final Keys keys = new Keys(); + + private final Option chargedCreeperDrops = this.optionForKey(this.keys.chargedCreeperDrops); + private final Option changeHeadCollisions = this.optionForKey(this.keys.changeHeadCollisions); + + private HeadedRewrittenConfig() { + super(net.pedroricardo.content.HeadedRewrittenConfigModel.class); + } + + private HeadedRewrittenConfig(Consumer janksonBuilder) { + super(net.pedroricardo.content.HeadedRewrittenConfigModel.class, janksonBuilder); + } + + public static HeadedRewrittenConfig createAndLoad() { + var wrapper = new HeadedRewrittenConfig(); + wrapper.load(); + return wrapper; + } + + public static HeadedRewrittenConfig createAndLoad(Consumer janksonBuilder) { + var wrapper = new HeadedRewrittenConfig(janksonBuilder); + wrapper.load(); + return wrapper; + } + + public boolean chargedCreeperDrops() { + return chargedCreeperDrops.value(); + } + + public void chargedCreeperDrops(boolean value) { + chargedCreeperDrops.set(value); + } + + public boolean changeHeadCollisions() { + return changeHeadCollisions.value(); + } + + public void changeHeadCollisions(boolean value) { + changeHeadCollisions.set(value); + } + + + public static class Keys { + public final Option.Key chargedCreeperDrops = new Option.Key("chargedCreeperDrops"); + public final Option.Key changeHeadCollisions = new Option.Key("changeHeadCollisions"); + } +} + diff --git a/src/main/java/net/pedroricardo/HeadedRewritten.java b/src/main/java/net/pedroricardo/HeadedRewritten.java index f3ed7ae..c781f53 100644 --- a/src/main/java/net/pedroricardo/HeadedRewritten.java +++ b/src/main/java/net/pedroricardo/HeadedRewritten.java @@ -8,6 +8,7 @@ import net.minecraft.util.Identifier; import net.pedroricardo.content.HeadURLs; import net.pedroricardo.content.HeadedRewrittenConfig; +import net.pedroricardo.content.HeadedRewrittenConfigModel; import net.pedroricardo.content.TextureToServerHeadMap; import net.pedroricardo.content.loottable.HeadedLootConditionTypes; import net.pedroricardo.content.loottable.HeadedLootTable; @@ -18,11 +19,12 @@ public class HeadedRewritten implements ModInitializer { public static final String MOD_ID = "headed-rewritten"; public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID); + public static final HeadedRewrittenConfig CONFIG = HeadedRewrittenConfig.createAndLoad(); + @Override public void onInitialize() { HeadedLootConditionTypes.init(); - HeadedRewrittenConfig.HANDLER.load(); - if (HeadedRewrittenConfig.HANDLER.instance().chargedCreeperDrops) { + if (CONFIG.chargedCreeperDrops()) { HeadedLootTable.init(); } TextureToServerHeadMap.addHead(HeadURLs.WHITE_SHEEP, "White Sheep", SoundEvents.ENTITY_SHEEP_AMBIENT.getId().toString()); diff --git a/src/main/java/net/pedroricardo/content/HeadedRewrittenConfig.java b/src/main/java/net/pedroricardo/content/HeadedRewrittenConfig.java deleted file mode 100644 index 3627bdd..0000000 --- a/src/main/java/net/pedroricardo/content/HeadedRewrittenConfig.java +++ /dev/null @@ -1,24 +0,0 @@ -package net.pedroricardo.content; - -import dev.isxander.yacl3.config.v2.api.ConfigClassHandler; -import dev.isxander.yacl3.config.v2.api.SerialEntry; -import dev.isxander.yacl3.config.v2.api.serializer.GsonConfigSerializerBuilder; -import net.fabricmc.loader.api.FabricLoader; -import net.minecraft.util.Identifier; -import net.pedroricardo.HeadedRewritten; - -public class HeadedRewrittenConfig { - public static ConfigClassHandler HANDLER = ConfigClassHandler.createBuilder(HeadedRewrittenConfig.class) - .id(new Identifier(HeadedRewritten.MOD_ID, HeadedRewritten.MOD_ID)) - .serializer(config -> GsonConfigSerializerBuilder.create(config) - .setPath(FabricLoader.getInstance().getConfigDir().resolve("headed-rewritten.json5")) - .setJson5(true) - .build()) - .build(); - - @SerialEntry(comment = "Requires restarting.") - public boolean chargedCreeperDrops = false; - - @SerialEntry(comment = "Changes the collisions of the heads if in a Singleplayer world or in a server with Headed Rewritten.") - public boolean changeHeadCollisions = true; -} diff --git a/src/main/java/net/pedroricardo/content/HeadedRewrittenConfigModel.java b/src/main/java/net/pedroricardo/content/HeadedRewrittenConfigModel.java new file mode 100644 index 0000000..8f59c10 --- /dev/null +++ b/src/main/java/net/pedroricardo/content/HeadedRewrittenConfigModel.java @@ -0,0 +1,12 @@ +package net.pedroricardo.content; + +import io.wispforest.owo.config.annotation.Config; +import io.wispforest.owo.config.annotation.Modmenu; + +@Modmenu(modId = "headed-rewritten") +@Config(name = "headed-rewritten", wrapperName = "HeadedRewrittenConfig") +public class HeadedRewrittenConfigModel { + public boolean chargedCreeperDrops = false; + + public boolean changeHeadCollisions = true; +} diff --git a/src/main/resources/assets/headed-rewritten/lang/en_us.json b/src/main/resources/assets/headed-rewritten/lang/en_us.json index c442205..1bba1ba 100644 --- a/src/main/resources/assets/headed-rewritten/lang/en_us.json +++ b/src/main/resources/assets/headed-rewritten/lang/en_us.json @@ -1,3 +1,5 @@ { - "itemGroup.headed-rewritten": "Headed Rewritten" + "itemGroup.headed-rewritten": "Headed Rewritten", + "text.config.headed-rewritten.option.chargedCreeperDrops": "Charged Creeper Drops", + "text.config.headed-rewritten.option.changeHeadCollisions": "Change Head Collisions" } \ No newline at end of file diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 662489a..9c4f2a9 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -33,8 +33,7 @@ "fabricloader": ">=0.15.0", "minecraft": "~1.20.3", "java": ">=17", - "fabric-api": "*", - "yet_another_config_lib_v3": "*" + "fabric-api": "*" }, "suggests": { "another-mod": "*"