diff --git a/build.gradle b/build.gradle index 3dfda04..605e0a2 100644 --- a/build.gradle +++ b/build.gradle @@ -7,11 +7,15 @@ version = project.mod_version group = project.maven_group repositories { - // Add repositories to retrieve artifacts from in here. - // You should only use this when depending on other mods because - // Loom adds the essential maven repositories to download Minecraft and libraries from automatically. - // See https://docs.gradle.org/current/userguide/declaring_repositories.html - // for more information about repositories. + maven { + name 'Xander Maven' + url 'https://maven.isxander.dev/releases' + } + + maven { + name "Terraformers" + url "https://maven.terraformersmc.com/" + } } loom { @@ -26,8 +30,10 @@ dependencies { // Fabric API. This is technically optional, but you probably want it anyway. modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" + modImplementation "dev.isxander:yet-another-config-lib:${project.yacl_version}" - include(implementation(annotationProcessor("io.github.llamalad7:mixinextras-fabric:0.2.0-rc.5"))) + modCompileOnly("com.terraformersmc:modmenu:${project.modmenu_version}") + modLocalRuntime("com.terraformersmc:modmenu:${project.modmenu_version}") } processResources { diff --git a/gradle.properties b/gradle.properties index cb84a1a..9d0b0cd 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,12 +1,18 @@ # Done to increase the memory available to gradle. org.gradle.jvmargs=-Xmx1G + # Fabric Properties minecraft_version=1.21.9 yarn_mappings=1.21.9+build.1 loader_version=0.17.2 + # Mod Properties mod_version=0.3.0+mc1.21.9 maven_group=tobinio archives_base_name=real-arrow-tip + # Dependencies fabric_version=0.133.14+1.21.9 +yacl_version=3.8.0+1.21.9-fabric + +modmenu_version=16.0.0-rc.1 \ No newline at end of file diff --git a/src/main/java/tobinio/realarrowtip/RealArrowTip.java b/src/main/java/tobinio/realarrowtip/RealArrowTip.java index ccf3495..2bfc9c9 100644 --- a/src/main/java/tobinio/realarrowtip/RealArrowTip.java +++ b/src/main/java/tobinio/realarrowtip/RealArrowTip.java @@ -10,6 +10,7 @@ import net.minecraft.util.Identifier; import net.minecraft.util.math.ColorHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import tobinio.realarrowtip.config.Config; import tobinio.realarrowtip.model.ChargeTypeProperty; import tobinio.realarrowtip.model.TintSource; @@ -20,6 +21,8 @@ public class RealArrowTip implements ClientModInitializer { @Override public void onInitializeClient() { + Config.HANDLER.load(); + SelectProperties.ID_MAPPER.put(id("charge_type"), ChargeTypeProperty.TYPE); TintSourceTypes.ID_MAPPER.put(id("projectile"), TintSource.CODEC); } diff --git a/src/main/java/tobinio/realarrowtip/config/Config.java b/src/main/java/tobinio/realarrowtip/config/Config.java new file mode 100644 index 0000000..276908f --- /dev/null +++ b/src/main/java/tobinio/realarrowtip/config/Config.java @@ -0,0 +1,35 @@ +package tobinio.realarrowtip.config; + +import com.google.gson.GsonBuilder; +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 java.util.ArrayList; +import java.util.List; + +import static tobinio.realarrowtip.RealArrowTip.MOD_ID; +import static tobinio.realarrowtip.RealArrowTip.id; + +/** + * Created: 12.10.25 + * + * @author Tobias Frischmann + */ +public class Config { + public static ConfigClassHandler HANDLER = ConfigClassHandler.createBuilder(Config.class) + .id(id("config")) + .serializer(config -> GsonConfigSerializerBuilder.create(config) + .setPath(FabricLoader.getInstance().getConfigDir().resolve("%s.json5".formatted(MOD_ID))) + .appendGsonBuilder(GsonBuilder::setPrettyPrinting) + .setJson5(true) + .build()) + .build(); + + @SerialEntry + public boolean renderCustomArrowEntity = true; + + @SerialEntry + public List ignoredItems = new ArrayList<>(); +} diff --git a/src/main/java/tobinio/realarrowtip/config/ConfigMenu.java b/src/main/java/tobinio/realarrowtip/config/ConfigMenu.java new file mode 100644 index 0000000..6576ed5 --- /dev/null +++ b/src/main/java/tobinio/realarrowtip/config/ConfigMenu.java @@ -0,0 +1,47 @@ +package tobinio.realarrowtip.config; + +import com.terraformersmc.modmenu.api.ConfigScreenFactory; +import com.terraformersmc.modmenu.api.ModMenuApi; +import dev.isxander.yacl3.api.*; +import dev.isxander.yacl3.api.controller.BooleanControllerBuilder; +import dev.isxander.yacl3.api.controller.StringControllerBuilder; +import net.minecraft.text.Text; + +/** + * Created: 12.10.25 + * + * @author Tobias Frischmann + */ + +public class ConfigMenu implements ModMenuApi { + @Override + public ConfigScreenFactory getModConfigScreenFactory() { + return parentScreen -> YetAnotherConfigLib.create(Config.HANDLER, + (defaults, config, builder) -> builder.title(Text.translatable("real-arrow-tip.config.title")) + .category(ConfigCategory.createBuilder() + .name(Text.translatable("real-arrow-tip.config.category-title")) + .tooltip(Text.literal("All the settings")) + .option(Option.createBuilder() + .name(Text.translatable("real-arrow-tip.config.render-custom-arrow-entity.name")) + .description(OptionDescription.of(Text.translatable( + "real-arrow-tip.config.render-custom-arrow-entity.description"))) + .binding(defaults.renderCustomArrowEntity, + () -> config.renderCustomArrowEntity, + newVal -> config.renderCustomArrowEntity = newVal) + .controller(BooleanControllerBuilder::create) + .build()) + .option(ListOption.createBuilder() + .name(Text.translatable("real-arrow-tip.config.config.ignored-items.name")) + .description(OptionDescription.of(Text.translatable( + "real-arrow-tip.config.config.ignored-items.description"))) + .binding(defaults.ignoredItems, + () -> config.ignoredItems, + newVal -> config.ignoredItems = newVal) + .controller(StringControllerBuilder::create) + .initial("") + .collapsed(true) + .build()) + .build()) + ).generateScreen(parentScreen); + } +} diff --git a/src/main/java/tobinio/realarrowtip/mixin/ArrowEntityRendererMixin.java b/src/main/java/tobinio/realarrowtip/mixin/ArrowEntityRendererMixin.java index 288f926..70cfa71 100644 --- a/src/main/java/tobinio/realarrowtip/mixin/ArrowEntityRendererMixin.java +++ b/src/main/java/tobinio/realarrowtip/mixin/ArrowEntityRendererMixin.java @@ -12,6 +12,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import tobinio.realarrowtip.HasColor; +import tobinio.realarrowtip.config.Config; import static tobinio.realarrowtip.RealArrowTip.id; @@ -36,6 +37,10 @@ public abstract class ArrowEntityRendererMixin { @Inject(method = "", at = @At("TAIL")) private static void real_arrow_tip$setTippedArrowTexture(CallbackInfo ci) { + if (!Config.HANDLER.instance().renderCustomArrowEntity) { + return; + } + TIPPED_TEXTURE = id("textures/entity/projectiles/tipped_arrow.png"); } } diff --git a/src/main/java/tobinio/realarrowtip/mixin/ItemAssetsLoaderMixin.java b/src/main/java/tobinio/realarrowtip/mixin/ItemAssetsLoaderMixin.java index 5a8b5f3..db9c7c3 100644 --- a/src/main/java/tobinio/realarrowtip/mixin/ItemAssetsLoaderMixin.java +++ b/src/main/java/tobinio/realarrowtip/mixin/ItemAssetsLoaderMixin.java @@ -11,6 +11,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import tobinio.realarrowtip.RealArrowTip; +import tobinio.realarrowtip.config.Config; /** * Created: 05.10.25 @@ -24,7 +25,13 @@ public class ItemAssetsLoaderMixin { private static void real_arrow_tip$useOwnItemModels(Identifier itemId, Resource resource, DynamicRegistryManager.Immutable immutable, CallbackInfoReturnable cir, @Local(ordinal = 1) LocalRef identifier) { + Config config = Config.HANDLER.instance(); + if (identifier.get().getNamespace().equals(RealArrowTip.MOD_ID)) { + if( config.ignoredItems.contains(identifier.get().getPath())) { + return; + } + identifier.set(Identifier.of(identifier.get().getPath())); } } diff --git a/src/main/java/tobinio/realarrowtip/mixin/ProjectileEntityRendererMixin.java b/src/main/java/tobinio/realarrowtip/mixin/ProjectileEntityRendererMixin.java index ee41070..a05fd3a 100644 --- a/src/main/java/tobinio/realarrowtip/mixin/ProjectileEntityRendererMixin.java +++ b/src/main/java/tobinio/realarrowtip/mixin/ProjectileEntityRendererMixin.java @@ -19,6 +19,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import tobinio.realarrowtip.HasColor; +import tobinio.realarrowtip.config.Config; import static tobinio.realarrowtip.RealArrowTip.id; @@ -32,6 +33,10 @@ public abstract class ProjectileEntityRendererMixin